@shareai-lab/kode 1.0.70 → 1.0.73

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 (278) hide show
  1. package/README.md +342 -75
  2. package/README.zh-CN.md +292 -0
  3. package/cli.js +62 -0
  4. package/package.json +49 -25
  5. package/scripts/postinstall.js +56 -0
  6. package/src/ProjectOnboarding.tsx +198 -0
  7. package/src/Tool.ts +82 -0
  8. package/src/commands/agents.tsx +3401 -0
  9. package/src/commands/approvedTools.ts +53 -0
  10. package/src/commands/bug.tsx +20 -0
  11. package/src/commands/clear.ts +43 -0
  12. package/src/commands/compact.ts +120 -0
  13. package/src/commands/config.tsx +19 -0
  14. package/src/commands/cost.ts +18 -0
  15. package/src/commands/ctx_viz.ts +209 -0
  16. package/src/commands/doctor.ts +24 -0
  17. package/src/commands/help.tsx +19 -0
  18. package/src/commands/init.ts +37 -0
  19. package/src/commands/listen.ts +42 -0
  20. package/src/commands/login.tsx +51 -0
  21. package/src/commands/logout.tsx +40 -0
  22. package/src/commands/mcp.ts +41 -0
  23. package/src/commands/model.tsx +40 -0
  24. package/src/commands/modelstatus.tsx +20 -0
  25. package/src/commands/onboarding.tsx +34 -0
  26. package/src/commands/pr_comments.ts +59 -0
  27. package/src/commands/refreshCommands.ts +54 -0
  28. package/src/commands/release-notes.ts +34 -0
  29. package/src/commands/resume.tsx +31 -0
  30. package/src/commands/review.ts +49 -0
  31. package/src/commands/terminalSetup.ts +221 -0
  32. package/src/commands.ts +139 -0
  33. package/src/components/ApproveApiKey.tsx +93 -0
  34. package/src/components/AsciiLogo.tsx +13 -0
  35. package/src/components/AutoUpdater.tsx +148 -0
  36. package/src/components/Bug.tsx +367 -0
  37. package/src/components/Config.tsx +293 -0
  38. package/src/components/ConsoleOAuthFlow.tsx +327 -0
  39. package/src/components/Cost.tsx +23 -0
  40. package/src/components/CostThresholdDialog.tsx +46 -0
  41. package/src/components/CustomSelect/option-map.ts +42 -0
  42. package/src/components/CustomSelect/select-option.tsx +78 -0
  43. package/src/components/CustomSelect/select.tsx +152 -0
  44. package/src/components/CustomSelect/theme.ts +45 -0
  45. package/src/components/CustomSelect/use-select-state.ts +414 -0
  46. package/src/components/CustomSelect/use-select.ts +35 -0
  47. package/src/components/FallbackToolUseRejectedMessage.tsx +15 -0
  48. package/src/components/FileEditToolUpdatedMessage.tsx +66 -0
  49. package/src/components/Help.tsx +215 -0
  50. package/src/components/HighlightedCode.tsx +33 -0
  51. package/src/components/InvalidConfigDialog.tsx +113 -0
  52. package/src/components/Link.tsx +32 -0
  53. package/src/components/LogSelector.tsx +86 -0
  54. package/src/components/Logo.tsx +145 -0
  55. package/src/components/MCPServerApprovalDialog.tsx +100 -0
  56. package/src/components/MCPServerDialogCopy.tsx +25 -0
  57. package/src/components/MCPServerMultiselectDialog.tsx +109 -0
  58. package/src/components/Message.tsx +221 -0
  59. package/src/components/MessageResponse.tsx +15 -0
  60. package/src/components/MessageSelector.tsx +211 -0
  61. package/src/components/ModeIndicator.tsx +88 -0
  62. package/src/components/ModelConfig.tsx +301 -0
  63. package/src/components/ModelListManager.tsx +227 -0
  64. package/src/components/ModelSelector.tsx +3386 -0
  65. package/src/components/ModelStatusDisplay.tsx +230 -0
  66. package/src/components/Onboarding.tsx +274 -0
  67. package/src/components/PressEnterToContinue.tsx +11 -0
  68. package/src/components/PromptInput.tsx +740 -0
  69. package/src/components/SentryErrorBoundary.ts +33 -0
  70. package/src/components/Spinner.tsx +129 -0
  71. package/src/components/StickerRequestForm.tsx +16 -0
  72. package/src/components/StructuredDiff.tsx +191 -0
  73. package/src/components/TextInput.tsx +259 -0
  74. package/src/components/TodoItem.tsx +11 -0
  75. package/src/components/TokenWarning.tsx +31 -0
  76. package/src/components/ToolUseLoader.tsx +40 -0
  77. package/src/components/TrustDialog.tsx +106 -0
  78. package/src/components/binary-feedback/BinaryFeedback.tsx +63 -0
  79. package/src/components/binary-feedback/BinaryFeedbackOption.tsx +111 -0
  80. package/src/components/binary-feedback/BinaryFeedbackView.tsx +172 -0
  81. package/src/components/binary-feedback/utils.ts +220 -0
  82. package/src/components/messages/AssistantBashOutputMessage.tsx +22 -0
  83. package/src/components/messages/AssistantLocalCommandOutputMessage.tsx +49 -0
  84. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +19 -0
  85. package/src/components/messages/AssistantTextMessage.tsx +144 -0
  86. package/src/components/messages/AssistantThinkingMessage.tsx +40 -0
  87. package/src/components/messages/AssistantToolUseMessage.tsx +133 -0
  88. package/src/components/messages/TaskProgressMessage.tsx +32 -0
  89. package/src/components/messages/TaskToolMessage.tsx +58 -0
  90. package/src/components/messages/UserBashInputMessage.tsx +28 -0
  91. package/src/components/messages/UserCommandMessage.tsx +30 -0
  92. package/src/components/messages/UserKodingInputMessage.tsx +28 -0
  93. package/src/components/messages/UserPromptMessage.tsx +35 -0
  94. package/src/components/messages/UserTextMessage.tsx +39 -0
  95. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +12 -0
  96. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +36 -0
  97. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +31 -0
  98. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +57 -0
  99. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +35 -0
  100. package/src/components/messages/UserToolResultMessage/utils.tsx +56 -0
  101. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +121 -0
  102. package/src/components/permissions/FallbackPermissionRequest.tsx +153 -0
  103. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  104. package/src/components/permissions/FileEditPermissionRequest/FileEditToolDiff.tsx +77 -0
  105. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +164 -0
  106. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +83 -0
  107. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +240 -0
  108. package/src/components/permissions/PermissionRequest.tsx +101 -0
  109. package/src/components/permissions/PermissionRequestTitle.tsx +69 -0
  110. package/src/components/permissions/hooks.ts +44 -0
  111. package/src/components/permissions/toolUseOptions.ts +59 -0
  112. package/src/components/permissions/utils.ts +23 -0
  113. package/src/constants/betas.ts +5 -0
  114. package/src/constants/claude-asterisk-ascii-art.tsx +238 -0
  115. package/src/constants/figures.ts +4 -0
  116. package/src/constants/keys.ts +3 -0
  117. package/src/constants/macros.ts +8 -0
  118. package/src/constants/modelCapabilities.ts +179 -0
  119. package/src/constants/models.ts +1025 -0
  120. package/src/constants/oauth.ts +18 -0
  121. package/src/constants/product.ts +17 -0
  122. package/src/constants/prompts.ts +177 -0
  123. package/src/constants/releaseNotes.ts +7 -0
  124. package/src/context/PermissionContext.tsx +149 -0
  125. package/src/context.ts +278 -0
  126. package/src/cost-tracker.ts +84 -0
  127. package/src/entrypoints/cli.tsx +1518 -0
  128. package/src/entrypoints/mcp.ts +176 -0
  129. package/src/history.ts +25 -0
  130. package/src/hooks/useApiKeyVerification.ts +59 -0
  131. package/src/hooks/useArrowKeyHistory.ts +55 -0
  132. package/src/hooks/useCanUseTool.ts +138 -0
  133. package/src/hooks/useCancelRequest.ts +39 -0
  134. package/src/hooks/useDoublePress.ts +42 -0
  135. package/src/hooks/useExitOnCtrlCD.ts +31 -0
  136. package/src/hooks/useInterval.ts +25 -0
  137. package/src/hooks/useLogMessages.ts +16 -0
  138. package/src/hooks/useLogStartupTime.ts +12 -0
  139. package/src/hooks/useNotifyAfterTimeout.ts +65 -0
  140. package/src/hooks/usePermissionRequestLogging.ts +44 -0
  141. package/src/hooks/useTerminalSize.ts +49 -0
  142. package/src/hooks/useTextInput.ts +318 -0
  143. package/src/hooks/useUnifiedCompletion.ts +1404 -0
  144. package/src/messages.ts +38 -0
  145. package/src/permissions.ts +268 -0
  146. package/src/query.ts +707 -0
  147. package/src/screens/ConfigureNpmPrefix.tsx +197 -0
  148. package/src/screens/Doctor.tsx +219 -0
  149. package/src/screens/LogList.tsx +68 -0
  150. package/src/screens/REPL.tsx +798 -0
  151. package/src/screens/ResumeConversation.tsx +68 -0
  152. package/src/services/adapters/base.ts +38 -0
  153. package/src/services/adapters/chatCompletions.ts +90 -0
  154. package/src/services/adapters/responsesAPI.ts +170 -0
  155. package/src/services/browserMocks.ts +66 -0
  156. package/src/services/claude.ts +2083 -0
  157. package/src/services/customCommands.ts +704 -0
  158. package/src/services/fileFreshness.ts +377 -0
  159. package/src/services/gpt5ConnectionTest.ts +340 -0
  160. package/src/services/mcpClient.ts +564 -0
  161. package/src/services/mcpServerApproval.tsx +50 -0
  162. package/src/services/mentionProcessor.ts +273 -0
  163. package/src/services/modelAdapterFactory.ts +69 -0
  164. package/src/services/notifier.ts +40 -0
  165. package/src/services/oauth.ts +357 -0
  166. package/src/services/openai.ts +1305 -0
  167. package/src/services/responseStateManager.ts +90 -0
  168. package/src/services/sentry.ts +3 -0
  169. package/src/services/statsig.ts +171 -0
  170. package/src/services/statsigStorage.ts +86 -0
  171. package/src/services/systemReminder.ts +507 -0
  172. package/src/services/vcr.ts +161 -0
  173. package/src/test/testAdapters.ts +96 -0
  174. package/src/tools/ArchitectTool/ArchitectTool.tsx +122 -0
  175. package/src/tools/ArchitectTool/prompt.ts +15 -0
  176. package/src/tools/AskExpertModelTool/AskExpertModelTool.tsx +569 -0
  177. package/src/tools/BashTool/BashTool.tsx +243 -0
  178. package/src/tools/BashTool/BashToolResultMessage.tsx +38 -0
  179. package/src/tools/BashTool/OutputLine.tsx +49 -0
  180. package/src/tools/BashTool/prompt.ts +174 -0
  181. package/src/tools/BashTool/utils.ts +56 -0
  182. package/src/tools/FileEditTool/FileEditTool.tsx +315 -0
  183. package/src/tools/FileEditTool/prompt.ts +51 -0
  184. package/src/tools/FileEditTool/utils.ts +58 -0
  185. package/src/tools/FileReadTool/FileReadTool.tsx +404 -0
  186. package/src/tools/FileReadTool/prompt.ts +7 -0
  187. package/src/tools/FileWriteTool/FileWriteTool.tsx +297 -0
  188. package/src/tools/FileWriteTool/prompt.ts +10 -0
  189. package/src/tools/GlobTool/GlobTool.tsx +119 -0
  190. package/src/tools/GlobTool/prompt.ts +8 -0
  191. package/src/tools/GrepTool/GrepTool.tsx +147 -0
  192. package/src/tools/GrepTool/prompt.ts +11 -0
  193. package/src/tools/MCPTool/MCPTool.tsx +107 -0
  194. package/src/tools/MCPTool/prompt.ts +3 -0
  195. package/src/tools/MemoryReadTool/MemoryReadTool.tsx +127 -0
  196. package/src/tools/MemoryReadTool/prompt.ts +3 -0
  197. package/src/tools/MemoryWriteTool/MemoryWriteTool.tsx +89 -0
  198. package/src/tools/MemoryWriteTool/prompt.ts +3 -0
  199. package/src/tools/MultiEditTool/MultiEditTool.tsx +366 -0
  200. package/src/tools/MultiEditTool/prompt.ts +45 -0
  201. package/src/tools/NotebookEditTool/NotebookEditTool.tsx +298 -0
  202. package/src/tools/NotebookEditTool/prompt.ts +3 -0
  203. package/src/tools/NotebookReadTool/NotebookReadTool.tsx +258 -0
  204. package/src/tools/NotebookReadTool/prompt.ts +3 -0
  205. package/src/tools/StickerRequestTool/StickerRequestTool.tsx +93 -0
  206. package/src/tools/StickerRequestTool/prompt.ts +19 -0
  207. package/src/tools/TaskTool/TaskTool.tsx +466 -0
  208. package/src/tools/TaskTool/constants.ts +1 -0
  209. package/src/tools/TaskTool/prompt.ts +92 -0
  210. package/src/tools/ThinkTool/ThinkTool.tsx +54 -0
  211. package/src/tools/ThinkTool/prompt.ts +12 -0
  212. package/src/tools/TodoWriteTool/TodoWriteTool.tsx +290 -0
  213. package/src/tools/TodoWriteTool/prompt.ts +63 -0
  214. package/src/tools/lsTool/lsTool.tsx +272 -0
  215. package/src/tools/lsTool/prompt.ts +2 -0
  216. package/src/tools.ts +63 -0
  217. package/src/types/PermissionMode.ts +120 -0
  218. package/src/types/RequestContext.ts +72 -0
  219. package/src/types/conversation.ts +51 -0
  220. package/src/types/logs.ts +58 -0
  221. package/src/types/modelCapabilities.ts +64 -0
  222. package/src/types/notebook.ts +87 -0
  223. package/src/utils/Cursor.ts +436 -0
  224. package/src/utils/PersistentShell.ts +373 -0
  225. package/src/utils/advancedFuzzyMatcher.ts +290 -0
  226. package/src/utils/agentLoader.ts +284 -0
  227. package/src/utils/agentStorage.ts +97 -0
  228. package/src/utils/array.ts +3 -0
  229. package/src/utils/ask.tsx +99 -0
  230. package/src/utils/auth.ts +13 -0
  231. package/src/utils/autoCompactCore.ts +223 -0
  232. package/src/utils/autoUpdater.ts +318 -0
  233. package/src/utils/betas.ts +20 -0
  234. package/src/utils/browser.ts +14 -0
  235. package/src/utils/cleanup.ts +72 -0
  236. package/src/utils/commands.ts +261 -0
  237. package/src/utils/commonUnixCommands.ts +161 -0
  238. package/src/utils/config.ts +942 -0
  239. package/src/utils/conversationRecovery.ts +55 -0
  240. package/src/utils/debugLogger.ts +1123 -0
  241. package/src/utils/diff.ts +42 -0
  242. package/src/utils/env.ts +57 -0
  243. package/src/utils/errors.ts +21 -0
  244. package/src/utils/exampleCommands.ts +109 -0
  245. package/src/utils/execFileNoThrow.ts +51 -0
  246. package/src/utils/expertChatStorage.ts +136 -0
  247. package/src/utils/file.ts +402 -0
  248. package/src/utils/fileRecoveryCore.ts +71 -0
  249. package/src/utils/format.tsx +44 -0
  250. package/src/utils/fuzzyMatcher.ts +328 -0
  251. package/src/utils/generators.ts +62 -0
  252. package/src/utils/git.ts +92 -0
  253. package/src/utils/globalLogger.ts +77 -0
  254. package/src/utils/http.ts +10 -0
  255. package/src/utils/imagePaste.ts +38 -0
  256. package/src/utils/json.ts +13 -0
  257. package/src/utils/log.ts +382 -0
  258. package/src/utils/markdown.ts +213 -0
  259. package/src/utils/messageContextManager.ts +289 -0
  260. package/src/utils/messages.tsx +939 -0
  261. package/src/utils/model.ts +836 -0
  262. package/src/utils/permissions/filesystem.ts +118 -0
  263. package/src/utils/responseState.ts +23 -0
  264. package/src/utils/ripgrep.ts +167 -0
  265. package/src/utils/secureFile.ts +559 -0
  266. package/src/utils/sessionState.ts +49 -0
  267. package/src/utils/state.ts +25 -0
  268. package/src/utils/style.ts +29 -0
  269. package/src/utils/terminal.ts +50 -0
  270. package/src/utils/theme.ts +133 -0
  271. package/src/utils/thinking.ts +144 -0
  272. package/src/utils/todoStorage.ts +431 -0
  273. package/src/utils/tokens.ts +43 -0
  274. package/src/utils/toolExecutionController.ts +163 -0
  275. package/src/utils/unaryLogging.ts +26 -0
  276. package/src/utils/user.ts +37 -0
  277. package/src/utils/validate.ts +165 -0
  278. package/cli.mjs +0 -1803
@@ -0,0 +1,69 @@
1
+ import * as React from 'react'
2
+ import { Box, Text } from 'ink'
3
+ import { getTheme } from '../../utils/theme'
4
+
5
+ export type RiskScoreCategory = 'low' | 'moderate' | 'high'
6
+
7
+ export function categoryForRiskScore(riskScore: number): RiskScoreCategory {
8
+ return riskScore >= 70 ? 'high' : riskScore >= 30 ? 'moderate' : 'low'
9
+ }
10
+
11
+ function colorSchemeForRiskScoreCategory(category: RiskScoreCategory): {
12
+ highlightColor: string
13
+ textColor: string
14
+ } {
15
+ const theme = getTheme()
16
+ switch (category) {
17
+ case 'low':
18
+ return {
19
+ highlightColor: theme.success,
20
+ textColor: theme.permission,
21
+ }
22
+ case 'moderate':
23
+ return {
24
+ highlightColor: theme.warning,
25
+ textColor: theme.warning,
26
+ }
27
+ case 'high':
28
+ return {
29
+ highlightColor: theme.error,
30
+ textColor: theme.error,
31
+ }
32
+ }
33
+ }
34
+
35
+ export function textColorForRiskScore(riskScore: number | null): string {
36
+ if (riskScore === null) {
37
+ return getTheme().permission
38
+ }
39
+ const category = categoryForRiskScore(riskScore)
40
+ return colorSchemeForRiskScoreCategory(category).textColor
41
+ }
42
+
43
+ export function PermissionRiskScore({
44
+ riskScore,
45
+ }: {
46
+ riskScore: number
47
+ }): React.ReactNode {
48
+ const category = categoryForRiskScore(riskScore)
49
+ return <Text color={textColorForRiskScore(riskScore)}>Risk: {category}</Text>
50
+ }
51
+
52
+ type Props = {
53
+ title: string
54
+ riskScore: number | null
55
+ }
56
+
57
+ export function PermissionRequestTitle({
58
+ title,
59
+ riskScore,
60
+ }: Props): React.ReactNode {
61
+ return (
62
+ <Box flexDirection="column">
63
+ <Text bold color={getTheme().permission}>
64
+ {title}
65
+ </Text>
66
+ {riskScore !== null && <PermissionRiskScore riskScore={riskScore} />}
67
+ </Box>
68
+ )
69
+ }
@@ -0,0 +1,44 @@
1
+ import { useEffect } from 'react'
2
+ import { logUnaryEvent, CompletionType } from '../../utils/unaryLogging'
3
+ import { ToolUseConfirm } from '../../components/permissions/PermissionRequest'
4
+ import { env } from '../../utils/env'
5
+ import { logEvent } from '../../services/statsig'
6
+
7
+ type UnaryEventType = {
8
+ completion_type: CompletionType
9
+ language_name: string | Promise<string>
10
+ }
11
+
12
+ /**
13
+ * Logs permission request events using Statsig and unary logging.
14
+ * Handles both the Statsig event and the unary event logging.
15
+ * Can handle either a string or Promise<string> for language_name.
16
+ */
17
+ export function usePermissionRequestLogging(
18
+ toolUseConfirm: ToolUseConfirm,
19
+ unaryEvent: UnaryEventType,
20
+ ): void {
21
+ useEffect(() => {
22
+ // Log Statsig event
23
+ logEvent('tengu_tool_use_show_permission_request', {
24
+ messageID: toolUseConfirm.assistantMessage.message.id,
25
+ toolName: toolUseConfirm.tool.name,
26
+ })
27
+
28
+ // Handle string or Promise language name
29
+ const languagePromise = Promise.resolve(unaryEvent.language_name)
30
+
31
+ // Log unary event once language is resolved
32
+ languagePromise.then(language => {
33
+ logUnaryEvent({
34
+ completion_type: unaryEvent.completion_type,
35
+ event: 'response',
36
+ metadata: {
37
+ language_name: language,
38
+ message_id: toolUseConfirm.assistantMessage.message.id,
39
+ platform: env.platform,
40
+ },
41
+ })
42
+ })
43
+ }, [toolUseConfirm, unaryEvent])
44
+ }
@@ -0,0 +1,59 @@
1
+ import { type Option } from '@inkjs/ui'
2
+ import chalk from 'chalk'
3
+ import {
4
+ type ToolUseConfirm,
5
+ toolUseConfirmGetPrefix,
6
+ } from './PermissionRequest.js'
7
+ import { isUnsafeCompoundCommand } from '../../utils/commands'
8
+ import { getCwd } from '../../utils/state'
9
+ import { getTheme } from '../../utils/theme'
10
+ import { type OptionSubtree } from '../CustomSelect/select'
11
+
12
+ /**
13
+ * Generates options for the tool use confirmation dialog
14
+ */
15
+ export function toolUseOptions({
16
+ toolUseConfirm,
17
+ command,
18
+ }: {
19
+ toolUseConfirm: ToolUseConfirm
20
+ command: string
21
+ }): (Option | OptionSubtree)[] {
22
+ // Hide "don't ask again" options if the command is an unsafe compound command, or a potential command injection
23
+ const showDontAskAgainOption =
24
+ !isUnsafeCompoundCommand(command) &&
25
+ toolUseConfirm.commandPrefix &&
26
+ !toolUseConfirm.commandPrefix.commandInjectionDetected
27
+ const prefix = toolUseConfirmGetPrefix(toolUseConfirm)
28
+ const showDontAskAgainPrefixOption = showDontAskAgainOption && prefix !== null
29
+
30
+ let dontShowAgainOptions: (Option | OptionSubtree)[] = []
31
+ if (showDontAskAgainPrefixOption) {
32
+ // Prefix option takes precedence over full command option
33
+ dontShowAgainOptions = [
34
+ {
35
+ label: `Yes, and don't ask again for ${chalk.bold(prefix)} commands in ${chalk.bold(getCwd())}`,
36
+ value: 'yes-dont-ask-again-prefix',
37
+ },
38
+ ]
39
+ } else if (showDontAskAgainOption) {
40
+ dontShowAgainOptions = [
41
+ {
42
+ label: `Yes, and don't ask again for ${chalk.bold(command)} commands in ${chalk.bold(getCwd())}`,
43
+ value: 'yes-dont-ask-again-full',
44
+ },
45
+ ]
46
+ }
47
+
48
+ return [
49
+ {
50
+ label: 'Yes',
51
+ value: 'yes',
52
+ },
53
+ ...dontShowAgainOptions,
54
+ {
55
+ label: `No, and provide instructions (${chalk.bold.hex(getTheme().warning)('esc')})`,
56
+ value: 'no',
57
+ },
58
+ ]
59
+ }
@@ -0,0 +1,23 @@
1
+ import { env } from '../../utils/env'
2
+ import { CompletionType, logUnaryEvent } from '../../utils/unaryLogging'
3
+ import { ToolUseConfirm } from './PermissionRequest'
4
+
5
+ export function logUnaryPermissionEvent(
6
+ completion_type: CompletionType,
7
+ {
8
+ assistantMessage: {
9
+ message: { id: message_id },
10
+ },
11
+ }: ToolUseConfirm,
12
+ event: 'accept' | 'reject',
13
+ ): void {
14
+ logUnaryEvent({
15
+ completion_type,
16
+ event,
17
+ metadata: {
18
+ language_name: 'none',
19
+ message_id,
20
+ platform: env.platform,
21
+ },
22
+ })
23
+ }
@@ -0,0 +1,5 @@
1
+ export const GATE_TOKEN_EFFICIENT_TOOLS = 'tengu-token-efficient-tools'
2
+ export const BETA_HEADER_TOKEN_EFFICIENT_TOOLS =
3
+ 'token-efficient-tools-2024-12-11'
4
+ export const GATE_USE_EXTERNAL_UPDATER = 'tengu-use-external-updater'
5
+ export const CLAUDE_CODE_20250219_BETA_HEADER = 'claude-code-20250219'
@@ -0,0 +1,238 @@
1
+ export const largeAnimatedAray = [
2
+ `
3
+ .=#*=. :==.
4
+ -%%%%=. .#%#=
5
+ .=%%%#= :%%#: -=+-
6
+ ... .=%%%*- =@%+ :+%%%%.
7
+ :*%%+= .=%%%*- +%%= .=%%%%%=
8
+ .=#%%%#=..=#%%*: *%#:-*%%%%+:
9
+ .=*%%%%+==#%%+.%%+=#%%%%=.
10
+ :=#%%%##%%%*%%%%%%%*- .
11
+ -=#%%%%%%%%%%%%+-====+*%%%+.
12
+ .============-=*%%%%%%%%%%%%%%%%#+===:
13
+ =======+++****%%%%%%%%%%#+==:.
14
+ -=*%%%%%%%%%*+#%%%%%%%#*=.
15
+ .=+#%#++#%%%%%%%%+-..-==+*##=.
16
+ .=+%%%+=-+%#=*%+%%%##%+:
17
+ .+%%%*=. =*%+:-%%:=#%#==#%+:
18
+ .=+=. .=%%=. +%#. -*%%=:=*%+-
19
+ -*%#= .#%* :*%%+: :=*.
20
+ .=%%=. =%%= .=%%=.
21
+ :=. +%%= .-=:
22
+ =#+.
23
+ `,
24
+ `
25
+ .=*+=. .==.
26
+ -####=. .*#*=
27
+ .=###*- :##*: -==-
28
+ ... .=###+- =%#+ :+####.
29
+ .+##+- .=###+: =##= .=*####-
30
+ .=*###*=..=*##+. +#*::+####=.
31
+ .=+###*=-=*##+.*#==*###*=.
32
+ .=*###**###+#######+-
33
+ :=*############+--====*###=.
34
+ .===========--=+################*+===.
35
+ -=========++++##########*+==.
36
+ :=*#########*+*#######*+=.
37
+ .==*#*==*########=-..-===+**=.
38
+ .==*##+=:=#*-*#+###**#+:
39
+ .=###+=. -+#+::##:=*#*==*#=:
40
+ .===. .=##=. =#*. -+#*=:=+#=-
41
+ -+#*= .*#+ :+##+: :=*.
42
+ =#*=. =##= .=##=.
43
+ :=. =##= -=:
44
+ =*+.
45
+ `,
46
+ `
47
+ .=+==. .=-.
48
+ :****= .+*+=
49
+ .=***+- :**+: -==:
50
+ ... .=***+: -**= :=****.
51
+ .+**=- .=***=: =**= .=*****-
52
+ .=+***+=..=+**=. =*+.:=****=.
53
+ ==****=-=+**=.**==+****=.
54
+ .=+***++***+*******=:
55
+ :=+************=:-====+***=.
56
+ .==========--:-+****************+====.
57
+ -============+**********+==-.
58
+ :=+*********+=+*******+==.
59
+ .-=+*+==+********=:..:====++=.
60
+ ==***=-:=*+-+*=***++*=:
61
+ .=***+=. -+*=::**.-+*+==+*=:
62
+ .===. .=**=. =*+. :+**=.=+*=-
63
+ :+*+- .+*+ :=**=: :=+.
64
+ =**=. -**= .=**=.
65
+ :-. =**- :=.
66
+ =+=.
67
+ `,
68
+ `
69
+ .===-. .=-.
70
+ :++++= =+=-
71
+ .=+++=: .++=: :==:
72
+ .. .=+++=: -++= :=++++
73
+ .=++=: .=+++=: =++= .=+++++:
74
+ .==+++==..==++=. =+=.:=++++=.
75
+ -=++++=--=++=.++=-=++++=.
76
+ .==+++==+++=+++++++=:
77
+ :==++++++++++++=::=====+++=.
78
+ .-====---=---:-=++++++++++++++++====-.
79
+ :=============++++++++++===-.
80
+ :==+++++++++===+++++++==-.
81
+ .-==+===+++++++++=: .:=======.
82
+ -=+++=-:=+=:=+=+++==+=:
83
+ .=+++==. :=+=::++.-=+====+=.
84
+ ===. .=++=. =++. :=++=.-=+=:
85
+ :=+=- .++= :=++=. .==.
86
+ -++=. -++= .=++=.
87
+ .-. =++- :-.
88
+ -==.
89
+ `,
90
+ `
91
+ .===-. .-:
92
+ :====- ===-
93
+ .-====: .===. :==:
94
+ .. .-====: :=== .=====
95
+ .====: .-====. ===- .-=====:
96
+ -=====-..-====. ===..======.
97
+ -======:-====.===:=====-.
98
+ .-==================:
99
+ .===============::-========.
100
+ .-=---------:::=====================-.
101
+ :=-========================:.
102
+ .=======================-.
103
+ :================: .:-=====-.
104
+ -=====:.===:==========.
105
+ .=====-. :===.:==.:===--===.
106
+ -=-. .===-. === :====.-===:
107
+ :===: .=== .====. .==
108
+ -==-. :=== .====.
109
+ .:. ===: ::.
110
+ -==.
111
+ `,
112
+ `
113
+ .-==: .-:
114
+ .====: ===:
115
+ :====: .===. .--.
116
+ . .-====. :=== .-====
117
+ .====. :====. -==: .:=====:
118
+ -=====-. :====. ===..=====-.
119
+ :======::====.==-:=====:
120
+ .-==================.
121
+ .-=============-..:---====-.
122
+ .:-------::::.:===================--:.
123
+ .---------===============--:.
124
+ .-======================:
125
+ :-===--==========. ..:--===-.
126
+ :=====:.-==:==-=======.
127
+ .-====:. .===..==.:===::==-.
128
+ --:. .-==-. -== .===-.:==-.
129
+ .===: === .====. .-=
130
+ :==-. :==- .-==-.
131
+ .:. -==: .:.
132
+ :==
133
+ `,
134
+ `
135
+ :--: .:.
136
+ .===-: -=-.
137
+ :===-. .==-. .::.
138
+ . :-==-. .==: .:-===
139
+ .-==:. :-==-. :=-: :-===-.
140
+ :-===-:. :-==-. -=-..-====:.
141
+ .-===-:.:-==:.-=:.-===-:
142
+ .:-===---==:-==-=-=-.
143
+ .:-===========-:..::::--==-.
144
+ .:::::::::....--========-======-:::..
145
+ .:::::::::-----========--::..
146
+ .:--====-------=======--.
147
+ .:-=-::---==--=-:. .:::---:.
148
+ .:-=-:..:--.-=:-=---=-.
149
+ :===-:. .-=-..==..-=-::-=:.
150
+ :::. .:=-: :=- .-=-:.:---.
151
+ .-=-. -=- .-==-. .:-
152
+ :=-:. .-=: .:-=:.
153
+ ... :==. ...
154
+ .--
155
+ `,
156
+ `
157
+ .::. ..
158
+ .::::. :::.
159
+ .::::. :::. ....
160
+ .::::. .::. ..::::
161
+ :::.. .:::.. .::. .:::::.
162
+ .:::::. .:::. .:: ..::::.
163
+ ..::::...:::. ::..:::::.
164
+ .:::::::::.:::::::..
165
+ ..:::::::::::::.......::::.
166
+ ..............::::::::::::::::::....
167
+ ...........::::::::::::::...
168
+ ..:::::::::::.::::::::::.
169
+ ..:::..:::::::::.. .....::.
170
+ ..:::....::.::.::::::..
171
+ .::::. .::...:: .:::..::.
172
+ ... .::. .:: .:::. .::..
173
+ .:::. ::. ..::. .:
174
+ .::. .::. .::.
175
+ . .::. ..
176
+ .:.
177
+ `,
178
+ `
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+ `,
200
+ ]
201
+
202
+ export const smallAnimatedArray = [
203
+ ` @
204
+ @ @ @
205
+ @@@
206
+ @ @ @
207
+ @`,
208
+ ` *
209
+ * * *
210
+ ***
211
+ * * *
212
+ *`,
213
+ ` +
214
+ + + +
215
+ +++
216
+ + + +
217
+ +`,
218
+ ` /
219
+ / / /
220
+ ///
221
+ / / /
222
+ /`,
223
+ ` |
224
+ | | |
225
+ |||
226
+ | | |
227
+ |`,
228
+ ` \\
229
+ \\ \\ \\
230
+ \\\\\\
231
+ \\ \\ \\
232
+ \\`,
233
+ ` -
234
+ - - -
235
+ ---
236
+ - - -
237
+ -`,
238
+ ]
@@ -0,0 +1,4 @@
1
+ import { env } from '../utils/env'
2
+
3
+ // The former is better vertically aligned, but isn't usually supported on Windows/Linux
4
+ export const BLACK_CIRCLE = env.platform === 'macos' ? '⏺' : '●'
@@ -0,0 +1,3 @@
1
+ export const SENTRY_DSN = ''
2
+
3
+ export const STATSIG_CLIENT_KEY = ''
@@ -0,0 +1,8 @@
1
+ import { version } from '../../package.json'
2
+
3
+ export const MACRO = {
4
+ VERSION: version,
5
+ README_URL: 'https://docs.anthropic.com/s/claude-code',
6
+ PACKAGE_URL: '@shareai-lab/kode',
7
+ ISSUES_EXPLAINER: 'report the issue at https://github.com/shareAI-lab/kode/issues',
8
+ }
@@ -0,0 +1,179 @@
1
+ import { ModelCapabilities } from '../types/modelCapabilities'
2
+
3
+ // GPT-5 standard capability definition
4
+ const GPT5_CAPABILITIES: ModelCapabilities = {
5
+ apiArchitecture: {
6
+ primary: 'responses_api',
7
+ fallback: 'chat_completions'
8
+ },
9
+ parameters: {
10
+ maxTokensField: 'max_completion_tokens',
11
+ supportsReasoningEffort: true,
12
+ supportsVerbosity: true,
13
+ temperatureMode: 'fixed_one'
14
+ },
15
+ toolCalling: {
16
+ mode: 'custom_tools',
17
+ supportsFreeform: true,
18
+ supportsAllowedTools: true,
19
+ supportsParallelCalls: true
20
+ },
21
+ stateManagement: {
22
+ supportsResponseId: true,
23
+ supportsConversationChaining: true,
24
+ supportsPreviousResponseId: true
25
+ },
26
+ streaming: {
27
+ supported: false, // Responses API doesn't support streaming yet
28
+ includesUsage: true
29
+ }
30
+ }
31
+
32
+ // Chat Completions standard capability definition
33
+ const CHAT_COMPLETIONS_CAPABILITIES: ModelCapabilities = {
34
+ apiArchitecture: {
35
+ primary: 'chat_completions'
36
+ },
37
+ parameters: {
38
+ maxTokensField: 'max_tokens',
39
+ supportsReasoningEffort: false,
40
+ supportsVerbosity: false,
41
+ temperatureMode: 'flexible'
42
+ },
43
+ toolCalling: {
44
+ mode: 'function_calling',
45
+ supportsFreeform: false,
46
+ supportsAllowedTools: false,
47
+ supportsParallelCalls: true
48
+ },
49
+ stateManagement: {
50
+ supportsResponseId: false,
51
+ supportsConversationChaining: false,
52
+ supportsPreviousResponseId: false
53
+ },
54
+ streaming: {
55
+ supported: true,
56
+ includesUsage: true
57
+ }
58
+ }
59
+
60
+ // Complete model capability mapping table
61
+ export const MODEL_CAPABILITIES_REGISTRY: Record<string, ModelCapabilities> = {
62
+ // GPT-5 series
63
+ 'gpt-5': GPT5_CAPABILITIES,
64
+ 'gpt-5-mini': GPT5_CAPABILITIES,
65
+ 'gpt-5-nano': GPT5_CAPABILITIES,
66
+ 'gpt-5-chat-latest': GPT5_CAPABILITIES,
67
+
68
+ // GPT-4 series
69
+ 'gpt-4o': CHAT_COMPLETIONS_CAPABILITIES,
70
+ 'gpt-4o-mini': CHAT_COMPLETIONS_CAPABILITIES,
71
+ 'gpt-4-turbo': CHAT_COMPLETIONS_CAPABILITIES,
72
+ 'gpt-4': CHAT_COMPLETIONS_CAPABILITIES,
73
+
74
+ // Claude series (supported through conversion layer)
75
+ 'claude-3-5-sonnet-20241022': CHAT_COMPLETIONS_CAPABILITIES,
76
+ 'claude-3-5-haiku-20241022': CHAT_COMPLETIONS_CAPABILITIES,
77
+ 'claude-3-opus-20240229': CHAT_COMPLETIONS_CAPABILITIES,
78
+
79
+ // O1 series (special reasoning models)
80
+ 'o1': {
81
+ ...CHAT_COMPLETIONS_CAPABILITIES,
82
+ parameters: {
83
+ ...CHAT_COMPLETIONS_CAPABILITIES.parameters,
84
+ maxTokensField: 'max_completion_tokens',
85
+ temperatureMode: 'fixed_one'
86
+ }
87
+ },
88
+ 'o1-mini': {
89
+ ...CHAT_COMPLETIONS_CAPABILITIES,
90
+ parameters: {
91
+ ...CHAT_COMPLETIONS_CAPABILITIES.parameters,
92
+ maxTokensField: 'max_completion_tokens',
93
+ temperatureMode: 'fixed_one'
94
+ }
95
+ },
96
+ 'o1-preview': {
97
+ ...CHAT_COMPLETIONS_CAPABILITIES,
98
+ parameters: {
99
+ ...CHAT_COMPLETIONS_CAPABILITIES.parameters,
100
+ maxTokensField: 'max_completion_tokens',
101
+ temperatureMode: 'fixed_one'
102
+ }
103
+ }
104
+ }
105
+
106
+ // Intelligently infer capabilities for unregistered models
107
+ export function inferModelCapabilities(modelName: string): ModelCapabilities | null {
108
+ if (!modelName) return null
109
+
110
+ const lowerName = modelName.toLowerCase()
111
+
112
+ // GPT-5 series
113
+ if (lowerName.includes('gpt-5') || lowerName.includes('gpt5')) {
114
+ return GPT5_CAPABILITIES
115
+ }
116
+
117
+ // GPT-6 series (reserved for future)
118
+ if (lowerName.includes('gpt-6') || lowerName.includes('gpt6')) {
119
+ return {
120
+ ...GPT5_CAPABILITIES,
121
+ streaming: { supported: true, includesUsage: true }
122
+ }
123
+ }
124
+
125
+ // GLM series
126
+ if (lowerName.includes('glm-5') || lowerName.includes('glm5')) {
127
+ return {
128
+ ...GPT5_CAPABILITIES,
129
+ toolCalling: {
130
+ ...GPT5_CAPABILITIES.toolCalling,
131
+ supportsAllowedTools: false // GLM might not support this
132
+ }
133
+ }
134
+ }
135
+
136
+ // O1 series
137
+ if (lowerName.startsWith('o1') || lowerName.includes('o1-')) {
138
+ return {
139
+ ...CHAT_COMPLETIONS_CAPABILITIES,
140
+ parameters: {
141
+ ...CHAT_COMPLETIONS_CAPABILITIES.parameters,
142
+ maxTokensField: 'max_completion_tokens',
143
+ temperatureMode: 'fixed_one'
144
+ }
145
+ }
146
+ }
147
+
148
+ // Default to null, let system use default behavior
149
+ return null
150
+ }
151
+
152
+ // Get model capabilities (with caching)
153
+ const capabilityCache = new Map<string, ModelCapabilities>()
154
+
155
+ export function getModelCapabilities(modelName: string): ModelCapabilities {
156
+ // Check cache
157
+ if (capabilityCache.has(modelName)) {
158
+ return capabilityCache.get(modelName)!
159
+ }
160
+
161
+ // Look up in registry
162
+ if (MODEL_CAPABILITIES_REGISTRY[modelName]) {
163
+ const capabilities = MODEL_CAPABILITIES_REGISTRY[modelName]
164
+ capabilityCache.set(modelName, capabilities)
165
+ return capabilities
166
+ }
167
+
168
+ // Try to infer
169
+ const inferred = inferModelCapabilities(modelName)
170
+ if (inferred) {
171
+ capabilityCache.set(modelName, inferred)
172
+ return inferred
173
+ }
174
+
175
+ // Default to Chat Completions
176
+ const defaultCapabilities = CHAT_COMPLETIONS_CAPABILITIES
177
+ capabilityCache.set(modelName, defaultCapabilities)
178
+ return defaultCapabilities
179
+ }