@shareai-lab/kode 1.1.14 → 1.1.16-dev.2

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 (289) hide show
  1. package/cli.js +77 -82
  2. package/dist/entrypoints/cli.js +59 -38
  3. package/dist/entrypoints/cli.js.map +3 -3
  4. package/dist/index.js +5 -26
  5. package/dist/package.json +4 -1
  6. package/package.json +11 -104
  7. package/dist/test/testAdapters.js +0 -88
  8. package/dist/test/testAdapters.js.map +0 -1
  9. package/src/ProjectOnboarding.tsx +0 -198
  10. package/src/Tool.ts +0 -83
  11. package/src/commands/agents.tsx +0 -3416
  12. package/src/commands/approvedTools.ts +0 -53
  13. package/src/commands/bug.tsx +0 -20
  14. package/src/commands/clear.ts +0 -43
  15. package/src/commands/compact.ts +0 -120
  16. package/src/commands/config.tsx +0 -19
  17. package/src/commands/cost.ts +0 -18
  18. package/src/commands/ctx_viz.ts +0 -209
  19. package/src/commands/doctor.ts +0 -24
  20. package/src/commands/help.tsx +0 -19
  21. package/src/commands/init.ts +0 -37
  22. package/src/commands/listen.ts +0 -42
  23. package/src/commands/login.tsx +0 -51
  24. package/src/commands/logout.tsx +0 -40
  25. package/src/commands/mcp.ts +0 -41
  26. package/src/commands/model.tsx +0 -40
  27. package/src/commands/modelstatus.tsx +0 -20
  28. package/src/commands/onboarding.tsx +0 -34
  29. package/src/commands/pr_comments.ts +0 -59
  30. package/src/commands/refreshCommands.ts +0 -54
  31. package/src/commands/release-notes.ts +0 -34
  32. package/src/commands/resume.tsx +0 -31
  33. package/src/commands/review.ts +0 -49
  34. package/src/commands/terminalSetup.ts +0 -221
  35. package/src/commands.ts +0 -139
  36. package/src/components/ApproveApiKey.tsx +0 -93
  37. package/src/components/AsciiLogo.tsx +0 -13
  38. package/src/components/AutoUpdater.tsx +0 -148
  39. package/src/components/Bug.tsx +0 -367
  40. package/src/components/Config.tsx +0 -293
  41. package/src/components/ConsoleOAuthFlow.tsx +0 -327
  42. package/src/components/Cost.tsx +0 -23
  43. package/src/components/CostThresholdDialog.tsx +0 -46
  44. package/src/components/CustomSelect/option-map.ts +0 -42
  45. package/src/components/CustomSelect/select-option.tsx +0 -78
  46. package/src/components/CustomSelect/select.tsx +0 -152
  47. package/src/components/CustomSelect/theme.ts +0 -45
  48. package/src/components/CustomSelect/use-select-state.ts +0 -414
  49. package/src/components/CustomSelect/use-select.ts +0 -35
  50. package/src/components/FallbackToolUseRejectedMessage.tsx +0 -15
  51. package/src/components/FileEditToolUpdatedMessage.tsx +0 -66
  52. package/src/components/Help.tsx +0 -215
  53. package/src/components/HighlightedCode.tsx +0 -33
  54. package/src/components/InvalidConfigDialog.tsx +0 -113
  55. package/src/components/Link.tsx +0 -32
  56. package/src/components/LogSelector.tsx +0 -86
  57. package/src/components/Logo.tsx +0 -170
  58. package/src/components/MCPServerApprovalDialog.tsx +0 -100
  59. package/src/components/MCPServerDialogCopy.tsx +0 -25
  60. package/src/components/MCPServerMultiselectDialog.tsx +0 -109
  61. package/src/components/Message.tsx +0 -221
  62. package/src/components/MessageResponse.tsx +0 -15
  63. package/src/components/MessageSelector.tsx +0 -211
  64. package/src/components/ModeIndicator.tsx +0 -88
  65. package/src/components/ModelConfig.tsx +0 -301
  66. package/src/components/ModelListManager.tsx +0 -227
  67. package/src/components/ModelSelector.tsx +0 -3387
  68. package/src/components/ModelStatusDisplay.tsx +0 -230
  69. package/src/components/Onboarding.tsx +0 -274
  70. package/src/components/PressEnterToContinue.tsx +0 -11
  71. package/src/components/PromptInput.tsx +0 -760
  72. package/src/components/SentryErrorBoundary.ts +0 -39
  73. package/src/components/Spinner.tsx +0 -129
  74. package/src/components/StickerRequestForm.tsx +0 -16
  75. package/src/components/StructuredDiff.tsx +0 -191
  76. package/src/components/TextInput.tsx +0 -259
  77. package/src/components/TodoItem.tsx +0 -47
  78. package/src/components/TokenWarning.tsx +0 -31
  79. package/src/components/ToolUseLoader.tsx +0 -40
  80. package/src/components/TrustDialog.tsx +0 -106
  81. package/src/components/binary-feedback/BinaryFeedback.tsx +0 -63
  82. package/src/components/binary-feedback/BinaryFeedbackOption.tsx +0 -111
  83. package/src/components/binary-feedback/BinaryFeedbackView.tsx +0 -172
  84. package/src/components/binary-feedback/utils.ts +0 -220
  85. package/src/components/messages/AssistantBashOutputMessage.tsx +0 -22
  86. package/src/components/messages/AssistantLocalCommandOutputMessage.tsx +0 -49
  87. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +0 -19
  88. package/src/components/messages/AssistantTextMessage.tsx +0 -144
  89. package/src/components/messages/AssistantThinkingMessage.tsx +0 -40
  90. package/src/components/messages/AssistantToolUseMessage.tsx +0 -132
  91. package/src/components/messages/TaskProgressMessage.tsx +0 -32
  92. package/src/components/messages/TaskToolMessage.tsx +0 -58
  93. package/src/components/messages/UserBashInputMessage.tsx +0 -28
  94. package/src/components/messages/UserCommandMessage.tsx +0 -30
  95. package/src/components/messages/UserKodingInputMessage.tsx +0 -28
  96. package/src/components/messages/UserPromptMessage.tsx +0 -35
  97. package/src/components/messages/UserTextMessage.tsx +0 -39
  98. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +0 -12
  99. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +0 -36
  100. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +0 -31
  101. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +0 -57
  102. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +0 -35
  103. package/src/components/messages/UserToolResultMessage/utils.tsx +0 -56
  104. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +0 -121
  105. package/src/components/permissions/FallbackPermissionRequest.tsx +0 -153
  106. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +0 -182
  107. package/src/components/permissions/FileEditPermissionRequest/FileEditToolDiff.tsx +0 -77
  108. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +0 -164
  109. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +0 -83
  110. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +0 -240
  111. package/src/components/permissions/PermissionRequest.tsx +0 -101
  112. package/src/components/permissions/PermissionRequestTitle.tsx +0 -69
  113. package/src/components/permissions/hooks.ts +0 -44
  114. package/src/components/permissions/toolUseOptions.ts +0 -59
  115. package/src/components/permissions/utils.ts +0 -23
  116. package/src/constants/betas.ts +0 -5
  117. package/src/constants/claude-asterisk-ascii-art.tsx +0 -238
  118. package/src/constants/figures.ts +0 -4
  119. package/src/constants/keys.ts +0 -3
  120. package/src/constants/macros.ts +0 -11
  121. package/src/constants/modelCapabilities.ts +0 -179
  122. package/src/constants/models.ts +0 -1025
  123. package/src/constants/oauth.ts +0 -18
  124. package/src/constants/product.ts +0 -17
  125. package/src/constants/prompts.ts +0 -168
  126. package/src/constants/releaseNotes.ts +0 -7
  127. package/src/context/PermissionContext.tsx +0 -149
  128. package/src/context.ts +0 -278
  129. package/src/cost-tracker.ts +0 -84
  130. package/src/entrypoints/cli.tsx +0 -1561
  131. package/src/entrypoints/mcp.ts +0 -175
  132. package/src/history.ts +0 -25
  133. package/src/hooks/useApiKeyVerification.ts +0 -59
  134. package/src/hooks/useArrowKeyHistory.ts +0 -55
  135. package/src/hooks/useCanUseTool.ts +0 -138
  136. package/src/hooks/useCancelRequest.ts +0 -39
  137. package/src/hooks/useDoublePress.ts +0 -41
  138. package/src/hooks/useExitOnCtrlCD.ts +0 -31
  139. package/src/hooks/useInterval.ts +0 -25
  140. package/src/hooks/useLogMessages.ts +0 -16
  141. package/src/hooks/useLogStartupTime.ts +0 -12
  142. package/src/hooks/useNotifyAfterTimeout.ts +0 -65
  143. package/src/hooks/usePermissionRequestLogging.ts +0 -44
  144. package/src/hooks/useTerminalSize.ts +0 -49
  145. package/src/hooks/useTextInput.ts +0 -317
  146. package/src/hooks/useUnifiedCompletion.ts +0 -1405
  147. package/src/index.ts +0 -34
  148. package/src/messages.ts +0 -38
  149. package/src/permissions.ts +0 -268
  150. package/src/query.ts +0 -720
  151. package/src/screens/ConfigureNpmPrefix.tsx +0 -197
  152. package/src/screens/Doctor.tsx +0 -219
  153. package/src/screens/LogList.tsx +0 -68
  154. package/src/screens/REPL.tsx +0 -813
  155. package/src/screens/ResumeConversation.tsx +0 -68
  156. package/src/services/adapters/base.ts +0 -38
  157. package/src/services/adapters/chatCompletions.ts +0 -90
  158. package/src/services/adapters/responsesAPI.ts +0 -170
  159. package/src/services/browserMocks.ts +0 -66
  160. package/src/services/claude.ts +0 -2197
  161. package/src/services/customCommands.ts +0 -704
  162. package/src/services/fileFreshness.ts +0 -377
  163. package/src/services/gpt5ConnectionTest.ts +0 -340
  164. package/src/services/mcpClient.ts +0 -564
  165. package/src/services/mcpServerApproval.tsx +0 -50
  166. package/src/services/mentionProcessor.ts +0 -273
  167. package/src/services/modelAdapterFactory.ts +0 -69
  168. package/src/services/notifier.ts +0 -40
  169. package/src/services/oauth.ts +0 -357
  170. package/src/services/openai.ts +0 -1359
  171. package/src/services/responseStateManager.ts +0 -90
  172. package/src/services/sentry.ts +0 -3
  173. package/src/services/statsig.ts +0 -172
  174. package/src/services/statsigStorage.ts +0 -86
  175. package/src/services/systemReminder.ts +0 -507
  176. package/src/services/vcr.ts +0 -161
  177. package/src/test/testAdapters.ts +0 -96
  178. package/src/tools/ArchitectTool/ArchitectTool.tsx +0 -135
  179. package/src/tools/ArchitectTool/prompt.ts +0 -15
  180. package/src/tools/AskExpertModelTool/AskExpertModelTool.tsx +0 -576
  181. package/src/tools/BashTool/BashTool.tsx +0 -243
  182. package/src/tools/BashTool/BashToolResultMessage.tsx +0 -38
  183. package/src/tools/BashTool/OutputLine.tsx +0 -49
  184. package/src/tools/BashTool/prompt.ts +0 -174
  185. package/src/tools/BashTool/utils.ts +0 -56
  186. package/src/tools/FileEditTool/FileEditTool.tsx +0 -319
  187. package/src/tools/FileEditTool/prompt.ts +0 -51
  188. package/src/tools/FileEditTool/utils.ts +0 -58
  189. package/src/tools/FileReadTool/FileReadTool.tsx +0 -404
  190. package/src/tools/FileReadTool/prompt.ts +0 -7
  191. package/src/tools/FileWriteTool/FileWriteTool.tsx +0 -301
  192. package/src/tools/FileWriteTool/prompt.ts +0 -10
  193. package/src/tools/GlobTool/GlobTool.tsx +0 -119
  194. package/src/tools/GlobTool/prompt.ts +0 -8
  195. package/src/tools/GrepTool/GrepTool.tsx +0 -147
  196. package/src/tools/GrepTool/prompt.ts +0 -11
  197. package/src/tools/MCPTool/MCPTool.tsx +0 -107
  198. package/src/tools/MCPTool/prompt.ts +0 -3
  199. package/src/tools/MemoryReadTool/MemoryReadTool.tsx +0 -127
  200. package/src/tools/MemoryReadTool/prompt.ts +0 -3
  201. package/src/tools/MemoryWriteTool/MemoryWriteTool.tsx +0 -89
  202. package/src/tools/MemoryWriteTool/prompt.ts +0 -3
  203. package/src/tools/MultiEditTool/MultiEditTool.tsx +0 -388
  204. package/src/tools/MultiEditTool/prompt.ts +0 -45
  205. package/src/tools/NotebookEditTool/NotebookEditTool.tsx +0 -298
  206. package/src/tools/NotebookEditTool/prompt.ts +0 -3
  207. package/src/tools/NotebookReadTool/NotebookReadTool.tsx +0 -258
  208. package/src/tools/NotebookReadTool/prompt.ts +0 -3
  209. package/src/tools/StickerRequestTool/StickerRequestTool.tsx +0 -107
  210. package/src/tools/StickerRequestTool/prompt.ts +0 -19
  211. package/src/tools/TaskTool/TaskTool.tsx +0 -438
  212. package/src/tools/TaskTool/constants.ts +0 -1
  213. package/src/tools/TaskTool/prompt.ts +0 -92
  214. package/src/tools/ThinkTool/ThinkTool.tsx +0 -54
  215. package/src/tools/ThinkTool/prompt.ts +0 -12
  216. package/src/tools/TodoWriteTool/TodoWriteTool.tsx +0 -313
  217. package/src/tools/TodoWriteTool/prompt.ts +0 -63
  218. package/src/tools/URLFetcherTool/URLFetcherTool.tsx +0 -178
  219. package/src/tools/URLFetcherTool/cache.ts +0 -55
  220. package/src/tools/URLFetcherTool/htmlToMarkdown.ts +0 -55
  221. package/src/tools/URLFetcherTool/prompt.ts +0 -17
  222. package/src/tools/WebSearchTool/WebSearchTool.tsx +0 -103
  223. package/src/tools/WebSearchTool/prompt.ts +0 -13
  224. package/src/tools/WebSearchTool/searchProviders.ts +0 -66
  225. package/src/tools/lsTool/lsTool.tsx +0 -272
  226. package/src/tools/lsTool/prompt.ts +0 -2
  227. package/src/tools.ts +0 -67
  228. package/src/types/PermissionMode.ts +0 -120
  229. package/src/types/RequestContext.ts +0 -72
  230. package/src/types/common.d.ts +0 -2
  231. package/src/types/conversation.ts +0 -51
  232. package/src/types/logs.ts +0 -58
  233. package/src/types/modelCapabilities.ts +0 -64
  234. package/src/types/notebook.ts +0 -87
  235. package/src/utils/Cursor.ts +0 -436
  236. package/src/utils/PersistentShell.ts +0 -552
  237. package/src/utils/advancedFuzzyMatcher.ts +0 -290
  238. package/src/utils/agentLoader.ts +0 -278
  239. package/src/utils/agentStorage.ts +0 -97
  240. package/src/utils/array.ts +0 -3
  241. package/src/utils/ask.tsx +0 -99
  242. package/src/utils/auth.ts +0 -13
  243. package/src/utils/autoCompactCore.ts +0 -223
  244. package/src/utils/autoUpdater.ts +0 -458
  245. package/src/utils/betas.ts +0 -20
  246. package/src/utils/browser.ts +0 -14
  247. package/src/utils/cleanup.ts +0 -72
  248. package/src/utils/commands.ts +0 -261
  249. package/src/utils/commonUnixCommands.ts +0 -161
  250. package/src/utils/config.ts +0 -945
  251. package/src/utils/conversationRecovery.ts +0 -55
  252. package/src/utils/debugLogger.ts +0 -1235
  253. package/src/utils/diff.ts +0 -42
  254. package/src/utils/env.ts +0 -57
  255. package/src/utils/errors.ts +0 -21
  256. package/src/utils/exampleCommands.ts +0 -109
  257. package/src/utils/execFileNoThrow.ts +0 -51
  258. package/src/utils/expertChatStorage.ts +0 -136
  259. package/src/utils/file.ts +0 -405
  260. package/src/utils/fileRecoveryCore.ts +0 -71
  261. package/src/utils/format.tsx +0 -44
  262. package/src/utils/fuzzyMatcher.ts +0 -328
  263. package/src/utils/generators.ts +0 -62
  264. package/src/utils/git.ts +0 -92
  265. package/src/utils/globalLogger.ts +0 -77
  266. package/src/utils/http.ts +0 -10
  267. package/src/utils/imagePaste.ts +0 -38
  268. package/src/utils/json.ts +0 -13
  269. package/src/utils/log.ts +0 -382
  270. package/src/utils/markdown.ts +0 -213
  271. package/src/utils/messageContextManager.ts +0 -294
  272. package/src/utils/messages.tsx +0 -945
  273. package/src/utils/model.ts +0 -914
  274. package/src/utils/permissions/filesystem.ts +0 -127
  275. package/src/utils/responseState.ts +0 -23
  276. package/src/utils/ripgrep.ts +0 -167
  277. package/src/utils/secureFile.ts +0 -564
  278. package/src/utils/sessionState.ts +0 -49
  279. package/src/utils/state.ts +0 -25
  280. package/src/utils/style.ts +0 -29
  281. package/src/utils/terminal.ts +0 -50
  282. package/src/utils/theme.ts +0 -127
  283. package/src/utils/thinking.ts +0 -144
  284. package/src/utils/todoStorage.ts +0 -431
  285. package/src/utils/tokens.ts +0 -43
  286. package/src/utils/toolExecutionController.ts +0 -163
  287. package/src/utils/unaryLogging.ts +0 -26
  288. package/src/utils/user.ts +0 -37
  289. package/src/utils/validate.ts +0 -165
package/src/utils/ask.tsx DELETED
@@ -1,99 +0,0 @@
1
- import { last } from 'lodash-es'
2
- import { Command } from '../commands'
3
- import { getSystemPrompt } from '../constants/prompts'
4
- import { getContext } from '../context'
5
- import { getTotalCost } from '../cost-tracker'
6
- import { Message, query } from '../query'
7
- import { CanUseToolFn } from '../hooks/useCanUseTool'
8
- import { Tool } from '../Tool'
9
- import { getModelManager } from '../utils/model'
10
- import { setCwd } from './state'
11
- import { getMessagesPath, overwriteLog } from './log'
12
- import { createUserMessage } from './messages'
13
-
14
- type Props = {
15
- commands: Command[]
16
- safeMode?: boolean
17
- hasPermissionsToUseTool: CanUseToolFn
18
- messageLogName: string
19
- prompt: string
20
- cwd: string
21
- tools: Tool[]
22
- verbose?: boolean
23
- }
24
-
25
- // Sends a single prompt to the Claude API and returns the response.
26
- // Assumes that claude is being used non-interactively -- will not
27
- // ask the user for permissions or further input.
28
- export async function ask({
29
- commands,
30
- safeMode,
31
- hasPermissionsToUseTool,
32
- messageLogName,
33
- prompt,
34
- cwd,
35
- tools,
36
- verbose = false,
37
- }: Props): Promise<{
38
- resultText: string
39
- totalCost: number
40
- messageHistoryFile: string
41
- }> {
42
- await setCwd(cwd)
43
- const message = createUserMessage(prompt)
44
- const messages: Message[] = [message]
45
-
46
- const [systemPrompt, context, model] = await Promise.all([
47
- getSystemPrompt(),
48
- getContext(),
49
- getModelManager().getModelName('main'),
50
- ])
51
-
52
- for await (const m of query(
53
- messages,
54
- systemPrompt,
55
- context,
56
- hasPermissionsToUseTool,
57
- {
58
- options: {
59
- commands,
60
- tools,
61
- verbose,
62
- safeMode,
63
- forkNumber: 0,
64
- messageLogName: 'unused',
65
- maxThinkingTokens: 0,
66
- },
67
- abortController: new AbortController(),
68
- messageId: undefined,
69
- readFileTimestamps: {},
70
- setToolJSX: () => {}, // No-op function for non-interactive use
71
- },
72
- )) {
73
- messages.push(m)
74
- }
75
-
76
- const result = last(messages)
77
- if (!result || result.type !== 'assistant') {
78
- throw new Error('Expected content to be an assistant message')
79
- }
80
- if (result.message.content[0]?.type !== 'text') {
81
- throw new Error(
82
- `Expected first content item to be text, but got ${JSON.stringify(
83
- result.message.content[0],
84
- null,
85
- 2,
86
- )}`,
87
- )
88
- }
89
-
90
- // Write log that can be retrieved with `claude log`
91
- const messageHistoryFile = getMessagesPath(messageLogName, 0, 0)
92
- overwriteLog(messageHistoryFile, messages)
93
-
94
- return {
95
- resultText: result.message.content[0].text,
96
- totalCost: getTotalCost(),
97
- messageHistoryFile,
98
- }
99
- }
package/src/utils/auth.ts DELETED
@@ -1,13 +0,0 @@
1
- import { USE_BEDROCK, USE_VERTEX } from './model'
2
- import { getGlobalConfig } from './config'
3
-
4
- export function isAnthropicAuthEnabled(): boolean {
5
- return false
6
- // return !(USE_BEDROCK || USE_VERTEX)
7
- }
8
-
9
- export function isLoggedInToAnthropic(): boolean {
10
- return false
11
- // const config = getGlobalConfig()
12
- // return !!config.primaryApiKey
13
- }
@@ -1,223 +0,0 @@
1
- import { Message } from '../query'
2
- import { countTokens } from './tokens'
3
- import { getMessagesGetter, getMessagesSetter } from '../messages'
4
- import { getContext } from '../context'
5
- import { getCodeStyle } from '../utils/style'
6
- import { clearTerminal } from '../utils/terminal'
7
- import { resetFileFreshnessSession } from '../services/fileFreshness'
8
- import { createUserMessage, normalizeMessagesForAPI } from '../utils/messages'
9
- import { queryLLM } from '../services/claude'
10
- import { selectAndReadFiles } from './fileRecoveryCore'
11
- import { addLineNumbers } from './file'
12
- import { getModelManager } from './model'
13
-
14
- /**
15
- * Threshold ratio for triggering automatic context compression
16
- * When context usage exceeds 92% of the model's limit, auto-compact activates
17
- */
18
- const AUTO_COMPACT_THRESHOLD_RATIO = 0.92
19
-
20
- /**
21
- * Retrieves the context length for the main model that should execute compression
22
- * Uses ModelManager to get the current model's context length
23
- */
24
- async function getCompressionModelContextLimit(): Promise<number> {
25
- try {
26
- // 🔧 Fix: Use ModelManager instead of legacy config
27
- const modelManager = getModelManager()
28
- const modelProfile = modelManager.getModel('main')
29
-
30
- if (modelProfile?.contextLength) {
31
- return modelProfile.contextLength
32
- }
33
-
34
- // Fallback to a reasonable default
35
- return 200_000
36
- } catch (error) {
37
- return 200_000
38
- }
39
- }
40
-
41
- const COMPRESSION_PROMPT = `Please provide a comprehensive summary of our conversation structured as follows:
42
-
43
- ## Technical Context
44
- Development environment, tools, frameworks, and configurations in use. Programming languages, libraries, and technical constraints. File structure, directory organization, and project architecture.
45
-
46
- ## Project Overview
47
- Main project goals, features, and scope. Key components, modules, and their relationships. Data models, APIs, and integration patterns.
48
-
49
- ## Code Changes
50
- Files created, modified, or analyzed during our conversation. Specific code implementations, functions, and algorithms added. Configuration changes and structural modifications.
51
-
52
- ## Debugging & Issues
53
- Problems encountered and their root causes. Solutions implemented and their effectiveness. Error messages, logs, and diagnostic information.
54
-
55
- ## Current Status
56
- What we just completed successfully. Current state of the codebase and any ongoing work. Test results, validation steps, and verification performed.
57
-
58
- ## Pending Tasks
59
- Immediate next steps and priorities. Planned features, improvements, and refactoring. Known issues, technical debt, and areas needing attention.
60
-
61
- ## User Preferences
62
- Coding style, formatting, and organizational preferences. Communication patterns and feedback style. Tool choices and workflow preferences.
63
-
64
- ## Key Decisions
65
- Important technical decisions made and their rationale. Alternative approaches considered and why they were rejected. Trade-offs accepted and their implications.
66
-
67
- Focus on information essential for continuing the conversation effectively, including specific details about code, files, errors, and plans.`
68
-
69
- /**
70
- * Calculates context usage thresholds based on the main model's capabilities
71
- * Uses the main model context length since compression tasks require a capable model
72
- */
73
- async function calculateThresholds(tokenCount: number) {
74
- const contextLimit = await getCompressionModelContextLimit()
75
- const autoCompactThreshold = contextLimit * AUTO_COMPACT_THRESHOLD_RATIO
76
-
77
- return {
78
- isAboveAutoCompactThreshold: tokenCount >= autoCompactThreshold,
79
- percentUsed: Math.round((tokenCount / contextLimit) * 100),
80
- tokensRemaining: Math.max(0, autoCompactThreshold - tokenCount),
81
- contextLimit,
82
- }
83
- }
84
-
85
- /**
86
- * Determines if auto-compact should trigger based on token usage
87
- * Uses the main model context limit since compression requires a capable model
88
- */
89
- async function shouldAutoCompact(messages: Message[]): Promise<boolean> {
90
- if (messages.length < 3) return false
91
-
92
- const tokenCount = countTokens(messages)
93
- const { isAboveAutoCompactThreshold } = await calculateThresholds(tokenCount)
94
-
95
- return isAboveAutoCompactThreshold
96
- }
97
-
98
- /**
99
- * Main entry point for automatic context compression
100
- *
101
- * This function is called before each query to check if the conversation
102
- * has grown too large and needs compression. When triggered, it:
103
- * - Generates a structured summary of the conversation using the main model
104
- * - Recovers recently accessed files to maintain development context
105
- * - Resets conversation state while preserving essential information
106
- *
107
- * Uses the main model for compression tasks to ensure high-quality summaries
108
- *
109
- * @param messages Current conversation messages
110
- * @param toolUseContext Execution context with model and tool configuration
111
- * @returns Updated messages (compressed if needed) and compression status
112
- */
113
- export async function checkAutoCompact(
114
- messages: Message[],
115
- toolUseContext: any,
116
- ): Promise<{ messages: Message[]; wasCompacted: boolean }> {
117
- if (!(await shouldAutoCompact(messages))) {
118
- return { messages, wasCompacted: false }
119
- }
120
-
121
- try {
122
- const compactedMessages = await executeAutoCompact(messages, toolUseContext)
123
-
124
- return {
125
- messages: compactedMessages,
126
- wasCompacted: true,
127
- }
128
- } catch (error) {
129
- // Graceful degradation: if auto-compact fails, continue with original messages
130
- // This ensures system remains functional even if compression encounters issues
131
- console.error(
132
- 'Auto-compact failed, continuing with original messages:',
133
- error,
134
- )
135
- return { messages, wasCompacted: false }
136
- }
137
- }
138
-
139
- /**
140
- * Executes the conversation compression process using the main model
141
- *
142
- * This function generates a comprehensive summary using the main model
143
- * which is better suited for complex summarization tasks. It also
144
- * automatically recovers important files to maintain development context.
145
- */
146
- async function executeAutoCompact(
147
- messages: Message[],
148
- toolUseContext: any,
149
- ): Promise<Message[]> {
150
- const summaryRequest = createUserMessage(COMPRESSION_PROMPT)
151
-
152
- const summaryResponse = await queryLLM(
153
- normalizeMessagesForAPI([...messages, summaryRequest]),
154
- [
155
- 'You are a helpful AI assistant tasked with creating comprehensive conversation summaries that preserve all essential context for continuing development work.',
156
- ],
157
- 0,
158
- toolUseContext.options.tools,
159
- toolUseContext.abortController.signal,
160
- {
161
- safeMode: false,
162
- model: 'main', // 使用模型指针,让queryLLM统一解析
163
- prependCLISysprompt: true,
164
- },
165
- )
166
-
167
- const content = summaryResponse.message.content
168
- const summary =
169
- typeof content === 'string'
170
- ? content
171
- : content.length > 0 && content[0]?.type === 'text'
172
- ? content[0].text
173
- : null
174
-
175
- if (!summary) {
176
- throw new Error(
177
- 'Failed to generate conversation summary - response did not contain valid text content',
178
- )
179
- }
180
-
181
- summaryResponse.message.usage = {
182
- input_tokens: 0,
183
- output_tokens: summaryResponse.message.usage.output_tokens,
184
- cache_creation_input_tokens: 0,
185
- cache_read_input_tokens: 0,
186
- }
187
-
188
- // Automatic file recovery: preserve recently accessed development files
189
- // This maintains coding context even after conversation compression
190
- const recoveredFiles = await selectAndReadFiles()
191
-
192
- const compactedMessages = [
193
- createUserMessage(
194
- 'Context automatically compressed due to token limit. Essential information preserved.',
195
- ),
196
- summaryResponse,
197
- ]
198
-
199
- // Append recovered files to maintain development workflow continuity
200
- // Files are prioritized by recency and importance, with strict token limits
201
- if (recoveredFiles.length > 0) {
202
- for (const file of recoveredFiles) {
203
- const contentWithLines = addLineNumbers({
204
- content: file.content,
205
- startLine: 1,
206
- })
207
- const recoveryMessage = createUserMessage(
208
- `**Recovered File: ${file.path}**\n\n\`\`\`\n${contentWithLines}\n\`\`\`\n\n` +
209
- `*Automatically recovered (${file.tokens} tokens)${file.truncated ? ' [truncated]' : ''}*`,
210
- )
211
- compactedMessages.push(recoveryMessage)
212
- }
213
- }
214
-
215
- // State cleanup to ensure fresh context after compression
216
- // Mirrors the cleanup sequence from manual /compact command
217
- getMessagesSetter()([])
218
- getContext.cache.clear?.()
219
- getCodeStyle.cache.clear?.()
220
- resetFileFreshnessSession()
221
-
222
- return compactedMessages
223
- }