@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
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
import { Message } from '../query'
|
|
2
|
-
import type { UUID } from '../types/common'
|
|
3
|
-
import { countTokens } from './tokens'
|
|
4
|
-
import crypto from 'crypto'
|
|
5
|
-
|
|
6
|
-
export interface MessageRetentionStrategy {
|
|
7
|
-
type:
|
|
8
|
-
| 'preserve_recent'
|
|
9
|
-
| 'preserve_important'
|
|
10
|
-
| 'smart_compression'
|
|
11
|
-
| 'auto_compact'
|
|
12
|
-
maxTokens: number
|
|
13
|
-
preserveCount?: number
|
|
14
|
-
importanceThreshold?: number
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface MessageTruncationResult {
|
|
18
|
-
truncatedMessages: Message[]
|
|
19
|
-
removedCount: number
|
|
20
|
-
preservedTokens: number
|
|
21
|
-
strategy: string
|
|
22
|
-
summary?: string
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Smart message truncation for context-limited models
|
|
27
|
-
* Implements multiple strategies for preserving important conversation content
|
|
28
|
-
*/
|
|
29
|
-
export class MessageContextManager {
|
|
30
|
-
/**
|
|
31
|
-
* Truncate messages intelligently based on strategy and token limit
|
|
32
|
-
*/
|
|
33
|
-
async truncateMessages(
|
|
34
|
-
messages: Message[],
|
|
35
|
-
strategy: MessageRetentionStrategy,
|
|
36
|
-
): Promise<MessageTruncationResult> {
|
|
37
|
-
switch (strategy.type) {
|
|
38
|
-
case 'preserve_recent':
|
|
39
|
-
return this.preserveRecentMessages(messages, strategy)
|
|
40
|
-
case 'preserve_important':
|
|
41
|
-
return this.preserveImportantMessages(messages, strategy)
|
|
42
|
-
case 'smart_compression':
|
|
43
|
-
return this.smartCompressionStrategy(messages, strategy)
|
|
44
|
-
case 'auto_compact':
|
|
45
|
-
return this.autoCompactStrategy(messages, strategy)
|
|
46
|
-
default:
|
|
47
|
-
return this.preserveRecentMessages(messages, strategy)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Strategy 1: Preserve most recent messages
|
|
53
|
-
*/
|
|
54
|
-
private preserveRecentMessages(
|
|
55
|
-
messages: Message[],
|
|
56
|
-
strategy: MessageRetentionStrategy,
|
|
57
|
-
): MessageTruncationResult {
|
|
58
|
-
const preserveCount =
|
|
59
|
-
strategy.preserveCount || this.estimateMessageCount(strategy.maxTokens)
|
|
60
|
-
const truncatedMessages = messages.slice(-preserveCount)
|
|
61
|
-
const removedCount = messages.length - truncatedMessages.length
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
truncatedMessages,
|
|
65
|
-
removedCount,
|
|
66
|
-
preservedTokens: countTokens(truncatedMessages),
|
|
67
|
-
strategy: `Preserved last ${preserveCount} messages`,
|
|
68
|
-
summary:
|
|
69
|
-
removedCount > 0
|
|
70
|
-
? `Removed ${removedCount} older messages to fit context window`
|
|
71
|
-
: 'No messages removed',
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Strategy 2: Preserve important messages (errors, user queries, recent context)
|
|
77
|
-
*/
|
|
78
|
-
private preserveImportantMessages(
|
|
79
|
-
messages: Message[],
|
|
80
|
-
strategy: MessageRetentionStrategy,
|
|
81
|
-
): MessageTruncationResult {
|
|
82
|
-
const importantMessages: Message[] = []
|
|
83
|
-
const recentMessages: Message[] = []
|
|
84
|
-
|
|
85
|
-
// Always preserve the last few messages for context continuity
|
|
86
|
-
const recentCount = Math.min(5, messages.length)
|
|
87
|
-
recentMessages.push(...messages.slice(-recentCount))
|
|
88
|
-
|
|
89
|
-
// Identify important messages (errors, tool failures, user decisions)
|
|
90
|
-
for (let i = 0; i < messages.length - recentCount; i++) {
|
|
91
|
-
const message = messages[i]
|
|
92
|
-
if (this.isImportantMessage(message)) {
|
|
93
|
-
importantMessages.push(message)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Combine and deduplicate
|
|
98
|
-
const combinedMessages = [
|
|
99
|
-
...importantMessages,
|
|
100
|
-
...recentMessages.filter(
|
|
101
|
-
msg => !importantMessages.some(imp => this.messagesEqual(imp, msg)),
|
|
102
|
-
),
|
|
103
|
-
]
|
|
104
|
-
|
|
105
|
-
// Sort by original order
|
|
106
|
-
const truncatedMessages = combinedMessages.sort((a, b) => {
|
|
107
|
-
const aIndex = messages.indexOf(a)
|
|
108
|
-
const bIndex = messages.indexOf(b)
|
|
109
|
-
return aIndex - bIndex
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
const removedCount = messages.length - truncatedMessages.length
|
|
113
|
-
|
|
114
|
-
return {
|
|
115
|
-
truncatedMessages,
|
|
116
|
-
removedCount,
|
|
117
|
-
preservedTokens: countTokens(truncatedMessages),
|
|
118
|
-
strategy: `Preserved ${importantMessages.length} important + ${recentMessages.length} recent messages`,
|
|
119
|
-
summary: `Kept critical errors, user decisions, and recent context (${removedCount} messages archived)`,
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Strategy 3: Smart compression with summary
|
|
125
|
-
*/
|
|
126
|
-
private async smartCompressionStrategy(
|
|
127
|
-
messages: Message[],
|
|
128
|
-
strategy: MessageRetentionStrategy,
|
|
129
|
-
): Promise<MessageTruncationResult> {
|
|
130
|
-
const recentCount = Math.min(10, Math.floor(messages.length * 0.3))
|
|
131
|
-
const recentMessages = messages.slice(-recentCount)
|
|
132
|
-
const olderMessages = messages.slice(0, -recentCount)
|
|
133
|
-
|
|
134
|
-
// Create a summary of older messages
|
|
135
|
-
const summary = this.createMessagesSummary(olderMessages)
|
|
136
|
-
|
|
137
|
-
// Create a summary message
|
|
138
|
-
const summaryMessage: Message = {
|
|
139
|
-
type: 'assistant',
|
|
140
|
-
message: {
|
|
141
|
-
role: 'assistant',
|
|
142
|
-
content: [
|
|
143
|
-
{
|
|
144
|
-
type: 'text',
|
|
145
|
-
text: `[CONVERSATION SUMMARY - ${olderMessages.length} messages compressed]\n\n${summary}\n\n[END SUMMARY - Recent context follows...]`,
|
|
146
|
-
},
|
|
147
|
-
],
|
|
148
|
-
},
|
|
149
|
-
costUSD: 0,
|
|
150
|
-
durationMs: 0,
|
|
151
|
-
uuid: crypto.randomUUID() as UUID
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
const truncatedMessages = [summaryMessage, ...recentMessages]
|
|
155
|
-
|
|
156
|
-
return {
|
|
157
|
-
truncatedMessages,
|
|
158
|
-
removedCount: olderMessages.length,
|
|
159
|
-
preservedTokens: countTokens(truncatedMessages),
|
|
160
|
-
strategy: `Compressed ${olderMessages.length} messages + preserved ${recentCount} recent`,
|
|
161
|
-
summary: `Created intelligent summary of conversation history`,
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Strategy 4: Use existing auto-compact mechanism
|
|
167
|
-
*/
|
|
168
|
-
private async autoCompactStrategy(
|
|
169
|
-
messages: Message[],
|
|
170
|
-
strategy: MessageRetentionStrategy,
|
|
171
|
-
): Promise<MessageTruncationResult> {
|
|
172
|
-
// This would integrate with the existing autoCompactCore.ts
|
|
173
|
-
// For now, fallback to preserve_recent
|
|
174
|
-
return this.preserveRecentMessages(messages, strategy)
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Helper: Estimate how many messages fit in token budget
|
|
179
|
-
*/
|
|
180
|
-
private estimateMessageCount(maxTokens: number): number {
|
|
181
|
-
const avgTokensPerMessage = 150 // Conservative estimate
|
|
182
|
-
return Math.max(3, Math.floor(maxTokens / avgTokensPerMessage))
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Helper: Determine if a message is important
|
|
187
|
-
*/
|
|
188
|
-
private isImportantMessage(message: Message): boolean {
|
|
189
|
-
if (message.type === 'user') return true // User messages are always important
|
|
190
|
-
|
|
191
|
-
if (message.type === 'assistant') {
|
|
192
|
-
const content = message.message.content
|
|
193
|
-
if (Array.isArray(content)) {
|
|
194
|
-
const textContent = content
|
|
195
|
-
.filter(c => c.type === 'text')
|
|
196
|
-
.map(c => c.text)
|
|
197
|
-
.join(' ')
|
|
198
|
-
.toLowerCase()
|
|
199
|
-
|
|
200
|
-
// Mark as important if contains error keywords
|
|
201
|
-
return (
|
|
202
|
-
textContent.includes('error') ||
|
|
203
|
-
textContent.includes('failed') ||
|
|
204
|
-
textContent.includes('warning') ||
|
|
205
|
-
textContent.includes('critical') ||
|
|
206
|
-
textContent.includes('issue')
|
|
207
|
-
)
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
return false
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Helper: Check if two messages are equal
|
|
216
|
-
*/
|
|
217
|
-
private messagesEqual(a: Message, b: Message): boolean {
|
|
218
|
-
return JSON.stringify(a) === JSON.stringify(b)
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Helper: Create summary of message sequence
|
|
223
|
-
*/
|
|
224
|
-
private createMessagesSummary(messages: Message[]): string {
|
|
225
|
-
const userMessages = messages.filter(m => m.type === 'user').length
|
|
226
|
-
const assistantMessages = messages.filter(
|
|
227
|
-
m => m.type === 'assistant',
|
|
228
|
-
).length
|
|
229
|
-
const toolUses = messages.filter(
|
|
230
|
-
m =>
|
|
231
|
-
m.type === 'assistant' &&
|
|
232
|
-
Array.isArray(m.message.content) &&
|
|
233
|
-
m.message.content.some(c => c.type === 'tool_use'),
|
|
234
|
-
).length
|
|
235
|
-
|
|
236
|
-
const topics: string[] = []
|
|
237
|
-
|
|
238
|
-
// Extract key topics from user messages
|
|
239
|
-
messages.forEach(msg => {
|
|
240
|
-
if (msg.type === 'user' && Array.isArray(msg.message.content)) {
|
|
241
|
-
const text = msg.message.content
|
|
242
|
-
.filter(c => c.type === 'text')
|
|
243
|
-
.map(c => c.text)
|
|
244
|
-
.join(' ')
|
|
245
|
-
|
|
246
|
-
// Simple keyword extraction (could be enhanced with NLP)
|
|
247
|
-
if (text.includes('error') || text.includes('bug'))
|
|
248
|
-
topics.push('debugging')
|
|
249
|
-
if (text.includes('implement') || text.includes('create'))
|
|
250
|
-
topics.push('implementation')
|
|
251
|
-
if (text.includes('explain') || text.includes('understand'))
|
|
252
|
-
topics.push('explanation')
|
|
253
|
-
if (text.includes('fix') || text.includes('solve'))
|
|
254
|
-
topics.push('problem-solving')
|
|
255
|
-
}
|
|
256
|
-
})
|
|
257
|
-
|
|
258
|
-
const uniqueTopics = [...new Set(topics)]
|
|
259
|
-
|
|
260
|
-
return `Previous conversation included ${userMessages} user messages and ${assistantMessages} assistant responses, with ${toolUses} tool invocations. Key topics: ${uniqueTopics.join(', ') || 'general discussion'}.`
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
* Factory function to create appropriate retention strategy
|
|
266
|
-
*/
|
|
267
|
-
export function createRetentionStrategy(
|
|
268
|
-
targetContextLength: number,
|
|
269
|
-
currentTokens: number,
|
|
270
|
-
userPreference: 'aggressive' | 'balanced' | 'conservative' = 'balanced',
|
|
271
|
-
): MessageRetentionStrategy {
|
|
272
|
-
const maxTokens = Math.floor(targetContextLength * 0.7) // Leave room for new conversation
|
|
273
|
-
|
|
274
|
-
switch (userPreference) {
|
|
275
|
-
case 'aggressive':
|
|
276
|
-
return {
|
|
277
|
-
type: 'preserve_recent',
|
|
278
|
-
maxTokens,
|
|
279
|
-
preserveCount: Math.max(3, Math.floor(maxTokens / 200)),
|
|
280
|
-
}
|
|
281
|
-
case 'conservative':
|
|
282
|
-
return {
|
|
283
|
-
type: 'smart_compression',
|
|
284
|
-
maxTokens,
|
|
285
|
-
}
|
|
286
|
-
case 'balanced':
|
|
287
|
-
default:
|
|
288
|
-
return {
|
|
289
|
-
type: 'preserve_important',
|
|
290
|
-
maxTokens,
|
|
291
|
-
preserveCount: Math.max(5, Math.floor(maxTokens / 150)),
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|