@tyvm/knowhow 0.0.158 → 0.0.160

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 (870) hide show
  1. package/package.json +2 -2
  2. package/ts_build/package.json +2 -2
  3. package/ts_build/src/chat/CliChatService.d.ts +2 -1
  4. package/ts_build/src/chat/CliChatService.js +29 -3
  5. package/ts_build/src/chat/CliChatService.js.map +1 -1
  6. package/ts_build/src/chat/modules/AgentModule.js +21 -17
  7. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  8. package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
  9. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  10. package/ts_build/src/logger.d.ts +1 -0
  11. package/ts_build/src/logger.js +13 -1
  12. package/ts_build/src/logger.js.map +1 -1
  13. package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
  14. package/ts_build/src/utils/InputQueueManager.js +72 -2
  15. package/ts_build/src/utils/InputQueueManager.js.map +1 -1
  16. package/ts_build/src/utils/index.d.ts +3 -1
  17. package/ts_build/src/utils/index.js +11 -3
  18. package/ts_build/src/utils/index.js.map +1 -1
  19. package/CONFIG.md +0 -429
  20. package/PROCESSING.md +0 -450
  21. package/WORKER.md +0 -260
  22. package/autodoc/README.md +0 -324
  23. package/autodoc/chat-guide.md +0 -444
  24. package/autodoc/cli-reference.md +0 -720
  25. package/autodoc/config-reference.md +0 -642
  26. package/autodoc/embeddings-guide.md +0 -467
  27. package/autodoc/generate-guide.md +0 -437
  28. package/autodoc/language-plugin-guide.md +0 -417
  29. package/autodoc/modules-guide.md +0 -379
  30. package/autodoc/plugins-guide.md +0 -721
  31. package/autodoc/quickstart-guide.md +0 -126
  32. package/autodoc/skills-guide.md +0 -584
  33. package/autodoc/worker-guide.md +0 -519
  34. package/docs/input-queue-manager.md +0 -142
  35. package/docs/multi-worker-management.md +0 -142
  36. package/docs/shell-commands.md +0 -174
  37. package/jest.config.js +0 -19
  38. package/jest.manual.config.js +0 -19
  39. package/scripts/README.md +0 -119
  40. package/scripts/build-for-node.sh +0 -148
  41. package/scripts/cache-miss-debug.ts +0 -365
  42. package/scripts/check-isolated-deps.sh +0 -69
  43. package/scripts/check-model-pricing.ts +0 -509
  44. package/scripts/compare-openrouter-coverage.ts +0 -576
  45. package/scripts/migrate-usage-json.js +0 -147
  46. package/scripts/publish.sh +0 -86
  47. package/scripts/restore_keys.sh +0 -59
  48. package/scripts/test-repetition-hint.ts +0 -302
  49. package/scripts/unset_keys.sh +0 -60
  50. package/src/agents/base/base.ts +0 -1963
  51. package/src/agents/base/prompt.ts +0 -55
  52. package/src/agents/configurable/ConfigAgent.ts +0 -24
  53. package/src/agents/developer/developer.ts +0 -76
  54. package/src/agents/historyRollback.ts +0 -36
  55. package/src/agents/index.ts +0 -52
  56. package/src/agents/interface.ts +0 -11
  57. package/src/agents/patcher/codebase.md +0 -27
  58. package/src/agents/patcher/patcher.ts +0 -131
  59. package/src/agents/researcher/researcher.ts +0 -115
  60. package/src/agents/setup/setup.ts +0 -63
  61. package/src/agents/tools/addInternalTools.ts +0 -21
  62. package/src/agents/tools/agentCall.ts +0 -34
  63. package/src/agents/tools/aiClient.ts +0 -178
  64. package/src/agents/tools/askHuman.ts +0 -10
  65. package/src/agents/tools/callPlugin.ts +0 -10
  66. package/src/agents/tools/connectAgent.ts +0 -355
  67. package/src/agents/tools/embeddingSearch.ts +0 -6
  68. package/src/agents/tools/execCommand.ts +0 -162
  69. package/src/agents/tools/fileSearch.ts +0 -35
  70. package/src/agents/tools/finalAnswer.ts +0 -4
  71. package/src/agents/tools/googleSearch.ts +0 -243
  72. package/src/agents/tools/index.ts +0 -33
  73. package/src/agents/tools/language/definitions.ts +0 -105
  74. package/src/agents/tools/language/index.ts +0 -20
  75. package/src/agents/tools/lazy/definitions.ts +0 -72
  76. package/src/agents/tools/lazy/disableTools.ts +0 -16
  77. package/src/agents/tools/lazy/enableTools.ts +0 -16
  78. package/src/agents/tools/lazy/index.ts +0 -3
  79. package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
  80. package/src/agents/tools/lintFile.ts +0 -19
  81. package/src/agents/tools/list.ts +0 -739
  82. package/src/agents/tools/loadImageAsBase64.ts +0 -83
  83. package/src/agents/tools/loadWebpage.ts +0 -19
  84. package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
  85. package/src/agents/tools/mcp/definitions.ts +0 -67
  86. package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
  87. package/src/agents/tools/mcp/index.ts +0 -3
  88. package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
  89. package/src/agents/tools/minimal/callTool.ts +0 -45
  90. package/src/agents/tools/minimal/definitions.ts +0 -50
  91. package/src/agents/tools/minimal/index.ts +0 -3
  92. package/src/agents/tools/minimal/inspectTools.ts +0 -27
  93. package/src/agents/tools/modifyFile.ts +0 -53
  94. package/src/agents/tools/observe.ts +0 -247
  95. package/src/agents/tools/patch.ts +0 -1287
  96. package/src/agents/tools/readBlocks.ts +0 -83
  97. package/src/agents/tools/readFile.ts +0 -105
  98. package/src/agents/tools/replyToParent.ts +0 -123
  99. package/src/agents/tools/runGenerate.ts +0 -210
  100. package/src/agents/tools/scanFile.ts +0 -16
  101. package/src/agents/tools/sendAgentMessage.ts +0 -139
  102. package/src/agents/tools/skills.ts +0 -79
  103. package/src/agents/tools/startAgentTask.ts +0 -393
  104. package/src/agents/tools/stringReplace.ts +0 -105
  105. package/src/agents/tools/textSearch.ts +0 -128
  106. package/src/agents/tools/types/fileblock.ts +0 -5
  107. package/src/agents/tools/visionTool.ts +0 -35
  108. package/src/agents/tools/waitForAgentCompleted.ts +0 -270
  109. package/src/agents/tools/writeFile.ts +0 -106
  110. package/src/agents/tools/ycmd/client.ts +0 -608
  111. package/src/agents/tools/ycmd/definitions.ts +0 -294
  112. package/src/agents/tools/ycmd/detection.ts +0 -211
  113. package/src/agents/tools/ycmd/index.ts +0 -11
  114. package/src/agents/tools/ycmd/installer.ts +0 -251
  115. package/src/agents/tools/ycmd/server.ts +0 -545
  116. package/src/agents/tools/ycmd/serverManager.ts +0 -316
  117. package/src/agents/tools/ycmd/tools/completion.ts +0 -113
  118. package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
  119. package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
  120. package/src/agents/tools/ycmd/tools/goto.ts +0 -169
  121. package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
  122. package/src/agents/tools/ycmd/tools/signature.ts +0 -174
  123. package/src/agents/tools/ycmd/tools/start.ts +0 -95
  124. package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
  125. package/src/ai.ts +0 -306
  126. package/src/auth/browserLogin.ts +0 -406
  127. package/src/auth/environmentAuth.ts +0 -51
  128. package/src/auth/errors.ts +0 -6
  129. package/src/auth/jwtStore.ts +0 -70
  130. package/src/auth/keyAuth.ts +0 -142
  131. package/src/auth/keyManager.ts +0 -331
  132. package/src/auth/registerIdentity.ts +0 -67
  133. package/src/auth/spinner.ts +0 -23
  134. package/src/chat/CliChatService.ts +0 -438
  135. package/src/chat/modules/AgentModule.ts +0 -1664
  136. package/src/chat/modules/AskModule.ts +0 -98
  137. package/src/chat/modules/BaseChatModule.ts +0 -65
  138. package/src/chat/modules/ClipboardImageModule.ts +0 -136
  139. package/src/chat/modules/CustomCommandsModule.ts +0 -80
  140. package/src/chat/modules/InternalChatModule.ts +0 -216
  141. package/src/chat/modules/RemoteSyncModule.ts +0 -482
  142. package/src/chat/modules/RendererModule.ts +0 -139
  143. package/src/chat/modules/SearchModule.ts +0 -168
  144. package/src/chat/modules/SessionsModule.ts +0 -969
  145. package/src/chat/modules/SetupModule.ts +0 -185
  146. package/src/chat/modules/ShellCommandModule.ts +0 -98
  147. package/src/chat/modules/SystemModule.ts +0 -161
  148. package/src/chat/modules/ToolCommandModule.ts +0 -102
  149. package/src/chat/modules/VoiceModule.ts +0 -70
  150. package/src/chat/modules/index.ts +0 -8
  151. package/src/chat/renderer/CompactRenderer.ts +0 -229
  152. package/src/chat/renderer/ConsoleRenderer.ts +0 -160
  153. package/src/chat/renderer/FancyRenderer.ts +0 -440
  154. package/src/chat/renderer/PlainRenderer.ts +0 -218
  155. package/src/chat/renderer/index.ts +0 -6
  156. package/src/chat/renderer/loadRenderer.ts +0 -316
  157. package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
  158. package/src/chat/renderer/types.ts +0 -99
  159. package/src/chat/types.ts +0 -146
  160. package/src/chat.ts +0 -140
  161. package/src/cli.ts +0 -180
  162. package/src/clients/anthropic.ts +0 -772
  163. package/src/clients/attribution.ts +0 -53
  164. package/src/clients/cerebras.ts +0 -10
  165. package/src/clients/contextLimits.ts +0 -263
  166. package/src/clients/copilot.ts +0 -23
  167. package/src/clients/deepseek.ts +0 -16
  168. package/src/clients/fireworks.ts +0 -71
  169. package/src/clients/gemini.ts +0 -1169
  170. package/src/clients/github.ts +0 -16
  171. package/src/clients/groq.ts +0 -15
  172. package/src/clients/http.ts +0 -719
  173. package/src/clients/index.ts +0 -1153
  174. package/src/clients/knowhow.ts +0 -130
  175. package/src/clients/knowhowMcp.ts +0 -118
  176. package/src/clients/llama.ts +0 -16
  177. package/src/clients/meta.ts +0 -27
  178. package/src/clients/mistral.ts +0 -16
  179. package/src/clients/nvidia.ts +0 -16
  180. package/src/clients/openai.ts +0 -1186
  181. package/src/clients/openrouter.ts +0 -24
  182. package/src/clients/pricing/anthropic.ts +0 -149
  183. package/src/clients/pricing/cerebras.ts +0 -11
  184. package/src/clients/pricing/copilot.ts +0 -60
  185. package/src/clients/pricing/deepseek.ts +0 -15
  186. package/src/clients/pricing/fireworks.ts +0 -182
  187. package/src/clients/pricing/github.ts +0 -69
  188. package/src/clients/pricing/google.ts +0 -385
  189. package/src/clients/pricing/groq.ts +0 -56
  190. package/src/clients/pricing/index.ts +0 -44
  191. package/src/clients/pricing/llama.ts +0 -18
  192. package/src/clients/pricing/meta.ts +0 -12
  193. package/src/clients/pricing/mistral.ts +0 -34
  194. package/src/clients/pricing/models.ts +0 -25
  195. package/src/clients/pricing/nvidia.ts +0 -102
  196. package/src/clients/pricing/openai.ts +0 -409
  197. package/src/clients/pricing/openrouter.ts +0 -36
  198. package/src/clients/pricing/qwen.ts +0 -80
  199. package/src/clients/pricing/types.ts +0 -125
  200. package/src/clients/pricing/xai.ts +0 -137
  201. package/src/clients/qwen.ts +0 -16
  202. package/src/clients/responseMetadata.ts +0 -221
  203. package/src/clients/types.ts +0 -531
  204. package/src/clients/withRetry.ts +0 -89
  205. package/src/clients/xai.ts +0 -693
  206. package/src/cloudWorker.ts +0 -394
  207. package/src/commands/agent.ts +0 -342
  208. package/src/commands/agents.ts +0 -1037
  209. package/src/commands/behaviors.ts +0 -47
  210. package/src/commands/convert.ts +0 -291
  211. package/src/commands/hash.ts +0 -179
  212. package/src/commands/mcp.ts +0 -743
  213. package/src/commands/misc.ts +0 -373
  214. package/src/commands/modules.ts +0 -704
  215. package/src/commands/processes.ts +0 -248
  216. package/src/commands/remote.ts +0 -77
  217. package/src/commands/replay.ts +0 -503
  218. package/src/commands/sandbox.ts +0 -566
  219. package/src/commands/services.ts +0 -168
  220. package/src/commands/skills.ts +0 -107
  221. package/src/commands/workers.ts +0 -168
  222. package/src/config.ts +0 -468
  223. package/src/conversion.ts +0 -69
  224. package/src/dataset/diffs/README.md +0 -12
  225. package/src/dataset/diffs/debug-errors.ts +0 -29
  226. package/src/dataset/diffs/debug.ts +0 -64
  227. package/src/dataset/diffs/generate.ts +0 -71
  228. package/src/dataset/diffs/jsonl.ts +0 -53
  229. package/src/dataset/diffs/test.ts +0 -194
  230. package/src/embeddings.ts +0 -494
  231. package/src/fileSync.ts +0 -369
  232. package/src/generate.ts +0 -529
  233. package/src/hashes.ts +0 -180
  234. package/src/index.ts +0 -261
  235. package/src/logger.ts +0 -197
  236. package/src/login.ts +0 -209
  237. package/src/microphone.ts +0 -141
  238. package/src/migrations.ts +0 -151
  239. package/src/plugins/AgentsMdPlugin.ts +0 -118
  240. package/src/plugins/GitPlugin.ts +0 -598
  241. package/src/plugins/LinterPlugin.ts +0 -214
  242. package/src/plugins/PluginBase.ts +0 -70
  243. package/src/plugins/SkillsPlugin.ts +0 -37
  244. package/src/plugins/embedding.ts +0 -82
  245. package/src/plugins/exec.ts +0 -70
  246. package/src/plugins/language.ts +0 -290
  247. package/src/plugins/plugins.ts +0 -175
  248. package/src/plugins/tmux.ts +0 -132
  249. package/src/plugins/types.ts +0 -36
  250. package/src/plugins/url.ts +0 -101
  251. package/src/plugins/vim.ts +0 -89
  252. package/src/processes/ProcessManager.ts +0 -96
  253. package/src/processes/managedProcessShim.ts +0 -138
  254. package/src/processors/Base64ImageDetector.ts +0 -502
  255. package/src/processors/CustomVariables.ts +0 -693
  256. package/src/processors/GemmaToolProcessor.ts +0 -163
  257. package/src/processors/HarmonyToolProcessor.ts +0 -264
  258. package/src/processors/JsonCompressor.ts +0 -510
  259. package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
  260. package/src/processors/TokenCompressor.ts +0 -620
  261. package/src/processors/ToolResponseCache.ts +0 -322
  262. package/src/processors/XmlToolCallProcessor.ts +0 -533
  263. package/src/processors/index.ts +0 -14
  264. package/src/processors/tools/boundedToolResponse.ts +0 -49
  265. package/src/processors/tools/grepToolResponse.ts +0 -230
  266. package/src/processors/tools/index.ts +0 -23
  267. package/src/processors/tools/jqToolResponse.ts +0 -159
  268. package/src/processors/tools/listStoredToolResponses.ts +0 -124
  269. package/src/processors/tools/tailToolResponse.ts +0 -148
  270. package/src/prompts/BasicCodeDocumenter.ts +0 -1
  271. package/src/prompts/BasicProjectDocumenter.ts +0 -1
  272. package/src/prompts/EmbeddingSeachHelper.ts +0 -1
  273. package/src/prompts/KnowhowConfigExamples.ts +0 -376
  274. package/src/prompts/index.ts +0 -9
  275. package/src/remotes.ts +0 -110
  276. package/src/server/index.ts +0 -16
  277. package/src/services/AgentService.ts +0 -134
  278. package/src/services/AgentSyncFs.ts +0 -775
  279. package/src/services/AgentSyncKnowhowWeb.ts +0 -389
  280. package/src/services/BehaviorsService.ts +0 -466
  281. package/src/services/DockerService.ts +0 -511
  282. package/src/services/EmbeddingService.ts +0 -427
  283. package/src/services/EmbeddingsService.ts +0 -73
  284. package/src/services/EventService.ts +0 -279
  285. package/src/services/ExtensionsService.ts +0 -25
  286. package/src/services/KnowhowClient.ts +0 -928
  287. package/src/services/LazyToolsService.ts +0 -210
  288. package/src/services/Mcp.ts +0 -727
  289. package/src/services/McpServer.ts +0 -155
  290. package/src/services/McpWebsocketTransport.ts +0 -87
  291. package/src/services/MediaProcessorService.ts +0 -669
  292. package/src/services/MessageProcessor.ts +0 -114
  293. package/src/services/MinimalToolsService.ts +0 -177
  294. package/src/services/RuntimeReloadService.ts +0 -31
  295. package/src/services/S3.ts +0 -61
  296. package/src/services/SessionManager.ts +0 -358
  297. package/src/services/SkillsService.ts +0 -822
  298. package/src/services/SyncedAgentWatcher.ts +0 -124
  299. package/src/services/SyncerService.ts +0 -191
  300. package/src/services/TaskRegistry.ts +0 -110
  301. package/src/services/Tools.ts +0 -580
  302. package/src/services/TracingService.ts +0 -116
  303. package/src/services/conversion/ConversionService.ts +0 -757
  304. package/src/services/conversion/index.ts +0 -2
  305. package/src/services/conversion/types.ts +0 -87
  306. package/src/services/flags.ts +0 -51
  307. package/src/services/index.ts +0 -117
  308. package/src/services/modules/computerUse.ts +0 -218
  309. package/src/services/modules/index.ts +0 -314
  310. package/src/services/modules/types.ts +0 -109
  311. package/src/services/types.ts +0 -60
  312. package/src/services/watchers/FsSyncer.ts +0 -199
  313. package/src/services/watchers/RemoteSyncer.ts +0 -196
  314. package/src/services/watchers/index.ts +0 -2
  315. package/src/tunnel.ts +0 -243
  316. package/src/types.ts +0 -282
  317. package/src/util/Trace.ts +0 -236
  318. package/src/utils/InputQueueManager.ts +0 -493
  319. package/src/utils/errors.ts +0 -0
  320. package/src/utils/http.ts +0 -150
  321. package/src/utils/index.ts +0 -111
  322. package/src/worker.ts +0 -696
  323. package/src/workerRegistry.ts +0 -152
  324. package/src/workers/auth/PasskeySetup.ts +0 -181
  325. package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
  326. package/src/workers/auth/WsMiddleware.ts +0 -99
  327. package/src/workers/auth/authMiddleware.ts +0 -104
  328. package/src/workers/auth/types.ts +0 -70
  329. package/src/workers/tools/getChallenge.ts +0 -33
  330. package/src/workers/tools/index.ts +0 -20
  331. package/src/workers/tools/listAllowedPorts.ts +0 -30
  332. package/src/workers/tools/lock.ts +0 -31
  333. package/src/workers/tools/reloadConfig.ts +0 -84
  334. package/src/workers/tools/unlock.ts +0 -116
  335. package/tests/XmlToolCallProcessor.test.ts +0 -468
  336. package/tests/agents/interrupt.test.ts +0 -200
  337. package/tests/agents/observe-base.test.ts +0 -183
  338. package/tests/agents/tools/connectAgent.test.ts +0 -138
  339. package/tests/agents/tools/observe.test.ts +0 -179
  340. package/tests/agents/tools/readFile.test.ts +0 -88
  341. package/tests/agents/tools/replyToParent.test.ts +0 -125
  342. package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
  343. package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
  344. package/tests/chat/detach-attach-rendering.test.ts +0 -315
  345. package/tests/clients/AIClient.test.ts +0 -668
  346. package/tests/clients/anthropic.test.ts +0 -202
  347. package/tests/clients/contextLimits.test.ts +0 -97
  348. package/tests/clients/fireworks.test.ts +0 -65
  349. package/tests/clients/openai.images.test.ts +0 -105
  350. package/tests/clients/pricing.test.ts +0 -206
  351. package/tests/clients/reasoningEffort.test.ts +0 -140
  352. package/tests/compressor/bigstring.test.ts +0 -450
  353. package/tests/compressor/bigstring.txt +0 -1
  354. package/tests/compressor/githubjson.txt +0 -1
  355. package/tests/compressor/toolResponseCache.test.ts +0 -304
  356. package/tests/compressor/usageBase64.json +0 -159
  357. package/tests/compressor/usageBase64.test.ts +0 -175
  358. package/tests/fixtures/fake-secret.txt +0 -1
  359. package/tests/manual/agent-events/run-test.ts +0 -203
  360. package/tests/manual/browser-login/README.md +0 -189
  361. package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
  362. package/tests/manual/browser-login/test_cli_integration.ts +0 -169
  363. package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
  364. package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
  365. package/tests/manual/cli/no-env.sh +0 -274
  366. package/tests/manual/clients/completions.json +0 -1151
  367. package/tests/manual/clients/completions.test.ts +0 -198
  368. package/tests/manual/file-edits/figma.test.ts +0 -3
  369. package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
  370. package/tests/manual/file-edits/patching/input.txt +0 -145
  371. package/tests/manual/file-edits/patching/output.txt +0 -145
  372. package/tests/manual/file-edits/patching/patch.txt +0 -15
  373. package/tests/manual/file-edits/patching/unseen.txt +0 -80
  374. package/tests/manual/file-edits/patching.test.ts +0 -139
  375. package/tests/manual/modalities/README.md +0 -157
  376. package/tests/manual/modalities/google.modalities.test.ts +0 -335
  377. package/tests/manual/modalities/openai.modalities.test.ts +0 -329
  378. package/tests/manual/modalities/streaming.test.ts +0 -260
  379. package/tests/manual/modalities/xai.modalities.test.ts +0 -294
  380. package/tests/manual/test-concurrent-ask.ts +0 -43
  381. package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
  382. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
  383. package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
  384. package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
  385. package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
  386. package/tests/manual/ycmd/simple_test.ts +0 -74
  387. package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
  388. package/tests/manual/ycmd/test_advanced_features.ts +0 -407
  389. package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
  390. package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
  391. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
  392. package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
  393. package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
  394. package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
  395. package/tests/manual/ycmd/test_discover_commands.ts +0 -310
  396. package/tests/manual/ycmd/test_endpoints.ts +0 -115
  397. package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
  398. package/tests/manual/ycmd/test_final_validation.ts +0 -150
  399. package/tests/manual/ycmd/test_implementation.js +0 -42
  400. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
  401. package/tests/manual/ycmd/test_server_manager.ts +0 -52
  402. package/tests/manual/ycmd/test_simple_debug.ts +0 -86
  403. package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
  404. package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
  405. package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
  406. package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
  407. package/tests/manual/ycmd/test_workspace_config.ts +0 -90
  408. package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
  409. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
  410. package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
  411. package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
  412. package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
  413. package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
  414. package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
  415. package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
  416. package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
  417. package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
  418. package/tests/manual/ycmd/working_simple_test.ts +0 -134
  419. package/tests/patching/corrupted.test.ts +0 -78
  420. package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
  421. package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
  422. package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
  423. package/tests/patching/imports.patch.txt +0 -11
  424. package/tests/patching/imports.test.ts +0 -43
  425. package/tests/patching/imports.txt +0 -11
  426. package/tests/patching/interface.patch.txt +0 -15
  427. package/tests/patching/interface.txt +0 -7
  428. package/tests/patching/patchFileOutput.test.ts +0 -328
  429. package/tests/patching/regression-2026.test.ts +0 -752
  430. package/tests/patching/transcriptMangleRegression.test.ts +0 -125
  431. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
  432. package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
  433. package/tests/plugins/language/languagePlugin.test.ts +0 -385
  434. package/tests/processes/managedProcessShim.test.ts +0 -59
  435. package/tests/processors/Base64ImageDetector.test.ts +0 -979
  436. package/tests/processors/CustomVariables.test.ts +0 -981
  437. package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
  438. package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
  439. package/tests/processors/TokenCompressor.test.ts +0 -674
  440. package/tests/processors/ToolResponseCache.test.ts +0 -864
  441. package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
  442. package/tests/processors/tools/grepToolResponse.test.ts +0 -159
  443. package/tests/services/ConversionService.test.ts +0 -154
  444. package/tests/services/DockerService.test.ts +0 -24
  445. package/tests/services/Tools.test.ts +0 -1738
  446. package/tests/services/ToolsService.setFunction.test.ts +0 -68
  447. package/tests/services/WorkerReloadConfig.test.ts +0 -141
  448. package/tests/test.spec.ts +0 -163
  449. package/tests/unit/InputQueueManager.test.ts +0 -174
  450. package/tests/unit/McpWebsocketTransport.test.ts +0 -56
  451. package/tests/unit/agents/historyRollback.test.ts +0 -53
  452. package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
  453. package/tests/unit/auth/jwtStore.test.ts +0 -55
  454. package/tests/unit/auth/keyAuth.test.ts +0 -152
  455. package/tests/unit/auth/keyManager.test.ts +0 -130
  456. package/tests/unit/auth/registerIdentity.test.ts +0 -99
  457. package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
  458. package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
  459. package/tests/unit/clients/AIClient.test.ts +0 -454
  460. package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
  461. package/tests/unit/clients/attribution.test.ts +0 -185
  462. package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
  463. package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
  464. package/tests/unit/clients/responseMetadata.test.ts +0 -123
  465. package/tests/unit/clients/withRetry.test.ts +0 -319
  466. package/tests/unit/commands/agents.test.ts +0 -111
  467. package/tests/unit/commands/github-credentials.test.ts +0 -210
  468. package/tests/unit/commands/misc.test.ts +0 -85
  469. package/tests/unit/commands/remote.test.ts +0 -79
  470. package/tests/unit/commands/sandbox.test.ts +0 -350
  471. package/tests/unit/hashes.test.ts +0 -23
  472. package/tests/unit/input-queue.test.ts +0 -80
  473. package/tests/unit/login.test.ts +0 -218
  474. package/tests/unit/modules/moduleLoading.test.ts +0 -305
  475. package/tests/unit/plugins/pluginLoading.test.ts +0 -97
  476. package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
  477. package/tests/unit/services/KnowhowClient.test.ts +0 -84
  478. package/tests/unit/services/LazyToolsService.test.ts +0 -53
  479. package/tests/unit/services/Mcp.test.ts +0 -56
  480. package/tests/unit/services/MinimalToolsService.test.ts +0 -424
  481. package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
  482. package/tests/unit/services/SessionManager.test.ts +0 -43
  483. package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
  484. package/tests/unit/services/SyncerService.test.ts +0 -45
  485. package/tests/unit/tunnel.test.ts +0 -51
  486. package/tests/unit/util/Trace.test.ts +0 -119
  487. package/tests/unit/utils/http.test.ts +0 -43
  488. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
  489. package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
  490. package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
  491. package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
  492. package/ts_build/tests/agents/interrupt.test.js +0 -136
  493. package/ts_build/tests/agents/interrupt.test.js.map +0 -1
  494. package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
  495. package/ts_build/tests/agents/observe-base.test.js +0 -149
  496. package/ts_build/tests/agents/observe-base.test.js.map +0 -1
  497. package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
  498. package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
  499. package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
  500. package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
  501. package/ts_build/tests/agents/tools/observe.test.js +0 -148
  502. package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
  503. package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
  504. package/ts_build/tests/agents/tools/readFile.test.js +0 -90
  505. package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
  506. package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
  507. package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
  508. package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
  509. package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
  510. package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
  511. package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
  512. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
  513. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
  514. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
  515. package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
  516. package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
  517. package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
  518. package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
  519. package/ts_build/tests/clients/AIClient.test.js +0 -483
  520. package/ts_build/tests/clients/AIClient.test.js.map +0 -1
  521. package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
  522. package/ts_build/tests/clients/anthropic.test.js +0 -159
  523. package/ts_build/tests/clients/anthropic.test.js.map +0 -1
  524. package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
  525. package/ts_build/tests/clients/contextLimits.test.js +0 -69
  526. package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
  527. package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
  528. package/ts_build/tests/clients/fireworks.test.js +0 -65
  529. package/ts_build/tests/clients/fireworks.test.js.map +0 -1
  530. package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
  531. package/ts_build/tests/clients/openai.images.test.js +0 -94
  532. package/ts_build/tests/clients/openai.images.test.js.map +0 -1
  533. package/ts_build/tests/clients/pricing.test.d.ts +0 -1
  534. package/ts_build/tests/clients/pricing.test.js +0 -124
  535. package/ts_build/tests/clients/pricing.test.js.map +0 -1
  536. package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
  537. package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
  538. package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
  539. package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
  540. package/ts_build/tests/compressor/bigstring.test.js +0 -275
  541. package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
  542. package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
  543. package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
  544. package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
  545. package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
  546. package/ts_build/tests/compressor/usageBase64.test.js +0 -109
  547. package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
  548. package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
  549. package/ts_build/tests/manual/agent-events/run-test.js +0 -148
  550. package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
  551. package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
  552. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
  553. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
  554. package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
  555. package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
  556. package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
  557. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
  558. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
  559. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
  560. package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
  561. package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
  562. package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
  563. package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
  564. package/ts_build/tests/manual/clients/completions.test.js +0 -151
  565. package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
  566. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
  567. package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
  568. package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
  569. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
  570. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
  571. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
  572. package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
  573. package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
  574. package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
  575. package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
  576. package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
  577. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
  578. package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
  579. package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
  580. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
  581. package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
  582. package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
  583. package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
  584. package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
  585. package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
  586. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
  587. package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
  588. package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
  589. package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
  590. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
  591. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
  592. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
  593. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
  594. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
  595. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
  596. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
  597. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
  598. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
  599. package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
  600. package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
  601. package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
  602. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
  603. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
  604. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
  605. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
  606. package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
  607. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
  608. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
  609. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
  610. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
  611. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
  612. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
  613. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
  614. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
  615. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
  616. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
  617. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
  618. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
  619. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
  620. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
  621. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
  622. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
  623. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
  624. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
  625. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
  626. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
  627. package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
  628. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
  629. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
  630. package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
  631. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
  632. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
  633. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
  634. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
  635. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
  636. package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
  637. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
  638. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
  639. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
  640. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
  641. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
  642. package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
  643. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
  644. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
  645. package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
  646. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
  647. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
  648. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
  649. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
  650. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
  651. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
  652. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
  653. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
  654. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
  655. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
  656. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
  657. package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
  658. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
  659. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
  660. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
  661. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
  662. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
  663. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
  664. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
  665. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
  666. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
  667. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
  668. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
  669. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
  670. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
  671. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
  672. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
  673. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
  674. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
  675. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
  676. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
  677. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
  678. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
  679. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
  680. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
  681. package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
  682. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
  683. package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
  684. package/ts_build/tests/patching/corrupted.test.js +0 -53
  685. package/ts_build/tests/patching/corrupted.test.js.map +0 -1
  686. package/ts_build/tests/patching/imports.test.d.ts +0 -1
  687. package/ts_build/tests/patching/imports.test.js +0 -71
  688. package/ts_build/tests/patching/imports.test.js.map +0 -1
  689. package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
  690. package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
  691. package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
  692. package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
  693. package/ts_build/tests/patching/regression-2026.test.js +0 -528
  694. package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
  695. package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
  696. package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
  697. package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
  698. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
  699. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
  700. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
  701. package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
  702. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
  703. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
  704. package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
  705. package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
  706. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
  707. package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
  708. package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
  709. package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
  710. package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
  711. package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
  712. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
  713. package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
  714. package/ts_build/tests/processors/CustomVariables.test.js +0 -764
  715. package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
  716. package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
  717. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
  718. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
  719. package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
  720. package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
  721. package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
  722. package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
  723. package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
  724. package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
  725. package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
  726. package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
  727. package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
  728. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
  729. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
  730. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
  731. package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
  732. package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
  733. package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
  734. package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
  735. package/ts_build/tests/services/ConversionService.test.js +0 -154
  736. package/ts_build/tests/services/ConversionService.test.js.map +0 -1
  737. package/ts_build/tests/services/DockerService.test.d.ts +0 -1
  738. package/ts_build/tests/services/DockerService.test.js +0 -22
  739. package/ts_build/tests/services/DockerService.test.js.map +0 -1
  740. package/ts_build/tests/services/Tools.test.d.ts +0 -1
  741. package/ts_build/tests/services/Tools.test.js +0 -1365
  742. package/ts_build/tests/services/Tools.test.js.map +0 -1
  743. package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
  744. package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
  745. package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
  746. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
  747. package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
  748. package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
  749. package/ts_build/tests/test.spec.d.ts +0 -1
  750. package/ts_build/tests/test.spec.js +0 -139
  751. package/ts_build/tests/test.spec.js.map +0 -1
  752. package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
  753. package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
  754. package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
  755. package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
  756. package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
  757. package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
  758. package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
  759. package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
  760. package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
  761. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
  762. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
  763. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
  764. package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
  765. package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
  766. package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
  767. package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
  768. package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
  769. package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
  770. package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
  771. package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
  772. package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
  773. package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
  774. package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
  775. package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
  776. package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
  777. package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
  778. package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
  779. package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
  780. package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
  781. package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
  782. package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
  783. package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
  784. package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
  785. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
  786. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
  787. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
  788. package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
  789. package/ts_build/tests/unit/clients/attribution.test.js +0 -153
  790. package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
  791. package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
  792. package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
  793. package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
  794. package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
  795. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
  796. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
  797. package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
  798. package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
  799. package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
  800. package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
  801. package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
  802. package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
  803. package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
  804. package/ts_build/tests/unit/commands/agents.test.js +0 -119
  805. package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
  806. package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
  807. package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
  808. package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
  809. package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
  810. package/ts_build/tests/unit/commands/misc.test.js +0 -70
  811. package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
  812. package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
  813. package/ts_build/tests/unit/commands/remote.test.js +0 -70
  814. package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
  815. package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
  816. package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
  817. package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
  818. package/ts_build/tests/unit/hashes.test.d.ts +0 -1
  819. package/ts_build/tests/unit/hashes.test.js +0 -25
  820. package/ts_build/tests/unit/hashes.test.js.map +0 -1
  821. package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
  822. package/ts_build/tests/unit/input-queue.test.js +0 -32
  823. package/ts_build/tests/unit/input-queue.test.js.map +0 -1
  824. package/ts_build/tests/unit/login.test.d.ts +0 -1
  825. package/ts_build/tests/unit/login.test.js +0 -166
  826. package/ts_build/tests/unit/login.test.js.map +0 -1
  827. package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
  828. package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
  829. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
  830. package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
  831. package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
  832. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
  833. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
  834. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
  835. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
  836. package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
  837. package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
  838. package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
  839. package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
  840. package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
  841. package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
  842. package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
  843. package/ts_build/tests/unit/services/Mcp.test.js +0 -45
  844. package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
  845. package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
  846. package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
  847. package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
  848. package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
  849. package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
  850. package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
  851. package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
  852. package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
  853. package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
  854. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
  855. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
  856. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
  857. package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
  858. package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
  859. package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
  860. package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
  861. package/ts_build/tests/unit/tunnel.test.js +0 -47
  862. package/ts_build/tests/unit/tunnel.test.js.map +0 -1
  863. package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
  864. package/ts_build/tests/unit/util/Trace.test.js +0 -107
  865. package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
  866. package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
  867. package/ts_build/tests/unit/utils/http.test.js +0 -69
  868. package/ts_build/tests/unit/utils/http.test.js.map +0 -1
  869. package/tsconfig.json +0 -34
  870. package/tslint.json +0 -11
@@ -1,669 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { exec, spawn } from "child_process";
4
- import { promisify } from "util";
5
- import { fileExists, readFile, mkdir } from "../utils";
6
- import { AIClient } from "../clients";
7
- import { Models } from "../types";
8
-
9
- const execPromise = promisify(exec);
10
-
11
- async function execAsync(command: string): Promise<string> {
12
- const { stdout, stderr } = await execPromise(command);
13
- return stdout + stderr;
14
- }
15
-
16
- export interface TranscriptChunk {
17
- chunkPath: string;
18
- text: string;
19
- usd_cost: number;
20
- }
21
-
22
- export interface KeyframeInfo {
23
- path: string;
24
- description: string;
25
- timestamp: number;
26
- usd_cost?: number;
27
- }
28
-
29
- /**
30
- * Options for processing a full video (transcription + keyframes).
31
- * Prefer passing this object over positional args so new options can be
32
- * added without changing call sites.
33
- */
34
- export interface ProcessVideoOptions {
35
- /** Reuse a previously cached transcript/keyframes if present. Default true. */
36
- reusePreviousTranscript?: boolean;
37
- /** Audio transcription chunk length in seconds. Default 30. */
38
- chunkTime?: number;
39
- /** Progress callback (0..1) fired during ffmpeg audio chunking. */
40
- onChunkingProgress?: (fraction: number) => void;
41
- /**
42
- * Seconds between sampled keyframes. When omitted, an adaptive interval is
43
- * computed from the video duration (clamped 0.5s..30s), so short videos get
44
- * a much denser set of frames (down to 500ms).
45
- */
46
- keyframeInterval?: number;
47
- }
48
-
49
- /**
50
- * MediaProcessorService handles audio/video processing using:
51
- * - ffmpeg (system tool) for chunking audio/video
52
- * - OpenAI Whisper API for transcription
53
- *
54
- * This is part of the core services because microphone recording and
55
- * audio-to-text transcription are base CLI features. The DownloaderService
56
- * (in @tyvm/knowhow-module-video-downloader) uses this service for the
57
- * audio/video processing steps after downloading with ytdl.
58
- */
59
- export class MediaProcessorService {
60
- constructor(private clients: AIClient) {}
61
-
62
- /**
63
- * Split an audio/video file into fixed-length mp3 chunks using ffmpeg.
64
- */
65
- public async chunk(
66
- filePath: string,
67
- outputDir: string,
68
- CHUNK_LENGTH_SECONDS = 30,
69
- reuseExistingChunks = true,
70
- onProgress?: (progressFraction: number) => void
71
- ): Promise<string[]> {
72
- const parsed = path.parse(filePath);
73
- const fileName = parsed.name;
74
- const outputDirPath = path.join(outputDir, `${fileName}/chunks`);
75
- await fs.promises.mkdir(outputDirPath, { recursive: true });
76
- const doneFilePath = path.join(outputDirPath, ".chunking_done");
77
-
78
- const doneFileExists = await fileExists(doneFilePath);
79
- const existingFolderFiles = await fs.promises.readdir(outputDirPath);
80
- const existingChunkNames = existingFolderFiles.filter(
81
- (f) => f.includes("chunk") && f.endsWith(".mp3")
82
- );
83
-
84
- if (existingChunkNames.length > 0 && doneFileExists) {
85
- if (reuseExistingChunks) {
86
- console.log("Chunks already exist, skipping");
87
- return existingChunkNames.map((chunkName) =>
88
- path.join(outputDirPath, chunkName)
89
- );
90
- } else {
91
- for (const file of existingFolderFiles) {
92
- fs.rmSync(path.join(outputDirPath, file), { recursive: true });
93
- }
94
- }
95
- }
96
-
97
- // Use faster encoding settings:
98
- // - mono audio (-ac 1): halves encoding work, Whisper handles mono fine
99
- // - low bitrate (-b:a 32k): sufficient for speech, much faster encode + smaller files
100
- // - fast preset not available for mp3 encoder, but limiting bitrate helps
101
- // - -threads 0: use all available CPU threads for faster processing
102
- // If the input is already an mp3, copy the audio stream to avoid re-encoding
103
- const inputExt = path.extname(filePath).toLowerCase().replace('.', '');
104
- const isAlreadyMp3 = inputExt === 'mp3';
105
- const audioCodecArgs = isAlreadyMp3
106
- ? '-acodec copy'
107
- : '-acodec libmp3lame -ac 1 -b:a 32k -threads 0';
108
-
109
- // Use -progress pipe:1 to get real-time progress from ffmpeg
110
- // We need the total duration first to calculate fraction
111
- await new Promise<void>((resolve, reject) => {
112
- // Get total duration via ffprobe first
113
- let totalDurationSeconds = 0;
114
- exec(
115
- `ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${filePath}"`,
116
- (err, stdout) => {
117
- if (!err && stdout.trim()) {
118
- totalDurationSeconds = parseFloat(stdout.trim()) || 0;
119
- }
120
-
121
- // Now run ffmpeg with progress reporting
122
- const args = [
123
- '-i', filePath,
124
- '-f', 'segment',
125
- '-segment_time', String(CHUNK_LENGTH_SECONDS),
126
- '-map', '0:a:0',
127
- ...audioCodecArgs.split(' '),
128
- '-vn',
129
- ...(onProgress ? ['-progress', 'pipe:1'] : []),
130
- `${outputDirPath}/chunk%04d.mp3`,
131
- ];
132
-
133
- const proc = spawn('ffmpeg', args);
134
-
135
- let stdoutBuf = '';
136
- proc.stdout?.on('data', (data: Buffer) => {
137
- stdoutBuf += data.toString();
138
- if (onProgress && totalDurationSeconds > 0) {
139
- // ffmpeg -progress outputs key=value lines; look for out_time_ms
140
- const match = stdoutBuf.match(/out_time_ms=(\d+)/g);
141
- if (match) {
142
- const last = match[match.length - 1];
143
- const ms = parseInt(last.split('=')[1], 10);
144
- const fraction = Math.min(ms / 1000 / totalDurationSeconds, 1);
145
- onProgress(fraction);
146
- // Keep only tail to avoid unbounded buffer growth
147
- stdoutBuf = stdoutBuf.slice(-500);
148
- }
149
- }
150
- });
151
-
152
- proc.on('close', (code) => {
153
- if (code === 0) resolve();
154
- else reject(new Error(`ffmpeg exited with code ${code}`));
155
- });
156
- proc.on('error', reject);
157
- }
158
- );
159
- });
160
-
161
- await fs.promises.writeFile(doneFilePath, "done");
162
-
163
- const folderFiles = await fs.promises.readdir(outputDirPath);
164
- const chunkNames = folderFiles.filter(
165
- (f) => f.includes("chunk") && f.endsWith(".mp3")
166
- );
167
- console.log("Chunked into", chunkNames.length, "chunks");
168
- return chunkNames.map((chunkName) => path.join(outputDirPath, chunkName));
169
- }
170
-
171
- /**
172
- * Stream transcription of audio chunks using Whisper.
173
- */
174
- public async *streamTranscription(
175
- files: string[],
176
- outputPath: string,
177
- reusePreviousTranscript = true
178
- ): AsyncGenerator<TranscriptChunk> {
179
- const exists = await fileExists(outputPath);
180
- if (exists && reusePreviousTranscript) {
181
- console.log("Transcription already exists, using cached data");
182
- const contents = await readFile(outputPath);
183
- const data = JSON.parse(contents.toString()) as TranscriptChunk[];
184
- for (const item of data) yield item;
185
- return;
186
- }
187
-
188
- const allTranscripts: TranscriptChunk[] = [];
189
- for (const file of files) {
190
- const chunkName = path.parse(file).name;
191
- const chunkTranscriptPath = path.join(
192
- path.dirname(outputPath),
193
- `/chunks/${chunkName}.txt`
194
- );
195
- const chunkExists = await fileExists(chunkTranscriptPath);
196
-
197
- if (chunkExists && reusePreviousTranscript) {
198
- const contents = await readFile(chunkTranscriptPath);
199
- const cached: TranscriptChunk = {
200
- chunkPath: chunkTranscriptPath,
201
- text: contents.toString(),
202
- usd_cost: 0,
203
- };
204
- yield cached;
205
- allTranscripts.push(cached);
206
- continue;
207
- }
208
-
209
- console.log("Transcribing", file);
210
- const fileBuffer = fs.readFileSync(file);
211
- const transcript = await this.clients
212
- .createAudioTranscription("openai", {
213
- file: fileBuffer,
214
- fileName: path.basename(file),
215
- model: "whisper-1",
216
- })
217
- .catch((e: any) => {
218
- console.error("Error transcribing", file, e);
219
- return { text: "" };
220
- });
221
-
222
- await mkdir(path.dirname(chunkTranscriptPath), { recursive: true });
223
- await fs.promises.writeFile(chunkTranscriptPath, transcript.text);
224
-
225
- const data: TranscriptChunk = {
226
- chunkPath: chunkTranscriptPath,
227
- text: transcript.text,
228
- usd_cost: 30 * 0.0001,
229
- };
230
- yield data;
231
- allTranscripts.push(data);
232
- }
233
-
234
- fs.writeFileSync(outputPath, JSON.stringify(allTranscripts, null, 2));
235
- }
236
-
237
- /**
238
- * Transcribe all audio chunks and return the text strings.
239
- */
240
- public async transcribeChunks(
241
- files: string[],
242
- outputPath: string,
243
- reusePreviousTranscript = true
244
- ): Promise<string[]> {
245
- const exists = await fileExists(outputPath);
246
- if (exists && reusePreviousTranscript) {
247
- const contents = await readFile(outputPath);
248
- return JSON.parse(contents.toString()) as string[];
249
- }
250
-
251
- const fullText: string[] = [];
252
- for await (const { text } of this.streamTranscription(
253
- files,
254
- outputPath,
255
- reusePreviousTranscript
256
- )) {
257
- fullText.push(text);
258
- }
259
-
260
- await fs.promises.writeFile(outputPath, JSON.stringify(fullText));
261
- return fullText;
262
- }
263
-
264
- /**
265
- * Process an audio/video file: chunk it with ffmpeg, then transcribe each chunk.
266
- * Returns an array of transcript strings (one per chunk).
267
- */
268
- public async processAudio(
269
- filePath: string,
270
- reusePreviousTranscript = true,
271
- chunkTime = 30
272
- ): Promise<string[]> {
273
- const parsed = path.parse(filePath);
274
- const outputPath = `${parsed.dir}/${parsed.name}/transcript.json`;
275
-
276
- const exists = await fileExists(outputPath);
277
- if (exists && reusePreviousTranscript) {
278
- const fileContent = (await readFile(outputPath, "utf8")) as string;
279
- return outputPath.endsWith("txt")
280
- ? fileContent.split("\n")
281
- : JSON.parse(fileContent);
282
- }
283
-
284
- const chunks = await this.chunk(
285
- filePath,
286
- parsed.dir,
287
- chunkTime,
288
- reusePreviousTranscript
289
- );
290
- return this.transcribeChunks(chunks, outputPath, reusePreviousTranscript);
291
- }
292
-
293
- /**
294
- * Extract keyframes from a video file using ffmpeg, then describe each with vision AI.
295
- *
296
- * @param filePath - Path to the input video file.
297
- * @param videoJsonPath - Path where the resulting keyframe JSON data will be saved/cached.
298
- * @param reusePreviousKeyframes - Whether to reuse previously extracted keyframes (default: true).
299
- * @param interval - How often (in seconds) to sample a frame from the video (default: 10).
300
- * Lower values produce more frames; higher values produce fewer.
301
- */
302
- public async *streamKeyFrameExtraction(
303
- filePath: string,
304
- videoJsonPath: string,
305
- reusePreviousKeyframes = true,
306
- interval?: number
307
- ): AsyncGenerator<KeyframeInfo> {
308
- if (interval === undefined) {
309
- const duration = await this.getMediaDuration(filePath);
310
- const rawInterval = (duration / 3600) * 30;
311
- interval = Math.min(30, Math.max(0.5, rawInterval));
312
- }
313
-
314
- if (reusePreviousKeyframes && fs.existsSync(videoJsonPath)) {
315
- const contents = await readFile(videoJsonPath);
316
- const data = JSON.parse(contents.toString()) as KeyframeInfo[];
317
- for (const keyframe of data) yield { ...keyframe, usd_cost: 0 };
318
- return;
319
- }
320
-
321
- const outputDir = path.dirname(videoJsonPath);
322
- const keyframesDir = path.join(outputDir, "keyframes");
323
- await fs.promises.mkdir(keyframesDir, { recursive: true });
324
-
325
- const command = `ffmpeg -i "${filePath}" -vf "fps=1/${interval},scale=640:-1" "${keyframesDir}/frame%04d.jpg"`;
326
- await execAsync(command);
327
-
328
- const keyframes = await fs.promises.readdir(keyframesDir);
329
- const allKeyframes: KeyframeInfo[] = [];
330
-
331
- for (const keyframe of keyframes) {
332
- const keyframePath = path.join(keyframesDir, keyframe);
333
- const keyframeName = path.parse(keyframe).name;
334
- const keyframeDescriptionPath = path.join(
335
- keyframesDir,
336
- `${keyframeName}.json`
337
- );
338
- const descriptionExists = await fileExists(keyframeDescriptionPath);
339
-
340
- if (descriptionExists && reusePreviousKeyframes) {
341
- const cached = await readFile(keyframeDescriptionPath);
342
- const cachedJson = JSON.parse(cached.toString()) as KeyframeInfo;
343
- yield { ...cachedJson, usd_cost: 0 };
344
- allKeyframes.push(cachedJson);
345
- continue;
346
- }
347
-
348
- const description = await this.describeKeyframe(keyframePath);
349
- const frameNumber = parseInt(keyframe.match(/\d+/)?.[0] ?? "0", 10);
350
- const keyframeJson: KeyframeInfo = {
351
- path: keyframePath,
352
- description: description.choices[0].message.content,
353
- timestamp: frameNumber * interval,
354
- usd_cost: description.usd_cost,
355
- };
356
- await fs.promises.writeFile(
357
- keyframeDescriptionPath,
358
- JSON.stringify(keyframeJson, null, 2)
359
- );
360
- yield keyframeJson;
361
- allKeyframes.push(keyframeJson);
362
- }
363
-
364
- await fs.promises.writeFile(
365
- videoJsonPath,
366
- JSON.stringify(allKeyframes, null, 2)
367
- );
368
- }
369
-
370
- /**
371
- * Extract keyframes from a video file and return them as an array.
372
- *
373
- * @param filePath - Path to the input video file.
374
- * @param outputPath - Path where the resulting keyframe JSON data will be saved/cached.
375
- * @param reusePreviousKeyframes - Whether to reuse previously extracted keyframes (default: true).
376
- * @param interval - How often (in seconds) to sample a frame from the video (default: 10).
377
- * Lower values produce more frames; higher values produce fewer.
378
- */
379
-
380
- public async extractKeyframes(
381
- filePath: string,
382
- outputPath: string,
383
- reusePreviousKeyframes = true,
384
- interval?: number
385
- ): Promise<KeyframeInfo[]> {
386
- const keyframes: KeyframeInfo[] = [];
387
- for await (const keyframe of this.streamKeyFrameExtraction(
388
- filePath,
389
- outputPath,
390
- reusePreviousKeyframes,
391
- interval
392
- )) {
393
- keyframes.push(keyframe);
394
- }
395
- await fs.promises.writeFile(outputPath, JSON.stringify(keyframes, null, 2));
396
- return keyframes;
397
- }
398
-
399
- /**
400
- * Extract (and optionally describe) keyframes for a specific time slice of a
401
- * video, e.g. "just the first minute". This is useful for focusing a denser
402
- * frame sample on a short region without reprocessing the whole video.
403
- *
404
- * @param filePath Path to the input video file.
405
- * @param startSec Start of the slice in seconds (inclusive).
406
- * @param endSec End of the slice in seconds (exclusive).
407
- * @param options.interval Seconds between sampled frames within the slice.
408
- * Defaults to 1s. Clamped to a minimum of 0.5s.
409
- * @param options.describe Whether to run the vision model on each frame.
410
- * Defaults to true. Set false to get frames only.
411
- * @param options.outputDir Directory to write extracted frames into.
412
- * Defaults to <dir>/<name>/slices/<start>-<end>.
413
- */
414
- public async *streamKeyFrameExtractionForRange(
415
- filePath: string,
416
- startSec: number,
417
- endSec: number,
418
- options: {
419
- interval?: number;
420
- describe?: boolean;
421
- outputDir?: string;
422
- } = {}
423
- ): AsyncGenerator<KeyframeInfo> {
424
- const interval = Math.max(0.5, options.interval ?? 1);
425
- const describe = options.describe ?? true;
426
- const parsed = path.parse(filePath);
427
- const outputDir =
428
- options.outputDir ??
429
- path.join(parsed.dir, parsed.name, "slices", `${startSec}-${endSec}`);
430
- await fs.promises.mkdir(outputDir, { recursive: true });
431
-
432
- const duration = Math.max(0, endSec - startSec);
433
- // -ss before -i seeks quickly; -t limits to the slice length.
434
- const command =
435
- `ffmpeg -y -ss ${startSec} -t ${duration} -i "${filePath}" ` +
436
- `-vf "fps=1/${interval},scale=640:-1" "${outputDir}/frame%04d.jpg"`;
437
- await execAsync(command);
438
-
439
- const frames = (await fs.promises.readdir(outputDir))
440
- .filter((f) => f.endsWith(".jpg"))
441
- .sort();
442
-
443
- for (const frame of frames) {
444
- const framePath = path.join(outputDir, frame);
445
- const frameNumber = parseInt(frame.match(/\d+/)?.[0] ?? "0", 10);
446
- // ffmpeg names frames starting at 1; map back to absolute video time.
447
- const timestamp = startSec + (frameNumber - 1) * interval;
448
-
449
- if (!describe) {
450
- yield { path: framePath, description: "", timestamp, usd_cost: 0 };
451
- continue;
452
- }
453
-
454
- const description = await this.describeKeyframe(framePath);
455
- yield {
456
- path: framePath,
457
- description: description.choices[0].message.content,
458
- timestamp,
459
- usd_cost: description.usd_cost,
460
- };
461
- }
462
- }
463
-
464
- /**
465
- * Extract an audio slice [startSec, endSec) from a media file into an mp3.
466
- * Returns the path to the produced mp3, suitable for transcription or download.
467
- */
468
- public async extractAudioSlice(
469
- filePath: string,
470
- startSec: number,
471
- endSec: number,
472
- outputPath?: string
473
- ): Promise<string> {
474
- const parsed = path.parse(filePath);
475
- const outPath =
476
- outputPath ??
477
- path.join(
478
- parsed.dir,
479
- parsed.name,
480
- "slices",
481
- `audio-${startSec}-${endSec}.mp3`
482
- );
483
- await fs.promises.mkdir(path.dirname(outPath), { recursive: true });
484
-
485
- const duration = Math.max(0, endSec - startSec);
486
- const command =
487
- `ffmpeg -y -ss ${startSec} -t ${duration} -i "${filePath}" ` +
488
- `-vn -acodec libmp3lame -ac 1 -b:a 32k "${outPath}"`;
489
- await execAsync(command);
490
- return outPath;
491
- }
492
-
493
- /**
494
- * Get the duration of a media file in seconds using ffprobe.
495
- */
496
- public async getMediaDuration(filePath: string): Promise<number> {
497
- const output = await execAsync(
498
- `ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${filePath}"`
499
- );
500
- return parseFloat(output.trim());
501
- }
502
-
503
- private async describeKeyframe(keyframePath: string) {
504
- const question =
505
- "Describe this image in detail, focusing on the main elements and actions visible.";
506
- const base64 = await fs.promises.readFile(keyframePath, {
507
- encoding: "base64",
508
- });
509
- const image = `data:image/jpeg;base64,${base64}`;
510
- return this.clients.createCompletion("openai", {
511
- model: Models.openai.GPT_4o,
512
- max_tokens: 2500,
513
- timeout: 20000,
514
- messages: [
515
- {
516
- role: "user",
517
- content: [
518
- { type: "text", text: question },
519
- { type: "image_url", image_url: { url: image } },
520
- ],
521
- },
522
- ],
523
- });
524
- }
525
-
526
- async *streamProcessVideo(
527
- filePath: string,
528
- reusePreviousTranscriptOrOptions: boolean | ProcessVideoOptions = true,
529
- chunkTime = 30,
530
- onChunkingProgress?: (fraction: number) => void,
531
- keyframeInterval?: number
532
- ) {
533
- // Support both the legacy positional signature and a new options object
534
- // passed as the second argument. Prefer the options object going forward.
535
- const opts: Required<Pick<ProcessVideoOptions, "reusePreviousTranscript" | "chunkTime">> &
536
- ProcessVideoOptions =
537
- typeof reusePreviousTranscriptOrOptions === "object"
538
- ? {
539
- reusePreviousTranscript:
540
- reusePreviousTranscriptOrOptions.reusePreviousTranscript ?? true,
541
- chunkTime: reusePreviousTranscriptOrOptions.chunkTime ?? 30,
542
- onChunkingProgress:
543
- reusePreviousTranscriptOrOptions.onChunkingProgress,
544
- keyframeInterval:
545
- reusePreviousTranscriptOrOptions.keyframeInterval,
546
- }
547
- : {
548
- reusePreviousTranscript: reusePreviousTranscriptOrOptions,
549
- chunkTime,
550
- onChunkingProgress,
551
- keyframeInterval,
552
- };
553
-
554
- const parsed = path.parse(filePath);
555
- const videoJson = `${parsed.dir}/${parsed.name}/video.json`;
556
-
557
- console.log("Processing audio...");
558
- const transcriptions = this.streamProcessAudio(
559
- filePath,
560
- opts.reusePreviousTranscript,
561
- opts.chunkTime,
562
- opts.onChunkingProgress
563
- );
564
-
565
- console.log("Extracting keyframes...");
566
- // When keyframeInterval is undefined, streamKeyFrameExtraction computes an
567
- // adaptive interval based on video duration, clamped between 0.5s and 30s.
568
- // This gives short videos a much denser set of frames (down to 500ms) while
569
- // keeping long videos at a reasonable frame count. Previously this passed
570
- // chunkTime (30s), which meant every video only got 1 frame per 30s.
571
- const videoAnalysis = this.streamKeyFrameExtraction(
572
- filePath,
573
- videoJson,
574
- opts.reusePreviousTranscript,
575
- opts.keyframeInterval
576
- );
577
-
578
- // Frames and transcript chunks can arrive at different cadences: with an
579
- // adaptive keyframe interval a short video may have many more frames than
580
- // 30s transcript chunks. Rather than a 1:1 positional zip (which would
581
- // strand most frames with "[missing transcript]" and drop transcripts),
582
- // we map each frame to the transcript chunk that covers its timestamp.
583
- // Transcript chunk N covers [N*chunkTime, (N+1)*chunkTime).
584
- const transcriptBuffer: TranscriptChunk[] = [];
585
- const missingTranscript: TranscriptChunk = {
586
- chunkPath: "",
587
- text: "[missing transcript]",
588
- usd_cost: 0,
589
- };
590
-
591
- for await (const frame of videoAnalysis) {
592
- const chunkIndex = Math.floor((frame.timestamp || 0) / opts.chunkTime);
593
-
594
- // Pull transcript chunks until we have one that covers this frame's window.
595
- while (transcriptBuffer.length <= chunkIndex) {
596
- const next = await transcriptions.next();
597
- if (next.done) break;
598
- transcriptBuffer.push(next.value as TranscriptChunk);
599
- }
600
-
601
- const transcription = transcriptBuffer[chunkIndex] || missingTranscript;
602
- yield { frame, transcription };
603
- }
604
-
605
- // Drain any remaining transcript chunks (e.g. audio longer than the last
606
- // frame's window) so their content/cost isn't silently dropped.
607
- let remaining = await transcriptions.next();
608
- while (!remaining.done) {
609
- yield {
610
- frame: {
611
- path: "",
612
- description: "",
613
- timestamp: transcriptBuffer.length * opts.chunkTime,
614
- usd_cost: 0,
615
- },
616
- transcription: remaining.value as TranscriptChunk,
617
- };
618
- transcriptBuffer.push(remaining.value as TranscriptChunk);
619
- remaining = await transcriptions.next();
620
- }
621
- }
622
-
623
- async *streamProcessAudio(
624
- filePath: string,
625
- reusePreviousTranscript = true,
626
- chunkTime = 30,
627
- onChunkingProgress?: (fraction: number) => void
628
- ): AsyncGenerator<TranscriptChunk> {
629
- const parsed = path.parse(filePath);
630
- const outputPath = `${parsed.dir}/${parsed.name}/transcript.json`;
631
-
632
- // Skip chunking if the full output exists
633
- const exists = await fileExists(outputPath);
634
- if (exists && reusePreviousTranscript) {
635
- console.log(
636
- `Transcription ${outputPath} already exists, using cached data`
637
- );
638
- const fileContent = await readFile(outputPath, "utf8");
639
- const lines = outputPath.endsWith("txt")
640
- ? fileContent.split("\n")
641
- : JSON.parse(fileContent);
642
-
643
- for (const line of lines) {
644
- if (typeof line === "string") {
645
- yield { chunkPath: "", text: line, usd_cost: 0 };
646
- } else {
647
- yield line as TranscriptChunk;
648
- }
649
- }
650
- return;
651
- }
652
-
653
- const chunks = await this.chunk(
654
- filePath,
655
- parsed.dir,
656
- chunkTime,
657
- reusePreviousTranscript,
658
- onChunkingProgress
659
- );
660
-
661
- for await (const chunk of this.streamTranscription(
662
- chunks,
663
- outputPath,
664
- reusePreviousTranscript
665
- )) {
666
- yield chunk;
667
- }
668
- }
669
- }