turboflux 1.0.0

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 (490) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +177 -0
  3. package/bin/turboflux.mjs +28 -0
  4. package/dist/cli/brand.d.ts +7 -0
  5. package/dist/cli/brand.js +33 -0
  6. package/dist/cli/brand.js.map +1 -0
  7. package/dist/cli/commands/index.d.ts +4 -0
  8. package/dist/cli/commands/index.js +671 -0
  9. package/dist/cli/commands/index.js.map +1 -0
  10. package/dist/cli/commands/registry.d.ts +24 -0
  11. package/dist/cli/commands/registry.js +124 -0
  12. package/dist/cli/commands/registry.js.map +1 -0
  13. package/dist/cli/commands/types.d.ts +69 -0
  14. package/dist/cli/commands/types.js +2 -0
  15. package/dist/cli/commands/types.js.map +1 -0
  16. package/dist/cli/components/App.d.ts +15 -0
  17. package/dist/cli/components/App.js +1738 -0
  18. package/dist/cli/components/App.js.map +1 -0
  19. package/dist/cli/components/ConversationHistory.d.ts +15 -0
  20. package/dist/cli/components/ConversationHistory.js +92 -0
  21. package/dist/cli/components/ConversationHistory.js.map +1 -0
  22. package/dist/cli/components/TranscriptViewport.d.ts +25 -0
  23. package/dist/cli/components/TranscriptViewport.js +77 -0
  24. package/dist/cli/components/TranscriptViewport.js.map +1 -0
  25. package/dist/cli/components/agentActivityModel.d.ts +24 -0
  26. package/dist/cli/components/agentActivityModel.js +45 -0
  27. package/dist/cli/components/agentActivityModel.js.map +1 -0
  28. package/dist/cli/components/appHelpers.d.ts +34 -0
  29. package/dist/cli/components/appHelpers.js +209 -0
  30. package/dist/cli/components/appHelpers.js.map +1 -0
  31. package/dist/cli/components/design-system/StatusIcon.d.ts +5 -0
  32. package/dist/cli/components/design-system/StatusIcon.js +25 -0
  33. package/dist/cli/components/design-system/StatusIcon.js.map +1 -0
  34. package/dist/cli/components/developerFlowModel.d.ts +36 -0
  35. package/dist/cli/components/developerFlowModel.js +88 -0
  36. package/dist/cli/components/developerFlowModel.js.map +1 -0
  37. package/dist/cli/components/diff/DiffCard.d.ts +16 -0
  38. package/dist/cli/components/diff/DiffCard.js +30 -0
  39. package/dist/cli/components/diff/DiffCard.js.map +1 -0
  40. package/dist/cli/components/diff/DiffHunks.d.ts +11 -0
  41. package/dist/cli/components/diff/DiffHunks.js +58 -0
  42. package/dist/cli/components/diff/DiffHunks.js.map +1 -0
  43. package/dist/cli/components/header/Header.d.ts +13 -0
  44. package/dist/cli/components/header/Header.js +25 -0
  45. package/dist/cli/components/header/Header.js.map +1 -0
  46. package/dist/cli/components/header/Mascot.d.ts +4 -0
  47. package/dist/cli/components/header/Mascot.js +53 -0
  48. package/dist/cli/components/header/Mascot.js.map +1 -0
  49. package/dist/cli/components/header/StatusLine.d.ts +21 -0
  50. package/dist/cli/components/header/StatusLine.js +110 -0
  51. package/dist/cli/components/header/StatusLine.js.map +1 -0
  52. package/dist/cli/components/input/EffortPicker.d.ts +30 -0
  53. package/dist/cli/components/input/EffortPicker.js +126 -0
  54. package/dist/cli/components/input/EffortPicker.js.map +1 -0
  55. package/dist/cli/components/input/ModelPicker.d.ts +15 -0
  56. package/dist/cli/components/input/ModelPicker.js +95 -0
  57. package/dist/cli/components/input/ModelPicker.js.map +1 -0
  58. package/dist/cli/components/input/PromptInput.d.ts +79 -0
  59. package/dist/cli/components/input/PromptInput.js +496 -0
  60. package/dist/cli/components/input/PromptInput.js.map +1 -0
  61. package/dist/cli/components/input/RewindSelector.d.ts +8 -0
  62. package/dist/cli/components/input/RewindSelector.js +45 -0
  63. package/dist/cli/components/input/RewindSelector.js.map +1 -0
  64. package/dist/cli/components/input/pasteState.d.ts +6 -0
  65. package/dist/cli/components/input/pasteState.js +42 -0
  66. package/dist/cli/components/input/pasteState.js.map +1 -0
  67. package/dist/cli/components/input/terminalInputStateMachine.d.ts +29 -0
  68. package/dist/cli/components/input/terminalInputStateMachine.js +67 -0
  69. package/dist/cli/components/input/terminalInputStateMachine.js.map +1 -0
  70. package/dist/cli/components/layout/CockpitRails.d.ts +6 -0
  71. package/dist/cli/components/layout/CockpitRails.js +13 -0
  72. package/dist/cli/components/layout/CockpitRails.js.map +1 -0
  73. package/dist/cli/components/layout/LandingView.d.ts +15 -0
  74. package/dist/cli/components/layout/LandingView.js +12 -0
  75. package/dist/cli/components/layout/LandingView.js.map +1 -0
  76. package/dist/cli/components/layout/SessionSidebar.d.ts +18 -0
  77. package/dist/cli/components/layout/SessionSidebar.js +70 -0
  78. package/dist/cli/components/layout/SessionSidebar.js.map +1 -0
  79. package/dist/cli/components/layout/StartupAnimation.d.ts +14 -0
  80. package/dist/cli/components/layout/StartupAnimation.js +30 -0
  81. package/dist/cli/components/layout/StartupAnimation.js.map +1 -0
  82. package/dist/cli/components/markdown/highlighter.d.ts +1 -0
  83. package/dist/cli/components/markdown/highlighter.js +110 -0
  84. package/dist/cli/components/markdown/highlighter.js.map +1 -0
  85. package/dist/cli/components/markdown/index.d.ts +11 -0
  86. package/dist/cli/components/markdown/index.js +86 -0
  87. package/dist/cli/components/markdown/index.js.map +1 -0
  88. package/dist/cli/components/messages/MessageList.d.ts +16 -0
  89. package/dist/cli/components/messages/MessageList.js +56 -0
  90. package/dist/cli/components/messages/MessageList.js.map +1 -0
  91. package/dist/cli/components/messages/Messages.d.ts +26 -0
  92. package/dist/cli/components/messages/Messages.js +32 -0
  93. package/dist/cli/components/messages/Messages.js.map +1 -0
  94. package/dist/cli/components/messages/ThinkingBlock.d.ts +9 -0
  95. package/dist/cli/components/messages/ThinkingBlock.js +51 -0
  96. package/dist/cli/components/messages/ThinkingBlock.js.map +1 -0
  97. package/dist/cli/components/messages/WindowedMessageList.d.ts +21 -0
  98. package/dist/cli/components/messages/WindowedMessageList.js +44 -0
  99. package/dist/cli/components/messages/WindowedMessageList.js.map +1 -0
  100. package/dist/cli/components/permissions/PermissionDialog.d.ts +23 -0
  101. package/dist/cli/components/permissions/PermissionDialog.js +83 -0
  102. package/dist/cli/components/permissions/PermissionDialog.js.map +1 -0
  103. package/dist/cli/components/spinner/SpinnerGlyph.d.ts +6 -0
  104. package/dist/cli/components/spinner/SpinnerGlyph.js +55 -0
  105. package/dist/cli/components/spinner/SpinnerGlyph.js.map +1 -0
  106. package/dist/cli/components/spinner/constants.d.ts +4 -0
  107. package/dist/cli/components/spinner/constants.js +5 -0
  108. package/dist/cli/components/spinner/constants.js.map +1 -0
  109. package/dist/cli/components/tools/ActiveWorkPanel.d.ts +22 -0
  110. package/dist/cli/components/tools/ActiveWorkPanel.js +70 -0
  111. package/dist/cli/components/tools/ActiveWorkPanel.js.map +1 -0
  112. package/dist/cli/components/tools/AgentActivityLine.d.ts +13 -0
  113. package/dist/cli/components/tools/AgentActivityLine.js +88 -0
  114. package/dist/cli/components/tools/AgentActivityLine.js.map +1 -0
  115. package/dist/cli/components/tools/QueuedPromptList.d.ts +10 -0
  116. package/dist/cli/components/tools/QueuedPromptList.js +26 -0
  117. package/dist/cli/components/tools/QueuedPromptList.js.map +1 -0
  118. package/dist/cli/components/tools/TaskFlowHud.d.ts +15 -0
  119. package/dist/cli/components/tools/TaskFlowHud.js +55 -0
  120. package/dist/cli/components/tools/TaskFlowHud.js.map +1 -0
  121. package/dist/cli/components/tools/TerminalSessionsFooter.d.ts +6 -0
  122. package/dist/cli/components/tools/TerminalSessionsFooter.js +36 -0
  123. package/dist/cli/components/tools/TerminalSessionsFooter.js.map +1 -0
  124. package/dist/cli/components/tools/ToolActivityList.d.ts +11 -0
  125. package/dist/cli/components/tools/ToolActivityList.js +73 -0
  126. package/dist/cli/components/tools/ToolActivityList.js.map +1 -0
  127. package/dist/cli/components/tools/ToolCallTree.d.ts +11 -0
  128. package/dist/cli/components/tools/ToolCallTree.js +14 -0
  129. package/dist/cli/components/tools/ToolCallTree.js.map +1 -0
  130. package/dist/cli/components/tools/toolLifecycleModel.d.ts +16 -0
  131. package/dist/cli/components/tools/toolLifecycleModel.js +30 -0
  132. package/dist/cli/components/tools/toolLifecycleModel.js.map +1 -0
  133. package/dist/cli/components/tools/toolPresentation.d.ts +9 -0
  134. package/dist/cli/components/tools/toolPresentation.js +171 -0
  135. package/dist/cli/components/tools/toolPresentation.js.map +1 -0
  136. package/dist/cli/components/tools/toolTypes.d.ts +16 -0
  137. package/dist/cli/components/tools/toolTypes.js +2 -0
  138. package/dist/cli/components/tools/toolTypes.js.map +1 -0
  139. package/dist/cli/components/transcriptWindowing.d.ts +19 -0
  140. package/dist/cli/components/transcriptWindowing.js +81 -0
  141. package/dist/cli/components/transcriptWindowing.js.map +1 -0
  142. package/dist/cli/config.d.ts +1 -0
  143. package/dist/cli/config.js +2 -0
  144. package/dist/cli/config.js.map +1 -0
  145. package/dist/cli/conversations/journalWriter.d.ts +50 -0
  146. package/dist/cli/conversations/journalWriter.js +191 -0
  147. package/dist/cli/conversations/journalWriter.js.map +1 -0
  148. package/dist/cli/conversations/manager.d.ts +65 -0
  149. package/dist/cli/conversations/manager.js +435 -0
  150. package/dist/cli/conversations/manager.js.map +1 -0
  151. package/dist/cli/conversations/recoveryExport.d.ts +18 -0
  152. package/dist/cli/conversations/recoveryExport.js +39 -0
  153. package/dist/cli/conversations/recoveryExport.js.map +1 -0
  154. package/dist/cli/conversations/recoveryMessages.d.ts +2 -0
  155. package/dist/cli/conversations/recoveryMessages.js +3 -0
  156. package/dist/cli/conversations/recoveryMessages.js.map +1 -0
  157. package/dist/cli/conversations/store.d.ts +14 -0
  158. package/dist/cli/conversations/store.js +603 -0
  159. package/dist/cli/conversations/store.js.map +1 -0
  160. package/dist/cli/conversations/types.d.ts +142 -0
  161. package/dist/cli/conversations/types.js +2 -0
  162. package/dist/cli/conversations/types.js.map +1 -0
  163. package/dist/cli/globalConfiguration.d.ts +13 -0
  164. package/dist/cli/globalConfiguration.js +61 -0
  165. package/dist/cli/globalConfiguration.js.map +1 -0
  166. package/dist/cli/hooks/useMessageCursor.d.ts +16 -0
  167. package/dist/cli/hooks/useMessageCursor.js +75 -0
  168. package/dist/cli/hooks/useMessageCursor.js.map +1 -0
  169. package/dist/cli/hooks/useOverlayStack.d.ts +9 -0
  170. package/dist/cli/hooks/useOverlayStack.js +26 -0
  171. package/dist/cli/hooks/useOverlayStack.js.map +1 -0
  172. package/dist/cli/hooks/useTerminalSize.d.ts +16 -0
  173. package/dist/cli/hooks/useTerminalSize.js +37 -0
  174. package/dist/cli/hooks/useTerminalSize.js.map +1 -0
  175. package/dist/cli/i18n/index.d.ts +15 -0
  176. package/dist/cli/i18n/index.js +32 -0
  177. package/dist/cli/i18n/index.js.map +1 -0
  178. package/dist/cli/i18n/messages.d.ts +1305 -0
  179. package/dist/cli/i18n/messages.js +1305 -0
  180. package/dist/cli/i18n/messages.js.map +1 -0
  181. package/dist/cli/imageAttachments.d.ts +22 -0
  182. package/dist/cli/imageAttachments.js +329 -0
  183. package/dist/cli/imageAttachments.js.map +1 -0
  184. package/dist/cli/index.d.ts +2 -0
  185. package/dist/cli/index.js +146 -0
  186. package/dist/cli/index.js.map +1 -0
  187. package/dist/cli/platform/terminalAttention.d.ts +46 -0
  188. package/dist/cli/platform/terminalAttention.js +152 -0
  189. package/dist/cli/platform/terminalAttention.js.map +1 -0
  190. package/dist/cli/platform/terminalTransparency.d.ts +11 -0
  191. package/dist/cli/platform/terminalTransparency.js +193 -0
  192. package/dist/cli/platform/terminalTransparency.js.map +1 -0
  193. package/dist/cli/repl.d.ts +15 -0
  194. package/dist/cli/repl.js +38 -0
  195. package/dist/cli/repl.js.map +1 -0
  196. package/dist/cli/setup.d.ts +17 -0
  197. package/dist/cli/setup.js +991 -0
  198. package/dist/cli/setup.js.map +1 -0
  199. package/dist/cli/singleShot.d.ts +30 -0
  200. package/dist/cli/singleShot.js +167 -0
  201. package/dist/cli/singleShot.js.map +1 -0
  202. package/dist/cli/state/adaptiveStreamScheduler.d.ts +53 -0
  203. package/dist/cli/state/adaptiveStreamScheduler.js +136 -0
  204. package/dist/cli/state/adaptiveStreamScheduler.js.map +1 -0
  205. package/dist/cli/state/agentFlowController.d.ts +37 -0
  206. package/dist/cli/state/agentFlowController.js +402 -0
  207. package/dist/cli/state/agentFlowController.js.map +1 -0
  208. package/dist/cli/state/approvalPresentationScheduler.d.ts +28 -0
  209. package/dist/cli/state/approvalPresentationScheduler.js +72 -0
  210. package/dist/cli/state/approvalPresentationScheduler.js.map +1 -0
  211. package/dist/cli/state/flowFeatureFlags.d.ts +18 -0
  212. package/dist/cli/state/flowFeatureFlags.js +45 -0
  213. package/dist/cli/state/flowFeatureFlags.js.map +1 -0
  214. package/dist/cli/state/flowReducer.d.ts +120 -0
  215. package/dist/cli/state/flowReducer.js +535 -0
  216. package/dist/cli/state/flowReducer.js.map +1 -0
  217. package/dist/cli/state/flowSelectors.d.ts +45 -0
  218. package/dist/cli/state/flowSelectors.js +144 -0
  219. package/dist/cli/state/flowSelectors.js.map +1 -0
  220. package/dist/cli/state/flowStore.d.ts +19 -0
  221. package/dist/cli/state/flowStore.js +51 -0
  222. package/dist/cli/state/flowStore.js.map +1 -0
  223. package/dist/cli/state/globalCommandActivity.d.ts +25 -0
  224. package/dist/cli/state/globalCommandActivity.js +57 -0
  225. package/dist/cli/state/globalCommandActivity.js.map +1 -0
  226. package/dist/cli/state/goldenTraces.d.ts +2 -0
  227. package/dist/cli/state/goldenTraces.js +15 -0
  228. package/dist/cli/state/goldenTraces.js.map +1 -0
  229. package/dist/cli/state/notificationCoordinator.d.ts +38 -0
  230. package/dist/cli/state/notificationCoordinator.js +101 -0
  231. package/dist/cli/state/notificationCoordinator.js.map +1 -0
  232. package/dist/cli/stateProvider.d.ts +5 -0
  233. package/dist/cli/stateProvider.js +7 -0
  234. package/dist/cli/stateProvider.js.map +1 -0
  235. package/dist/cli/telemetry/localFlowTelemetry.d.ts +42 -0
  236. package/dist/cli/telemetry/localFlowTelemetry.js +131 -0
  237. package/dist/cli/telemetry/localFlowTelemetry.js.map +1 -0
  238. package/dist/cli/telemetry/terminalBaseline.d.ts +93 -0
  239. package/dist/cli/telemetry/terminalBaseline.js +199 -0
  240. package/dist/cli/telemetry/terminalBaseline.js.map +1 -0
  241. package/dist/cli/telemetry/terminalLatencyTracker.d.ts +24 -0
  242. package/dist/cli/telemetry/terminalLatencyTracker.js +59 -0
  243. package/dist/cli/telemetry/terminalLatencyTracker.js.map +1 -0
  244. package/dist/cli/terminalLayout.d.ts +2 -0
  245. package/dist/cli/terminalLayout.js +16 -0
  246. package/dist/cli/terminalLayout.js.map +1 -0
  247. package/dist/cli/terminalMouse.d.ts +10 -0
  248. package/dist/cli/terminalMouse.js +29 -0
  249. package/dist/cli/terminalMouse.js.map +1 -0
  250. package/dist/cli/theme/ThemeProvider.d.ts +9 -0
  251. package/dist/cli/theme/ThemeProvider.js +26 -0
  252. package/dist/cli/theme/ThemeProvider.js.map +1 -0
  253. package/dist/cli/theme/dark.d.ts +2 -0
  254. package/dist/cli/theme/dark.js +27 -0
  255. package/dist/cli/theme/dark.js.map +1 -0
  256. package/dist/cli/theme/index.d.ts +5 -0
  257. package/dist/cli/theme/index.js +5 -0
  258. package/dist/cli/theme/index.js.map +1 -0
  259. package/dist/cli/theme/light.d.ts +2 -0
  260. package/dist/cli/theme/light.js +26 -0
  261. package/dist/cli/theme/light.js.map +1 -0
  262. package/dist/cli/theme/palette.d.ts +7 -0
  263. package/dist/cli/theme/palette.js +8 -0
  264. package/dist/cli/theme/palette.js.map +1 -0
  265. package/dist/cli/theme/resolveColor.d.ts +4 -0
  266. package/dist/cli/theme/resolveColor.js +43 -0
  267. package/dist/cli/theme/resolveColor.js.map +1 -0
  268. package/dist/cli/theme/types.d.ts +27 -0
  269. package/dist/cli/theme/types.js +2 -0
  270. package/dist/cli/theme/types.js.map +1 -0
  271. package/dist/cli/toolExecutor.d.ts +1 -0
  272. package/dist/cli/toolExecutor.js +2 -0
  273. package/dist/cli/toolExecutor.js.map +1 -0
  274. package/dist/core/agentEngine.d.ts +425 -0
  275. package/dist/core/agentEngine.js +5170 -0
  276. package/dist/core/agentEngine.js.map +1 -0
  277. package/dist/core/agents/loader.d.ts +9 -0
  278. package/dist/core/agents/loader.js +144 -0
  279. package/dist/core/agents/loader.js.map +1 -0
  280. package/dist/core/applyPatch.d.ts +24 -0
  281. package/dist/core/applyPatch.js +158 -0
  282. package/dist/core/applyPatch.js.map +1 -0
  283. package/dist/core/cacheMonitor.d.ts +24 -0
  284. package/dist/core/cacheMonitor.js +211 -0
  285. package/dist/core/cacheMonitor.js.map +1 -0
  286. package/dist/core/clientIdentity.d.ts +6 -0
  287. package/dist/core/clientIdentity.js +44 -0
  288. package/dist/core/clientIdentity.js.map +1 -0
  289. package/dist/core/config.d.ts +99 -0
  290. package/dist/core/config.js +715 -0
  291. package/dist/core/config.js.map +1 -0
  292. package/dist/core/contextCompaction.d.ts +20 -0
  293. package/dist/core/contextCompaction.js +158 -0
  294. package/dist/core/contextCompaction.js.map +1 -0
  295. package/dist/core/contextManager.d.ts +44 -0
  296. package/dist/core/contextManager.js +590 -0
  297. package/dist/core/contextManager.js.map +1 -0
  298. package/dist/core/contextPolicy.d.ts +18 -0
  299. package/dist/core/contextPolicy.js +39 -0
  300. package/dist/core/contextPolicy.js.map +1 -0
  301. package/dist/core/credentialStore.d.ts +8 -0
  302. package/dist/core/credentialStore.js +37 -0
  303. package/dist/core/credentialStore.js.map +1 -0
  304. package/dist/core/diffCompute.d.ts +31 -0
  305. package/dist/core/diffCompute.js +116 -0
  306. package/dist/core/diffCompute.js.map +1 -0
  307. package/dist/core/editHelpers.d.ts +8 -0
  308. package/dist/core/editHelpers.js +35 -0
  309. package/dist/core/editHelpers.js.map +1 -0
  310. package/dist/core/fileIO.d.ts +12 -0
  311. package/dist/core/fileIO.js +199 -0
  312. package/dist/core/fileIO.js.map +1 -0
  313. package/dist/core/gitService.d.ts +83 -0
  314. package/dist/core/gitService.js +522 -0
  315. package/dist/core/gitService.js.map +1 -0
  316. package/dist/core/index.d.ts +30 -0
  317. package/dist/core/index.js +19 -0
  318. package/dist/core/index.js.map +1 -0
  319. package/dist/core/mcp/client.d.ts +32 -0
  320. package/dist/core/mcp/client.js +186 -0
  321. package/dist/core/mcp/client.js.map +1 -0
  322. package/dist/core/mcp/settings.d.ts +2 -0
  323. package/dist/core/mcp/settings.js +26 -0
  324. package/dist/core/mcp/settings.js.map +1 -0
  325. package/dist/core/mcp/toolBridge.d.ts +20 -0
  326. package/dist/core/mcp/toolBridge.js +74 -0
  327. package/dist/core/mcp/toolBridge.js.map +1 -0
  328. package/dist/core/mcp/types.d.ts +29 -0
  329. package/dist/core/mcp/types.js +2 -0
  330. package/dist/core/mcp/types.js.map +1 -0
  331. package/dist/core/modelDiscovery.d.ts +14 -0
  332. package/dist/core/modelDiscovery.js +566 -0
  333. package/dist/core/modelDiscovery.js.map +1 -0
  334. package/dist/core/modelProtocol.d.ts +43 -0
  335. package/dist/core/modelProtocol.js +238 -0
  336. package/dist/core/modelProtocol.js.map +1 -0
  337. package/dist/core/modelRegistry.d.ts +56 -0
  338. package/dist/core/modelRegistry.js +308 -0
  339. package/dist/core/modelRegistry.js.map +1 -0
  340. package/dist/core/networkProxy.d.ts +20 -0
  341. package/dist/core/networkProxy.js +145 -0
  342. package/dist/core/networkProxy.js.map +1 -0
  343. package/dist/core/normalizeBaseUrl.d.ts +1 -0
  344. package/dist/core/normalizeBaseUrl.js +9 -0
  345. package/dist/core/normalizeBaseUrl.js.map +1 -0
  346. package/dist/core/pathUtils.d.ts +3 -0
  347. package/dist/core/pathUtils.js +46 -0
  348. package/dist/core/pathUtils.js.map +1 -0
  349. package/dist/core/permissions.d.ts +29 -0
  350. package/dist/core/permissions.js +245 -0
  351. package/dist/core/permissions.js.map +1 -0
  352. package/dist/core/persona/voiceProfile.d.ts +7 -0
  353. package/dist/core/persona/voiceProfile.js +14 -0
  354. package/dist/core/persona/voiceProfile.js.map +1 -0
  355. package/dist/core/profile.d.ts +35 -0
  356. package/dist/core/profile.js +373 -0
  357. package/dist/core/profile.js.map +1 -0
  358. package/dist/core/requestCompatibility.d.ts +13 -0
  359. package/dist/core/requestCompatibility.js +181 -0
  360. package/dist/core/requestCompatibility.js.map +1 -0
  361. package/dist/core/runtime/agentRuntime.d.ts +43 -0
  362. package/dist/core/runtime/agentRuntime.js +137 -0
  363. package/dist/core/runtime/agentRuntime.js.map +1 -0
  364. package/dist/core/runtime/approvalCoordinator.d.ts +36 -0
  365. package/dist/core/runtime/approvalCoordinator.js +113 -0
  366. package/dist/core/runtime/approvalCoordinator.js.map +1 -0
  367. package/dist/core/runtime/capabilityBoundary.d.ts +18 -0
  368. package/dist/core/runtime/capabilityBoundary.js +89 -0
  369. package/dist/core/runtime/capabilityBoundary.js.map +1 -0
  370. package/dist/core/runtime/nodeToolExecutor.d.ts +200 -0
  371. package/dist/core/runtime/nodeToolExecutor.js +2446 -0
  372. package/dist/core/runtime/nodeToolExecutor.js.map +1 -0
  373. package/dist/core/runtime/runtimeLogWriter.d.ts +32 -0
  374. package/dist/core/runtime/runtimeLogWriter.js +129 -0
  375. package/dist/core/runtime/runtimeLogWriter.js.map +1 -0
  376. package/dist/core/runtime/runtimeTaskManager.d.ts +78 -0
  377. package/dist/core/runtime/runtimeTaskManager.js +374 -0
  378. package/dist/core/runtime/runtimeTaskManager.js.map +1 -0
  379. package/dist/core/runtime/sessionRegistry.d.ts +19 -0
  380. package/dist/core/runtime/sessionRegistry.js +41 -0
  381. package/dist/core/runtime/sessionRegistry.js.map +1 -0
  382. package/dist/core/runtime/stateProvider.d.ts +69 -0
  383. package/dist/core/runtime/stateProvider.js +131 -0
  384. package/dist/core/runtime/stateProvider.js.map +1 -0
  385. package/dist/core/runtime/subAgentTaskManager.d.ts +111 -0
  386. package/dist/core/runtime/subAgentTaskManager.js +386 -0
  387. package/dist/core/runtime/subAgentTaskManager.js.map +1 -0
  388. package/dist/core/schemaValidation.d.ts +5 -0
  389. package/dist/core/schemaValidation.js +153 -0
  390. package/dist/core/schemaValidation.js.map +1 -0
  391. package/dist/core/skills/loader.d.ts +7 -0
  392. package/dist/core/skills/loader.js +91 -0
  393. package/dist/core/skills/loader.js.map +1 -0
  394. package/dist/core/skills/runtime.d.ts +19 -0
  395. package/dist/core/skills/runtime.js +61 -0
  396. package/dist/core/skills/runtime.js.map +1 -0
  397. package/dist/core/subAgent.d.ts +50 -0
  398. package/dist/core/subAgent.js +1258 -0
  399. package/dist/core/subAgent.js.map +1 -0
  400. package/dist/core/systemPrompt.d.ts +27 -0
  401. package/dist/core/systemPrompt.js +219 -0
  402. package/dist/core/systemPrompt.js.map +1 -0
  403. package/dist/core/taskManager.d.ts +105 -0
  404. package/dist/core/taskManager.js +617 -0
  405. package/dist/core/taskManager.js.map +1 -0
  406. package/dist/core/tokenCompressor.d.ts +14 -0
  407. package/dist/core/tokenCompressor.js +161 -0
  408. package/dist/core/tokenCompressor.js.map +1 -0
  409. package/dist/core/tokenCounter.d.ts +28 -0
  410. package/dist/core/tokenCounter.js +101 -0
  411. package/dist/core/tokenCounter.js.map +1 -0
  412. package/dist/core/toolDispatcher.d.ts +11 -0
  413. package/dist/core/toolDispatcher.js +38 -0
  414. package/dist/core/toolDispatcher.js.map +1 -0
  415. package/dist/core/toolExecutionLedger.d.ts +9 -0
  416. package/dist/core/toolExecutionLedger.js +84 -0
  417. package/dist/core/toolExecutionLedger.js.map +1 -0
  418. package/dist/core/toolRegistry.d.ts +19 -0
  419. package/dist/core/toolRegistry.js +820 -0
  420. package/dist/core/toolRegistry.js.map +1 -0
  421. package/dist/core/turnStrategy.d.ts +20 -0
  422. package/dist/core/turnStrategy.js +103 -0
  423. package/dist/core/turnStrategy.js.map +1 -0
  424. package/dist/platform/process.d.ts +14 -0
  425. package/dist/platform/process.js +28 -0
  426. package/dist/platform/process.js.map +1 -0
  427. package/dist/platform/runtime.d.ts +8 -0
  428. package/dist/platform/runtime.js +21 -0
  429. package/dist/platform/runtime.js.map +1 -0
  430. package/dist/server/adminPage.d.ts +1 -0
  431. package/dist/server/adminPage.js +755 -0
  432. package/dist/server/adminPage.js.map +1 -0
  433. package/dist/server/index.d.ts +22 -0
  434. package/dist/server/index.js +566 -0
  435. package/dist/server/index.js.map +1 -0
  436. package/dist/shared/agentTypes.d.ts +227 -0
  437. package/dist/shared/agentTypes.js +79 -0
  438. package/dist/shared/agentTypes.js.map +1 -0
  439. package/dist/shared/codeIndexTypes.d.ts +32 -0
  440. package/dist/shared/codeIndexTypes.js +2 -0
  441. package/dist/shared/codeIndexTypes.js.map +1 -0
  442. package/dist/shared/flowEvents.d.ts +192 -0
  443. package/dist/shared/flowEvents.js +37 -0
  444. package/dist/shared/flowEvents.js.map +1 -0
  445. package/dist/shared/memoryTypes.d.ts +100 -0
  446. package/dist/shared/memoryTypes.js +2 -0
  447. package/dist/shared/memoryTypes.js.map +1 -0
  448. package/dist/shared/pluginTypes.d.ts +345 -0
  449. package/dist/shared/pluginTypes.js +2 -0
  450. package/dist/shared/pluginTypes.js.map +1 -0
  451. package/dist/shared/runtimeTaskTypes.d.ts +43 -0
  452. package/dist/shared/runtimeTaskTypes.js +2 -0
  453. package/dist/shared/runtimeTaskTypes.js.map +1 -0
  454. package/dist/shared/skillTypes.d.ts +1 -0
  455. package/dist/shared/skillTypes.js +2 -0
  456. package/dist/shared/skillTypes.js.map +1 -0
  457. package/dist/shared/subAgentTypes.d.ts +99 -0
  458. package/dist/shared/subAgentTypes.js +2 -0
  459. package/dist/shared/subAgentTypes.js.map +1 -0
  460. package/dist/shared/terminalTypes.d.ts +102 -0
  461. package/dist/shared/terminalTypes.js +2 -0
  462. package/dist/shared/terminalTypes.js.map +1 -0
  463. package/dist/shared/toolCallMarkup.d.ts +10 -0
  464. package/dist/shared/toolCallMarkup.js +107 -0
  465. package/dist/shared/toolCallMarkup.js.map +1 -0
  466. package/dist/shared/toolTypes.d.ts +24 -0
  467. package/dist/shared/toolTypes.js +2 -0
  468. package/dist/shared/toolTypes.js.map +1 -0
  469. package/dist/shared/types.d.ts +81 -0
  470. package/dist/shared/types.js +2 -0
  471. package/dist/shared/types.js.map +1 -0
  472. package/dist/state/types.d.ts +69 -0
  473. package/dist/state/types.js +2 -0
  474. package/dist/state/types.js.map +1 -0
  475. package/dist/tools/executor.d.ts +133 -0
  476. package/dist/tools/executor.js +2 -0
  477. package/dist/tools/executor.js.map +1 -0
  478. package/dist/tools/memory/loaders.d.ts +6 -0
  479. package/dist/tools/memory/loaders.js +292 -0
  480. package/dist/tools/memory/loaders.js.map +1 -0
  481. package/dist/tools/memory/sanitizer.d.ts +6 -0
  482. package/dist/tools/memory/sanitizer.js +48 -0
  483. package/dist/tools/memory/sanitizer.js.map +1 -0
  484. package/dist/tools/memory/service.d.ts +24 -0
  485. package/dist/tools/memory/service.js +273 -0
  486. package/dist/tools/memory/service.js.map +1 -0
  487. package/dist/tools/memory/writer.d.ts +17 -0
  488. package/dist/tools/memory/writer.js +192 -0
  489. package/dist/tools/memory/writer.js.map +1 -0
  490. package/package.json +68 -0
@@ -0,0 +1,144 @@
1
+ import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
2
+ import { join } from 'path';
3
+ function parseFrontmatter(content) {
4
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
5
+ if (!match)
6
+ return { meta: {}, body: content };
7
+ const yamlBlock = match[1];
8
+ const body = match[2];
9
+ const meta = {};
10
+ let currentKey = null;
11
+ let currentArray = null;
12
+ for (const rawLine of yamlBlock.split('\n')) {
13
+ const line = rawLine.replace(/\r$/, '');
14
+ if (currentArray && line.match(/^\s*-\s+/)) {
15
+ const val = line.replace(/^\s*-\s+/, '').trim().replace(/^["']|["']$/g, '');
16
+ if (val)
17
+ currentArray.push(val);
18
+ continue;
19
+ }
20
+ const kv = line.match(/^(\w+):\s*(.*)$/);
21
+ if (!kv)
22
+ continue;
23
+ if (currentArray && currentKey) {
24
+ ;
25
+ meta[currentKey] = currentArray;
26
+ currentArray = null;
27
+ currentKey = null;
28
+ }
29
+ const [, key, rawValue] = kv;
30
+ const value = rawValue.trim();
31
+ if (key === 'tools' || key === 'skills') {
32
+ if (value.startsWith('[')) {
33
+ try {
34
+ ;
35
+ meta[key] = JSON.parse(value);
36
+ }
37
+ catch {
38
+ ;
39
+ meta[key] = value.replace(/[\[\]]/g, '').split(',').map(s => s.trim()).filter(Boolean);
40
+ }
41
+ }
42
+ else if (value === '') {
43
+ currentKey = key;
44
+ currentArray = [];
45
+ }
46
+ else {
47
+ ;
48
+ meta[key] = [value];
49
+ }
50
+ continue;
51
+ }
52
+ if (key === 'maxTurns' || key === 'maxParallel' || key === 'temperature' || key === 'maxOutputTokens') {
53
+ const num = Number(value);
54
+ if (!isNaN(num))
55
+ meta[key] = num;
56
+ continue;
57
+ }
58
+ ;
59
+ meta[key] = value.replace(/^["']|["']$/g, '');
60
+ }
61
+ if (currentArray && currentKey) {
62
+ ;
63
+ meta[currentKey] = currentArray;
64
+ }
65
+ return { meta, body };
66
+ }
67
+ const VALID_DRIVERS = ['deepseek-flash', 'deepseek-reasoner'];
68
+ const VALID_THINKING = ['disabled', 'high', 'max'];
69
+ function resolveDriver(model) {
70
+ if (!model)
71
+ return 'deepseek-flash';
72
+ if (model === 'deepseek-reasoner' || model === 'reasoner')
73
+ return 'deepseek-reasoner';
74
+ return 'deepseek-flash';
75
+ }
76
+ function mapToDefinition(meta, body, source, filePath) {
77
+ if (!meta.name || !meta.description)
78
+ return null;
79
+ const driver = resolveDriver(meta.model);
80
+ return {
81
+ id: meta.name,
82
+ label: meta.name.replace(/[-_]/g, ' ').replace(/\b\w/g, c => c.toUpperCase()),
83
+ description: meta.description,
84
+ driver,
85
+ systemPrompt: body.trim(),
86
+ maxTurns: meta.maxTurns ?? 5,
87
+ maxParallel: meta.maxParallel ?? 4,
88
+ maxOutputTokens: meta.maxOutputTokens,
89
+ temperature: meta.temperature ?? 0,
90
+ thinking: (meta.thinking && VALID_THINKING.includes(meta.thinking)) ? meta.thinking : 'disabled',
91
+ source,
92
+ filePath,
93
+ color: meta.color,
94
+ skills: meta.skills,
95
+ };
96
+ }
97
+ function loadAgentFromFile(filePath, source) {
98
+ try {
99
+ const raw = readFileSync(filePath, 'utf-8');
100
+ const { meta, body } = parseFrontmatter(raw);
101
+ return mapToDefinition(meta, body, source, filePath);
102
+ }
103
+ catch {
104
+ return null;
105
+ }
106
+ }
107
+ export function loadAgentsFromDir(workspacePath) {
108
+ const agentsDir = join(workspacePath, '.turboflux', 'agents');
109
+ if (!existsSync(agentsDir))
110
+ return [];
111
+ const agents = [];
112
+ try {
113
+ const entries = readdirSync(agentsDir);
114
+ for (const entry of entries) {
115
+ if (!entry.endsWith('.md'))
116
+ continue;
117
+ const fullPath = join(agentsDir, entry);
118
+ try {
119
+ if (!statSync(fullPath).isFile())
120
+ continue;
121
+ }
122
+ catch {
123
+ continue;
124
+ }
125
+ const agent = loadAgentFromFile(fullPath, 'project');
126
+ if (agent)
127
+ agents.push(agent);
128
+ }
129
+ }
130
+ catch {
131
+ }
132
+ return agents;
133
+ }
134
+ export function mergeAgentDefinitions(builtin, dynamic) {
135
+ const map = new Map();
136
+ for (const def of builtin) {
137
+ map.set(def.id, def);
138
+ }
139
+ for (const def of dynamic) {
140
+ map.set(def.id, def);
141
+ }
142
+ return map;
143
+ }
144
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/agents/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export type ApplyPatchOperation = {
2
+ kind: 'add';
3
+ path: string;
4
+ content: string;
5
+ } | {
6
+ kind: 'delete';
7
+ path: string;
8
+ } | {
9
+ kind: 'update';
10
+ path: string;
11
+ moveTo?: string;
12
+ hunks: ApplyPatchHunk[];
13
+ };
14
+ export interface ApplyPatchHunk {
15
+ header: string;
16
+ lines: string[];
17
+ }
18
+ export declare const MAX_APPLY_PATCH_CHARS = 1000000;
19
+ export declare const MAX_APPLY_PATCH_OPERATIONS = 200;
20
+ export declare const MAX_APPLY_PATCH_HUNKS = 1000;
21
+ export declare const MAX_APPLY_PATCH_LINE_CHARS = 256000;
22
+ export declare function parseApplyPatch(source: string): ApplyPatchOperation[];
23
+ export declare function applyPatchHunks(original: string, hunks: ApplyPatchHunk[], path: string): string;
24
+ export declare function applyPatchAdd(content: string): string;
@@ -0,0 +1,158 @@
1
+ export const MAX_APPLY_PATCH_CHARS = 1_000_000;
2
+ export const MAX_APPLY_PATCH_OPERATIONS = 200;
3
+ export const MAX_APPLY_PATCH_HUNKS = 1_000;
4
+ export const MAX_APPLY_PATCH_LINE_CHARS = 256_000;
5
+ export function parseApplyPatch(source) {
6
+ if (typeof source !== 'string' || source.trim().length === 0) {
7
+ throw new Error('Patch must be a non-empty string');
8
+ }
9
+ if (source.length > MAX_APPLY_PATCH_CHARS) {
10
+ throw new Error(`Patch exceeds the ${MAX_APPLY_PATCH_CHARS.toLocaleString()} character limit`);
11
+ }
12
+ const lines = source.replace(/\r\n?/g, '\n').split('\n');
13
+ if (lines[0] !== '*** Begin Patch') {
14
+ throw new Error("Patch must start with '*** Begin Patch'");
15
+ }
16
+ if (lines[lines.length - 1] === '')
17
+ lines.pop();
18
+ if (lines[lines.length - 1] !== '*** End Patch') {
19
+ throw new Error("Patch must end with '*** End Patch'");
20
+ }
21
+ const operations = [];
22
+ const seenPaths = new Set();
23
+ let index = 1;
24
+ while (index < lines.length - 1) {
25
+ if (operations.length >= MAX_APPLY_PATCH_OPERATIONS) {
26
+ throw new Error(`Patch exceeds the ${MAX_APPLY_PATCH_OPERATIONS} file operation limit`);
27
+ }
28
+ const header = lines[index];
29
+ const match = header.match(/^\*\*\* (Add|Delete|Update) File: (.+)$/);
30
+ if (!match)
31
+ throw new Error(`Invalid patch header on line ${index + 1}: ${header || '(empty)'}`);
32
+ const kind = match[1].toLowerCase();
33
+ const path = match[2].trim();
34
+ if (!path)
35
+ throw new Error(`Patch path is empty on line ${index + 1}`);
36
+ const pathKey = path.replace(/\\/g, '/').toLowerCase();
37
+ if (seenPaths.has(pathKey))
38
+ throw new Error(`Patch contains duplicate file path: ${path}`);
39
+ seenPaths.add(pathKey);
40
+ index += 1;
41
+ if (kind === 'add') {
42
+ const contentLines = [];
43
+ while (index < lines.length - 1 && !isFileHeader(lines[index])) {
44
+ const line = lines[index];
45
+ if (line.length > MAX_APPLY_PATCH_LINE_CHARS) {
46
+ throw new Error(`Patch line ${index + 1} exceeds the ${MAX_APPLY_PATCH_LINE_CHARS.toLocaleString()} character limit`);
47
+ }
48
+ if (!line.startsWith('+')) {
49
+ throw new Error(`Add file content must use '+' prefixes on line ${index + 1}`);
50
+ }
51
+ contentLines.push(line.slice(1));
52
+ index += 1;
53
+ }
54
+ operations.push({ kind, path, content: withTrailingNewline(contentLines.join('\n')) });
55
+ continue;
56
+ }
57
+ if (kind === 'delete') {
58
+ if (index < lines.length - 1 && !isFileHeader(lines[index])) {
59
+ throw new Error(`Delete file entry cannot contain content on line ${index + 1}`);
60
+ }
61
+ operations.push({ kind, path });
62
+ continue;
63
+ }
64
+ let moveTo;
65
+ if (index < lines.length - 1 && lines[index].startsWith('*** Move to:')) {
66
+ moveTo = lines[index].slice('*** Move to:'.length).trim();
67
+ if (!moveTo)
68
+ throw new Error(`Move destination is empty on line ${index + 1}`);
69
+ index += 1;
70
+ }
71
+ const hunks = [];
72
+ while (index < lines.length - 1 && !isFileHeader(lines[index])) {
73
+ const hunkHeader = lines[index];
74
+ if (!hunkHeader.startsWith('@@')) {
75
+ throw new Error(`Update file hunk must start with '@@' on line ${index + 1}`);
76
+ }
77
+ index += 1;
78
+ const hunkLines = [];
79
+ while (index < lines.length - 1 && !isFileHeader(lines[index]) && !lines[index].startsWith('@@')) {
80
+ const line = lines[index];
81
+ if (line.length > MAX_APPLY_PATCH_LINE_CHARS) {
82
+ throw new Error(`Patch line ${index + 1} exceeds the ${MAX_APPLY_PATCH_LINE_CHARS.toLocaleString()} character limit`);
83
+ }
84
+ if (!line.startsWith(' ') && !line.startsWith('+') && !line.startsWith('-')) {
85
+ throw new Error(`Invalid patch line on line ${index + 1}: ${line || '(empty)'}`);
86
+ }
87
+ hunkLines.push(line);
88
+ index += 1;
89
+ }
90
+ if (hunkLines.length === 0 || !hunkLines.some(line => line.startsWith('+') || line.startsWith('-'))) {
91
+ throw new Error(`Update hunk on line ${index} must contain an addition or deletion`);
92
+ }
93
+ if (hunks.length >= MAX_APPLY_PATCH_HUNKS) {
94
+ throw new Error(`Patch exceeds the ${MAX_APPLY_PATCH_HUNKS.toLocaleString()} hunk limit`);
95
+ }
96
+ hunks.push({ header: hunkHeader, lines: hunkLines });
97
+ }
98
+ if (hunks.length === 0)
99
+ throw new Error(`Update file '${path}' has no hunks`);
100
+ operations.push({ kind, path, ...(moveTo ? { moveTo } : {}), hunks });
101
+ }
102
+ if (operations.length === 0)
103
+ throw new Error('Patch contains no file operations');
104
+ return operations;
105
+ }
106
+ export function applyPatchHunks(original, hunks, path) {
107
+ const normalized = original.replace(/\r\n?/g, '\n');
108
+ let lines = splitLines(normalized);
109
+ for (const hunk of hunks) {
110
+ const oldLines = hunk.lines.filter(line => line.startsWith(' ') || line.startsWith('-')).map(line => line.slice(1));
111
+ const newLines = hunk.lines.filter(line => line.startsWith(' ') || line.startsWith('+')).map(line => line.slice(1));
112
+ const start = findUniqueSequence(lines, oldLines, path, hunk.header);
113
+ lines = [...lines.slice(0, start), ...newLines, ...lines.slice(start + oldLines.length)];
114
+ }
115
+ return withTrailingNewline(lines.join('\n'));
116
+ }
117
+ export function applyPatchAdd(content) {
118
+ return withTrailingNewline(content.replace(/\r\n?/g, '\n').replace(/\n$/, ''));
119
+ }
120
+ function isFileHeader(line) {
121
+ return /^\*\*\* (?:Add|Delete|Update) File: /.test(line) || line === '*** End Patch';
122
+ }
123
+ function splitLines(content) {
124
+ if (content === '')
125
+ return [];
126
+ const lines = content.split('\n');
127
+ if (lines[lines.length - 1] === '')
128
+ lines.pop();
129
+ return lines;
130
+ }
131
+ function withTrailingNewline(content) {
132
+ return content.endsWith('\n') ? content : `${content}\n`;
133
+ }
134
+ function findUniqueSequence(lines, expected, path, header) {
135
+ if (expected.length === 0) {
136
+ const location = parseHunkStart(header);
137
+ return location === undefined ? lines.length : Math.min(location, lines.length);
138
+ }
139
+ const matches = [];
140
+ for (let index = 0; index <= lines.length - expected.length; index += 1) {
141
+ if (expected.every((line, offset) => lines[index + offset] === line))
142
+ matches.push(index);
143
+ }
144
+ if (matches.length === 0) {
145
+ throw new Error(`Failed to find expected lines in ${path}:\n${expected.join('\n')}`);
146
+ }
147
+ if (matches.length > 1) {
148
+ throw new Error(`Patch context is ambiguous in ${path}: found ${matches.length} matching locations for ${header}`);
149
+ }
150
+ return matches[0];
151
+ }
152
+ function parseHunkStart(header) {
153
+ const match = header.match(/^@@(?: -([0-9]+)(?:,[0-9]+)?(?: \+[0-9]+(?:,[0-9]+)?)?)?/);
154
+ if (!match?.[1])
155
+ return undefined;
156
+ return Math.max(0, Number(match[1]) - 1);
157
+ }
158
+ //# sourceMappingURL=applyPatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyPatch.js","sourceRoot":"","sources":["../../src/core/applyPatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface PromptStateSnapshot {
2
+ systemPrompt: string;
3
+ toolCount: number;
4
+ toolNames: string[];
5
+ toolSchemas?: unknown[];
6
+ model: string;
7
+ provider: string;
8
+ strategy?: string | null;
9
+ cacheControl?: unknown;
10
+ extraBodyParams?: unknown;
11
+ }
12
+ export interface CacheBreakResult {
13
+ broken: boolean;
14
+ reason: string;
15
+ tokenDrop: number;
16
+ likelyTtlExpiry: boolean;
17
+ }
18
+ export declare class CacheMonitor {
19
+ private state;
20
+ recordPromptState(snapshot: PromptStateSnapshot): void;
21
+ checkCacheBreak(cacheReadTokens: number, cacheCreationTokens: number): CacheBreakResult;
22
+ reset(): void;
23
+ resetBaseline(): void;
24
+ }
@@ -0,0 +1,211 @@
1
+ const MIN_CACHE_MISS_TOKENS = 2_000;
2
+ const CACHE_TTL_5MIN_MS = 5 * 60 * 1_000;
3
+ const CACHE_TTL_1HOUR_MS = 60 * 60 * 1_000;
4
+ function djb2Hash(str) {
5
+ let hash = 5381;
6
+ for (let i = 0; i < str.length; i++) {
7
+ hash = ((hash << 5) + hash) + str.charCodeAt(i);
8
+ }
9
+ return hash >>> 0;
10
+ }
11
+ function normalizeForHash(data) {
12
+ if (Array.isArray(data)) {
13
+ return data.map(normalizeForHash);
14
+ }
15
+ if (data && typeof data === 'object') {
16
+ const input = data;
17
+ const output = {};
18
+ for (const key of Object.keys(input).sort()) {
19
+ output[key] = normalizeForHash(input[key]);
20
+ }
21
+ return output;
22
+ }
23
+ return data;
24
+ }
25
+ function computeHash(data) {
26
+ try {
27
+ return djb2Hash(JSON.stringify(normalizeForHash(data)));
28
+ }
29
+ catch {
30
+ return 0;
31
+ }
32
+ }
33
+ function computePerToolHashes(toolSchemas, toolNames) {
34
+ const hashes = {};
35
+ for (let i = 0; i < toolNames.length; i++) {
36
+ hashes[toolNames[i]] = computeHash(toolSchemas?.[i] ?? toolNames[i]);
37
+ }
38
+ return hashes;
39
+ }
40
+ export class CacheMonitor {
41
+ state = null;
42
+ recordPromptState(snapshot) {
43
+ const systemHash = computeHash(snapshot.systemPrompt);
44
+ const toolsHash = computeHash(snapshot.toolSchemas ?? {
45
+ names: snapshot.toolNames,
46
+ count: snapshot.toolCount,
47
+ });
48
+ const cacheControlHash = computeHash(snapshot.cacheControl ?? null);
49
+ const extraBodyHash = computeHash(snapshot.extraBodyParams ?? null);
50
+ const perToolHashes = computePerToolHashes(snapshot.toolSchemas, snapshot.toolNames);
51
+ const systemCharCount = snapshot.systemPrompt.length;
52
+ if (!this.state) {
53
+ this.state = {
54
+ systemHash,
55
+ toolsHash,
56
+ cacheControlHash,
57
+ extraBodyHash,
58
+ toolNames: snapshot.toolNames,
59
+ perToolHashes,
60
+ model: snapshot.model,
61
+ provider: snapshot.provider,
62
+ strategy: snapshot.strategy ?? null,
63
+ systemCharCount,
64
+ prevCacheReadTokens: null,
65
+ lastTurnAt: Date.now(),
66
+ pendingChanges: null,
67
+ };
68
+ return;
69
+ }
70
+ const prev = this.state;
71
+ const systemPromptChanged = systemHash !== prev.systemHash;
72
+ const toolSchemasChanged = toolsHash !== prev.toolsHash;
73
+ const cacheControlChanged = cacheControlHash !== prev.cacheControlHash;
74
+ const extraBodyChanged = extraBodyHash !== prev.extraBodyHash;
75
+ const modelChanged = snapshot.model !== prev.model;
76
+ const providerChanged = snapshot.provider !== prev.provider;
77
+ const strategyChanged = (snapshot.strategy ?? null) !== prev.strategy;
78
+ const prevToolSet = new Set(prev.toolNames);
79
+ const newToolSet = new Set(snapshot.toolNames);
80
+ const addedTools = snapshot.toolNames.filter(n => !prevToolSet.has(n));
81
+ const removedTools = prev.toolNames.filter(n => !newToolSet.has(n));
82
+ const changedToolSchemas = [];
83
+ if (toolSchemasChanged) {
84
+ for (const name of snapshot.toolNames) {
85
+ if (!prevToolSet.has(name))
86
+ continue;
87
+ if (perToolHashes[name] !== prev.perToolHashes[name]) {
88
+ changedToolSchemas.push(name);
89
+ }
90
+ }
91
+ }
92
+ if (systemPromptChanged ||
93
+ toolSchemasChanged ||
94
+ cacheControlChanged ||
95
+ extraBodyChanged ||
96
+ modelChanged ||
97
+ providerChanged ||
98
+ strategyChanged) {
99
+ prev.pendingChanges = {
100
+ systemPromptChanged,
101
+ toolSchemasChanged,
102
+ cacheControlChanged,
103
+ extraBodyChanged,
104
+ modelChanged,
105
+ providerChanged,
106
+ strategyChanged,
107
+ addedTools,
108
+ removedTools,
109
+ changedToolSchemas,
110
+ systemCharDelta: systemCharCount - prev.systemCharCount,
111
+ previousModel: prev.model,
112
+ newModel: snapshot.model,
113
+ };
114
+ }
115
+ else {
116
+ prev.pendingChanges = null;
117
+ }
118
+ prev.systemHash = systemHash;
119
+ prev.toolsHash = toolsHash;
120
+ prev.cacheControlHash = cacheControlHash;
121
+ prev.extraBodyHash = extraBodyHash;
122
+ prev.toolNames = snapshot.toolNames;
123
+ prev.perToolHashes = perToolHashes;
124
+ prev.model = snapshot.model;
125
+ prev.provider = snapshot.provider;
126
+ prev.strategy = snapshot.strategy ?? null;
127
+ prev.systemCharCount = systemCharCount;
128
+ }
129
+ checkCacheBreak(cacheReadTokens, cacheCreationTokens) {
130
+ void cacheCreationTokens;
131
+ const state = this.state;
132
+ if (!state) {
133
+ return { broken: false, reason: '', tokenDrop: 0, likelyTtlExpiry: false };
134
+ }
135
+ const prevCacheRead = state.prevCacheReadTokens;
136
+ const timeSinceLast = Date.now() - state.lastTurnAt;
137
+ state.prevCacheReadTokens = cacheReadTokens;
138
+ state.lastTurnAt = Date.now();
139
+ if (prevCacheRead === null) {
140
+ return { broken: false, reason: '', tokenDrop: 0, likelyTtlExpiry: false };
141
+ }
142
+ const tokenDrop = prevCacheRead - cacheReadTokens;
143
+ if (cacheReadTokens >= prevCacheRead * 0.95 ||
144
+ tokenDrop < MIN_CACHE_MISS_TOKENS) {
145
+ return { broken: false, reason: '', tokenDrop, likelyTtlExpiry: false };
146
+ }
147
+ const parts = [];
148
+ const changes = state.pendingChanges;
149
+ if (changes) {
150
+ if (changes.modelChanged) {
151
+ parts.push(`model changed (${changes.previousModel} -> ${changes.newModel})`);
152
+ }
153
+ if (changes.providerChanged) {
154
+ parts.push('provider changed');
155
+ }
156
+ if (changes.systemPromptChanged) {
157
+ const delta = changes.systemCharDelta;
158
+ const info = delta === 0 ? '' : delta > 0 ? ` (+${delta} chars)` : ` (${delta} chars)`;
159
+ parts.push(`system prompt changed${info}`);
160
+ }
161
+ if (changes.toolSchemasChanged) {
162
+ const diff = changes.addedTools.length > 0 || changes.removedTools.length > 0
163
+ ? ` (+${changes.addedTools.length}/-${changes.removedTools.length} tools)`
164
+ : changes.changedToolSchemas.length > 0
165
+ ? ` (schema drift: ${changes.changedToolSchemas.slice(0, 5).join(', ')})`
166
+ : ' (schema drift, same set)';
167
+ parts.push(`tools changed${diff}`);
168
+ }
169
+ if (changes.cacheControlChanged && !changes.systemPromptChanged) {
170
+ parts.push('cache_control changed');
171
+ }
172
+ if (changes.extraBodyChanged) {
173
+ parts.push('request params changed');
174
+ }
175
+ if (changes.strategyChanged) {
176
+ parts.push('strategy changed');
177
+ }
178
+ }
179
+ const likelyTtlExpiry = timeSinceLast > CACHE_TTL_5MIN_MS;
180
+ let reason;
181
+ if (parts.length > 0) {
182
+ reason = parts.join(', ');
183
+ }
184
+ else if (timeSinceLast > CACHE_TTL_1HOUR_MS) {
185
+ reason = 'possible 1h TTL expiry (prompt unchanged)';
186
+ }
187
+ else if (timeSinceLast > CACHE_TTL_5MIN_MS) {
188
+ reason = 'possible 5min TTL expiry (prompt unchanged)';
189
+ }
190
+ else {
191
+ reason = 'likely server-side (prompt unchanged, <5min gap)';
192
+ }
193
+ return {
194
+ broken: true,
195
+ reason,
196
+ tokenDrop,
197
+ likelyTtlExpiry,
198
+ };
199
+ }
200
+ reset() {
201
+ this.state = null;
202
+ }
203
+ resetBaseline() {
204
+ if (!this.state)
205
+ return;
206
+ this.state.prevCacheReadTokens = null;
207
+ this.state.pendingChanges = null;
208
+ this.state.lastTurnAt = Date.now();
209
+ }
210
+ }
211
+ //# sourceMappingURL=cacheMonitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheMonitor.js","sourceRoot":"","sources":["../../src/core/cacheMonitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function getTurboFluxClientIdentity(environment?: NodeJS.ProcessEnv): {
2
+ product: string;
3
+ originator: string;
4
+ userAgent: string;
5
+ };
6
+ export declare function createTurboFluxRequestHeaders(headers?: Record<string, string>, requestId?: `${string}-${string}-${string}-${string}-${string}`): Record<string, string>;
@@ -0,0 +1,44 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { readFileSync } from 'node:fs';
3
+ const DEFAULT_VERSION = '1.0.0';
4
+ const DEFAULT_SURFACE = 'cli';
5
+ let cachedVersion;
6
+ function packageVersion() {
7
+ if (cachedVersion)
8
+ return cachedVersion;
9
+ try {
10
+ const packageJson = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8'));
11
+ cachedVersion = typeof packageJson.version === 'string' && packageJson.version.trim()
12
+ ? packageJson.version.trim()
13
+ : DEFAULT_VERSION;
14
+ }
15
+ catch {
16
+ cachedVersion = DEFAULT_VERSION;
17
+ }
18
+ return cachedVersion;
19
+ }
20
+ function clientSurface(environment = process.env) {
21
+ const value = environment.TURBOFLUX_CLIENT_SURFACE?.trim().toLowerCase();
22
+ return value && /^[a-z0-9][a-z0-9._-]{0,63}$/.test(value) ? value : DEFAULT_SURFACE;
23
+ }
24
+ export function getTurboFluxClientIdentity(environment = process.env) {
25
+ const surface = clientSurface(environment);
26
+ const product = `turboflux-${surface}`;
27
+ return {
28
+ product,
29
+ originator: product.replace(/-/g, '_'),
30
+ userAgent: `${product}/${packageVersion()} (${process.platform}; ${process.arch})`,
31
+ };
32
+ }
33
+ export function createTurboFluxRequestHeaders(headers = {}, requestId = randomUUID()) {
34
+ const identity = getTurboFluxClientIdentity();
35
+ return {
36
+ 'User-Agent': identity.userAgent,
37
+ 'x-app': identity.product,
38
+ 'x-client-app': identity.product,
39
+ 'originator': identity.originator,
40
+ 'x-client-request-id': requestId,
41
+ ...headers,
42
+ };
43
+ }
44
+ //# sourceMappingURL=clientIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientIdentity.js","sourceRoot":"","sources":["../../src/core/clientIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,MAAM,eAAe,GAAG,OAAO,CAAA;AAC/B,MAAM,eAAe,GAAG,KAAK,CAAA;AAE7B,IAAI,aAAiC,CAAA;AAErC,SAAS,cAAc;IACrB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IACvC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAA;QAC7H,aAAa,GAAG,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;YACnF,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5B,CAAC,CAAC,eAAe,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,eAAe,CAAA;IACjC,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,cAAiC,OAAO,CAAC,GAAG;IACjE,MAAM,KAAK,GAAG,WAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACxE,OAAO,KAAK,IAAI,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,cAAiC,OAAO,CAAC,GAAG;IAKrF,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,aAAa,OAAO,EAAE,CAAA;IACtC,OAAO;QACL,OAAO;QACP,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QACtC,SAAS,EAAE,GAAG,OAAO,IAAI,cAAc,EAAE,KAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,GAAG;KACnF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,UAAkC,EAAE,EACpC,SAAS,GAAG,UAAU,EAAE;IAExB,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAA;IAC7C,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,cAAc,EAAE,QAAQ,CAAC,OAAO;QAChC,YAAY,EAAE,QAAQ,CAAC,UAAU;QACjC,qBAAqB,EAAE,SAAS;QAChC,GAAG,OAAO;KACX,CAAA;AACH,CAAC"}