patchwork-os 0.2.0-alpha.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 (721) hide show
  1. package/LICENSE +21 -0
  2. package/README.bridge.md +352 -0
  3. package/README.md +72 -0
  4. package/deploy/README.md +172 -0
  5. package/deploy/bootstrap-new-vps.sh +364 -0
  6. package/deploy/claude-ide-bridge.service.template +67 -0
  7. package/deploy/claude-ide-bridge@.service +31 -0
  8. package/deploy/ecosystem.config.js.example +36 -0
  9. package/deploy/install-vps-service.sh +240 -0
  10. package/deploy/nginx-claude-bridge.conf.template +129 -0
  11. package/dist/activityLog.d.ts +112 -0
  12. package/dist/activityLog.js +399 -0
  13. package/dist/activityLog.js.map +1 -0
  14. package/dist/activityTypes.d.ts +28 -0
  15. package/dist/activityTypes.js +9 -0
  16. package/dist/activityTypes.js.map +1 -0
  17. package/dist/adapters/base.d.ts +78 -0
  18. package/dist/adapters/base.js +14 -0
  19. package/dist/adapters/base.js.map +1 -0
  20. package/dist/adapters/claude.d.ts +18 -0
  21. package/dist/adapters/claude.js +276 -0
  22. package/dist/adapters/claude.js.map +1 -0
  23. package/dist/adapters/gemini.d.ts +17 -0
  24. package/dist/adapters/gemini.js +218 -0
  25. package/dist/adapters/gemini.js.map +1 -0
  26. package/dist/adapters/grok.d.ts +7 -0
  27. package/dist/adapters/grok.js +21 -0
  28. package/dist/adapters/grok.js.map +1 -0
  29. package/dist/adapters/index.d.ts +5 -0
  30. package/dist/adapters/index.js +37 -0
  31. package/dist/adapters/index.js.map +1 -0
  32. package/dist/adapters/local.d.ts +7 -0
  33. package/dist/adapters/local.js +22 -0
  34. package/dist/adapters/local.js.map +1 -0
  35. package/dist/adapters/openai.d.ts +22 -0
  36. package/dist/adapters/openai.js +284 -0
  37. package/dist/adapters/openai.js.map +1 -0
  38. package/dist/adapters/sse.d.ts +13 -0
  39. package/dist/adapters/sse.js +58 -0
  40. package/dist/adapters/sse.js.map +1 -0
  41. package/dist/analyticsAggregator.d.ts +28 -0
  42. package/dist/analyticsAggregator.js +133 -0
  43. package/dist/analyticsAggregator.js.map +1 -0
  44. package/dist/analyticsPrefs.d.ts +9 -0
  45. package/dist/analyticsPrefs.js +50 -0
  46. package/dist/analyticsPrefs.js.map +1 -0
  47. package/dist/analyticsSend.d.ts +12 -0
  48. package/dist/analyticsSend.js +34 -0
  49. package/dist/analyticsSend.js.map +1 -0
  50. package/dist/approvalHttp.d.ts +46 -0
  51. package/dist/approvalHttp.js +370 -0
  52. package/dist/approvalHttp.js.map +1 -0
  53. package/dist/approvalQueue.d.ts +49 -0
  54. package/dist/approvalQueue.js +84 -0
  55. package/dist/approvalQueue.js.map +1 -0
  56. package/dist/automation.d.ts +675 -0
  57. package/dist/automation.js +1038 -0
  58. package/dist/automation.js.map +1 -0
  59. package/dist/bridge.d.ts +85 -0
  60. package/dist/bridge.js +1535 -0
  61. package/dist/bridge.js.map +1 -0
  62. package/dist/bridgeLockDiscovery.d.ts +11 -0
  63. package/dist/bridgeLockDiscovery.js +49 -0
  64. package/dist/bridgeLockDiscovery.js.map +1 -0
  65. package/dist/bridgeToken.d.ts +22 -0
  66. package/dist/bridgeToken.js +114 -0
  67. package/dist/bridgeToken.js.map +1 -0
  68. package/dist/bridgeToolsRules.d.ts +20 -0
  69. package/dist/bridgeToolsRules.js +79 -0
  70. package/dist/bridgeToolsRules.js.map +1 -0
  71. package/dist/ccPermissions.d.ts +59 -0
  72. package/dist/ccPermissions.js +163 -0
  73. package/dist/ccPermissions.js.map +1 -0
  74. package/dist/claudeDriver.d.ts +129 -0
  75. package/dist/claudeDriver.js +459 -0
  76. package/dist/claudeDriver.js.map +1 -0
  77. package/dist/claudeMdPatch.d.ts +29 -0
  78. package/dist/claudeMdPatch.js +164 -0
  79. package/dist/claudeMdPatch.js.map +1 -0
  80. package/dist/claudeOrchestrator.d.ts +171 -0
  81. package/dist/claudeOrchestrator.js +591 -0
  82. package/dist/claudeOrchestrator.js.map +1 -0
  83. package/dist/commands/install.d.ts +1 -0
  84. package/dist/commands/install.js +158 -0
  85. package/dist/commands/install.js.map +1 -0
  86. package/dist/commands/marketplace.d.ts +11 -0
  87. package/dist/commands/marketplace.js +120 -0
  88. package/dist/commands/marketplace.js.map +1 -0
  89. package/dist/commands/patchworkInit.d.ts +14 -0
  90. package/dist/commands/patchworkInit.js +155 -0
  91. package/dist/commands/patchworkInit.js.map +1 -0
  92. package/dist/commands/task.d.ts +14 -0
  93. package/dist/commands/task.js +289 -0
  94. package/dist/commands/task.js.map +1 -0
  95. package/dist/commands/tokenEfficiency.d.ts +9 -0
  96. package/dist/commands/tokenEfficiency.js +211 -0
  97. package/dist/commands/tokenEfficiency.js.map +1 -0
  98. package/dist/commands/tools.d.ts +28 -0
  99. package/dist/commands/tools.js +326 -0
  100. package/dist/commands/tools.js.map +1 -0
  101. package/dist/commitIssueLinkLog.d.ts +77 -0
  102. package/dist/commitIssueLinkLog.js +142 -0
  103. package/dist/commitIssueLinkLog.js.map +1 -0
  104. package/dist/companions/registry.d.ts +12 -0
  105. package/dist/companions/registry.js +71 -0
  106. package/dist/companions/registry.js.map +1 -0
  107. package/dist/config.d.ts +105 -0
  108. package/dist/config.js +720 -0
  109. package/dist/config.js.map +1 -0
  110. package/dist/crypto.d.ts +16 -0
  111. package/dist/crypto.js +34 -0
  112. package/dist/crypto.js.map +1 -0
  113. package/dist/dashboard.d.ts +12 -0
  114. package/dist/dashboard.js +149 -0
  115. package/dist/dashboard.js.map +1 -0
  116. package/dist/decisionTraceLog.d.ts +77 -0
  117. package/dist/decisionTraceLog.js +147 -0
  118. package/dist/decisionTraceLog.js.map +1 -0
  119. package/dist/errors.d.ts +32 -0
  120. package/dist/errors.js +34 -0
  121. package/dist/errors.js.map +1 -0
  122. package/dist/extensionClient.d.ts +279 -0
  123. package/dist/extensionClient.js +1253 -0
  124. package/dist/extensionClient.js.map +1 -0
  125. package/dist/fileLock.d.ts +36 -0
  126. package/dist/fileLock.js +121 -0
  127. package/dist/fileLock.js.map +1 -0
  128. package/dist/fp/activityAnalytics.d.ts +39 -0
  129. package/dist/fp/activityAnalytics.js +111 -0
  130. package/dist/fp/activityAnalytics.js.map +1 -0
  131. package/dist/fp/async.d.ts +48 -0
  132. package/dist/fp/async.js +60 -0
  133. package/dist/fp/async.js.map +1 -0
  134. package/dist/fp/automationInterpreter.d.ts +37 -0
  135. package/dist/fp/automationInterpreter.js +523 -0
  136. package/dist/fp/automationInterpreter.js.map +1 -0
  137. package/dist/fp/automationProgram.d.ts +89 -0
  138. package/dist/fp/automationProgram.js +29 -0
  139. package/dist/fp/automationProgram.js.map +1 -0
  140. package/dist/fp/automationState.d.ts +135 -0
  141. package/dist/fp/automationState.js +206 -0
  142. package/dist/fp/automationState.js.map +1 -0
  143. package/dist/fp/automationUtils.d.ts +31 -0
  144. package/dist/fp/automationUtils.js +61 -0
  145. package/dist/fp/automationUtils.js.map +1 -0
  146. package/dist/fp/brandedTypes.d.ts +32 -0
  147. package/dist/fp/brandedTypes.js +41 -0
  148. package/dist/fp/brandedTypes.js.map +1 -0
  149. package/dist/fp/commandDescription.d.ts +18 -0
  150. package/dist/fp/commandDescription.js +125 -0
  151. package/dist/fp/commandDescription.js.map +1 -0
  152. package/dist/fp/extensionSnapshot.d.ts +10 -0
  153. package/dist/fp/extensionSnapshot.js +14 -0
  154. package/dist/fp/extensionSnapshot.js.map +1 -0
  155. package/dist/fp/index.d.ts +8 -0
  156. package/dist/fp/index.js +9 -0
  157. package/dist/fp/index.js.map +1 -0
  158. package/dist/fp/interpreterContext.d.ts +69 -0
  159. package/dist/fp/interpreterContext.js +56 -0
  160. package/dist/fp/interpreterContext.js.map +1 -0
  161. package/dist/fp/policyParser.d.ts +16 -0
  162. package/dist/fp/policyParser.js +334 -0
  163. package/dist/fp/policyParser.js.map +1 -0
  164. package/dist/fp/result.d.ts +38 -0
  165. package/dist/fp/result.js +57 -0
  166. package/dist/fp/result.js.map +1 -0
  167. package/dist/fp/tokenBucket.d.ts +27 -0
  168. package/dist/fp/tokenBucket.js +36 -0
  169. package/dist/fp/tokenBucket.js.map +1 -0
  170. package/dist/index.d.ts +2 -0
  171. package/dist/index.js +1465 -0
  172. package/dist/index.js.map +1 -0
  173. package/dist/instructionsUtils.d.ts +17 -0
  174. package/dist/instructionsUtils.js +38 -0
  175. package/dist/instructionsUtils.js.map +1 -0
  176. package/dist/lockfile.d.ts +16 -0
  177. package/dist/lockfile.js +172 -0
  178. package/dist/lockfile.js.map +1 -0
  179. package/dist/logger.d.ts +16 -0
  180. package/dist/logger.js +68 -0
  181. package/dist/logger.js.map +1 -0
  182. package/dist/oauth.d.ts +105 -0
  183. package/dist/oauth.js +880 -0
  184. package/dist/oauth.js.map +1 -0
  185. package/dist/orchestrator/childBridgeClient.d.ts +33 -0
  186. package/dist/orchestrator/childBridgeClient.js +321 -0
  187. package/dist/orchestrator/childBridgeClient.js.map +1 -0
  188. package/dist/orchestrator/childBridgeRegistry.d.ts +67 -0
  189. package/dist/orchestrator/childBridgeRegistry.js +297 -0
  190. package/dist/orchestrator/childBridgeRegistry.js.map +1 -0
  191. package/dist/orchestrator/index.d.ts +3 -0
  192. package/dist/orchestrator/index.js +3 -0
  193. package/dist/orchestrator/index.js.map +1 -0
  194. package/dist/orchestrator/orchestratorBridge.d.ts +32 -0
  195. package/dist/orchestrator/orchestratorBridge.js +412 -0
  196. package/dist/orchestrator/orchestratorBridge.js.map +1 -0
  197. package/dist/orchestrator/orchestratorConfig.d.ts +11 -0
  198. package/dist/orchestrator/orchestratorConfig.js +85 -0
  199. package/dist/orchestrator/orchestratorConfig.js.map +1 -0
  200. package/dist/orchestrator/orchestratorTools.d.ts +16 -0
  201. package/dist/orchestrator/orchestratorTools.js +272 -0
  202. package/dist/orchestrator/orchestratorTools.js.map +1 -0
  203. package/dist/patchworkCli.d.ts +15 -0
  204. package/dist/patchworkCli.js +41 -0
  205. package/dist/patchworkCli.js.map +1 -0
  206. package/dist/patchworkConfig.d.ts +28 -0
  207. package/dist/patchworkConfig.js +30 -0
  208. package/dist/patchworkConfig.js.map +1 -0
  209. package/dist/plugin.d.ts +106 -0
  210. package/dist/plugin.js +31 -0
  211. package/dist/plugin.js.map +1 -0
  212. package/dist/pluginLoader.d.ts +44 -0
  213. package/dist/pluginLoader.js +357 -0
  214. package/dist/pluginLoader.js.map +1 -0
  215. package/dist/pluginWatcher.d.ts +24 -0
  216. package/dist/pluginWatcher.js +139 -0
  217. package/dist/pluginWatcher.js.map +1 -0
  218. package/dist/preToolUseHook.d.ts +10 -0
  219. package/dist/preToolUseHook.js +57 -0
  220. package/dist/preToolUseHook.js.map +1 -0
  221. package/dist/probe.d.ts +35 -0
  222. package/dist/probe.js +143 -0
  223. package/dist/probe.js.map +1 -0
  224. package/dist/prompts.d.ts +27 -0
  225. package/dist/prompts.js +1680 -0
  226. package/dist/prompts.js.map +1 -0
  227. package/dist/quickTaskPresets.d.ts +64 -0
  228. package/dist/quickTaskPresets.js +156 -0
  229. package/dist/quickTaskPresets.js.map +1 -0
  230. package/dist/recipes/compiler.d.ts +44 -0
  231. package/dist/recipes/compiler.js +140 -0
  232. package/dist/recipes/compiler.js.map +1 -0
  233. package/dist/recipes/installer.d.ts +25 -0
  234. package/dist/recipes/installer.js +62 -0
  235. package/dist/recipes/installer.js.map +1 -0
  236. package/dist/recipes/parser.d.ts +18 -0
  237. package/dist/recipes/parser.js +160 -0
  238. package/dist/recipes/parser.js.map +1 -0
  239. package/dist/recipes/scheduler.d.ts +45 -0
  240. package/dist/recipes/scheduler.js +110 -0
  241. package/dist/recipes/scheduler.js.map +1 -0
  242. package/dist/recipes/schema.d.ts +71 -0
  243. package/dist/recipes/schema.js +11 -0
  244. package/dist/recipes/schema.js.map +1 -0
  245. package/dist/recipesHttp.d.ts +63 -0
  246. package/dist/recipesHttp.js +183 -0
  247. package/dist/recipesHttp.js.map +1 -0
  248. package/dist/resources.d.ts +33 -0
  249. package/dist/resources.js +266 -0
  250. package/dist/resources.js.map +1 -0
  251. package/dist/riskTier.d.ts +40 -0
  252. package/dist/riskTier.js +142 -0
  253. package/dist/riskTier.js.map +1 -0
  254. package/dist/runLog.d.ts +90 -0
  255. package/dist/runLog.js +143 -0
  256. package/dist/runLog.js.map +1 -0
  257. package/dist/server.d.ts +160 -0
  258. package/dist/server.js +1244 -0
  259. package/dist/server.js.map +1 -0
  260. package/dist/sessionCheckpoint.d.ts +37 -0
  261. package/dist/sessionCheckpoint.js +123 -0
  262. package/dist/sessionCheckpoint.js.map +1 -0
  263. package/dist/streamableHttp.d.ts +86 -0
  264. package/dist/streamableHttp.js +702 -0
  265. package/dist/streamableHttp.js.map +1 -0
  266. package/dist/telemetry.d.ts +18 -0
  267. package/dist/telemetry.js +95 -0
  268. package/dist/telemetry.js.map +1 -0
  269. package/dist/tools/activityLog.d.ts +140 -0
  270. package/dist/tools/activityLog.js +204 -0
  271. package/dist/tools/activityLog.js.map +1 -0
  272. package/dist/tools/auditDependencies.d.ts +67 -0
  273. package/dist/tools/auditDependencies.js +298 -0
  274. package/dist/tools/auditDependencies.js.map +1 -0
  275. package/dist/tools/batchLsp.d.ts +262 -0
  276. package/dist/tools/batchLsp.js +328 -0
  277. package/dist/tools/batchLsp.js.map +1 -0
  278. package/dist/tools/blame-utils.d.ts +30 -0
  279. package/dist/tools/blame-utils.js +60 -0
  280. package/dist/tools/blame-utils.js.map +1 -0
  281. package/dist/tools/bridgeDoctor.d.ts +78 -0
  282. package/dist/tools/bridgeDoctor.js +542 -0
  283. package/dist/tools/bridgeDoctor.js.map +1 -0
  284. package/dist/tools/bridgeStatus.d.ts +122 -0
  285. package/dist/tools/bridgeStatus.js +250 -0
  286. package/dist/tools/bridgeStatus.js.map +1 -0
  287. package/dist/tools/cancelClaudeTask.d.ts +48 -0
  288. package/dist/tools/cancelClaudeTask.js +56 -0
  289. package/dist/tools/cancelClaudeTask.js.map +1 -0
  290. package/dist/tools/checkDocumentDirty.d.ts +56 -0
  291. package/dist/tools/checkDocumentDirty.js +74 -0
  292. package/dist/tools/checkDocumentDirty.js.map +1 -0
  293. package/dist/tools/clipboard.d.ts +80 -0
  294. package/dist/tools/clipboard.js +211 -0
  295. package/dist/tools/clipboard.js.map +1 -0
  296. package/dist/tools/closeTabs.d.ts +84 -0
  297. package/dist/tools/closeTabs.js +97 -0
  298. package/dist/tools/closeTabs.js.map +1 -0
  299. package/dist/tools/codeLens.d.ts +50 -0
  300. package/dist/tools/codeLens.js +47 -0
  301. package/dist/tools/codeLens.js.map +1 -0
  302. package/dist/tools/contextBundle.d.ts +75 -0
  303. package/dist/tools/contextBundle.js +218 -0
  304. package/dist/tools/contextBundle.js.map +1 -0
  305. package/dist/tools/createIssueFromAIComment.d.ts +75 -0
  306. package/dist/tools/createIssueFromAIComment.js +119 -0
  307. package/dist/tools/createIssueFromAIComment.js.map +1 -0
  308. package/dist/tools/ctxGetTaskContext.d.ts +103 -0
  309. package/dist/tools/ctxGetTaskContext.js +274 -0
  310. package/dist/tools/ctxGetTaskContext.js.map +1 -0
  311. package/dist/tools/ctxQueryTraces.d.ts +142 -0
  312. package/dist/tools/ctxQueryTraces.js +194 -0
  313. package/dist/tools/ctxQueryTraces.js.map +1 -0
  314. package/dist/tools/ctxSaveTrace.d.ts +87 -0
  315. package/dist/tools/ctxSaveTrace.js +94 -0
  316. package/dist/tools/ctxSaveTrace.js.map +1 -0
  317. package/dist/tools/debug.d.ts +206 -0
  318. package/dist/tools/debug.js +234 -0
  319. package/dist/tools/debug.js.map +1 -0
  320. package/dist/tools/decorations.d.ts +130 -0
  321. package/dist/tools/decorations.js +160 -0
  322. package/dist/tools/decorations.js.map +1 -0
  323. package/dist/tools/detectUnusedCode.d.ts +78 -0
  324. package/dist/tools/detectUnusedCode.js +173 -0
  325. package/dist/tools/detectUnusedCode.js.map +1 -0
  326. package/dist/tools/documentLinks.d.ts +62 -0
  327. package/dist/tools/documentLinks.js +55 -0
  328. package/dist/tools/documentLinks.js.map +1 -0
  329. package/dist/tools/editText.d.ts +108 -0
  330. package/dist/tools/editText.js +318 -0
  331. package/dist/tools/editText.js.map +1 -0
  332. package/dist/tools/enrichCommit.d.ts +89 -0
  333. package/dist/tools/enrichCommit.js +201 -0
  334. package/dist/tools/enrichCommit.js.map +1 -0
  335. package/dist/tools/enrichStackTrace.d.ts +121 -0
  336. package/dist/tools/enrichStackTrace.js +194 -0
  337. package/dist/tools/enrichStackTrace.js.map +1 -0
  338. package/dist/tools/explainDiagnostic.d.ts +137 -0
  339. package/dist/tools/explainDiagnostic.js +230 -0
  340. package/dist/tools/explainDiagnostic.js.map +1 -0
  341. package/dist/tools/explainSymbol.d.ts +119 -0
  342. package/dist/tools/explainSymbol.js +177 -0
  343. package/dist/tools/explainSymbol.js.map +1 -0
  344. package/dist/tools/fileOperations.d.ts +186 -0
  345. package/dist/tools/fileOperations.js +330 -0
  346. package/dist/tools/fileOperations.js.map +1 -0
  347. package/dist/tools/fileWatcher.d.ts +107 -0
  348. package/dist/tools/fileWatcher.js +121 -0
  349. package/dist/tools/fileWatcher.js.map +1 -0
  350. package/dist/tools/findFiles.d.ts +65 -0
  351. package/dist/tools/findFiles.js +142 -0
  352. package/dist/tools/findFiles.js.map +1 -0
  353. package/dist/tools/findRelatedTests.d.ts +83 -0
  354. package/dist/tools/findRelatedTests.js +196 -0
  355. package/dist/tools/findRelatedTests.js.map +1 -0
  356. package/dist/tools/fixAllLintErrors.d.ts +66 -0
  357. package/dist/tools/fixAllLintErrors.js +128 -0
  358. package/dist/tools/fixAllLintErrors.js.map +1 -0
  359. package/dist/tools/foldingRanges.d.ts +50 -0
  360. package/dist/tools/foldingRanges.js +51 -0
  361. package/dist/tools/foldingRanges.js.map +1 -0
  362. package/dist/tools/formatAndSave.d.ts +57 -0
  363. package/dist/tools/formatAndSave.js +87 -0
  364. package/dist/tools/formatAndSave.js.map +1 -0
  365. package/dist/tools/formatDocument.d.ts +61 -0
  366. package/dist/tools/formatDocument.js +144 -0
  367. package/dist/tools/formatDocument.js.map +1 -0
  368. package/dist/tools/generateAPIDocumentation.d.ts +62 -0
  369. package/dist/tools/generateAPIDocumentation.js +249 -0
  370. package/dist/tools/generateAPIDocumentation.js.map +1 -0
  371. package/dist/tools/generateTests.d.ts +75 -0
  372. package/dist/tools/generateTests.js +226 -0
  373. package/dist/tools/generateTests.js.map +1 -0
  374. package/dist/tools/getAIComments.d.ts +79 -0
  375. package/dist/tools/getAIComments.js +93 -0
  376. package/dist/tools/getAIComments.js.map +1 -0
  377. package/dist/tools/getAnalyticsReport.d.ts +102 -0
  378. package/dist/tools/getAnalyticsReport.js +137 -0
  379. package/dist/tools/getAnalyticsReport.js.map +1 -0
  380. package/dist/tools/getArchitectureContext.d.ts +85 -0
  381. package/dist/tools/getArchitectureContext.js +135 -0
  382. package/dist/tools/getArchitectureContext.js.map +1 -0
  383. package/dist/tools/getBufferContent.d.ts +80 -0
  384. package/dist/tools/getBufferContent.js +207 -0
  385. package/dist/tools/getBufferContent.js.map +1 -0
  386. package/dist/tools/getChangeImpact.d.ts +76 -0
  387. package/dist/tools/getChangeImpact.js +184 -0
  388. package/dist/tools/getChangeImpact.js.map +1 -0
  389. package/dist/tools/getClaudeTaskStatus.d.ts +87 -0
  390. package/dist/tools/getClaudeTaskStatus.js +89 -0
  391. package/dist/tools/getClaudeTaskStatus.js.map +1 -0
  392. package/dist/tools/getCodeCoverage.d.ts +86 -0
  393. package/dist/tools/getCodeCoverage.js +237 -0
  394. package/dist/tools/getCodeCoverage.js.map +1 -0
  395. package/dist/tools/getCommitsForIssue.d.ts +98 -0
  396. package/dist/tools/getCommitsForIssue.js +106 -0
  397. package/dist/tools/getCommitsForIssue.js.map +1 -0
  398. package/dist/tools/getCurrentSelection.d.ts +123 -0
  399. package/dist/tools/getCurrentSelection.js +113 -0
  400. package/dist/tools/getCurrentSelection.js.map +1 -0
  401. package/dist/tools/getDebugState.d.ts +140 -0
  402. package/dist/tools/getDebugState.js +109 -0
  403. package/dist/tools/getDebugState.js.map +1 -0
  404. package/dist/tools/getDependencyTree.d.ts +59 -0
  405. package/dist/tools/getDependencyTree.js +207 -0
  406. package/dist/tools/getDependencyTree.js.map +1 -0
  407. package/dist/tools/getDiagnostics.d.ts +108 -0
  408. package/dist/tools/getDiagnostics.js +371 -0
  409. package/dist/tools/getDiagnostics.js.map +1 -0
  410. package/dist/tools/getDiffFromHandoff.d.ts +89 -0
  411. package/dist/tools/getDiffFromHandoff.js +163 -0
  412. package/dist/tools/getDiffFromHandoff.js.map +1 -0
  413. package/dist/tools/getDocumentSymbols.d.ts +74 -0
  414. package/dist/tools/getDocumentSymbols.js +177 -0
  415. package/dist/tools/getDocumentSymbols.js.map +1 -0
  416. package/dist/tools/getFileTree.d.ts +66 -0
  417. package/dist/tools/getFileTree.js +131 -0
  418. package/dist/tools/getFileTree.js.map +1 -0
  419. package/dist/tools/getGitDiff.d.ts +50 -0
  420. package/dist/tools/getGitDiff.js +73 -0
  421. package/dist/tools/getGitDiff.js.map +1 -0
  422. package/dist/tools/getGitHotspots.d.ts +88 -0
  423. package/dist/tools/getGitHotspots.js +145 -0
  424. package/dist/tools/getGitHotspots.js.map +1 -0
  425. package/dist/tools/getGitLog.d.ts +62 -0
  426. package/dist/tools/getGitLog.js +87 -0
  427. package/dist/tools/getGitLog.js.map +1 -0
  428. package/dist/tools/getGitStatus.d.ts +72 -0
  429. package/dist/tools/getGitStatus.js +126 -0
  430. package/dist/tools/getGitStatus.js.map +1 -0
  431. package/dist/tools/getImportTree.d.ts +73 -0
  432. package/dist/tools/getImportTree.js +223 -0
  433. package/dist/tools/getImportTree.js.map +1 -0
  434. package/dist/tools/getImportedSignatures.d.ts +62 -0
  435. package/dist/tools/getImportedSignatures.js +255 -0
  436. package/dist/tools/getImportedSignatures.js.map +1 -0
  437. package/dist/tools/getOpenEditors.d.ts +62 -0
  438. package/dist/tools/getOpenEditors.js +126 -0
  439. package/dist/tools/getOpenEditors.js.map +1 -0
  440. package/dist/tools/getPRTemplate.d.ts +68 -0
  441. package/dist/tools/getPRTemplate.js +187 -0
  442. package/dist/tools/getPRTemplate.js.map +1 -0
  443. package/dist/tools/getProjectContext.d.ts +114 -0
  444. package/dist/tools/getProjectContext.js +344 -0
  445. package/dist/tools/getProjectContext.js.map +1 -0
  446. package/dist/tools/getProjectInfo.d.ts +51 -0
  447. package/dist/tools/getProjectInfo.js +325 -0
  448. package/dist/tools/getProjectInfo.js.map +1 -0
  449. package/dist/tools/getSecurityAdvisories.d.ts +105 -0
  450. package/dist/tools/getSecurityAdvisories.js +472 -0
  451. package/dist/tools/getSecurityAdvisories.js.map +1 -0
  452. package/dist/tools/getSessionUsage.d.ts +58 -0
  453. package/dist/tools/getSessionUsage.js +57 -0
  454. package/dist/tools/getSessionUsage.js.map +1 -0
  455. package/dist/tools/getSymbolHistory.d.ts +157 -0
  456. package/dist/tools/getSymbolHistory.js +256 -0
  457. package/dist/tools/getSymbolHistory.js.map +1 -0
  458. package/dist/tools/getToolCapabilities.d.ts +69 -0
  459. package/dist/tools/getToolCapabilities.js +298 -0
  460. package/dist/tools/getToolCapabilities.js.map +1 -0
  461. package/dist/tools/getTypeSignature.d.ts +70 -0
  462. package/dist/tools/getTypeSignature.js +132 -0
  463. package/dist/tools/getTypeSignature.js.map +1 -0
  464. package/dist/tools/getWorkspaceFolders.d.ts +58 -0
  465. package/dist/tools/getWorkspaceFolders.js +69 -0
  466. package/dist/tools/getWorkspaceFolders.js.map +1 -0
  467. package/dist/tools/getWorkspaceSettings.d.ts +44 -0
  468. package/dist/tools/getWorkspaceSettings.js +70 -0
  469. package/dist/tools/getWorkspaceSettings.js.map +1 -0
  470. package/dist/tools/git-utils.d.ts +16 -0
  471. package/dist/tools/git-utils.js +46 -0
  472. package/dist/tools/git-utils.js.map +1 -0
  473. package/dist/tools/gitHistory.d.ts +110 -0
  474. package/dist/tools/gitHistory.js +167 -0
  475. package/dist/tools/gitHistory.js.map +1 -0
  476. package/dist/tools/gitWrite.d.ts +612 -0
  477. package/dist/tools/gitWrite.js +983 -0
  478. package/dist/tools/gitWrite.js.map +1 -0
  479. package/dist/tools/github/actions.d.ts +152 -0
  480. package/dist/tools/github/actions.js +195 -0
  481. package/dist/tools/github/actions.js.map +1 -0
  482. package/dist/tools/github/index.d.ts +3 -0
  483. package/dist/tools/github/index.js +4 -0
  484. package/dist/tools/github/index.js.map +1 -0
  485. package/dist/tools/github/issues.d.ts +281 -0
  486. package/dist/tools/github/issues.js +340 -0
  487. package/dist/tools/github/issues.js.map +1 -0
  488. package/dist/tools/github/pr.d.ts +433 -0
  489. package/dist/tools/github/pr.js +588 -0
  490. package/dist/tools/github/pr.js.map +1 -0
  491. package/dist/tools/github/shared.d.ts +4 -0
  492. package/dist/tools/github/shared.js +12 -0
  493. package/dist/tools/github/shared.js.map +1 -0
  494. package/dist/tools/handoffNote.d.ts +106 -0
  495. package/dist/tools/handoffNote.js +232 -0
  496. package/dist/tools/handoffNote.js.map +1 -0
  497. package/dist/tools/headless/lspClient.d.ts +26 -0
  498. package/dist/tools/headless/lspClient.js +221 -0
  499. package/dist/tools/headless/lspClient.js.map +1 -0
  500. package/dist/tools/headless/lspFallback.d.ts +28 -0
  501. package/dist/tools/headless/lspFallback.js +122 -0
  502. package/dist/tools/headless/lspFallback.js.map +1 -0
  503. package/dist/tools/hoverAtCursor.d.ts +54 -0
  504. package/dist/tools/hoverAtCursor.js +68 -0
  505. package/dist/tools/hoverAtCursor.js.map +1 -0
  506. package/dist/tools/httpClient.d.ts +141 -0
  507. package/dist/tools/httpClient.js +486 -0
  508. package/dist/tools/httpClient.js.map +1 -0
  509. package/dist/tools/index.d.ts +49 -0
  510. package/dist/tools/index.js +672 -0
  511. package/dist/tools/index.js.map +1 -0
  512. package/dist/tools/inlayHints.d.ts +81 -0
  513. package/dist/tools/inlayHints.js +76 -0
  514. package/dist/tools/inlayHints.js.map +1 -0
  515. package/dist/tools/issueRefs.d.ts +14 -0
  516. package/dist/tools/issueRefs.js +27 -0
  517. package/dist/tools/issueRefs.js.map +1 -0
  518. package/dist/tools/jumpToFirstError.d.ts +63 -0
  519. package/dist/tools/jumpToFirstError.js +124 -0
  520. package/dist/tools/jumpToFirstError.js.map +1 -0
  521. package/dist/tools/launchQuickTask.d.ts +76 -0
  522. package/dist/tools/launchQuickTask.js +170 -0
  523. package/dist/tools/launchQuickTask.js.map +1 -0
  524. package/dist/tools/linters/biome.d.ts +2 -0
  525. package/dist/tools/linters/biome.js +44 -0
  526. package/dist/tools/linters/biome.js.map +1 -0
  527. package/dist/tools/linters/cargo.d.ts +2 -0
  528. package/dist/tools/linters/cargo.js +45 -0
  529. package/dist/tools/linters/cargo.js.map +1 -0
  530. package/dist/tools/linters/eslint.d.ts +2 -0
  531. package/dist/tools/linters/eslint.js +59 -0
  532. package/dist/tools/linters/eslint.js.map +1 -0
  533. package/dist/tools/linters/govet.d.ts +2 -0
  534. package/dist/tools/linters/govet.js +37 -0
  535. package/dist/tools/linters/govet.js.map +1 -0
  536. package/dist/tools/linters/pyright.d.ts +2 -0
  537. package/dist/tools/linters/pyright.js +34 -0
  538. package/dist/tools/linters/pyright.js.map +1 -0
  539. package/dist/tools/linters/ruff.d.ts +2 -0
  540. package/dist/tools/linters/ruff.js +30 -0
  541. package/dist/tools/linters/ruff.js.map +1 -0
  542. package/dist/tools/linters/types.d.ts +16 -0
  543. package/dist/tools/linters/types.js +2 -0
  544. package/dist/tools/linters/types.js.map +1 -0
  545. package/dist/tools/linters/typescript.d.ts +2 -0
  546. package/dist/tools/linters/typescript.js +38 -0
  547. package/dist/tools/linters/typescript.js.map +1 -0
  548. package/dist/tools/listClaudeTasks.d.ts +84 -0
  549. package/dist/tools/listClaudeTasks.js +88 -0
  550. package/dist/tools/listClaudeTasks.js.map +1 -0
  551. package/dist/tools/listTerminals.d.ts +55 -0
  552. package/dist/tools/listTerminals.js +78 -0
  553. package/dist/tools/listTerminals.js.map +1 -0
  554. package/dist/tools/lsp.d.ts +1086 -0
  555. package/dist/tools/lsp.js +1339 -0
  556. package/dist/tools/lsp.js.map +1 -0
  557. package/dist/tools/navigateToSymbolByName.d.ts +56 -0
  558. package/dist/tools/navigateToSymbolByName.js +170 -0
  559. package/dist/tools/navigateToSymbolByName.js.map +1 -0
  560. package/dist/tools/openDiff.d.ts +66 -0
  561. package/dist/tools/openDiff.js +126 -0
  562. package/dist/tools/openDiff.js.map +1 -0
  563. package/dist/tools/openFile.d.ts +69 -0
  564. package/dist/tools/openFile.js +129 -0
  565. package/dist/tools/openFile.js.map +1 -0
  566. package/dist/tools/openInBrowser.d.ts +55 -0
  567. package/dist/tools/openInBrowser.js +129 -0
  568. package/dist/tools/openInBrowser.js.map +1 -0
  569. package/dist/tools/organizeImports.d.ts +56 -0
  570. package/dist/tools/organizeImports.js +115 -0
  571. package/dist/tools/organizeImports.js.map +1 -0
  572. package/dist/tools/performanceReport.d.ts +133 -0
  573. package/dist/tools/performanceReport.js +218 -0
  574. package/dist/tools/performanceReport.js.map +1 -0
  575. package/dist/tools/planPersistence.d.ts +306 -0
  576. package/dist/tools/planPersistence.js +485 -0
  577. package/dist/tools/planPersistence.js.map +1 -0
  578. package/dist/tools/previewEdit.d.ts +107 -0
  579. package/dist/tools/previewEdit.js +270 -0
  580. package/dist/tools/previewEdit.js.map +1 -0
  581. package/dist/tools/recentTracesDigest.d.ts +35 -0
  582. package/dist/tools/recentTracesDigest.js +98 -0
  583. package/dist/tools/recentTracesDigest.js.map +1 -0
  584. package/dist/tools/refactorAnalyze.d.ts +78 -0
  585. package/dist/tools/refactorAnalyze.js +141 -0
  586. package/dist/tools/refactorAnalyze.js.map +1 -0
  587. package/dist/tools/refactorExtractFunction.d.ts +52 -0
  588. package/dist/tools/refactorExtractFunction.js +121 -0
  589. package/dist/tools/refactorExtractFunction.js.map +1 -0
  590. package/dist/tools/refactorPreview.d.ts +75 -0
  591. package/dist/tools/refactorPreview.js +93 -0
  592. package/dist/tools/refactorPreview.js.map +1 -0
  593. package/dist/tools/replaceBlock.d.ts +62 -0
  594. package/dist/tools/replaceBlock.js +125 -0
  595. package/dist/tools/replaceBlock.js.map +1 -0
  596. package/dist/tools/resumeClaudeTask.d.ts +75 -0
  597. package/dist/tools/resumeClaudeTask.js +149 -0
  598. package/dist/tools/resumeClaudeTask.js.map +1 -0
  599. package/dist/tools/runClaudeTask.d.ts +97 -0
  600. package/dist/tools/runClaudeTask.js +224 -0
  601. package/dist/tools/runClaudeTask.js.map +1 -0
  602. package/dist/tools/runCommand.d.ts +82 -0
  603. package/dist/tools/runCommand.js +101 -0
  604. package/dist/tools/runCommand.js.map +1 -0
  605. package/dist/tools/runTests.d.ts +146 -0
  606. package/dist/tools/runTests.js +315 -0
  607. package/dist/tools/runTests.js.map +1 -0
  608. package/dist/tools/saveDocument.d.ts +50 -0
  609. package/dist/tools/saveDocument.js +73 -0
  610. package/dist/tools/saveDocument.js.map +1 -0
  611. package/dist/tools/screenshot.d.ts +23 -0
  612. package/dist/tools/screenshot.js +43 -0
  613. package/dist/tools/screenshot.js.map +1 -0
  614. package/dist/tools/screenshotAndAnnotate.d.ts +103 -0
  615. package/dist/tools/screenshotAndAnnotate.js +192 -0
  616. package/dist/tools/screenshotAndAnnotate.js.map +1 -0
  617. package/dist/tools/searchAndReplace.d.ts +108 -0
  618. package/dist/tools/searchAndReplace.js +281 -0
  619. package/dist/tools/searchAndReplace.js.map +1 -0
  620. package/dist/tools/searchTools.d.ts +61 -0
  621. package/dist/tools/searchTools.js +85 -0
  622. package/dist/tools/searchTools.js.map +1 -0
  623. package/dist/tools/searchWorkspace.d.ts +99 -0
  624. package/dist/tools/searchWorkspace.js +189 -0
  625. package/dist/tools/searchWorkspace.js.map +1 -0
  626. package/dist/tools/selectionRanges.d.ts +58 -0
  627. package/dist/tools/selectionRanges.js +61 -0
  628. package/dist/tools/selectionRanges.js.map +1 -0
  629. package/dist/tools/semanticTokens.d.ts +87 -0
  630. package/dist/tools/semanticTokens.js +86 -0
  631. package/dist/tools/semanticTokens.js.map +1 -0
  632. package/dist/tools/setActiveWorkspaceFolder.d.ts +41 -0
  633. package/dist/tools/setActiveWorkspaceFolder.js +38 -0
  634. package/dist/tools/setActiveWorkspaceFolder.js.map +1 -0
  635. package/dist/tools/signatureHelp.d.ts +86 -0
  636. package/dist/tools/signatureHelp.js +79 -0
  637. package/dist/tools/signatureHelp.js.map +1 -0
  638. package/dist/tools/spawnWorkspace.d.ts +103 -0
  639. package/dist/tools/spawnWorkspace.js +268 -0
  640. package/dist/tools/spawnWorkspace.js.map +1 -0
  641. package/dist/tools/stackTraceParser.d.ts +43 -0
  642. package/dist/tools/stackTraceParser.js +139 -0
  643. package/dist/tools/stackTraceParser.js.map +1 -0
  644. package/dist/tools/terminal.d.ts +352 -0
  645. package/dist/tools/terminal.js +670 -0
  646. package/dist/tools/terminal.js.map +1 -0
  647. package/dist/tools/testRunners/cargoTest.d.ts +2 -0
  648. package/dist/tools/testRunners/cargoTest.js +129 -0
  649. package/dist/tools/testRunners/cargoTest.js.map +1 -0
  650. package/dist/tools/testRunners/goTest.d.ts +2 -0
  651. package/dist/tools/testRunners/goTest.js +108 -0
  652. package/dist/tools/testRunners/goTest.js.map +1 -0
  653. package/dist/tools/testRunners/pytest.d.ts +2 -0
  654. package/dist/tools/testRunners/pytest.js +135 -0
  655. package/dist/tools/testRunners/pytest.js.map +1 -0
  656. package/dist/tools/testRunners/types.d.ts +18 -0
  657. package/dist/tools/testRunners/types.js +2 -0
  658. package/dist/tools/testRunners/types.js.map +1 -0
  659. package/dist/tools/testRunners/vitestJest.d.ts +3 -0
  660. package/dist/tools/testRunners/vitestJest.js +215 -0
  661. package/dist/tools/testRunners/vitestJest.js.map +1 -0
  662. package/dist/tools/testTraceToSource.d.ts +80 -0
  663. package/dist/tools/testTraceToSource.js +206 -0
  664. package/dist/tools/testTraceToSource.js.map +1 -0
  665. package/dist/tools/transaction.d.ts +243 -0
  666. package/dist/tools/transaction.js +309 -0
  667. package/dist/tools/transaction.js.map +1 -0
  668. package/dist/tools/typeHierarchy.d.ts +77 -0
  669. package/dist/tools/typeHierarchy.js +86 -0
  670. package/dist/tools/typeHierarchy.js.map +1 -0
  671. package/dist/tools/utils.d.ts +124 -0
  672. package/dist/tools/utils.js +566 -0
  673. package/dist/tools/utils.js.map +1 -0
  674. package/dist/tools/vscodeCommands.d.ts +90 -0
  675. package/dist/tools/vscodeCommands.js +112 -0
  676. package/dist/tools/vscodeCommands.js.map +1 -0
  677. package/dist/tools/vscodeTasks.d.ts +102 -0
  678. package/dist/tools/vscodeTasks.js +110 -0
  679. package/dist/tools/vscodeTasks.js.map +1 -0
  680. package/dist/tools/watchDiagnostics.d.ts +64 -0
  681. package/dist/tools/watchDiagnostics.js +270 -0
  682. package/dist/tools/watchDiagnostics.js.map +1 -0
  683. package/dist/tools/workspaceSettings.d.ts +57 -0
  684. package/dist/tools/workspaceSettings.js +80 -0
  685. package/dist/tools/workspaceSettings.js.map +1 -0
  686. package/dist/transport.d.ts +207 -0
  687. package/dist/transport.js +1272 -0
  688. package/dist/transport.js.map +1 -0
  689. package/dist/version.d.ts +13 -0
  690. package/dist/version.js +31 -0
  691. package/dist/version.js.map +1 -0
  692. package/dist/wsUtils.d.ts +8 -0
  693. package/dist/wsUtils.js +54 -0
  694. package/dist/wsUtils.js.map +1 -0
  695. package/package.json +118 -0
  696. package/scripts/gen-claude-desktop-config.sh +124 -0
  697. package/scripts/gen-mcp-config.sh +390 -0
  698. package/scripts/install-extension.sh +106 -0
  699. package/scripts/mcp-stdio-shim.cjs +482 -0
  700. package/scripts/postinstall.mjs +68 -0
  701. package/scripts/start-all.sh +502 -0
  702. package/scripts/start-orchestrator.sh +186 -0
  703. package/scripts/start-remote.sh +126 -0
  704. package/scripts/start-vps.sh +116 -0
  705. package/templates/CLAUDE.bridge.md +125 -0
  706. package/templates/automation-policies/security-first.json +46 -0
  707. package/templates/automation-policies/strict-lint.json +41 -0
  708. package/templates/automation-policies/test-driven.json +54 -0
  709. package/templates/automation-policy.example.json +105 -0
  710. package/templates/bridge-tools.md +111 -0
  711. package/templates/dispatch-context.md +33 -0
  712. package/templates/managed-agent/code-review-agent.md +50 -0
  713. package/templates/managed-agent/managed-agent-mcp.json +102 -0
  714. package/templates/recipes/ambient-journal.yaml +11 -0
  715. package/templates/recipes/daily-status.yaml +21 -0
  716. package/templates/recipes/lint-on-save.yaml +13 -0
  717. package/templates/recipes/stale-branches.yaml +18 -0
  718. package/templates/recipes/watch-failing-tests.yaml +15 -0
  719. package/templates/scheduled-tasks/dependency-audit/SKILL.md +77 -0
  720. package/templates/scheduled-tasks/health-check/SKILL.md +73 -0
  721. package/templates/scheduled-tasks/nightly-review/SKILL.md +69 -0
@@ -0,0 +1,486 @@
1
+ import dns from "node:dns/promises";
2
+ import fs from "node:fs/promises";
3
+ import { error, optionalBool, optionalInt, optionalString, requireString, resolveFilePath, successStructured, truncateOutput, } from "./utils.js";
4
+ const ALLOWED_METHODS = new Set([
5
+ "GET",
6
+ "POST",
7
+ "PUT",
8
+ "PATCH",
9
+ "DELETE",
10
+ "HEAD",
11
+ "OPTIONS",
12
+ ]);
13
+ const DEFAULT_RESPONSE_BYTES = 50 * 1024; // 50 KB
14
+ const MAX_RESPONSE_BYTES = 1024 * 1024; // 1 MB hard cap
15
+ /**
16
+ * Block requests to private/loopback addresses to prevent SSRF.
17
+ * Checks hostname patterns only — DNS resolution happens separately in the
18
+ * handler via dns.lookup() so that hostnames that resolve to private IPs are
19
+ * also blocked.
20
+ */
21
+ function isPrivateHost(hostname) {
22
+ // Strip IPv6 brackets: [::1] → ::1
23
+ const host = hostname.startsWith("[") && hostname.endsWith("]")
24
+ ? hostname.slice(1, -1).toLowerCase()
25
+ : hostname.toLowerCase();
26
+ if (host === "localhost" || host.endsWith(".localhost"))
27
+ return true;
28
+ if (host === "0.0.0.0")
29
+ return true;
30
+ // Reject non-decimal IPv4 notations that bypass the dotted-quad regex below:
31
+ // hex: 0x7f000001 → 127.0.0.1
32
+ // octal: 0177.0.0.1 → 127.0.0.1
33
+ // Node's URL parser may normalize these on some platforms; block unconditionally.
34
+ if (/^0x[0-9a-f]+$/i.test(host) || /^0[0-7]{7,}$/.test(host))
35
+ return true;
36
+ // IPv4 range checks
37
+ const ipv4 = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
38
+ if (ipv4) {
39
+ const a = Number(ipv4[1]);
40
+ const b = Number(ipv4[2]);
41
+ if (a === 127)
42
+ return true; // 127.0.0.0/8 loopback
43
+ if (a === 10)
44
+ return true; // 10.0.0.0/8 RFC 1918 private
45
+ if (a === 172 && b >= 16 && b <= 31)
46
+ return true; // 172.16.0.0/12 RFC 1918 private
47
+ if (a === 192 && b === 168)
48
+ return true; // 192.168.0.0/16 RFC 1918 private
49
+ if (a === 169 && b === 254)
50
+ return true; // 169.254.0.0/16 link-local / AWS metadata endpoint
51
+ if (a === 100 && b >= 64 && b <= 127)
52
+ return true; // 100.64.0.0/10 CGNAT (RFC 6598)
53
+ if (a === 0)
54
+ return true; // 0.0.0.0/8
55
+ }
56
+ // IPv6 checks
57
+ if (host === "::1")
58
+ return true; // loopback
59
+ if (host.startsWith("fe80:"))
60
+ return true; // link-local
61
+ if (host.startsWith("fc") || host.startsWith("fd"))
62
+ return true; // ULA (RFC 4193)
63
+ // IPv6-mapped IPv4 addresses (::ffff:x.x.x.x) bypass the IPv4 block above
64
+ // on dual-stack systems — recurse on the embedded IPv4 part.
65
+ if (host.startsWith("::ffff:"))
66
+ return isPrivateHost(host.slice(7));
67
+ // RFC 2765 SIIT alternate mapped form (::ffff:0:x.x.x.x)
68
+ if (host.startsWith("::ffff:0:"))
69
+ return isPrivateHost(host.slice(9));
70
+ return false;
71
+ }
72
+ export function createSendHttpRequestTool(options) {
73
+ const allowPrivateHttp = options?.allowPrivateHttp ?? false;
74
+ return {
75
+ schema: {
76
+ name: "sendHttpRequest",
77
+ description: "HTTP/HTTPS request → status, headers, body. Body truncated at maxResponseBytes (default 50 KB).",
78
+ annotations: { openWorldHint: true },
79
+ inputSchema: {
80
+ $schema: "http://json-schema.org/draft-07/schema#",
81
+ type: "object",
82
+ additionalProperties: false,
83
+ required: ["method", "url"],
84
+ properties: {
85
+ method: {
86
+ type: "string",
87
+ enum: ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"],
88
+ description: "HTTP method",
89
+ },
90
+ url: {
91
+ type: "string",
92
+ description: "Full URL (http:// or https://)",
93
+ },
94
+ headers: {
95
+ type: "object",
96
+ additionalProperties: { type: "string" },
97
+ description: "Optional request headers as key/value pairs",
98
+ },
99
+ body: {
100
+ type: "string",
101
+ description: "Request body. JSON: pass serialized string + Content-Type: application/json. Ignored for GET/HEAD.",
102
+ },
103
+ timeoutMs: {
104
+ type: "integer",
105
+ description: "Timeout in ms (default: 30000, max: 120000)",
106
+ },
107
+ maxResponseBytes: {
108
+ type: "integer",
109
+ description: `Body cap in bytes (default: ${DEFAULT_RESPONSE_BYTES}, max: ${MAX_RESPONSE_BYTES}).`,
110
+ },
111
+ followRedirects: {
112
+ type: "boolean",
113
+ description: "Follow HTTP redirects (max 10 hops, default: true)",
114
+ },
115
+ },
116
+ },
117
+ outputSchema: {
118
+ type: "object",
119
+ properties: {
120
+ status: { type: "integer" },
121
+ statusText: { type: "string" },
122
+ headers: { type: "object" },
123
+ body: { type: "string" },
124
+ durationMs: { type: "integer" },
125
+ redirects: { type: "integer" },
126
+ truncated: { type: "boolean" },
127
+ fullBytes: { type: "integer" },
128
+ },
129
+ required: ["status", "body", "durationMs"],
130
+ },
131
+ },
132
+ timeoutMs: 30_000,
133
+ async handler(args, signal) {
134
+ const method = requireString(args, "method", 16).toUpperCase();
135
+ if (!ALLOWED_METHODS.has(method)) {
136
+ return error(`Unsupported method "${method}". Allowed: ${[...ALLOWED_METHODS].join(", ")}`);
137
+ }
138
+ const urlStr = requireString(args, "url", 4096);
139
+ let parsedUrl;
140
+ try {
141
+ parsedUrl = new URL(urlStr);
142
+ }
143
+ catch {
144
+ return error(`Invalid URL: "${urlStr}"`);
145
+ }
146
+ if (!["http:", "https:"].includes(parsedUrl.protocol)) {
147
+ return error(`URL must use http:// or https://, got "${parsedUrl.protocol}"`);
148
+ }
149
+ if (!allowPrivateHttp && isPrivateHost(parsedUrl.hostname)) {
150
+ return error(`Requests to private/loopback addresses are not allowed ("${parsedUrl.hostname}"). Only public hosts are permitted. Use --allow-private-http to enable.`);
151
+ }
152
+ // DNS pre-resolution SSRF guard: resolve the hostname and re-check the
153
+ // resulting IP against the private-range blocklist. This catches hostnames
154
+ // like "internal.corp.example.com" that resolve to RFC-1918 addresses and
155
+ // would bypass the purely-lexical isPrivateHost check above.
156
+ //
157
+ // After validation, we pin the connection to the resolved IP by rewriting
158
+ // the request URL's hostname. This closes the TOCTOU window between
159
+ // dns.lookup() and the actual fetch — without pinning, an attacker can
160
+ // serve a public IP on the first DNS response and a private IP on the
161
+ // second. We preserve the original hostname in a Host header so virtual
162
+ // hosting and SNI still work. DNS failures fall through to fetch naturally.
163
+ let resolvedIp = null;
164
+ try {
165
+ const { address } = await dns.lookup(parsedUrl.hostname);
166
+ if (!allowPrivateHttp && isPrivateHost(address)) {
167
+ return error(`Hostname "${parsedUrl.hostname}" resolves to a private address (${address}) — request blocked`);
168
+ }
169
+ resolvedIp = address;
170
+ }
171
+ catch {
172
+ // DNS lookup failed — let fetch report the error with its own message
173
+ }
174
+ // Build the initial URL: if we successfully resolved an IP, use it as the
175
+ // hostname so Node's fetch does not re-resolve (closes the TOCTOU window).
176
+ // IPv6 addresses require bracket wrapping in URLs.
177
+ let initialUrl = urlStr;
178
+ if (resolvedIp !== null) {
179
+ const pinnedUrl = new URL(urlStr);
180
+ pinnedUrl.hostname = resolvedIp.includes(":")
181
+ ? `[${resolvedIp}]`
182
+ : resolvedIp;
183
+ initialUrl = pinnedUrl.toString();
184
+ }
185
+ // Validate and collect headers
186
+ const rawHeaders = args.headers;
187
+ const headers = {};
188
+ if (rawHeaders != null) {
189
+ if (typeof rawHeaders !== "object" || Array.isArray(rawHeaders)) {
190
+ return error("headers must be a plain object of string values");
191
+ }
192
+ for (const [k, v] of Object.entries(rawHeaders)) {
193
+ if (typeof v !== "string") {
194
+ return error(`Header value for "${k}" must be a string`);
195
+ }
196
+ // Block CRLF and null bytes — header injection prevention
197
+ if (/[\r\n\x00]/.test(k) || /[\r\n\x00]/.test(v)) {
198
+ return error(`Header "${k}" contains invalid characters (CR, LF, or null byte)`);
199
+ }
200
+ // Normalize header key to lowercase so user-supplied "Host" and "host"
201
+ // are treated as the same key and our override below reliably overwrites it.
202
+ headers[k.toLowerCase()] = v;
203
+ }
204
+ }
205
+ // Override host AFTER user headers so a caller-supplied host cannot
206
+ // bypass IP-pinning SSRF protection. Virtual hosting / SNI still works
207
+ // because we use the original hostname (before IP substitution).
208
+ // Written as lowercase "host" to match the normalized user headers above.
209
+ if (resolvedIp !== null) {
210
+ headers.host = parsedUrl.hostname;
211
+ }
212
+ const body = optionalString(args, "body", 1024 * 1024);
213
+ const timeoutMs = Math.min(optionalInt(args, "timeoutMs", 1, 120_000) ?? 30_000, 120_000);
214
+ const maxBytes = Math.min(optionalInt(args, "maxResponseBytes", 1, MAX_RESPONSE_BYTES) ??
215
+ DEFAULT_RESPONSE_BYTES, MAX_RESPONSE_BYTES);
216
+ const followRedirects = optionalBool(args, "followRedirects") ?? true;
217
+ const MAX_REDIRECTS = 10;
218
+ // Compose AbortSignal: merge caller signal with our own timeout.
219
+ // Capture the forwarder so we can remove it once the request settles —
220
+ // without cleanup the listener would accumulate on long-lived signals.
221
+ const controller = new AbortController();
222
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
223
+ let abortForwarder;
224
+ if (signal) {
225
+ abortForwarder = () => controller.abort(signal.reason);
226
+ signal.addEventListener("abort", abortForwarder, { once: true });
227
+ }
228
+ const cleanup = () => {
229
+ clearTimeout(timeoutId);
230
+ if (abortForwarder !== undefined)
231
+ signal?.removeEventListener("abort", abortForwarder);
232
+ };
233
+ const requestBody = body !== undefined && method !== "GET" && method !== "HEAD"
234
+ ? body
235
+ : undefined;
236
+ const start = Date.now();
237
+ try {
238
+ let currentUrl = initialUrl;
239
+ let redirectCount = 0;
240
+ let resp;
241
+ // Manual redirect loop so we can cap hops and re-validate each location
242
+ while (true) {
243
+ resp = await fetch(currentUrl, {
244
+ method,
245
+ headers,
246
+ body: requestBody,
247
+ signal: controller.signal,
248
+ redirect: "manual", // always manual — we control the loop
249
+ });
250
+ const isRedirect = resp.status >= 300 && resp.status < 400;
251
+ if (!followRedirects || !isRedirect)
252
+ break;
253
+ const location = resp.headers.get("location");
254
+ if (!location)
255
+ break;
256
+ if (redirectCount >= MAX_REDIRECTS) {
257
+ cleanup();
258
+ return error(`Too many redirects (>${MAX_REDIRECTS})`);
259
+ }
260
+ // Resolve relative redirect URL and re-validate it
261
+ let nextUrl;
262
+ try {
263
+ nextUrl = new URL(location, currentUrl);
264
+ }
265
+ catch {
266
+ cleanup();
267
+ return error(`Invalid redirect location: "${location}"`);
268
+ }
269
+ if (!["http:", "https:"].includes(nextUrl.protocol)) {
270
+ cleanup();
271
+ return error(`Redirect to non-http(s) protocol blocked: "${nextUrl.protocol}"`);
272
+ }
273
+ if (!allowPrivateHttp && isPrivateHost(nextUrl.hostname)) {
274
+ cleanup();
275
+ return error(`Redirect to private/loopback address blocked ("${nextUrl.hostname}")`);
276
+ }
277
+ // Pin the redirect hop to its resolved IP to close the TOCTOU window.
278
+ // DNS failures fall through — fetch will report the error naturally.
279
+ try {
280
+ const { address: redirectIp } = await dns.lookup(nextUrl.hostname);
281
+ if (!allowPrivateHttp && isPrivateHost(redirectIp)) {
282
+ cleanup();
283
+ return error(`Redirect hostname "${nextUrl.hostname}" resolves to a private address (${redirectIp}) — blocked`);
284
+ }
285
+ // Mutate nextUrl in-place to pin to the resolved IP
286
+ nextUrl.hostname = redirectIp.includes(":")
287
+ ? `[${redirectIp}]`
288
+ : redirectIp;
289
+ // Preserve original Host for virtual hosting / SNI
290
+ // Use lowercase "host" to stay consistent with the normalized headers above.
291
+ headers.host = new URL(location, currentUrl).hostname;
292
+ }
293
+ catch {
294
+ // DNS failed — use un-pinned URL; fetch will fail naturally
295
+ }
296
+ currentUrl = nextUrl.toString();
297
+ redirectCount++;
298
+ }
299
+ cleanup();
300
+ // Collect response headers
301
+ const respHeaders = {};
302
+ resp.headers.forEach((v, k) => {
303
+ respHeaders[k] = v;
304
+ });
305
+ // Check Content-Length before reading to avoid loading a known-huge body into memory
306
+ const contentLengthHeader = resp.headers.get("content-length");
307
+ if (contentLengthHeader !== null) {
308
+ const declaredLength = Number(contentLengthHeader);
309
+ if (Number.isFinite(declaredLength) && declaredLength > maxBytes) {
310
+ return error(`Response Content-Length (${declaredLength} bytes) exceeds maxResponseBytes (${maxBytes} bytes). Increase maxResponseBytes or use a different approach to fetch this resource.`);
311
+ }
312
+ }
313
+ // Read body with size cap enforced during streaming so a chunked response
314
+ // with no Content-Length cannot exhaust the bridge process heap.
315
+ const reader = resp.body?.getReader();
316
+ const chunks = [];
317
+ let totalBytes = 0;
318
+ let streamTruncated = false;
319
+ if (reader) {
320
+ try {
321
+ while (true) {
322
+ const { done, value } = await reader.read();
323
+ if (done || value === undefined)
324
+ break;
325
+ if (totalBytes + value.byteLength > maxBytes) {
326
+ chunks.push(value.slice(0, maxBytes - totalBytes));
327
+ totalBytes = maxBytes;
328
+ streamTruncated = true;
329
+ await reader.cancel();
330
+ break;
331
+ }
332
+ chunks.push(value);
333
+ totalBytes += value.byteLength;
334
+ }
335
+ }
336
+ finally {
337
+ reader.releaseLock();
338
+ }
339
+ }
340
+ const fullBytes = totalBytes;
341
+ const rawBody = Buffer.concat(chunks.map((c) => Buffer.from(c))).toString("utf-8");
342
+ const { text: responseBody, truncated } = streamTruncated
343
+ ? { text: rawBody, truncated: true }
344
+ : truncateOutput(rawBody, maxBytes);
345
+ return successStructured({
346
+ status: resp.status,
347
+ statusText: resp.statusText,
348
+ headers: respHeaders,
349
+ body: responseBody,
350
+ durationMs: Date.now() - start,
351
+ ...(redirectCount > 0 ? { redirects: redirectCount } : {}),
352
+ ...(truncated ? { truncated: true, fullBytes } : {}),
353
+ });
354
+ }
355
+ catch (err) {
356
+ cleanup();
357
+ if (err instanceof Error &&
358
+ (err.name === "AbortError" || err.name === "TimeoutError")) {
359
+ return error(`Request timed out after ${timeoutMs}ms`);
360
+ }
361
+ const msg = err instanceof Error ? err.message : String(err);
362
+ return error(`Request failed: ${msg}`);
363
+ }
364
+ },
365
+ };
366
+ }
367
+ const REQUEST_LINE_RE = /^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\s+(\S+)/i;
368
+ function parseHttpFileContent(content) {
369
+ const requests = [];
370
+ // Split on "###" separators (with optional trailing label on same line)
371
+ const sections = content.split(/^###[^\S\r\n]*/m);
372
+ for (const section of sections) {
373
+ const lines = section.split(/\r?\n/);
374
+ let i = 0;
375
+ // Skip leading blank lines
376
+ while (i < lines.length && !lines[i]?.trim())
377
+ i++;
378
+ if (i >= lines.length)
379
+ continue;
380
+ // If the first non-blank line is NOT a request line, treat it as the request name
381
+ let name;
382
+ const candidate = lines[i]?.trim();
383
+ if (candidate && !REQUEST_LINE_RE.test(candidate)) {
384
+ name = candidate;
385
+ i++;
386
+ // Skip blank lines between name and request line
387
+ while (i < lines.length && !lines[i]?.trim())
388
+ i++;
389
+ }
390
+ const requestLine = (lines[i] ?? "").trim();
391
+ const match = REQUEST_LINE_RE.exec(requestLine);
392
+ if (!match)
393
+ continue; // Section has no valid request line
394
+ const method = (match[1] ?? "").toUpperCase();
395
+ const url = match[2] ?? "";
396
+ i++;
397
+ // Parse headers: non-blank lines immediately following the request line
398
+ // Credential headers are redacted to prevent token leakage into MCP responses
399
+ // and the activity log.
400
+ const CREDENTIAL_HEADERS = new Set([
401
+ "authorization",
402
+ "x-api-key",
403
+ "x-auth-token",
404
+ "cookie",
405
+ "set-cookie",
406
+ "proxy-authorization",
407
+ "x-amz-security-token",
408
+ "x-goog-api-key",
409
+ ]);
410
+ const headers = {};
411
+ while (i < lines.length) {
412
+ const line = (lines[i] ?? "").trim();
413
+ if (!line)
414
+ break; // blank line separates headers from body
415
+ const colonIdx = line.indexOf(":");
416
+ if (colonIdx === -1)
417
+ break; // not a header line
418
+ const headerName = line.slice(0, colonIdx).trim();
419
+ const headerValue = line.slice(colonIdx + 1).trim();
420
+ headers[headerName] = CREDENTIAL_HEADERS.has(headerName.toLowerCase())
421
+ ? "[REDACTED]"
422
+ : headerValue;
423
+ i++;
424
+ }
425
+ // Skip the blank separator line
426
+ i++;
427
+ // Everything remaining is the body
428
+ const bodyLines = [];
429
+ while (i < lines.length) {
430
+ bodyLines.push(lines[i] ?? "");
431
+ i++;
432
+ }
433
+ const body = bodyLines.join("\n").trim() || undefined;
434
+ requests.push({
435
+ ...(name ? { name } : {}),
436
+ method,
437
+ url,
438
+ headers,
439
+ ...(body ? { body } : {}),
440
+ });
441
+ }
442
+ return requests;
443
+ }
444
+ export function createParseHttpFileTool(workspace) {
445
+ return {
446
+ schema: {
447
+ name: "parseHttpFile",
448
+ description: "Parse VS Code REST Client file (.http/.rest). Returns method, URL, headers, body per request.",
449
+ annotations: { readOnlyHint: true },
450
+ inputSchema: {
451
+ $schema: "http://json-schema.org/draft-07/schema#",
452
+ type: "object",
453
+ additionalProperties: false,
454
+ required: ["filePath"],
455
+ properties: {
456
+ filePath: {
457
+ type: "string",
458
+ description: "Path to the .http or .rest file within the workspace",
459
+ },
460
+ },
461
+ },
462
+ outputSchema: {
463
+ type: "object",
464
+ properties: {
465
+ requests: { type: "array" },
466
+ count: { type: "integer" },
467
+ },
468
+ required: ["requests", "count"],
469
+ },
470
+ },
471
+ async handler(args) {
472
+ const rawPath = requireString(args, "filePath");
473
+ const filePath = resolveFilePath(rawPath, workspace);
474
+ let content;
475
+ try {
476
+ content = await fs.readFile(filePath, "utf-8");
477
+ }
478
+ catch {
479
+ return error(`Cannot read file: ${rawPath}`);
480
+ }
481
+ const requests = parseHttpFileContent(content);
482
+ return successStructured({ requests, count: requests.length });
483
+ },
484
+ };
485
+ }
486
+ //# sourceMappingURL=httpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../src/tools/httpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { ActivityLog } from "../activityLog.js";
2
+ import type { AutomationHooks } from "../automation.js";
3
+ import type { ClaudeOrchestrator } from "../claudeOrchestrator.js";
4
+ import type { Config } from "../config.js";
5
+ import type { ExtensionClient } from "../extensionClient.js";
6
+ import type { FileLock } from "../fileLock.js";
7
+ import type { LoadedPluginTool } from "../pluginLoader.js";
8
+ import type { ProbeResults } from "../probe.js";
9
+ import type { McpTransport } from "../transport.js";
10
+ import { type DisconnectInfo } from "./bridgeStatus.js";
11
+ /**
12
+ * The IDE-exclusive tools registered in slim mode (opt-in via `--slim`).
13
+ *
14
+ * Full mode is the default (enabled since v2.43.0). Slim mode exposes only
15
+ * tools that require a live IDE extension — tools Claude cannot replicate via
16
+ * its native Read/Write/Bash capabilities. Everything else (git, terminal,
17
+ * file ops, HTTP, GitHub) is available in full mode.
18
+ *
19
+ * To move a tool between modes: add or remove its name from this set.
20
+ */
21
+ export declare const SLIM_TOOL_NAMES: Set<string>;
22
+ /**
23
+ * Context object for all tool factories.
24
+ *
25
+ * Currently tools receive individual parameters via registerAllTools — this
26
+ * interface documents the full context surface and serves as the migration
27
+ * path toward a single `ctx: ToolContext` parameter in a future refactor.
28
+ */
29
+ export interface ToolContext {
30
+ transport: McpTransport;
31
+ config: Config;
32
+ openedFiles: Set<string>;
33
+ probes: ProbeResults;
34
+ extensionClient: ExtensionClient;
35
+ activityLog?: ActivityLog;
36
+ terminalPrefix?: string;
37
+ fileLock?: FileLock;
38
+ sessions?: Map<string, unknown>;
39
+ orchestrator?: ClaudeOrchestrator | null;
40
+ sessionId?: string;
41
+ pluginTools?: LoadedPluginTool[];
42
+ }
43
+ export declare function registerAllTools(transport: McpTransport, config: Config, openedFiles: Set<string>, probes: ProbeResults, extensionClient: ExtensionClient, activityLog?: ActivityLog, terminalPrefix?: string, fileLock?: FileLock, sessions?: Map<string, unknown>, orchestrator?: ClaudeOrchestrator | null, sessionId?: string, pluginTools?: LoadedPluginTool[], automationHooks?: AutomationHooks | undefined, getDisconnectInfo?: () => DisconnectInfo, onContextCacheUpdated?: (generatedAt: string) => void, getExtensionDisconnectCount?: () => number, commitIssueLinkLog?: import("../commitIssueLinkLog.js").CommitIssueLinkLog, recipeRunLog?: import("../runLog.js").RecipeRunLog, decisionTraceLog?: import("../decisionTraceLog.js").DecisionTraceLog): void;
44
+ /**
45
+ * Category map for searchTools discovery.
46
+ * Maps tool name → category list. Categories: lsp, git, terminal, debug,
47
+ * editor, analysis, github, bridge, automation, http.
48
+ */
49
+ export declare const TOOL_CATEGORIES: Record<string, string[]>;