@shareai-lab/kode 1.1.13 → 1.1.16
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.
- package/dist/entrypoints/cli.js +2 -1
- package/dist/entrypoints/cli.js.map +2 -2
- package/dist/index.js +5 -26
- package/dist/package.json +4 -1
- package/package.json +9 -104
- package/dist/test/testAdapters.js +0 -88
- package/dist/test/testAdapters.js.map +0 -1
- package/src/ProjectOnboarding.tsx +0 -198
- package/src/Tool.ts +0 -83
- package/src/commands/agents.tsx +0 -3416
- package/src/commands/approvedTools.ts +0 -53
- package/src/commands/bug.tsx +0 -20
- package/src/commands/clear.ts +0 -43
- package/src/commands/compact.ts +0 -120
- package/src/commands/config.tsx +0 -19
- package/src/commands/cost.ts +0 -18
- package/src/commands/ctx_viz.ts +0 -209
- package/src/commands/doctor.ts +0 -24
- package/src/commands/help.tsx +0 -19
- package/src/commands/init.ts +0 -37
- package/src/commands/listen.ts +0 -42
- package/src/commands/login.tsx +0 -51
- package/src/commands/logout.tsx +0 -40
- package/src/commands/mcp.ts +0 -41
- package/src/commands/model.tsx +0 -40
- package/src/commands/modelstatus.tsx +0 -20
- package/src/commands/onboarding.tsx +0 -34
- package/src/commands/pr_comments.ts +0 -59
- package/src/commands/refreshCommands.ts +0 -54
- package/src/commands/release-notes.ts +0 -34
- package/src/commands/resume.tsx +0 -31
- package/src/commands/review.ts +0 -49
- package/src/commands/terminalSetup.ts +0 -221
- package/src/commands.ts +0 -139
- package/src/components/ApproveApiKey.tsx +0 -93
- package/src/components/AsciiLogo.tsx +0 -13
- package/src/components/AutoUpdater.tsx +0 -148
- package/src/components/Bug.tsx +0 -367
- package/src/components/Config.tsx +0 -293
- package/src/components/ConsoleOAuthFlow.tsx +0 -327
- package/src/components/Cost.tsx +0 -23
- package/src/components/CostThresholdDialog.tsx +0 -46
- package/src/components/CustomSelect/option-map.ts +0 -42
- package/src/components/CustomSelect/select-option.tsx +0 -78
- package/src/components/CustomSelect/select.tsx +0 -152
- package/src/components/CustomSelect/theme.ts +0 -45
- package/src/components/CustomSelect/use-select-state.ts +0 -414
- package/src/components/CustomSelect/use-select.ts +0 -35
- package/src/components/FallbackToolUseRejectedMessage.tsx +0 -15
- package/src/components/FileEditToolUpdatedMessage.tsx +0 -66
- package/src/components/Help.tsx +0 -215
- package/src/components/HighlightedCode.tsx +0 -33
- package/src/components/InvalidConfigDialog.tsx +0 -113
- package/src/components/Link.tsx +0 -32
- package/src/components/LogSelector.tsx +0 -86
- package/src/components/Logo.tsx +0 -170
- package/src/components/MCPServerApprovalDialog.tsx +0 -100
- package/src/components/MCPServerDialogCopy.tsx +0 -25
- package/src/components/MCPServerMultiselectDialog.tsx +0 -109
- package/src/components/Message.tsx +0 -221
- package/src/components/MessageResponse.tsx +0 -15
- package/src/components/MessageSelector.tsx +0 -211
- package/src/components/ModeIndicator.tsx +0 -88
- package/src/components/ModelConfig.tsx +0 -301
- package/src/components/ModelListManager.tsx +0 -227
- package/src/components/ModelSelector.tsx +0 -3387
- package/src/components/ModelStatusDisplay.tsx +0 -230
- package/src/components/Onboarding.tsx +0 -274
- package/src/components/PressEnterToContinue.tsx +0 -11
- package/src/components/PromptInput.tsx +0 -760
- package/src/components/SentryErrorBoundary.ts +0 -39
- package/src/components/Spinner.tsx +0 -129
- package/src/components/StickerRequestForm.tsx +0 -16
- package/src/components/StructuredDiff.tsx +0 -191
- package/src/components/TextInput.tsx +0 -259
- package/src/components/TodoItem.tsx +0 -47
- package/src/components/TokenWarning.tsx +0 -31
- package/src/components/ToolUseLoader.tsx +0 -40
- package/src/components/TrustDialog.tsx +0 -106
- package/src/components/binary-feedback/BinaryFeedback.tsx +0 -63
- package/src/components/binary-feedback/BinaryFeedbackOption.tsx +0 -111
- package/src/components/binary-feedback/BinaryFeedbackView.tsx +0 -172
- package/src/components/binary-feedback/utils.ts +0 -220
- package/src/components/messages/AssistantBashOutputMessage.tsx +0 -22
- package/src/components/messages/AssistantLocalCommandOutputMessage.tsx +0 -49
- package/src/components/messages/AssistantRedactedThinkingMessage.tsx +0 -19
- package/src/components/messages/AssistantTextMessage.tsx +0 -144
- package/src/components/messages/AssistantThinkingMessage.tsx +0 -40
- package/src/components/messages/AssistantToolUseMessage.tsx +0 -132
- package/src/components/messages/TaskProgressMessage.tsx +0 -32
- package/src/components/messages/TaskToolMessage.tsx +0 -58
- package/src/components/messages/UserBashInputMessage.tsx +0 -28
- package/src/components/messages/UserCommandMessage.tsx +0 -30
- package/src/components/messages/UserKodingInputMessage.tsx +0 -28
- package/src/components/messages/UserPromptMessage.tsx +0 -35
- package/src/components/messages/UserTextMessage.tsx +0 -39
- package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +0 -12
- package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +0 -36
- package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +0 -31
- package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +0 -57
- package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +0 -35
- package/src/components/messages/UserToolResultMessage/utils.tsx +0 -56
- package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +0 -121
- package/src/components/permissions/FallbackPermissionRequest.tsx +0 -153
- package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +0 -182
- package/src/components/permissions/FileEditPermissionRequest/FileEditToolDiff.tsx +0 -77
- package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +0 -164
- package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +0 -83
- package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +0 -240
- package/src/components/permissions/PermissionRequest.tsx +0 -101
- package/src/components/permissions/PermissionRequestTitle.tsx +0 -69
- package/src/components/permissions/hooks.ts +0 -44
- package/src/components/permissions/toolUseOptions.ts +0 -59
- package/src/components/permissions/utils.ts +0 -23
- package/src/constants/betas.ts +0 -5
- package/src/constants/claude-asterisk-ascii-art.tsx +0 -238
- package/src/constants/figures.ts +0 -4
- package/src/constants/keys.ts +0 -3
- package/src/constants/macros.ts +0 -11
- package/src/constants/modelCapabilities.ts +0 -179
- package/src/constants/models.ts +0 -1025
- package/src/constants/oauth.ts +0 -18
- package/src/constants/product.ts +0 -17
- package/src/constants/prompts.ts +0 -168
- package/src/constants/releaseNotes.ts +0 -7
- package/src/context/PermissionContext.tsx +0 -149
- package/src/context.ts +0 -278
- package/src/cost-tracker.ts +0 -84
- package/src/entrypoints/cli.tsx +0 -1561
- package/src/entrypoints/mcp.ts +0 -175
- package/src/history.ts +0 -25
- package/src/hooks/useApiKeyVerification.ts +0 -59
- package/src/hooks/useArrowKeyHistory.ts +0 -55
- package/src/hooks/useCanUseTool.ts +0 -138
- package/src/hooks/useCancelRequest.ts +0 -39
- package/src/hooks/useDoublePress.ts +0 -41
- package/src/hooks/useExitOnCtrlCD.ts +0 -31
- package/src/hooks/useInterval.ts +0 -25
- package/src/hooks/useLogMessages.ts +0 -16
- package/src/hooks/useLogStartupTime.ts +0 -12
- package/src/hooks/useNotifyAfterTimeout.ts +0 -65
- package/src/hooks/usePermissionRequestLogging.ts +0 -44
- package/src/hooks/useTerminalSize.ts +0 -49
- package/src/hooks/useTextInput.ts +0 -317
- package/src/hooks/useUnifiedCompletion.ts +0 -1405
- package/src/index.ts +0 -34
- package/src/messages.ts +0 -38
- package/src/permissions.ts +0 -268
- package/src/query.ts +0 -720
- package/src/screens/ConfigureNpmPrefix.tsx +0 -197
- package/src/screens/Doctor.tsx +0 -219
- package/src/screens/LogList.tsx +0 -68
- package/src/screens/REPL.tsx +0 -813
- package/src/screens/ResumeConversation.tsx +0 -68
- package/src/services/adapters/base.ts +0 -38
- package/src/services/adapters/chatCompletions.ts +0 -90
- package/src/services/adapters/responsesAPI.ts +0 -170
- package/src/services/browserMocks.ts +0 -66
- package/src/services/claude.ts +0 -2197
- package/src/services/customCommands.ts +0 -704
- package/src/services/fileFreshness.ts +0 -377
- package/src/services/gpt5ConnectionTest.ts +0 -340
- package/src/services/mcpClient.ts +0 -564
- package/src/services/mcpServerApproval.tsx +0 -50
- package/src/services/mentionProcessor.ts +0 -273
- package/src/services/modelAdapterFactory.ts +0 -69
- package/src/services/notifier.ts +0 -40
- package/src/services/oauth.ts +0 -357
- package/src/services/openai.ts +0 -1359
- package/src/services/responseStateManager.ts +0 -90
- package/src/services/sentry.ts +0 -3
- package/src/services/statsig.ts +0 -172
- package/src/services/statsigStorage.ts +0 -86
- package/src/services/systemReminder.ts +0 -507
- package/src/services/vcr.ts +0 -161
- package/src/test/testAdapters.ts +0 -96
- package/src/tools/ArchitectTool/ArchitectTool.tsx +0 -135
- package/src/tools/ArchitectTool/prompt.ts +0 -15
- package/src/tools/AskExpertModelTool/AskExpertModelTool.tsx +0 -576
- package/src/tools/BashTool/BashTool.tsx +0 -243
- package/src/tools/BashTool/BashToolResultMessage.tsx +0 -38
- package/src/tools/BashTool/OutputLine.tsx +0 -49
- package/src/tools/BashTool/prompt.ts +0 -174
- package/src/tools/BashTool/utils.ts +0 -56
- package/src/tools/FileEditTool/FileEditTool.tsx +0 -319
- package/src/tools/FileEditTool/prompt.ts +0 -51
- package/src/tools/FileEditTool/utils.ts +0 -58
- package/src/tools/FileReadTool/FileReadTool.tsx +0 -404
- package/src/tools/FileReadTool/prompt.ts +0 -7
- package/src/tools/FileWriteTool/FileWriteTool.tsx +0 -301
- package/src/tools/FileWriteTool/prompt.ts +0 -10
- package/src/tools/GlobTool/GlobTool.tsx +0 -119
- package/src/tools/GlobTool/prompt.ts +0 -8
- package/src/tools/GrepTool/GrepTool.tsx +0 -147
- package/src/tools/GrepTool/prompt.ts +0 -11
- package/src/tools/MCPTool/MCPTool.tsx +0 -107
- package/src/tools/MCPTool/prompt.ts +0 -3
- package/src/tools/MemoryReadTool/MemoryReadTool.tsx +0 -127
- package/src/tools/MemoryReadTool/prompt.ts +0 -3
- package/src/tools/MemoryWriteTool/MemoryWriteTool.tsx +0 -89
- package/src/tools/MemoryWriteTool/prompt.ts +0 -3
- package/src/tools/MultiEditTool/MultiEditTool.tsx +0 -388
- package/src/tools/MultiEditTool/prompt.ts +0 -45
- package/src/tools/NotebookEditTool/NotebookEditTool.tsx +0 -298
- package/src/tools/NotebookEditTool/prompt.ts +0 -3
- package/src/tools/NotebookReadTool/NotebookReadTool.tsx +0 -258
- package/src/tools/NotebookReadTool/prompt.ts +0 -3
- package/src/tools/StickerRequestTool/StickerRequestTool.tsx +0 -107
- package/src/tools/StickerRequestTool/prompt.ts +0 -19
- package/src/tools/TaskTool/TaskTool.tsx +0 -438
- package/src/tools/TaskTool/constants.ts +0 -1
- package/src/tools/TaskTool/prompt.ts +0 -92
- package/src/tools/ThinkTool/ThinkTool.tsx +0 -54
- package/src/tools/ThinkTool/prompt.ts +0 -12
- package/src/tools/TodoWriteTool/TodoWriteTool.tsx +0 -313
- package/src/tools/TodoWriteTool/prompt.ts +0 -63
- package/src/tools/URLFetcherTool/URLFetcherTool.tsx +0 -178
- package/src/tools/URLFetcherTool/cache.ts +0 -55
- package/src/tools/URLFetcherTool/htmlToMarkdown.ts +0 -55
- package/src/tools/URLFetcherTool/prompt.ts +0 -17
- package/src/tools/WebSearchTool/WebSearchTool.tsx +0 -103
- package/src/tools/WebSearchTool/prompt.ts +0 -13
- package/src/tools/WebSearchTool/searchProviders.ts +0 -66
- package/src/tools/lsTool/lsTool.tsx +0 -272
- package/src/tools/lsTool/prompt.ts +0 -2
- package/src/tools.ts +0 -67
- package/src/types/PermissionMode.ts +0 -120
- package/src/types/RequestContext.ts +0 -72
- package/src/types/common.d.ts +0 -2
- package/src/types/conversation.ts +0 -51
- package/src/types/logs.ts +0 -58
- package/src/types/modelCapabilities.ts +0 -64
- package/src/types/notebook.ts +0 -87
- package/src/utils/Cursor.ts +0 -436
- package/src/utils/PersistentShell.ts +0 -552
- package/src/utils/advancedFuzzyMatcher.ts +0 -290
- package/src/utils/agentLoader.ts +0 -278
- package/src/utils/agentStorage.ts +0 -97
- package/src/utils/array.ts +0 -3
- package/src/utils/ask.tsx +0 -99
- package/src/utils/auth.ts +0 -13
- package/src/utils/autoCompactCore.ts +0 -223
- package/src/utils/autoUpdater.ts +0 -458
- package/src/utils/betas.ts +0 -20
- package/src/utils/browser.ts +0 -14
- package/src/utils/cleanup.ts +0 -72
- package/src/utils/commands.ts +0 -261
- package/src/utils/commonUnixCommands.ts +0 -161
- package/src/utils/config.ts +0 -945
- package/src/utils/conversationRecovery.ts +0 -55
- package/src/utils/debugLogger.ts +0 -1235
- package/src/utils/diff.ts +0 -42
- package/src/utils/env.ts +0 -57
- package/src/utils/errors.ts +0 -21
- package/src/utils/exampleCommands.ts +0 -109
- package/src/utils/execFileNoThrow.ts +0 -51
- package/src/utils/expertChatStorage.ts +0 -136
- package/src/utils/file.ts +0 -405
- package/src/utils/fileRecoveryCore.ts +0 -71
- package/src/utils/format.tsx +0 -44
- package/src/utils/fuzzyMatcher.ts +0 -328
- package/src/utils/generators.ts +0 -62
- package/src/utils/git.ts +0 -92
- package/src/utils/globalLogger.ts +0 -77
- package/src/utils/http.ts +0 -10
- package/src/utils/imagePaste.ts +0 -38
- package/src/utils/json.ts +0 -13
- package/src/utils/log.ts +0 -382
- package/src/utils/markdown.ts +0 -213
- package/src/utils/messageContextManager.ts +0 -294
- package/src/utils/messages.tsx +0 -945
- package/src/utils/model.ts +0 -914
- package/src/utils/permissions/filesystem.ts +0 -127
- package/src/utils/responseState.ts +0 -23
- package/src/utils/ripgrep.ts +0 -167
- package/src/utils/secureFile.ts +0 -564
- package/src/utils/sessionState.ts +0 -49
- package/src/utils/state.ts +0 -25
- package/src/utils/style.ts +0 -29
- package/src/utils/terminal.ts +0 -50
- package/src/utils/theme.ts +0 -127
- package/src/utils/thinking.ts +0 -144
- package/src/utils/todoStorage.ts +0 -431
- package/src/utils/tokens.ts +0 -43
- package/src/utils/toolExecutionController.ts +0 -163
- package/src/utils/unaryLogging.ts +0 -26
- package/src/utils/user.ts +0 -37
- 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
|
-
}
|