@shareai-lab/kode 1.1.13 → 1.1.16-dev.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.
- package/dist/entrypoints/cli.js +59 -38
- package/dist/entrypoints/cli.js.map +3 -3
- package/dist/index.js +5 -26
- package/dist/package.json +4 -1
- package/package.json +11 -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,273 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mention Processor Service
|
|
3
|
-
* Handles @agent and @file mentions through the system reminder infrastructure
|
|
4
|
-
* Designed to integrate naturally with the existing event-driven architecture
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { emitReminderEvent } from './systemReminder'
|
|
8
|
-
import { getAvailableAgentTypes } from '../utils/agentLoader'
|
|
9
|
-
import { existsSync } from 'fs'
|
|
10
|
-
import { resolve } from 'path'
|
|
11
|
-
import { getCwd } from '../utils/state'
|
|
12
|
-
|
|
13
|
-
export interface MentionContext {
|
|
14
|
-
type: 'agent' | 'file'
|
|
15
|
-
mention: string
|
|
16
|
-
resolved: string
|
|
17
|
-
exists: boolean
|
|
18
|
-
metadata?: any
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface ProcessedMentions {
|
|
22
|
-
agents: MentionContext[]
|
|
23
|
-
files: MentionContext[]
|
|
24
|
-
hasAgentMentions: boolean
|
|
25
|
-
hasFileMentions: boolean
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
class MentionProcessorService {
|
|
29
|
-
// Centralized mention patterns - single source of truth
|
|
30
|
-
private static readonly MENTION_PATTERNS = {
|
|
31
|
-
runAgent: /@(run-agent-[\w\-]+)/g,
|
|
32
|
-
agent: /@(agent-[\w\-]+)/g, // Legacy support
|
|
33
|
-
askModel: /@(ask-[\w\-]+)/g,
|
|
34
|
-
file: /@([a-zA-Z0-9/._-]+(?:\.[a-zA-Z0-9]+)?)/g
|
|
35
|
-
} as const
|
|
36
|
-
|
|
37
|
-
private agentCache: Map<string, boolean> = new Map()
|
|
38
|
-
private lastAgentCheck: number = 0
|
|
39
|
-
private CACHE_TTL = 60000 // 1 minute cache
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Process mentions in user input and emit appropriate events
|
|
43
|
-
* This follows the event-driven philosophy of system reminders
|
|
44
|
-
*/
|
|
45
|
-
public async processMentions(input: string): Promise<ProcessedMentions> {
|
|
46
|
-
const result: ProcessedMentions = {
|
|
47
|
-
agents: [],
|
|
48
|
-
files: [],
|
|
49
|
-
hasAgentMentions: false,
|
|
50
|
-
hasFileMentions: false,
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
try {
|
|
54
|
-
|
|
55
|
-
// Process agent mentions with unified logic to eliminate code duplication
|
|
56
|
-
const agentMentions = this.extractAgentMentions(input)
|
|
57
|
-
if (agentMentions.length > 0) {
|
|
58
|
-
await this.refreshAgentCache()
|
|
59
|
-
|
|
60
|
-
for (const { mention, agentType, isAskModel } of agentMentions) {
|
|
61
|
-
if (isAskModel || this.agentCache.has(agentType)) {
|
|
62
|
-
result.agents.push({
|
|
63
|
-
type: 'agent',
|
|
64
|
-
mention,
|
|
65
|
-
resolved: agentType,
|
|
66
|
-
exists: true,
|
|
67
|
-
metadata: isAskModel ? { type: 'ask-model' } : undefined
|
|
68
|
-
})
|
|
69
|
-
result.hasAgentMentions = true
|
|
70
|
-
|
|
71
|
-
// Emit appropriate event based on mention type
|
|
72
|
-
this.emitAgentMentionEvent(mention, agentType, isAskModel)
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// No longer process @xxx format - treat as regular text (emails, etc.)
|
|
78
|
-
|
|
79
|
-
// Process file mentions (exclude agent and ask-model mentions)
|
|
80
|
-
const fileMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.file)]
|
|
81
|
-
const processedAgentMentions = new Set(agentMentions.map(am => am.mention))
|
|
82
|
-
|
|
83
|
-
for (const match of fileMatches) {
|
|
84
|
-
const mention = match[1]
|
|
85
|
-
|
|
86
|
-
// Skip if this is an agent or ask-model mention (already processed)
|
|
87
|
-
if (mention.startsWith('run-agent-') || mention.startsWith('agent-') || mention.startsWith('ask-') || processedAgentMentions.has(mention)) {
|
|
88
|
-
continue
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Check if it's a file
|
|
92
|
-
const filePath = this.resolveFilePath(mention)
|
|
93
|
-
if (existsSync(filePath)) {
|
|
94
|
-
result.files.push({
|
|
95
|
-
type: 'file',
|
|
96
|
-
mention,
|
|
97
|
-
resolved: filePath,
|
|
98
|
-
exists: true,
|
|
99
|
-
})
|
|
100
|
-
result.hasFileMentions = true
|
|
101
|
-
|
|
102
|
-
// Emit file mention event for system reminder to handle
|
|
103
|
-
emitReminderEvent('file:mentioned', {
|
|
104
|
-
filePath: filePath,
|
|
105
|
-
originalMention: mention,
|
|
106
|
-
timestamp: Date.now(),
|
|
107
|
-
})
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return result
|
|
112
|
-
} catch (error) {
|
|
113
|
-
console.warn('[MentionProcessor] Failed to process mentions:', {
|
|
114
|
-
input: input.substring(0, 100) + (input.length > 100 ? '...' : ''),
|
|
115
|
-
error: error instanceof Error ? error.message : error
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
// Return empty result on error to maintain system stability
|
|
119
|
-
return {
|
|
120
|
-
agents: [],
|
|
121
|
-
files: [],
|
|
122
|
-
hasAgentMentions: false,
|
|
123
|
-
hasFileMentions: false,
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Removed identifyMention method as it's no longer needed with separate processing
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Resolve file path relative to current working directory
|
|
132
|
-
*/
|
|
133
|
-
private resolveFilePath(mention: string): string {
|
|
134
|
-
// Simple consistent logic: mention is always relative to current directory
|
|
135
|
-
return resolve(getCwd(), mention)
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Refresh the agent cache periodically
|
|
140
|
-
* This avoids hitting the agent loader on every mention
|
|
141
|
-
*/
|
|
142
|
-
private async refreshAgentCache(): Promise<void> {
|
|
143
|
-
const now = Date.now()
|
|
144
|
-
if (now - this.lastAgentCheck < this.CACHE_TTL) {
|
|
145
|
-
return // Cache is still fresh
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
try {
|
|
149
|
-
const agents = await getAvailableAgentTypes()
|
|
150
|
-
const previousCacheSize = this.agentCache.size
|
|
151
|
-
this.agentCache.clear()
|
|
152
|
-
|
|
153
|
-
for (const agent of agents) {
|
|
154
|
-
// Store only the agent type without prefix for consistent lookup
|
|
155
|
-
this.agentCache.set(agent.agentType, true)
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
this.lastAgentCheck = now
|
|
159
|
-
|
|
160
|
-
// Log cache refresh for debugging mention resolution issues
|
|
161
|
-
if (agents.length !== previousCacheSize) {
|
|
162
|
-
console.log('[MentionProcessor] Agent cache refreshed:', {
|
|
163
|
-
agentCount: agents.length,
|
|
164
|
-
previousCacheSize,
|
|
165
|
-
cacheAge: now - this.lastAgentCheck
|
|
166
|
-
})
|
|
167
|
-
}
|
|
168
|
-
} catch (error) {
|
|
169
|
-
console.warn('[MentionProcessor] Failed to refresh agent cache, keeping existing cache:', {
|
|
170
|
-
error: error instanceof Error ? error.message : error,
|
|
171
|
-
cacheSize: this.agentCache.size,
|
|
172
|
-
lastRefresh: new Date(this.lastAgentCheck).toISOString()
|
|
173
|
-
})
|
|
174
|
-
// Keep existing cache on error to maintain functionality
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Extract agent mentions with unified pattern matching
|
|
180
|
-
* Consolidates run-agent, agent, and ask-model detection logic
|
|
181
|
-
*/
|
|
182
|
-
private extractAgentMentions(input: string): Array<{ mention: string; agentType: string; isAskModel: boolean }> {
|
|
183
|
-
const mentions: Array<{ mention: string; agentType: string; isAskModel: boolean }> = []
|
|
184
|
-
|
|
185
|
-
// Process @run-agent-xxx format (preferred)
|
|
186
|
-
const runAgentMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.runAgent)]
|
|
187
|
-
for (const match of runAgentMatches) {
|
|
188
|
-
const mention = match[1]
|
|
189
|
-
const agentType = mention.replace(/^run-agent-/, '')
|
|
190
|
-
mentions.push({ mention, agentType, isAskModel: false })
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// Process @agent-xxx format (legacy)
|
|
194
|
-
const agentMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.agent)]
|
|
195
|
-
for (const match of agentMatches) {
|
|
196
|
-
const mention = match[1]
|
|
197
|
-
const agentType = mention.replace(/^agent-/, '')
|
|
198
|
-
mentions.push({ mention, agentType, isAskModel: false })
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Process @ask-model mentions
|
|
202
|
-
const askModelMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.askModel)]
|
|
203
|
-
for (const match of askModelMatches) {
|
|
204
|
-
const mention = match[1]
|
|
205
|
-
mentions.push({ mention, agentType: mention, isAskModel: true })
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return mentions
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Emit agent mention event with proper typing
|
|
213
|
-
* Centralized event emission to ensure consistency
|
|
214
|
-
*/
|
|
215
|
-
private emitAgentMentionEvent(mention: string, agentType: string, isAskModel: boolean): void {
|
|
216
|
-
try {
|
|
217
|
-
const eventData = {
|
|
218
|
-
originalMention: mention,
|
|
219
|
-
timestamp: Date.now(),
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
if (isAskModel) {
|
|
223
|
-
emitReminderEvent('ask-model:mentioned', {
|
|
224
|
-
...eventData,
|
|
225
|
-
modelName: mention,
|
|
226
|
-
})
|
|
227
|
-
} else {
|
|
228
|
-
emitReminderEvent('agent:mentioned', {
|
|
229
|
-
...eventData,
|
|
230
|
-
agentType,
|
|
231
|
-
})
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Debug log for mention event emission tracking
|
|
235
|
-
console.log('[MentionProcessor] Emitted mention event:', {
|
|
236
|
-
type: isAskModel ? 'ask-model' : 'agent',
|
|
237
|
-
mention,
|
|
238
|
-
agentType: isAskModel ? undefined : agentType
|
|
239
|
-
})
|
|
240
|
-
} catch (error) {
|
|
241
|
-
console.error('[MentionProcessor] Failed to emit mention event:', {
|
|
242
|
-
mention,
|
|
243
|
-
agentType,
|
|
244
|
-
isAskModel,
|
|
245
|
-
error: error instanceof Error ? error.message : error
|
|
246
|
-
})
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Clear caches - useful for testing or reset
|
|
252
|
-
*/
|
|
253
|
-
public clearCache(): void {
|
|
254
|
-
this.agentCache.clear()
|
|
255
|
-
this.lastAgentCheck = 0
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// Export singleton instance
|
|
260
|
-
export const mentionProcessor = new MentionProcessorService()
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Process mentions in user input
|
|
264
|
-
* This is the main API for the mention processor
|
|
265
|
-
*/
|
|
266
|
-
export const processMentions = (input: string) =>
|
|
267
|
-
mentionProcessor.processMentions(input)
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Clear mention processor caches
|
|
271
|
-
*/
|
|
272
|
-
export const clearMentionCache = () =>
|
|
273
|
-
mentionProcessor.clearCache()
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { ModelAPIAdapter } from './adapters/base'
|
|
2
|
-
import { ResponsesAPIAdapter } from './adapters/responsesAPI'
|
|
3
|
-
import { ChatCompletionsAdapter } from './adapters/chatCompletions'
|
|
4
|
-
import { getModelCapabilities } from '../constants/modelCapabilities'
|
|
5
|
-
import { ModelProfile, getGlobalConfig } from '../utils/config'
|
|
6
|
-
import { ModelCapabilities } from '../types/modelCapabilities'
|
|
7
|
-
|
|
8
|
-
export class ModelAdapterFactory {
|
|
9
|
-
/**
|
|
10
|
-
* Create appropriate adapter based on model configuration
|
|
11
|
-
*/
|
|
12
|
-
static createAdapter(modelProfile: ModelProfile): ModelAPIAdapter {
|
|
13
|
-
const capabilities = getModelCapabilities(modelProfile.modelName)
|
|
14
|
-
|
|
15
|
-
// Determine which API to use
|
|
16
|
-
const apiType = this.determineAPIType(modelProfile, capabilities)
|
|
17
|
-
|
|
18
|
-
// Create corresponding adapter
|
|
19
|
-
switch (apiType) {
|
|
20
|
-
case 'responses_api':
|
|
21
|
-
return new ResponsesAPIAdapter(capabilities, modelProfile)
|
|
22
|
-
case 'chat_completions':
|
|
23
|
-
default:
|
|
24
|
-
return new ChatCompletionsAdapter(capabilities, modelProfile)
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Determine which API should be used
|
|
30
|
-
*/
|
|
31
|
-
private static determineAPIType(
|
|
32
|
-
modelProfile: ModelProfile,
|
|
33
|
-
capabilities: ModelCapabilities
|
|
34
|
-
): 'responses_api' | 'chat_completions' {
|
|
35
|
-
// If model doesn't support Responses API, use Chat Completions directly
|
|
36
|
-
if (capabilities.apiArchitecture.primary !== 'responses_api') {
|
|
37
|
-
return 'chat_completions'
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Check if this is official OpenAI endpoint
|
|
41
|
-
const isOfficialOpenAI = !modelProfile.baseURL ||
|
|
42
|
-
modelProfile.baseURL.includes('api.openai.com')
|
|
43
|
-
|
|
44
|
-
// Non-official endpoints use Chat Completions (even if model supports Responses API)
|
|
45
|
-
if (!isOfficialOpenAI) {
|
|
46
|
-
// If there's a fallback option, use fallback
|
|
47
|
-
if (capabilities.apiArchitecture.fallback === 'chat_completions') {
|
|
48
|
-
return 'chat_completions'
|
|
49
|
-
}
|
|
50
|
-
// Otherwise use primary (might fail, but let it try)
|
|
51
|
-
return capabilities.apiArchitecture.primary
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// For now, always use Responses API for supported models when on official endpoint
|
|
55
|
-
// Streaming fallback will be handled at runtime if needed
|
|
56
|
-
|
|
57
|
-
// Use primary API type
|
|
58
|
-
return capabilities.apiArchitecture.primary
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Check if model should use Responses API
|
|
63
|
-
*/
|
|
64
|
-
static shouldUseResponsesAPI(modelProfile: ModelProfile): boolean {
|
|
65
|
-
const capabilities = getModelCapabilities(modelProfile.modelName)
|
|
66
|
-
const apiType = this.determineAPIType(modelProfile, capabilities)
|
|
67
|
-
return apiType === 'responses_api'
|
|
68
|
-
}
|
|
69
|
-
}
|
package/src/services/notifier.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { getGlobalConfig } from '../utils/config'
|
|
2
|
-
|
|
3
|
-
export type NotificationOptions = {
|
|
4
|
-
message: string
|
|
5
|
-
title?: string
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
function sendITerm2Notification({ message, title }: NotificationOptions): void {
|
|
9
|
-
const displayString = title ? `${title}:\n${message}` : message
|
|
10
|
-
try {
|
|
11
|
-
process.stdout.write(`\x1b]9;\n\n${displayString}\x07`)
|
|
12
|
-
} catch {
|
|
13
|
-
// Ignore errors
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function sendTerminalBell(): void {
|
|
18
|
-
process.stdout.write('\x07')
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export async function sendNotification(
|
|
22
|
-
notif: NotificationOptions,
|
|
23
|
-
): Promise<void> {
|
|
24
|
-
const channel = getGlobalConfig().preferredNotifChannel
|
|
25
|
-
switch (channel) {
|
|
26
|
-
case 'iterm2':
|
|
27
|
-
sendITerm2Notification(notif)
|
|
28
|
-
break
|
|
29
|
-
case 'terminal_bell':
|
|
30
|
-
sendTerminalBell()
|
|
31
|
-
break
|
|
32
|
-
case 'iterm2_with_bell':
|
|
33
|
-
sendITerm2Notification(notif)
|
|
34
|
-
sendTerminalBell()
|
|
35
|
-
break
|
|
36
|
-
case 'notifications_disabled':
|
|
37
|
-
// Do nothing
|
|
38
|
-
break
|
|
39
|
-
}
|
|
40
|
-
}
|