pybao-cli 1.3.82 → 1.3.84

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 (163) hide show
  1. package/dist/REPL-FGFUX54P.js +47 -0
  2. package/dist/{acp-O3XFSFPJ.js → acp-2L5UIDYK.js} +37 -36
  3. package/dist/{acp-O3XFSFPJ.js.map → acp-2L5UIDYK.js.map} +1 -1
  4. package/dist/{agentsValidate-34WM2XCM.js → agentsValidate-G5UPCE23.js} +7 -7
  5. package/dist/{ask-MYUN4IVZ.js → ask-NC5FHXVG.js} +32 -27
  6. package/dist/{ask-MYUN4IVZ.js.map → ask-NC5FHXVG.js.map} +1 -1
  7. package/dist/{autoUpdater-PEQ44H3V.js → autoUpdater-4RF2CRK5.js} +3 -3
  8. package/dist/blockParser-QPLEX5NJ.js +9 -0
  9. package/dist/chunk-42L6OJOC.js +1832 -0
  10. package/dist/chunk-42L6OJOC.js.map +7 -0
  11. package/dist/{chunk-QYMK62S3.js → chunk-46KUA6OA.js} +5 -5
  12. package/dist/{chunk-65GO3IGH.js → chunk-6WOCAHEK.js} +1 -1
  13. package/dist/{chunk-KEI65OPI.js → chunk-7HP3UEMN.js} +1 -1
  14. package/dist/{chunk-JHJUWFQV.js → chunk-7TIDBKNN.js} +3 -3
  15. package/dist/{chunk-BYPTXBFZ.js → chunk-7WMAUFRG.js} +1 -1
  16. package/dist/{chunk-NJGMLEE2.js → chunk-7YPF7IZE.js} +7 -5
  17. package/dist/chunk-7YPF7IZE.js.map +7 -0
  18. package/dist/{chunk-FFI3DPKT.js → chunk-C3HV2RX2.js} +3 -3
  19. package/dist/{chunk-MMW5IKPM.js → chunk-CSRNWBXQ.js} +2 -2
  20. package/dist/{chunk-W7DRY544.js → chunk-FJRJWV7O.js} +7 -7
  21. package/dist/{chunk-7LIFTANO.js → chunk-FKAYIROZ.js} +2 -2
  22. package/dist/{chunk-5OLRA5FW.js → chunk-GFKRGL22.js} +1 -1
  23. package/dist/{chunk-7NJOIESD.js → chunk-JJEJMLIT.js} +1123 -1297
  24. package/dist/chunk-JJEJMLIT.js.map +7 -0
  25. package/dist/{chunk-FXWOPSGI.js → chunk-KDKEJCIA.js} +2 -2
  26. package/dist/{chunk-ICZU7ZHE.js → chunk-KHMW5FJP.js} +1 -1
  27. package/dist/{chunk-JJS6YNOY.js → chunk-LZHKCLLB.js} +3 -3
  28. package/dist/{chunk-M4X6YU4Q.js → chunk-MN5A3I5G.js} +1 -1
  29. package/dist/{chunk-NDMC57FY.js → chunk-MUQI2KCA.js} +2 -2
  30. package/dist/chunk-NEG6NKKM.js +1834 -0
  31. package/dist/chunk-NEG6NKKM.js.map +7 -0
  32. package/dist/{chunk-IAKEZC2M.js → chunk-OVROGAUW.js} +2 -2
  33. package/dist/{chunk-X6ZT2CKW.js → chunk-PC33U2HP.js} +1 -1
  34. package/dist/{chunk-X6ZT2CKW.js.map → chunk-PC33U2HP.js.map} +1 -1
  35. package/dist/{chunk-WKHZANGM.js → chunk-PPIHT4XC.js} +5 -5
  36. package/dist/{blockParser-CFQE5IAN.js → chunk-QWIBSCDN.js} +1 -1
  37. package/dist/{blockParser-CFQE5IAN.js.map → chunk-QWIBSCDN.js.map} +1 -1
  38. package/dist/chunk-SB5WQNSQ.js +478 -0
  39. package/dist/chunk-SB5WQNSQ.js.map +7 -0
  40. package/dist/{chunk-IDDNK666.js → chunk-SOGXQEV2.js} +7 -7
  41. package/dist/{chunk-4W5GGXUO.js → chunk-TACMGUAN.js} +168 -1295
  42. package/dist/chunk-TACMGUAN.js.map +7 -0
  43. package/dist/{chunk-GDLXHK4H.js → chunk-UQHYTY5X.js} +3 -3
  44. package/dist/chunk-W2SGOL2K.js +364 -0
  45. package/dist/chunk-W2SGOL2K.js.map +7 -0
  46. package/dist/{chunk-SWH7ADMS.js → chunk-WPA4GCGG.js} +168 -1
  47. package/dist/{chunk-SWH7ADMS.js.map → chunk-WPA4GCGG.js.map} +3 -3
  48. package/dist/chunk-XI4LTVYT.js +17 -0
  49. package/dist/chunk-XI4LTVYT.js.map +7 -0
  50. package/dist/{chunk-ATBEIY6T.js → chunk-YCIGVKJU.js} +4 -4
  51. package/dist/{chunk-6CAWMG27.js → chunk-ZIEALAFY.js} +1 -1
  52. package/dist/{cli-KAPD54G7.js → cli-MWA546KO.js} +206 -91
  53. package/dist/cli-MWA546KO.js.map +7 -0
  54. package/dist/commands-JMPWEXWX.js +51 -0
  55. package/dist/{config-LWIBGRR5.js → config-JOHT6J75.js} +4 -4
  56. package/dist/{context-XYWJTZHD.js → context-CPFQPWH5.js} +5 -5
  57. package/dist/{customCommands-UCCPVYUJ.js → customCommands-K5AGAFXB.js} +4 -4
  58. package/dist/{env-6UKPD47M.js → env-CEU3W5ME.js} +6 -4
  59. package/dist/file-QZ3DYDGR.js +44 -0
  60. package/dist/index.js +3 -3
  61. package/dist/{chunk-ABDRZ5JP.js → llm-RBX2F2S4.js} +68 -32
  62. package/dist/llm-RBX2F2S4.js.map +7 -0
  63. package/dist/{llmLazy-HBGHFP3Q.js → llmLazy-BIN2DEC2.js} +1 -1
  64. package/dist/{loader-Q3P5WFSZ.js → loader-CV7OJ4NZ.js} +4 -4
  65. package/dist/lsp-QFZEUOOA.js +17 -0
  66. package/dist/{lspAnchor-33U3ZTKG.js → lspAnchor-Q2QPAITR.js} +8 -10
  67. package/dist/lspAnchor-Q2QPAITR.js.map +7 -0
  68. package/dist/{mcp-VKADXSQ2.js → mcp-JM5OIHPD.js} +7 -7
  69. package/dist/{mentionProcessor-SWHAC2DJ.js → mentionProcessor-4LMVOVGA.js} +5 -5
  70. package/dist/{messages-LDGXQV4C.js → messages-XW74FZX6.js} +1 -1
  71. package/dist/{model-4DLJMREO.js → model-RJINKACR.js} +5 -5
  72. package/dist/{openai-FLWMSEUZ.js → openai-66PYA2FX.js} +5 -5
  73. package/dist/{outputStyles-JL7UJMUL.js → outputStyles-MV6ZVKVT.js} +4 -4
  74. package/dist/{pluginRuntime-7LY7TK3X.js → pluginRuntime-BCOVUPBE.js} +6 -6
  75. package/dist/{pluginValidation-7TTJ6I5O.js → pluginValidation-3E6ZTNSH.js} +6 -6
  76. package/dist/prompts-CQXW5O3Z.js +53 -0
  77. package/dist/{pybAgentSessionLoad-HAR3FX4I.js → pybAgentSessionLoad-CKCBOT52.js} +4 -4
  78. package/dist/{pybAgentSessionResume-RA5BAD3Q.js → pybAgentSessionResume-LDUO3VEW.js} +4 -4
  79. package/dist/{pybAgentStreamJsonSession-MGHBFT3O.js → pybAgentStreamJsonSession-5XVEA5BE.js} +1 -1
  80. package/dist/{pybHooks-6QPME7U4.js → pybHooks-JTBESPF6.js} +4 -4
  81. package/dist/query-Z3URPE24.js +55 -0
  82. package/dist/registry-2K7ZNIJX.js +47 -0
  83. package/dist/{ripgrep-FXFBKT6W.js → ripgrep-RJWD3Z7N.js} +3 -3
  84. package/dist/{skillMarketplace-P3UJST5T.js → skillMarketplace-ZDWIN663.js} +3 -3
  85. package/dist/{state-6G53IACA.js → state-XOHPGE2O.js} +2 -2
  86. package/dist/{theme-UO6R6URW.js → theme-B672GYQW.js} +5 -5
  87. package/dist/{toolPermissionSettings-5TLUJA2W.js → toolPermissionSettings-IGFHXHH7.js} +6 -6
  88. package/dist/toolPermissionSettings-IGFHXHH7.js.map +7 -0
  89. package/dist/tools-4SXRMJGJ.js +52 -0
  90. package/dist/tools-4SXRMJGJ.js.map +7 -0
  91. package/dist/{userInput-4SHS43CB.js → userInput-6CV2RY5H.js} +34 -29
  92. package/dist/{userInput-4SHS43CB.js.map → userInput-6CV2RY5H.js.map} +1 -1
  93. package/package.json +1 -1
  94. package/dist/REPL-J3CTO7X2.js +0 -42
  95. package/dist/chunk-4PBAKIJH.js +0 -929
  96. package/dist/chunk-4PBAKIJH.js.map +0 -7
  97. package/dist/chunk-4W5GGXUO.js.map +0 -7
  98. package/dist/chunk-64PUI3X4.js +0 -249
  99. package/dist/chunk-64PUI3X4.js.map +0 -7
  100. package/dist/chunk-7NJOIESD.js.map +0 -7
  101. package/dist/chunk-ABDRZ5JP.js.map +0 -7
  102. package/dist/chunk-NJGMLEE2.js.map +0 -7
  103. package/dist/cli-KAPD54G7.js.map +0 -7
  104. package/dist/commands-EJMKWNRT.js +0 -46
  105. package/dist/llm-SAUON7O4.js +0 -80
  106. package/dist/lspAnchor-33U3ZTKG.js.map +0 -7
  107. package/dist/manager-V2FHM2EQ.js +0 -13
  108. package/dist/prompts-7NZHNDRN.js +0 -48
  109. package/dist/query-UZM2IIQL.js +0 -50
  110. package/dist/tools-WFRZC3LT.js +0 -51
  111. /package/dist/{REPL-J3CTO7X2.js.map → REPL-FGFUX54P.js.map} +0 -0
  112. /package/dist/{agentsValidate-34WM2XCM.js.map → agentsValidate-G5UPCE23.js.map} +0 -0
  113. /package/dist/{autoUpdater-PEQ44H3V.js.map → autoUpdater-4RF2CRK5.js.map} +0 -0
  114. /package/dist/{commands-EJMKWNRT.js.map → blockParser-QPLEX5NJ.js.map} +0 -0
  115. /package/dist/{chunk-QYMK62S3.js.map → chunk-46KUA6OA.js.map} +0 -0
  116. /package/dist/{chunk-65GO3IGH.js.map → chunk-6WOCAHEK.js.map} +0 -0
  117. /package/dist/{chunk-KEI65OPI.js.map → chunk-7HP3UEMN.js.map} +0 -0
  118. /package/dist/{chunk-JHJUWFQV.js.map → chunk-7TIDBKNN.js.map} +0 -0
  119. /package/dist/{chunk-BYPTXBFZ.js.map → chunk-7WMAUFRG.js.map} +0 -0
  120. /package/dist/{chunk-FFI3DPKT.js.map → chunk-C3HV2RX2.js.map} +0 -0
  121. /package/dist/{chunk-MMW5IKPM.js.map → chunk-CSRNWBXQ.js.map} +0 -0
  122. /package/dist/{chunk-W7DRY544.js.map → chunk-FJRJWV7O.js.map} +0 -0
  123. /package/dist/{chunk-7LIFTANO.js.map → chunk-FKAYIROZ.js.map} +0 -0
  124. /package/dist/{chunk-5OLRA5FW.js.map → chunk-GFKRGL22.js.map} +0 -0
  125. /package/dist/{chunk-FXWOPSGI.js.map → chunk-KDKEJCIA.js.map} +0 -0
  126. /package/dist/{chunk-ICZU7ZHE.js.map → chunk-KHMW5FJP.js.map} +0 -0
  127. /package/dist/{chunk-JJS6YNOY.js.map → chunk-LZHKCLLB.js.map} +0 -0
  128. /package/dist/{chunk-M4X6YU4Q.js.map → chunk-MN5A3I5G.js.map} +0 -0
  129. /package/dist/{chunk-NDMC57FY.js.map → chunk-MUQI2KCA.js.map} +0 -0
  130. /package/dist/{chunk-IAKEZC2M.js.map → chunk-OVROGAUW.js.map} +0 -0
  131. /package/dist/{chunk-WKHZANGM.js.map → chunk-PPIHT4XC.js.map} +0 -0
  132. /package/dist/{chunk-IDDNK666.js.map → chunk-SOGXQEV2.js.map} +0 -0
  133. /package/dist/{chunk-GDLXHK4H.js.map → chunk-UQHYTY5X.js.map} +0 -0
  134. /package/dist/{chunk-ATBEIY6T.js.map → chunk-YCIGVKJU.js.map} +0 -0
  135. /package/dist/{chunk-6CAWMG27.js.map → chunk-ZIEALAFY.js.map} +0 -0
  136. /package/dist/{config-LWIBGRR5.js.map → commands-JMPWEXWX.js.map} +0 -0
  137. /package/dist/{context-XYWJTZHD.js.map → config-JOHT6J75.js.map} +0 -0
  138. /package/dist/{customCommands-UCCPVYUJ.js.map → context-CPFQPWH5.js.map} +0 -0
  139. /package/dist/{env-6UKPD47M.js.map → customCommands-K5AGAFXB.js.map} +0 -0
  140. /package/dist/{llm-SAUON7O4.js.map → env-CEU3W5ME.js.map} +0 -0
  141. /package/dist/{llmLazy-HBGHFP3Q.js.map → file-QZ3DYDGR.js.map} +0 -0
  142. /package/dist/{loader-Q3P5WFSZ.js.map → llmLazy-BIN2DEC2.js.map} +0 -0
  143. /package/dist/{manager-V2FHM2EQ.js.map → loader-CV7OJ4NZ.js.map} +0 -0
  144. /package/dist/{mcp-VKADXSQ2.js.map → lsp-QFZEUOOA.js.map} +0 -0
  145. /package/dist/{messages-LDGXQV4C.js.map → mcp-JM5OIHPD.js.map} +0 -0
  146. /package/dist/{mentionProcessor-SWHAC2DJ.js.map → mentionProcessor-4LMVOVGA.js.map} +0 -0
  147. /package/dist/{model-4DLJMREO.js.map → messages-XW74FZX6.js.map} +0 -0
  148. /package/dist/{openai-FLWMSEUZ.js.map → model-RJINKACR.js.map} +0 -0
  149. /package/dist/{outputStyles-JL7UJMUL.js.map → openai-66PYA2FX.js.map} +0 -0
  150. /package/dist/{pluginValidation-7TTJ6I5O.js.map → outputStyles-MV6ZVKVT.js.map} +0 -0
  151. /package/dist/{pluginRuntime-7LY7TK3X.js.map → pluginRuntime-BCOVUPBE.js.map} +0 -0
  152. /package/dist/{prompts-7NZHNDRN.js.map → pluginValidation-3E6ZTNSH.js.map} +0 -0
  153. /package/dist/{pybAgentSessionLoad-HAR3FX4I.js.map → prompts-CQXW5O3Z.js.map} +0 -0
  154. /package/dist/{pybAgentSessionResume-RA5BAD3Q.js.map → pybAgentSessionLoad-CKCBOT52.js.map} +0 -0
  155. /package/dist/{pybHooks-6QPME7U4.js.map → pybAgentSessionResume-LDUO3VEW.js.map} +0 -0
  156. /package/dist/{pybAgentStreamJsonSession-MGHBFT3O.js.map → pybAgentStreamJsonSession-5XVEA5BE.js.map} +0 -0
  157. /package/dist/{query-UZM2IIQL.js.map → pybHooks-JTBESPF6.js.map} +0 -0
  158. /package/dist/{ripgrep-FXFBKT6W.js.map → query-Z3URPE24.js.map} +0 -0
  159. /package/dist/{skillMarketplace-P3UJST5T.js.map → registry-2K7ZNIJX.js.map} +0 -0
  160. /package/dist/{state-6G53IACA.js.map → ripgrep-RJWD3Z7N.js.map} +0 -0
  161. /package/dist/{theme-UO6R6URW.js.map → skillMarketplace-ZDWIN663.js.map} +0 -0
  162. /package/dist/{toolPermissionSettings-5TLUJA2W.js.map → state-XOHPGE2O.js.map} +0 -0
  163. /package/dist/{tools-WFRZC3LT.js.map → theme-B672GYQW.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lsp/index.ts", "../src/tools/search/LspTool/client/generic.ts", "../src/tools/search/LspTool/client/manager.ts", "../src/tools/search/LspTool/client/formatters.ts", "../src/lsp/formatters.ts", "../src/utils/tree-sitter/registry.ts", "../src/utils/tree-sitter/loader.ts", "../src/utils/tree-sitter/lsp-adapter.ts", "../src/utils/tree-sitter/scope-analyzer.ts"],
4
+ "sourcesContent": ["import { extname } from 'path'\nimport { pathToFileURL } from 'url'\nimport { readFile } from 'fs/promises'\nimport * as http from 'http'\nimport { getCwd } from '@utils/state'\nimport { LspClientManager } from '../tools/search/LspTool/client/manager'\nimport { LspServerRegistry } from '../tools/search/LspTool/registry'\nimport type { LspResult } from '../tools/search/LspTool/client/formatters'\nimport {\n formatGenericDefinitionResult,\n formatGenericReferencesResult,\n formatGenericHoverResult,\n formatGenericDocumentSymbolResult,\n formatGenericDiagnosticsResult,\n formatGenericCallHierarchyItemsResult,\n formatGenericIncomingCallsResult,\n formatGenericOutgoingCallsResult,\n} from '../tools/search/LspTool/client/formatters'\nimport { formatDiagnosticsPretty } from './formatters'\nimport { TreeSitterLspAdapter } from '@utils/tree-sitter/lsp-adapter'\nimport { ParserRegistry } from '@utils/tree-sitter/registry'\nimport { ScopeAnalyzer } from '@utils/tree-sitter/scope-analyzer'\n\ntype Operation =\n | 'goToDefinition'\n | 'findReferences'\n | 'hover'\n | 'documentSymbol'\n | 'workspaceSymbol'\n | 'goToImplementation'\n | 'prepareCallHierarchy'\n | 'incomingCalls'\n | 'outgoingCalls'\n | 'diagnostics'\n\ntype RunInput = {\n operation: Operation\n filePath: string\n line?: number\n character?: number\n query?: string\n waitForDiagnostics?: boolean\n timeoutMs?: number\n rootPath?: string\n}\n\ntype TouchOptions = {\n wait?: boolean\n timeoutMs?: number\n rootPath?: string\n}\n\nfunction getLanguageId(ext: string): string {\n return LspServerRegistry.getInstance().getLanguageIdForExtension(ext)\n}\n\nfunction normalizeUri(filePath: string): string {\n let uri = pathToFileURL(filePath).href\n if (process.platform === 'win32') {\n uri = uri.replace(/^file:\\/\\/\\/([a-zA-Z]):\\//, (_match, drive) => {\n return `file:///${drive.toLowerCase()}%3A/`\n })\n }\n return uri\n}\n\ntype FacadeOperation = Operation | 'getScope'\n\ntype FacadeRunInput = Omit<RunInput, 'operation'> & {\n operation: FacadeOperation\n}\n\nfunction formatTreeSitterSymbols(symbols: any[], depth = 0): string {\n let text = ''\n const indent = ' '.repeat(depth)\n for (const s of symbols) {\n text += `${indent}- ${s.name} (${s.kind}) [Ln ${s.range.start.line + 1}]\\n`\n if (s.children && s.children.length > 0) {\n text += formatTreeSitterSymbols(s.children, depth + 1)\n }\n }\n return text\n}\n\nfunction formatTreeSitterDocumentSymbolResult(symbols: any[]): LspResult {\n const formatted =\n symbols.length > 0\n ? `Document symbols:\\n${formatTreeSitterSymbols(symbols)}`\n : 'No symbols found.'\n return {\n formatted,\n resultCount: symbols.length,\n fileCount: symbols.length > 0 ? 1 : 0,\n }\n}\n\nfunction normalizeWorkspaceSymbol(sym: any) {\n if (!sym || typeof sym !== 'object') return null\n const range = sym.range ?? sym.location?.range\n if (!range || !sym.name) return null\n const uri = sym.uri ?? sym.location?.uri\n return { ...sym, range, uri }\n}\n\nfunction sortWorkspaceSymbols(symbols: any[]): any[] {\n return [...symbols].sort((a, b) => {\n const nameA = String(a?.name ?? '').toLowerCase()\n const nameB = String(b?.name ?? '').toLowerCase()\n if (nameA !== nameB) return nameA.localeCompare(nameB)\n const uriA = String(a?.uri ?? a?.location?.uri ?? '')\n const uriB = String(b?.uri ?? b?.location?.uri ?? '')\n if (uriA !== uriB) return uriA.localeCompare(uriB)\n const lineA = a?.range?.start?.line ?? a?.location?.range?.start?.line ?? 0\n const lineB = b?.range?.start?.line ?? b?.location?.range?.start?.line ?? 0\n if (lineA !== lineB) return lineA - lineB\n const charA = a?.range?.start?.character ?? a?.location?.range?.start?.character ?? 0\n const charB = b?.range?.start?.character ?? b?.location?.range?.start?.character ?? 0\n return charA - charB\n })\n}\n\ntype StatusServer = http.Server & { port: number }\n\nfunction serveStatusWithProvider(\n statusProvider: () => unknown,\n options?: {\n host?: string\n port?: number\n path?: string\n allowCors?: boolean\n },\n): StatusServer {\n const host = options?.host ?? '127.0.0.1'\n const port = typeof options?.port === 'number' ? options.port : 7337\n const path = options?.path ?? '/lsp/status'\n const allowCors = options?.allowCors ?? true\n const corsHeaders = allowCors\n ? {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET,OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type',\n }\n : {}\n\n const server = http.createServer((req, res) => {\n const method = req.method ?? 'GET'\n const url = new URL(req.url ?? '/', `http://${host}`)\n if (url.pathname !== path) {\n res.writeHead(404, corsHeaders)\n res.end('Not Found')\n return\n }\n if (method === 'OPTIONS') {\n res.writeHead(204, corsHeaders)\n res.end()\n return\n }\n if (method !== 'GET') {\n res.writeHead(405, corsHeaders)\n res.end('Method Not Allowed')\n return\n }\n const status = statusProvider()\n res.writeHead(200, { 'Content-Type': 'application/json', ...corsHeaders })\n res.end(JSON.stringify(status, null, 2))\n })\n ;(server as StatusServer).port = port\n server.listen(port, host)\n return server as StatusServer\n}\n\nexport const LspAPI = {\n async run(input: RunInput): Promise<LspResult> {\n const rootPath = input.rootPath ?? getCwd()\n const client = await LspClientManager.getInstance().getClient(\n input.filePath,\n rootPath,\n )\n\n if (client) {\n try {\n switch (input.operation) {\n case 'goToDefinition': {\n if (input.line === undefined || input.character === undefined) {\n return {\n formatted: 'Error performing goToDefinition: Missing line/character',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const result = await client.goToDefinition(\n input.filePath,\n input.line,\n input.character,\n )\n return formatGenericDefinitionResult(result)\n }\n case 'findReferences': {\n if (input.line === undefined || input.character === undefined) {\n return {\n formatted: 'Error performing findReferences: Missing line/character',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const result = await client.findReferences(\n input.filePath,\n input.line,\n input.character,\n )\n return formatGenericReferencesResult(result)\n }\n case 'hover': {\n if (input.line === undefined || input.character === undefined) {\n return {\n formatted: 'Error performing hover: Missing line/character',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const result = await client.hover(\n input.filePath,\n input.line,\n input.character,\n )\n return formatGenericHoverResult(result, input.line, input.character)\n }\n case 'documentSymbol': {\n const result = await client.documentSymbol(input.filePath)\n return formatGenericDocumentSymbolResult(result)\n }\n case 'workspaceSymbol': {\n const query = input.query ?? input.filePath\n const results = await LspClientManager.getInstance().workspaceSymbol(\n query,\n rootPath,\n )\n return formatGenericDocumentSymbolResult(results)\n }\n case 'goToImplementation': {\n if (input.line === undefined || input.character === undefined) {\n return {\n formatted: 'Error performing goToImplementation: Missing line/character',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const result = await client.goToImplementation(\n input.filePath,\n input.line,\n input.character,\n )\n return formatGenericDefinitionResult(result)\n }\n case 'prepareCallHierarchy': {\n if (input.line === undefined || input.character === undefined) {\n return {\n formatted: 'Error performing prepareCallHierarchy: Missing line/character',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const result = await client.prepareCallHierarchy(\n input.filePath,\n input.line,\n input.character,\n )\n return formatGenericCallHierarchyItemsResult(\n Array.isArray(result) ? result : [],\n )\n }\n case 'incomingCalls': {\n if (input.line === undefined || input.character === undefined) {\n return {\n formatted: 'Error performing incomingCalls: Missing line/character',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const items = await client.prepareCallHierarchy(\n input.filePath,\n input.line,\n input.character,\n )\n const callResults = await Promise.all(\n (Array.isArray(items) ? items : []).map(item =>\n client.incomingCalls(item),\n ),\n )\n const calls = callResults.flat().filter(Boolean)\n return formatGenericIncomingCallsResult(calls)\n }\n case 'outgoingCalls': {\n if (input.line === undefined || input.character === undefined) {\n return {\n formatted: 'Error performing outgoingCalls: Missing line/character',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const items = await client.prepareCallHierarchy(\n input.filePath,\n input.line,\n input.character,\n )\n const callResults = await Promise.all(\n (Array.isArray(items) ? items : []).map(item =>\n client.outgoingCalls(item),\n ),\n )\n const calls = callResults.flat().filter(Boolean)\n return formatGenericOutgoingCallsResult(calls)\n }\n case 'diagnostics': {\n if (input.waitForDiagnostics) {\n await client.waitForReadiness(\n input.filePath,\n input.timeoutMs ?? 5000,\n )\n }\n const diagnostics = client.getDiagnostics(input.filePath)\n return formatGenericDiagnosticsResult(diagnostics)\n }\n default: {\n return {\n formatted: `Operation ${input.operation} not supported by generic client yet.`,\n resultCount: 0,\n fileCount: 0,\n }\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return {\n formatted: `Error performing ${input.operation} with generic client: ${message}`,\n resultCount: 0,\n fileCount: 0,\n }\n }\n }\n\n const ext = extname(input.filePath)\n return {\n formatted: `No LSP server available for file type: ${ext}`,\n resultCount: 0,\n fileCount: 0,\n }\n },\n\n async runAll(inputs: RunInput[]): Promise<LspResult[]> {\n return Promise.all(inputs.map(input => this.run(input)))\n },\n\n async touchFile(filePath: string, options: TouchOptions = {}): Promise<boolean> {\n const client = await LspClientManager.getInstance().getClientForFile(filePath)\n if (!client) return false\n const content = await readFile(filePath, 'utf-8')\n const languageId = getLanguageId(extname(filePath))\n await client.didOpen(filePath, content, languageId)\n if (options.wait) {\n await client.waitForReadiness(filePath, options.timeoutMs ?? 2000)\n }\n return true\n },\n\n async diagnostics(filePath: string, rootPath?: string): Promise<any[]> {\n return LspClientManager.getInstance().getAllDiagnostics(filePath, rootPath)\n },\n\n async diagnosticsPretty(\n filePath: string,\n options?: { maxItems?: number; rootPath?: string },\n ): Promise<string> {\n const diagnostics = await LspClientManager.getInstance().getAllDiagnostics(\n filePath,\n options?.rootPath,\n )\n return formatDiagnosticsPretty(diagnostics, { maxItems: options?.maxItems })\n },\n\n async documentSymbolRaw(\n filePath: string,\n rootPath?: string,\n ): Promise<any[] | null> {\n const manager = LspClientManager.getInstance()\n const resolvedRoot = rootPath ?? getCwd()\n const managerDocumentSymbol = (manager as any).documentSymbol\n if (typeof managerDocumentSymbol === 'function') {\n return managerDocumentSymbol.call(manager, filePath, resolvedRoot)\n }\n const client = await manager.getClient(filePath, resolvedRoot)\n if (!client) return null\n const clientDocumentSymbol = (client as any).documentSymbol\n if (typeof clientDocumentSymbol !== 'function') return []\n try {\n const symbols = await clientDocumentSymbol.call(client, filePath)\n return Array.isArray(symbols) ? symbols : []\n } catch {\n return []\n }\n },\n\n async findReferencesRaw(\n filePath: string,\n line: number,\n character: number,\n rootPath?: string,\n ): Promise<any[] | null> {\n const client = await LspClientManager.getInstance().getClient(\n filePath,\n rootPath ?? getCwd(),\n )\n if (!client) return null\n return (await client.findReferences(filePath, line, character)) as any[]\n },\n\n normalizeUri,\n\n async workspaceSymbol(\n query: string,\n options?: {\n rootPath?: string\n maxItems?: number\n filterKinds?: number[]\n nameIncludes?: string\n },\n ): Promise<any[]> {\n const { rootPath, ...rest } = options ?? {}\n return LspClientManager.getInstance().workspaceSymbol(\n query,\n rootPath ?? getCwd(),\n rest,\n )\n },\n\n serveStatus(options?: {\n host?: string\n port?: number\n path?: string\n allowCors?: boolean\n }) {\n return serveStatusWithProvider(() => LspAPI.status(), options)\n },\n\n status() {\n return LspClientManager.getInstance().status()\n },\n}\n\nexport const LspFacade = {\n async run(input: FacadeRunInput): Promise<LspResult> {\n const rootPath = input.rootPath ?? getCwd()\n if (input.operation === 'documentSymbol') {\n const lang = ParserRegistry.getLanguage(input.filePath)\n if (lang) {\n try {\n const symbols = await TreeSitterLspAdapter.getDocumentSymbols(input.filePath)\n return formatTreeSitterDocumentSymbolResult(symbols)\n } catch {\n }\n }\n }\n\n if (input.operation === 'getScope') {\n if (input.line === undefined || input.character === undefined) {\n return {\n formatted: 'Error performing getScope: Missing line/character',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const lang = ParserRegistry.getLanguage(input.filePath)\n if (!lang) {\n return {\n formatted: 'getScope not supported for this language',\n resultCount: 0,\n fileCount: 0,\n }\n }\n try {\n const code = await readFile(input.filePath, 'utf-8')\n const scope = await ScopeAnalyzer.getScope(input.filePath, code, {\n row: input.line - 1,\n column: input.character - 1,\n })\n let resultText = ''\n if (scope.locals.length > 0) {\n resultText += `Locals: ${scope.locals.join(', ')}\\n`\n } else {\n resultText += 'Locals: (none)\\n'\n }\n if (scope.closure.length > 0) {\n resultText += `Closure: ${scope.closure.join(', ')}\\n`\n } else {\n resultText += 'Closure: (none)\\n'\n }\n return {\n formatted: resultText,\n resultCount: scope.locals.length + scope.closure.length,\n fileCount: 1,\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return {\n formatted: `Error performing getScope: ${message}`,\n resultCount: 0,\n fileCount: 0,\n }\n }\n }\n\n if (input.operation !== 'workspaceSymbol') {\n await LspAPI.touchFile(input.filePath, {\n wait: input.operation === 'diagnostics' && input.waitForDiagnostics,\n timeoutMs: input.timeoutMs,\n rootPath,\n })\n }\n\n if (input.operation === 'workspaceSymbol') {\n const query = input.query ?? input.filePath\n const symbols = await LspAPI.workspaceSymbol(query, { rootPath })\n const normalized = symbols.map(normalizeWorkspaceSymbol).filter(Boolean)\n const sorted = sortWorkspaceSymbols(normalized)\n return formatGenericDocumentSymbolResult(sorted)\n }\n\n const { operation, ...rest } = input\n return LspAPI.run({\n ...rest,\n operation: operation as Operation,\n rootPath,\n })\n },\n\n async runAll(inputs: FacadeRunInput[]): Promise<LspResult[]> {\n return Promise.all(inputs.map(input => this.run(input)))\n },\n\n async touchFile(filePath: string, options: TouchOptions = {}): Promise<boolean> {\n return LspAPI.touchFile(filePath, options)\n },\n\n async diagnosticsPretty(\n filePath: string,\n options?: { maxItems?: number; rootPath?: string },\n ): Promise<string> {\n return LspAPI.diagnosticsPretty(filePath, options)\n },\n\n async checkFileReferences(filePath: string): Promise<string | null> {\n const rootPath = getCwd()\n const fileUri = LspAPI.normalizeUri(filePath)\n const symbols = await LspAPI.documentSymbolRaw(filePath, rootPath)\n if (symbols === null) {\n throw new Error('LSP unavailable')\n }\n\n const checkSymbolRefs = async (sym: any): Promise<string | null> => {\n const range = sym.selectionRange || sym.range || (sym.location ? sym.location.range : null)\n if (!range) return null\n const refs = await LspAPI.findReferencesRaw(\n filePath,\n range.start.line + 1,\n range.start.character + 1,\n rootPath,\n )\n if (refs && Array.isArray(refs)) {\n const externalRefs = refs.filter((r: any) => r.uri !== fileUri)\n if (externalRefs.length > 0) {\n const refFiles = externalRefs.map((r: any) => r.uri).slice(0, 3).join(', ')\n return `Symbol '${sym.name}' referenced by ${externalRefs.length} locations (e.g. ${refFiles})`\n }\n }\n return null\n }\n\n if (symbols && Array.isArray(symbols) && symbols.length > 0) {\n for (const sym of symbols) {\n const result = await checkSymbolRefs(sym)\n if (result) return result\n }\n } else {\n const refs = await LspAPI.findReferencesRaw(filePath, 1, 1, rootPath)\n if (refs && Array.isArray(refs)) {\n const externalRefs = refs.filter((r: any) => r.uri !== fileUri)\n if (externalRefs.length > 0) {\n return `File referenced by ${externalRefs.length} locations`\n }\n }\n }\n return null\n },\n\n serveStatus(options?: {\n host?: string\n port?: number\n path?: string\n allowCors?: boolean\n }) {\n return serveStatusWithProvider(() => LspFacade.status(), options)\n },\n\n status() {\n return LspAPI.status()\n },\n}\n", "import { createMessageConnection, StreamMessageReader, StreamMessageWriter } from 'vscode-jsonrpc/node.js'\nimport type { MessageConnection } from 'vscode-jsonrpc'\nimport type { ChildProcessWithoutNullStreams, SpawnOptions } from 'child_process'\nimport { spawn } from 'child_process'\nimport { pathToFileURL, fileURLToPath } from 'url'\nimport { EventEmitter } from 'events'\n\ntype DiagnosticsEvent = {\n uri: string\n filePath: string\n diagnostics: any[]\n}\n\ntype DiagnosticsSummary = {\n uri: string\n filePath: string\n count: number\n errors: number\n warnings: number\n infos: number\n hints: number\n}\n\nexport class DiagnosticsEventBus {\n private debounceMs: number\n private lastEventAt = new Map<string, number>()\n private debounceTimers = new Map<string, NodeJS.Timeout>()\n private waiting = new Map<string, Set<() => void>>()\n\n constructor(options?: { debounceMs?: number }) {\n this.debounceMs = options?.debounceMs ?? 150\n }\n\n publish(uri: string) {\n const now = Date.now()\n this.lastEventAt.set(uri, now)\n const existing = this.debounceTimers.get(uri)\n if (existing) {\n clearTimeout(existing)\n }\n const timer = setTimeout(() => {\n this.debounceTimers.delete(uri)\n const waiters = this.waiting.get(uri)\n if (!waiters || waiters.size === 0) return\n for (const resolver of Array.from(waiters)) {\n resolver()\n }\n }, this.debounceMs)\n this.debounceTimers.set(uri, timer)\n }\n\n waitForIdle(uri: string, timeoutMs: number): Promise<void> {\n const last = this.lastEventAt.get(uri)\n if (last !== undefined && Date.now() - last >= this.debounceMs) {\n return Promise.resolve()\n }\n return new Promise(resolve => {\n let done = false\n const finish = () => {\n if (done) return\n done = true\n clearTimeout(timeout)\n const waiters = this.waiting.get(uri)\n if (waiters) {\n waiters.delete(finish)\n if (waiters.size === 0) this.waiting.delete(uri)\n }\n resolve()\n }\n const waiters = this.waiting.get(uri) ?? new Set()\n waiters.add(finish)\n this.waiting.set(uri, waiters)\n const timeout = setTimeout(() => {\n finish()\n }, timeoutMs)\n })\n }\n}\n\nexport class GenericLspClient {\n private connection: MessageConnection\n private process: ChildProcessWithoutNullStreams\n public capabilities: any\n private diagnosticEvents = new EventEmitter()\n private diagnosticsBus = new DiagnosticsEventBus()\n private diagnosticsMap = new Map<string, any[]>()\n\n constructor(\n serverCommand: string,\n serverArgs: string[],\n cwd: string,\n private rootPath: string,\n private extraEnv?: Record<string, string>,\n private initializationOptions?: Record<string, unknown>\n ) {\n // console.log('[GenericLspClient] Spawning:', serverCommand, serverArgs.join(' '))\n const env = {\n ...process.env,\n // Remove potentially conflicting variables\n NODE_OPTIONS: undefined,\n TS_NODE_PROJECT: undefined,\n ELECTRON_RUN_AS_NODE: undefined,\n ...this.extraEnv\n }\n \n const options: SpawnOptions = {\n cwd,\n stdio: 'pipe',\n env,\n shell: false\n }\n\n this.process = spawn(serverCommand, serverArgs, options)\n\n this.process.stderr.on('data', (data) => {\n console.error(`[LSP Stderr] ${data}`)\n })\n\n this.connection = createMessageConnection(\n new StreamMessageReader(this.process.stdout),\n new StreamMessageWriter(this.process.stdin)\n )\n\n this.connection.onNotification((method, params) => {\n if (method === 'window/logMessage' || method === '$/progress') {\n console.log(`[LSP Notification] ${method}:`, JSON.stringify(params))\n }\n if (method === 'textDocument/publishDiagnostics') {\n try {\n const payload = params as { uri?: string; diagnostics?: any[] }\n const uri = payload.uri ?? ''\n let filePath = uri;\n if (uri.startsWith('file://')) {\n filePath = fileURLToPath(uri);\n }\n // Store diagnostics\n const normalizedUri = this.normalizeUri(filePath);\n this.diagnosticsMap.set(normalizedUri, payload.diagnostics ?? []);\n // console.log(`[LSP] Stored diagnostics for ${normalizedUri}: ${params.diagnostics.length} items`)\n \n this.diagnosticsBus.publish(normalizedUri)\n this.diagnosticEvents.emit('diagnostics', { uri, filePath, diagnostics: payload.diagnostics ?? [] } satisfies DiagnosticsEvent);\n } catch (e) {\n console.error('[LSP] Error processing diagnostics:', e);\n }\n }\n })\n\n this.connection.onRequest((method, params) => {\n // console.log(`[LSP Request] ${method}:`, JSON.stringify(params))\n if (method === 'workspace/configuration') {\n const payload = params as { items?: any[] }\n const items = Array.isArray(payload.items) ? payload.items : []\n return items.map((item: any) => {\n const section = String(item?.section ?? '')\n if (section === 'yaml' || section.startsWith('yaml.')) {\n return { schemaStore: { enable: false }, schemas: {} }\n }\n return {}\n })\n }\n if (method === 'client/registerCapability') {\n return null\n }\n return null\n })\n\n this.connection.listen()\n }\n\n public normalizeUri(filePath: string): string {\n let uri = pathToFileURL(filePath).href\n if (process.platform === 'win32') {\n uri = uri.replace(/^file:\\/\\/\\/([a-zA-Z]):\\//, (match, drive) => {\n return `file:///${drive.toLowerCase()}%3A/`\n })\n }\n return uri\n }\n\n async initialize() {\n const rootUri = this.normalizeUri(this.rootPath)\n \n console.log('[GenericLspClient] Initializing with normalized rootUri:', rootUri)\n const params: {\n processId: number\n rootUri: string\n capabilities: any\n workspaceFolders: { name: string; uri: string }[]\n initializationOptions?: Record<string, unknown>\n } = {\n processId: process.pid,\n rootUri,\n capabilities: {\n textDocument: {\n synchronization: {\n didOpen: true,\n didChange: true,\n willSave: false,\n willSaveWaitUntil: false,\n didSave: true\n },\n hover: {\n contentFormat: ['markdown', 'plaintext']\n },\n definition: {},\n references: {}\n },\n workspace: {\n workspaceFolders: true\n }\n },\n workspaceFolders: [\n {\n name: 'workspace',\n uri: this.normalizeUri(this.rootPath)\n }\n ]\n }\n if (this.initializationOptions && Object.keys(this.initializationOptions).length > 0) {\n params.initializationOptions = this.initializationOptions\n }\n\n const result = await this.connection.sendRequest('initialize', params)\n await this.connection.sendNotification('initialized', {})\n \n // Notify configuration change (empty) to trigger analysis if needed\n await this.connection.sendNotification('workspace/didChangeConfiguration', {\n settings: { yaml: { schemaStore: { enable: false }, schemas: {} } }\n })\n \n // Give server a moment to settle\n await new Promise(resolve => setTimeout(resolve, 100))\n\n this.capabilities = (result as any).capabilities\n return result\n }\n\n async shutdown() {\n try {\n await this.connection.sendRequest('shutdown')\n await this.connection.sendNotification('exit')\n } catch (error) {\n // Ignore errors during shutdown\n }\n this.connection.dispose()\n this.process.kill()\n }\n\n async goToDefinition(filePath: string, line: number, character: number) {\n const params = {\n textDocument: { uri: this.normalizeUri(filePath) },\n position: { line: line - 1, character: character - 1 }\n }\n return this.connection.sendRequest('textDocument/definition', params)\n }\n\n async findReferences(filePath: string, line: number, character: number) {\n const params = {\n textDocument: { uri: this.normalizeUri(filePath) },\n position: { line: line - 1, character: character - 1 },\n context: { includeDeclaration: true }\n }\n return this.connection.sendRequest('textDocument/references', params)\n }\n\n async hover(filePath: string, line: number, character: number) {\n const params = {\n textDocument: { uri: this.normalizeUri(filePath) },\n position: { line: line - 1, character: character - 1 }\n }\n return this.connection.sendRequest('textDocument/hover', params)\n }\n\n async documentSymbol(filePath: string) {\n const params = {\n textDocument: { uri: this.normalizeUri(filePath) }\n }\n return this.connection.sendRequest('textDocument/documentSymbol', params)\n }\n\n async workspaceSymbol(query: string) {\n const params = {\n query\n }\n return this.connection.sendRequest('workspace/symbol', params)\n }\n\n async goToImplementation(filePath: string, line: number, character: number) {\n const params = {\n textDocument: { uri: this.normalizeUri(filePath) },\n position: { line: line - 1, character: character - 1 }\n }\n return this.connection.sendRequest('textDocument/implementation', params)\n }\n\n async prepareCallHierarchy(filePath: string, line: number, character: number) {\n const params = {\n textDocument: { uri: this.normalizeUri(filePath) },\n position: { line: line - 1, character: character - 1 }\n }\n return this.connection.sendRequest('textDocument/prepareCallHierarchy', params)\n }\n\n async incomingCalls(item: any) {\n const params = { item }\n return this.connection.sendRequest('callHierarchy/incomingCalls', params)\n }\n\n async outgoingCalls(item: any) {\n const params = { item }\n return this.connection.sendRequest('callHierarchy/outgoingCalls', params)\n }\n\n async didOpen(filePath: string, content: string, languageId: string) {\n const params = {\n textDocument: {\n uri: this.normalizeUri(filePath),\n languageId,\n version: 1,\n text: content\n }\n }\n await this.connection.sendNotification('textDocument/didOpen', params)\n }\n\n async didChange(filePath: string, content: string, version: number) {\n const params = {\n textDocument: {\n uri: this.normalizeUri(filePath),\n version\n },\n contentChanges: [{ text: content }]\n }\n await this.connection.sendNotification('textDocument/didChange', params)\n }\n\n async didClose(filePath: string) {\n const params = {\n textDocument: {\n uri: this.normalizeUri(filePath)\n }\n }\n await this.connection.sendNotification('textDocument/didClose', params)\n }\n\n async waitForReadiness(filePath: string, timeoutMs: number = 3000): Promise<void> {\n const normalizedUri = this.normalizeUri(filePath);\n await this.diagnosticsBus.waitForIdle(normalizedUri, timeoutMs)\n }\n\n on(event: 'diagnostics', handler: (event: DiagnosticsEvent) => void) {\n this.diagnosticEvents.on(event, handler)\n }\n\n off(event: 'diagnostics', handler: (event: DiagnosticsEvent) => void) {\n this.diagnosticEvents.off(event, handler)\n }\n\n getDiagnostics(filePath: string): any[] {\n return this.diagnosticsMap.get(this.normalizeUri(filePath)) || []\n }\n\n getDiagnosticsSnapshot(): DiagnosticsSummary[] {\n const summaries: DiagnosticsSummary[] = []\n for (const [uri, diagnostics] of this.diagnosticsMap.entries()) {\n let filePath = uri\n try {\n if (uri.startsWith('file://')) {\n filePath = fileURLToPath(uri)\n }\n } catch {\n filePath = uri\n }\n const summary = {\n uri,\n filePath,\n count: diagnostics.length,\n errors: 0,\n warnings: 0,\n infos: 0,\n hints: 0\n }\n for (const diagnostic of diagnostics) {\n const severity = diagnostic?.severity\n if (severity === 1) summary.errors += 1\n else if (severity === 2) summary.warnings += 1\n else if (severity === 3) summary.infos += 1\n else if (severity === 4) summary.hints += 1\n }\n summaries.push(summary)\n }\n return summaries\n }\n}\n", "import { GenericLspClient } from './generic'\nimport { extname, join, dirname, sep, relative } from 'path'\nimport { fileURLToPath } from 'url'\nimport { LspServerRegistry, LspServerInfo } from '../registry'\nimport { findNearestRoot } from '../utils'\nimport { readdir, readFile } from 'fs/promises'\nimport { existsSync } from 'fs'\nimport { getCwd } from '@utils/state'\nimport { levenshtein } from '@utils/text/smart-edit/levenshtein'\nimport { minimatch } from 'minimatch'\n\ntype LspClientFactory = (\n command: string,\n args: string[],\n cwd: string,\n root: string,\n env?: Record<string, string>,\n initializationOptions?: Record<string, unknown>\n) => GenericLspClient\n\nexport class LspClientManager {\n private static instance: LspClientManager\n private static clientFactory: LspClientFactory | null = null\n private clients: Map<string, GenericLspClient> = new Map()\n private spawning: Map<string, Promise<GenericLspClient | null>> = new Map()\n private broken: Set<string> = new Set()\n\n private constructor() {}\n\n static getInstance(): LspClientManager {\n if (!LspClientManager.instance) {\n LspClientManager.instance = new LspClientManager()\n }\n return LspClientManager.instance\n }\n\n static setClientFactoryForTests(factory: LspClientFactory | null) {\n LspClientManager.clientFactory = factory\n }\n\n getLanguageId(ext: string, serverInfo?: LspServerInfo): string {\n if (serverInfo?.languageId) return serverInfo.languageId\n return LspServerRegistry.getInstance().getLanguageIdForExtension(ext)\n }\n\n private async ensureWorkspaceClients(rootPath: string) {\n try {\n // Heuristic: Scan root directory for file extensions to auto-detect needed servers\n const files = await readdir(rootPath, { withFileTypes: true })\n const extensionMap = new Map<string, string>() // ext -> realFilePath\n\n // Smart Project Detection\n const fileNames = new Set(files.map(f => f.name))\n if (fileNames.has('tsconfig.json') || fileNames.has('package.json')) {\n // Try to find a .ts or .js file to trigger activation\n // If root has no .ts/.js, look in src/\n if (!files.some(f => f.isFile() && /\\.(ts|tsx|js|jsx)$/.test(f.name))) {\n try {\n const srcFiles = await readdir(join(rootPath, 'src'), { withFileTypes: true })\n const triggerFile = srcFiles.find(f => f.isFile() && /\\.(ts|tsx|js|jsx)$/.test(f.name))\n if (triggerFile) {\n extensionMap.set(extname(triggerFile.name), join(rootPath, 'src', triggerFile.name))\n }\n } catch (e) {\n // src not found or error, ignore\n }\n }\n }\n if (fileNames.has('go.mod')) {\n extensionMap.set('.go', join(rootPath, 'go.mod')) // fallback trigger? No, needs .go file.\n // Look for main.go\n if (fileNames.has('main.go')) extensionMap.set('.go', join(rootPath, 'main.go'))\n }\n if (fileNames.has('Cargo.toml')) {\n // Look for src/main.rs or src/lib.rs\n try {\n if (existsSync(join(rootPath, 'src', 'main.rs'))) extensionMap.set('.rs', join(rootPath, 'src', 'main.rs'))\n else if (existsSync(join(rootPath, 'src', 'lib.rs'))) extensionMap.set('.rs', join(rootPath, 'src', 'lib.rs'))\n } catch (e) {}\n }\n\n for (const file of files) {\n if (file.isFile()) {\n const ext = extname(file.name)\n if (ext && !extensionMap.has(ext)) {\n extensionMap.set(ext, join(rootPath, file.name))\n }\n }\n }\n \n // Try to initialize server for each found extension\n for (const [ext, realPath] of extensionMap) {\n // getClient will trigger server initialization if not already running\n // console.log('[LspClientManager] Initializing client for', ext, realPath)\n const client = await this.getClient(realPath, rootPath)\n \n if (client) {\n // Phase 8: Warmup with Touch & Wait\n try {\n // console.log('[LspClientManager] Warming up', realPath)\n const content = await readFile(realPath, 'utf-8')\n // For project-level triggers (like tsconfig), we still need to open a valid source file\n // If realPath is not a source file (e.g. if we used a dummy), this might fail.\n // But our logic above tries to find real source files.\n const serverInfo = LspServerRegistry.getInstance().getServerForExtension(ext)\n await client.didOpen(realPath, content, this.getLanguageId(ext, serverInfo ?? undefined))\n await client.waitForReadiness(realPath, 2000)\n // console.log('[LspClientManager] Warmup complete for', realPath)\n } catch (e) {\n // console.error('[LspClientManager] Warmup failed', e)\n // Ignore warmup errors\n }\n } else {\n // console.log('[LspClientManager] Failed to get client for', ext)\n }\n }\n } catch (e) {\n // ignore scan errors\n }\n }\n\n async getClientForFile(filePath: string): Promise<GenericLspClient | null> {\n const rootPath = await this.resolveRootForFile(filePath)\n return this.getClient(filePath, rootPath)\n }\n\n async resolveRootForFile(filePath: string): Promise<string> {\n const ext = extname(filePath)\n const serverInfo = LspServerRegistry.getInstance().getServerForExtension(ext)\n if (serverInfo) {\n return this.resolveRootForServer(filePath, serverInfo)\n }\n const cwd = getCwd()\n if (filePath.startsWith(cwd)) {\n return cwd\n }\n return dirname(filePath)\n }\n\n async getClient(filePath: string, rootPath?: string): Promise<GenericLspClient | null> {\n const ext = extname(filePath)\n const servers = LspServerRegistry.getInstance().getServersForExtension(ext)\n if (servers.length === 0) return null\n for (const serverInfo of servers) {\n const client = await this.getClientForServer(filePath, serverInfo, rootPath)\n if (client) return client\n }\n return null\n }\n\n async getClientsForFile(filePath: string, rootPath?: string): Promise<GenericLspClient[]> {\n const ext = extname(filePath)\n const servers = LspServerRegistry.getInstance().getServersForExtension(ext)\n if (servers.length === 0) return []\n const clients: GenericLspClient[] = []\n for (const serverInfo of servers) {\n const client = await this.getClientForServer(filePath, serverInfo, rootPath)\n if (client) clients.push(client)\n }\n return clients\n }\n\n private async spawnClient(\n resolvedRoot: string,\n serverInfo: LspServerInfo,\n key: string\n ): Promise<GenericLspClient | null> {\n const cmd = await serverInfo.getCommand(resolvedRoot)\n if (!cmd) {\n return null\n }\n const safeCwd = /[^\\x00-\\x7F]/.test(resolvedRoot) ? process.cwd() : resolvedRoot\n let initOpts = serverInfo.initializationOptions\n if (serverInfo.id === 'pyright' || serverInfo.id === 'ty') {\n const { detectPythonVenv } = await import('../registry')\n const pythonPath = detectPythonVenv(resolvedRoot)\n if (pythonPath) {\n initOpts = { ...(initOpts ?? {}), pythonPath }\n }\n }\n const nextClient = (LspClientManager.clientFactory ?? ((...args: Parameters<LspClientFactory>) => new GenericLspClient(...args)))(\n cmd.command,\n cmd.args,\n safeCwd,\n resolvedRoot,\n serverInfo.env,\n initOpts\n )\n await nextClient.initialize()\n this.clients.set(key, nextClient)\n return nextClient\n }\n \n async shutdownAll() {\n for (const client of this.clients.values()) {\n await client.shutdown()\n }\n this.clients.clear()\n this.broken.clear()\n this.spawning.clear()\n }\n\n async workspaceSymbol(\n query: string,\n rootPath: string = getCwd(),\n options?: { maxItems?: number; filterKinds?: number[]; nameIncludes?: string }\n ): Promise<any[]> {\n // Remediation 1.1: Ensure clients initialized\n if (this.clients.size === 0) {\n await this.ensureWorkspaceClients(rootPath)\n }\n\n const results: any[] = []\n for (const client of this.clients.values()) {\n try {\n const symbols = await client.workspaceSymbol(query)\n if (symbols && Array.isArray(symbols)) {\n results.push(...symbols)\n }\n } catch (e) {\n // ignore\n }\n }\n\n // Remediation 1.2: Fuzzy Fallback (Client-side)\n if (results.length === 0 && query.length > 0) {\n for (const client of this.clients.values()) {\n try {\n // Try to get broad list (empty query)\n // Note: Some servers might return too many results or reject empty query.\n // Ideally we'd have a 'getAllSymbols' capability check.\n // For now, we try.\n const broadSymbols = await client.workspaceSymbol('') \n if (broadSymbols && Array.isArray(broadSymbols)) {\n for (const sym of broadSymbols) {\n const dist = levenshtein(query, sym.name)\n // Allow distance <= 2 or 30% of length\n if (dist <= 2 || dist <= query.length * 0.3) {\n results.push(sym)\n }\n }\n }\n } catch (e) {\n // ignore\n }\n }\n }\n\n const normalizedResults = results.map(sym => {\n if (!sym || typeof sym !== 'object') return sym\n if (!sym.range && sym.location?.range) {\n sym.range = sym.location.range\n }\n if (!sym.uri && sym.location?.uri) {\n sym.uri = sym.location.uri\n }\n return sym\n })\n\n const resolveFilePath = (uri: string) => {\n try {\n if (uri.startsWith('file://')) {\n return fileURLToPath(uri)\n }\n } catch {}\n return uri\n }\n\n const flattenSymbols = (items: any[], output: any[] = []) => {\n for (const item of items) {\n if (!item || typeof item !== 'object') continue\n output.push(item)\n if (Array.isArray(item.children) && item.children.length > 0) {\n flattenSymbols(item.children, output)\n }\n }\n return output\n }\n\n const missingRange = normalizedResults.filter(\n sym => sym && !sym.range && typeof sym.uri === 'string' && sym.uri.length > 0\n )\n if (missingRange.length > 0) {\n const byUri = new Map<string, any[]>()\n for (const sym of missingRange) {\n if (!byUri.has(sym.uri)) byUri.set(sym.uri, [])\n byUri.get(sym.uri)!.push(sym)\n }\n const documentCache = new Map<string, any[]>()\n for (const [uri, symbols] of byUri.entries()) {\n const filePath = resolveFilePath(uri)\n let documentSymbols = documentCache.get(filePath)\n if (!documentSymbols) {\n documentSymbols = (await this.documentSymbol(filePath, rootPath)) ?? []\n documentCache.set(filePath, documentSymbols)\n }\n const flat = flattenSymbols(documentSymbols)\n for (const sym of symbols) {\n let match = flat.find(\n item => item?.name === sym.name && (sym.kind === undefined || item?.kind === sym.kind)\n )\n if (!match) {\n match = flat.find(item => item?.name === sym.name)\n }\n const range = match?.range ?? match?.location?.range\n if (range) {\n sym.range = range\n }\n }\n }\n }\n\n const finalResults = normalizedResults.filter(sym => sym && sym.range && sym.name)\n\n const seen = new Set<string>()\n const deduped: any[] = []\n for (const sym of finalResults) {\n const uri = sym?.location?.uri ?? sym?.uri ?? ''\n const line = sym?.range?.start?.line ?? sym?.location?.range?.start?.line ?? ''\n const character = sym?.range?.start?.character ?? sym?.location?.range?.start?.character ?? ''\n const kind = sym?.kind ?? ''\n const key = `${sym?.name ?? ''}|${kind}|${uri}|${line}|${character}`\n if (!seen.has(key)) {\n seen.add(key)\n deduped.push(sym)\n }\n }\n\n let filtered = deduped\n if (options?.filterKinds && options.filterKinds.length > 0) {\n const allowedKinds = new Set(options.filterKinds)\n filtered = filtered.filter(sym => allowedKinds.has(sym?.kind))\n }\n if (options?.nameIncludes) {\n const needle = options.nameIncludes.toLowerCase()\n filtered = filtered.filter(sym =>\n String(sym?.name ?? '').toLowerCase().includes(needle)\n )\n }\n if (options?.maxItems !== undefined && filtered.length > options.maxItems) {\n filtered = filtered.slice(0, options.maxItems)\n }\n\n return filtered\n }\n\n async documentSymbol(filePath: string, rootPath: string = getCwd()): Promise<any[] | null> {\n const client = await this.getClient(filePath, rootPath)\n if (!client) {\n return null\n }\n\n try {\n const content = await readFile(filePath, 'utf-8')\n const ext = extname(filePath)\n const serverInfo = LspServerRegistry.getInstance().getServerForExtension(ext)\n const languageId = this.getLanguageId(ext, serverInfo ?? undefined)\n await client.didOpen(filePath, content, languageId)\n // Phase 8: Perception-Aware Wait\n await client.waitForReadiness(filePath, 2000)\n \n const symbols = await client.documentSymbol(filePath)\n return Array.isArray(symbols) ? symbols : []\n } catch (e) {\n console.error(`Failed to get document symbols for ${filePath}:`, e)\n return null\n }\n }\n\n async getDiagnostics(filePath: string, rootPath: string = getCwd()): Promise<any[]> {\n const client = await this.getClient(filePath, rootPath)\n if (!client) {\n return []\n }\n // Ensure diagnostics are fresh if possible?\n // But getDiagnostics is synchronous map lookup.\n // We rely on waitForReadiness being called before this if needed.\n // For strict correctness, we should wait if we haven't recently.\n // But typical usage pattern is waitForReadiness() -> getDiagnostics().\n return client.getDiagnostics(filePath)\n }\n\n async getAllDiagnostics(filePath: string, rootPath: string = getCwd()): Promise<any[]> {\n await this.getClientsForFile(filePath, rootPath)\n const results: any[] = []\n for (const client of this.clients.values()) {\n try {\n const diagnostics = client.getDiagnostics(filePath)\n if (diagnostics && diagnostics.length > 0) {\n results.push(...diagnostics)\n }\n } catch (e) {\n }\n }\n return results\n }\n\n status() {\n const diagnostics = []\n for (const [key, client] of this.clients.entries()) {\n const snapshot = (client as any).getDiagnosticsSnapshot?.()\n if (Array.isArray(snapshot) && snapshot.length > 0) {\n diagnostics.push({ client: key, entries: snapshot })\n }\n }\n return {\n clients: Array.from(this.clients.keys()),\n spawning: Array.from(this.spawning.keys()),\n broken: Array.from(this.broken.values()),\n diagnostics\n }\n }\n\n // New helper to expose waitForReadiness to clients who only have a manager\n async waitForReadiness(filePath: string, rootPath: string = getCwd(), timeoutMs: number = 2000): Promise<void> {\n // Use getClientForFile to ensure correct rootPath resolution if not provided or incorrect\n const client = await this.getClientForFile(filePath)\n if (client) {\n await client.waitForReadiness(filePath, timeoutMs)\n }\n }\n\n private matchesServerFilters(filePath: string, serverInfo: LspServerInfo): boolean {\n const normalizePath = (value: string) => value.replace(/\\\\/g, '/')\n const normalizedFile = normalizePath(filePath)\n const relativeToCwd = normalizePath(relative(getCwd(), filePath))\n const matches = (patterns: string[]) =>\n patterns.some(pattern => {\n if (minimatch(normalizedFile, pattern, { dot: true })) return true\n if (relativeToCwd && !relativeToCwd.startsWith('..')) {\n return minimatch(relativeToCwd, pattern, { dot: true })\n }\n return false\n })\n if (serverInfo.rootExclude && matches(serverInfo.rootExclude)) return false\n if (serverInfo.rootInclude && !matches(serverInfo.rootInclude)) return false\n return true\n }\n\n private async resolveRootForServer(filePath: string, serverInfo: LspServerInfo): Promise<string> {\n const cwd = getCwd()\n let defaultRoot: string | undefined\n if (serverInfo.rootMarkers.length > 0) {\n defaultRoot = await findNearestRoot(dirname(filePath), serverInfo.rootMarkers, {\n include: serverInfo.rootInclude,\n exclude: serverInfo.rootExclude,\n branches: serverInfo.rootBranches,\n filePath\n })\n }\n if (!defaultRoot) {\n defaultRoot = filePath.startsWith(cwd) ? cwd : dirname(filePath)\n }\n if (serverInfo.resolveRoot) {\n const resolved = await serverInfo.resolveRoot(filePath, defaultRoot)\n return resolved || defaultRoot\n }\n return defaultRoot\n }\n\n private async getClientForServer(\n filePath: string,\n serverInfo: LspServerInfo,\n rootPath?: string\n ): Promise<GenericLspClient | null> {\n if (!this.matchesServerFilters(filePath, serverInfo)) {\n return null\n }\n const resolvedRoot = rootPath ?? (await this.resolveRootForServer(filePath, serverInfo))\n try {\n const ready = await serverInfo.prepare()\n if (!ready) {\n return null\n }\n } catch (e) {\n return null\n }\n\n const key = `${resolvedRoot}:${serverInfo.id}`\n if (this.broken.has(key)) {\n return null\n }\n const existingSpawn = this.spawning.get(key)\n if (existingSpawn) {\n return existingSpawn\n }\n let client = this.clients.get(key)\n\n if (!client) {\n const spawnPromise = (async () => {\n try {\n return await this.spawnClient(resolvedRoot, serverInfo, key)\n } catch (error) {\n this.broken.add(key)\n return null\n } finally {\n this.spawning.delete(key)\n }\n })()\n this.spawning.set(key, spawnPromise)\n client = await spawnPromise\n }\n\n return client\n }\n}\n", "import { fileURLToPath } from 'url'\nimport { relative } from 'path'\nimport { getCwd } from '@utils/state'\n\nexport type LspResult = {\n formatted: string\n resultCount: number\n fileCount: number\n}\n\nconst SYMBOL_KIND_MAP: Record<number, string> = {\n 1: 'File',\n 2: 'Module',\n 3: 'Namespace',\n 4: 'Package',\n 5: 'Class',\n 6: 'Method',\n 7: 'Property',\n 8: 'Field',\n 9: 'Constructor',\n 10: 'Enum',\n 11: 'Interface',\n 12: 'Function',\n 13: 'Variable',\n 14: 'Constant',\n 15: 'String',\n 16: 'Number',\n 17: 'Boolean',\n 18: 'Array',\n 19: 'Object',\n 20: 'Key',\n 21: 'Null',\n 22: 'EnumMember',\n 23: 'Struct',\n 24: 'Event',\n 25: 'Operator',\n 26: 'TypeParameter',\n}\n\nfunction toProjectRelative(filePath: string): string {\n const cwd = getCwd()\n try {\n const rel = relative(cwd, filePath)\n if (!rel || rel === '') return filePath\n if (rel.startsWith('..')) return filePath\n return rel\n } catch {\n return filePath\n }\n}\n\nfunction formatLocation(uri: string, range: { start: { line: number; character: number } }): string {\n const filePath = fileURLToPath(uri)\n return `${toProjectRelative(filePath)}:${range.start.line + 1}:${range.start.character + 1}`\n}\n\nfunction getSymbolKindName(kind: any): string {\n if (typeof kind === 'number') return SYMBOL_KIND_MAP[kind] || `Kind(${kind})`\n if (typeof kind === 'string') return kind\n return 'Unknown'\n}\n\nfunction formatCallHierarchyItem(item: any): { label: string; uri?: string } {\n const kind = getSymbolKindName(item?.kind)\n const range = item?.selectionRange ?? item?.range\n if (item?.uri && range) {\n return {\n label: `${item.name} (${kind}) at ${formatLocation(item.uri, range)}`,\n uri: item.uri,\n }\n }\n if (item?.uri) {\n return {\n label: `${item.name} (${kind}) at ${toProjectRelative(fileURLToPath(item.uri))}`,\n uri: item.uri,\n }\n }\n return { label: `${item?.name ?? 'Unknown'} (${kind})` }\n}\n\nfunction formatCallRanges(uri: string, ranges: any[]): string {\n const valid = Array.isArray(ranges) ? ranges : []\n if (valid.length === 0) return ''\n return valid\n .map(range => formatLocation(uri, range))\n .filter(Boolean)\n .join(', ')\n}\n\nexport function formatGenericDefinitionResult(result: any): LspResult {\n if (!result) {\n return { formatted: 'No definition found.', resultCount: 0, fileCount: 0 }\n }\n const locations = Array.isArray(result) ? result : [result]\n if (locations.length === 0) {\n return { formatted: 'No definition found.', resultCount: 0, fileCount: 0 }\n }\n\n const fileCount = new Set(locations.map((l: any) => l.uri)).size\n \n if (locations.length === 1) {\n return {\n formatted: `Defined in ${formatLocation(locations[0].uri, locations[0].range)}`,\n resultCount: 1,\n fileCount\n }\n }\n\n return {\n formatted: `Found ${locations.length} definitions:\\n${locations.map((l: any) => ` ${formatLocation(l.uri, l.range)}`).join('\\n')}`,\n resultCount: locations.length,\n fileCount\n }\n}\n\nexport function formatGenericReferencesResult(result: any): LspResult {\n if (!result || !Array.isArray(result) || result.length === 0) {\n return { formatted: 'No references found.', resultCount: 0, fileCount: 0 }\n }\n \n // Group by file\n const grouped = new Map<string, any[]>()\n for (const ref of result) {\n const file = toProjectRelative(fileURLToPath(ref.uri))\n if (!grouped.has(file)) grouped.set(file, [])\n grouped.get(file)!.push(ref)\n }\n\n const lines = [`Found ${result.length} references across ${grouped.size} files:`]\n for (const [file, refs] of grouped) {\n lines.push(`\\n${file}:`)\n for (const ref of refs) {\n lines.push(` Line ${ref.range.start.line + 1}:${ref.range.start.character + 1}`)\n }\n }\n\n return {\n formatted: lines.join('\\n'),\n resultCount: result.length,\n fileCount: grouped.size\n }\n}\n\nexport function formatGenericHoverResult(result: any, line: number, character: number): LspResult {\n if (!result || !result.contents) {\n return { formatted: 'No hover info.', resultCount: 0, fileCount: 0 }\n }\n \n let contents = ''\n if (typeof result.contents === 'string') {\n contents = result.contents\n } else if (Array.isArray(result.contents)) {\n contents = result.contents.map((c: any) => typeof c === 'string' ? c : c.value).join('\\n')\n } else {\n contents = result.contents.value\n }\n\n return {\n formatted: `Hover info at ${line}:${character}:\\n\\n${contents}`,\n resultCount: 1,\n fileCount: 1\n }\n}\n\nexport function formatGenericDocumentSymbolResult(result: any): LspResult {\n if (!result || !Array.isArray(result) || result.length === 0) {\n return { formatted: 'No symbols found.', resultCount: 0, fileCount: 0 }\n }\n\n const lines = result.map((s: any) => {\n const kind = getSymbolKindName(s.kind)\n return `${s.name} (${kind}) at ${s.range.start.line + 1}:${s.range.start.character + 1}`\n })\n\n return {\n formatted: ['Document symbols:', ...lines].join('\\n'),\n resultCount: result.length,\n fileCount: 1\n }\n}\n\nexport function formatGenericDiagnosticsResult(diagnostics: any[]): LspResult {\n if (!diagnostics || diagnostics.length === 0) {\n return { formatted: 'No diagnostics found.', resultCount: 0, fileCount: 0 }\n }\n\n const lines = diagnostics.map(d => {\n return `[${d.severity === 1 ? 'Error' : d.severity === 2 ? 'Warning' : 'Info'}] Line ${d.range.start.line + 1}: ${d.message}`\n })\n\n return {\n formatted: ['Diagnostics:', ...lines].join('\\n'),\n resultCount: diagnostics.length,\n fileCount: 1\n }\n}\n\nexport function formatGenericCallHierarchyItemsResult(items: any[]): LspResult {\n if (!items || !Array.isArray(items) || items.length === 0) {\n return { formatted: 'No call hierarchy items found.', resultCount: 0, fileCount: 0 }\n }\n const uris = new Set<string>()\n const lines = items.map(item => {\n const info = formatCallHierarchyItem(item)\n if (info.uri) uris.add(info.uri)\n return `- ${info.label}`\n })\n return {\n formatted: ['Call hierarchy items:', ...lines].join('\\n'),\n resultCount: items.length,\n fileCount: uris.size,\n }\n}\n\nexport function formatGenericIncomingCallsResult(calls: any[]): LspResult {\n if (!calls || !Array.isArray(calls) || calls.length === 0) {\n return { formatted: 'No incoming calls found.', resultCount: 0, fileCount: 0 }\n }\n const uris = new Set<string>()\n const lines: string[] = ['Incoming calls:']\n for (const call of calls) {\n const info = formatCallHierarchyItem(call?.from)\n if (info.uri) uris.add(info.uri)\n lines.push(`- ${info.label}`)\n if (call?.from?.uri) {\n const ranges = formatCallRanges(call.from.uri, call?.fromRanges ?? [])\n if (ranges) {\n lines.push(` via ${ranges}`)\n }\n }\n }\n return {\n formatted: lines.join('\\n'),\n resultCount: calls.length,\n fileCount: uris.size,\n }\n}\n\nexport function formatGenericOutgoingCallsResult(calls: any[]): LspResult {\n if (!calls || !Array.isArray(calls) || calls.length === 0) {\n return { formatted: 'No outgoing calls found.', resultCount: 0, fileCount: 0 }\n }\n const uris = new Set<string>()\n const lines: string[] = ['Outgoing calls:']\n for (const call of calls) {\n const info = formatCallHierarchyItem(call?.to)\n if (info.uri) uris.add(info.uri)\n lines.push(`- ${info.label}`)\n if (call?.to?.uri) {\n const ranges = formatCallRanges(call.to.uri, call?.fromRanges ?? [])\n if (ranges) {\n lines.push(` via ${ranges}`)\n }\n }\n }\n return {\n formatted: lines.join('\\n'),\n resultCount: calls.length,\n fileCount: uris.size,\n }\n}\n", "type FormatOptions = {\n maxItems?: number\n}\n\nconst severityOrder: Record<number, number> = {\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n}\n\nfunction severityLabel(severity: number | undefined): string {\n if (severity === 1) return 'Error'\n if (severity === 2) return 'Warning'\n if (severity === 3) return 'Info'\n if (severity === 4) return 'Hint'\n return 'Unknown'\n}\n\nexport function formatDiagnosticsPretty(\n diagnostics: any[],\n options: FormatOptions = {},\n): string {\n if (!diagnostics || diagnostics.length === 0) return ''\n const items = [...diagnostics].sort((a, b) => {\n const aSeverity = severityOrder[a?.severity ?? 99] ?? 99\n const bSeverity = severityOrder[b?.severity ?? 99] ?? 99\n if (aSeverity !== bSeverity) return aSeverity - bSeverity\n const aLine = a?.range?.start?.line ?? 0\n const bLine = b?.range?.start?.line ?? 0\n if (aLine !== bLine) return aLine - bLine\n const aChar = a?.range?.start?.character ?? 0\n const bChar = b?.range?.start?.character ?? 0\n return aChar - bChar\n })\n const limited =\n options.maxItems && options.maxItems > 0\n ? items.slice(0, options.maxItems)\n : items\n return limited\n .map(d => {\n const line = (d?.range?.start?.line ?? 0) + 1\n const character = (d?.range?.start?.character ?? 0) + 1\n const label = severityLabel(d?.severity)\n const message = d?.message ?? 'Unknown diagnostic'\n return `- ${label} ${line}:${character} ${message}`\n })\n .join('\\n')\n}\n", "import path from \"path\";\nimport { LANGUAGE_MAP } from \"./loader\";\n\n// Extract keys from LANGUAGE_MAP for type safety\nexport type SupportedLanguage = keyof typeof LANGUAGE_MAP;\n\nexport class ParserRegistry {\n private static extensionMap: Record<string, SupportedLanguage> = {\n \".ts\": \"typescript\",\n \".tsx\": \"tsx\",\n \".js\": \"typescript\", // Use TS parser for JS\n \".jsx\": \"tsx\",\n \".py\": \"python\",\n \".sh\": \"bash\",\n \".bash\": \"bash\",\n \".rs\": \"rust\",\n \".go\": \"go\",\n \".java\": \"java\",\n \".cpp\": \"cpp\",\n \".c\": \"c\",\n \".h\": \"c\",\n \".cc\": \"cpp\",\n \".cs\": \"c_sharp\",\n \".scala\": \"scala\",\n \".sbt\": \"scala\",\n \".sc\": \"scala\",\n \".hs\": \"haskell\",\n \".lhs\": \"haskell\",\n \".jl\": \"julia\",\n \".ml\": \"ocaml\",\n \".mli\": \"ocaml\",\n \".swift\": \"swift\",\n \".nix\": \"nix\",\n \".rb\": \"ruby\",\n \".html\": \"html\",\n \".htm\": \"html\",\n \".css\": \"css\",\n \".json\": \"json\",\n \".jsonc\": \"json\",\n \".yaml\": \"yaml\",\n \".yml\": \"yaml\",\n };\n\n /**\n * Get the supported language ID for a given filename.\n * Returns null if the extension is not supported.\n */\n static getLanguage(filename: string): SupportedLanguage | null {\n const ext = path.extname(filename).toLowerCase();\n return this.extensionMap[ext] || null;\n }\n\n /**\n * Register or override a file extension mapping.\n */\n static registerExtension(ext: string, lang: SupportedLanguage) {\n const normalizedExt = ext.startsWith(\".\") ? ext : `.${ext}`;\n this.extensionMap[normalizedExt.toLowerCase()] = lang;\n }\n}\n", "import { createRequire } from \"module\";\nimport { Parser, Language } from \"web-tree-sitter\";\nimport { fileURLToPath } from 'url';\nimport path from \"path\";\n\n// Helper to handle __dirname in both CJS and ESM environments\nconst getDirname = () => {\n try {\n return __dirname;\n } catch {\n return path.dirname(fileURLToPath(import.meta.url));\n }\n};\nconst _dirname = getDirname();\n\n// Cache for Parser instances per language\nconst parserCache = new Map<string, Parser>();\nlet isInitialized = false;\n\n// Language to Filename mapping (in resources/tree-sitter)\nexport const LANGUAGE_MAP: Record<string, string> = {\n bash: \"tree-sitter-bash.wasm\",\n typescript: \"tree-sitter-typescript.wasm\",\n tsx: \"tree-sitter-tsx.wasm\",\n python: \"tree-sitter-python.wasm\",\n rust: \"tree-sitter-rust.wasm\",\n go: \"tree-sitter-go.wasm\",\n java: \"tree-sitter-java.wasm\",\n cpp: \"tree-sitter-cpp.wasm\",\n c: \"tree-sitter-c.wasm\",\n c_sharp: \"tree-sitter-c_sharp.wasm\",\n scala: \"tree-sitter-scala.wasm\",\n haskell: \"tree-sitter-haskell.wasm\",\n julia: \"tree-sitter-julia.wasm\",\n ocaml: \"tree-sitter-ocaml.wasm\",\n swift: \"tree-sitter-swift.wasm\",\n nix: \"tree-sitter-nix.wasm\",\n ruby: \"tree-sitter-ruby.wasm\",\n html: \"tree-sitter-html.wasm\",\n css: \"tree-sitter-css.wasm\",\n json: \"tree-sitter-json.wasm\",\n yaml: \"tree-sitter-yaml.wasm\",\n};\n\n/**\n * Initialize Tree-Sitter Core (WASM).\n * This must be called before loading any languages.\n */\nasync function ensureInitialized() {\n if (isInitialized) return;\n\n // Resolve path relative to project root -> resources/tree-sitter\n // In dev: src/utils/tree-sitter/loader.ts -> ../../../resources/tree-sitter\n // In prod: dist/index.js -> ../resources/tree-sitter (assuming resources is copied to root)\n // We can check if we are running in a bundled environment or ts-node/bun dev.\n \n let resourcesDir;\n if (_dirname.includes('dist') || _dirname.includes('node_modules')) {\n // Production / Installed\n resourcesDir = path.resolve(_dirname, '../resources/tree-sitter');\n } else {\n // Development\n resourcesDir = path.resolve(_dirname, '../../../resources/tree-sitter');\n }\n\n const treeWasmPath = path.join(resourcesDir, \"tree-sitter.wasm\");\n\n await Parser.init({\n locateFile: () => treeWasmPath,\n });\n isInitialized = true;\n}\n\n/**\n * Load a Tree-Sitter language parser dynamically.\n * Uses caching to avoid reloading WASM files.\n */\nexport const loadLanguage = async (lang: keyof typeof LANGUAGE_MAP): Promise<Parser> => {\n if (parserCache.has(lang)) {\n return parserCache.get(lang)!;\n }\n\n await ensureInitialized();\n\n const fileName = LANGUAGE_MAP[lang];\n \n if (!fileName) {\n throw new Error(`Unsupported language: ${lang}`);\n }\n\n try {\n let resourcesDir;\n if (_dirname.includes('dist') || _dirname.includes('node_modules')) {\n resourcesDir = path.resolve(_dirname, '../resources/tree-sitter');\n } else {\n resourcesDir = path.resolve(_dirname, '../../../resources/tree-sitter');\n }\n \n const wasmPath = path.join(resourcesDir, fileName);\n \n const language = await Language.load(wasmPath);\n const parser = new Parser();\n parser.setLanguage(language);\n \n parserCache.set(lang, parser);\n return parser;\n } catch (error) {\n console.error(`Error loading language ${lang}:`, error);\n throw new Error(`Failed to load language ${lang}: ${error}`);\n }\n};\n\n// Legacy compatibility for Bash (used by safety checks)\nlet legacyParserInstance: Parser | null = null;\n\nexport const initParser = async (): Promise<Parser> => {\n if (legacyParserInstance) return legacyParserInstance;\n legacyParserInstance = await loadLanguage(\"bash\");\n return legacyParserInstance;\n};\n", "import { ParserRegistry } from \"./registry\";\nimport { loadLanguage } from \"./loader\";\nimport { readFile } from \"fs/promises\";\nimport type { Node } from \"web-tree-sitter\";\n\nexport interface LspSymbol {\n name: string;\n kind: string;\n range: {\n start: { line: number; character: number };\n end: { line: number; character: number };\n };\n children?: LspSymbol[];\n}\n\nconst SYMBOL_KIND_MAP: Record<string, string> = {\n // TypeScript / JavaScript\n function_declaration: \"Function\",\n method_definition: \"Method\",\n class_declaration: \"Class\",\n interface_declaration: \"Interface\",\n variable_declarator: \"Variable\",\n export_statement: \"Module\",\n \n // Python\n function_definition: \"Function\",\n class_definition: \"Class\",\n \n // Bash\n // function_definition is shared with Python/others\n \n // C#\n namespace_declaration: \"Namespace\",\n method_declaration: \"Method\",\n struct_declaration: \"Struct\",\n enum_declaration: \"Enum\",\n property_declaration: \"Property\",\n // class_declaration shared\n // interface_declaration shared\n\n // Go\n type_declaration: \"Class\", // often struct/interface\n field_declaration: \"Field\",\n // function_declaration shared\n // method_declaration shared\n\n // Rust\n function_item: \"Function\",\n struct_item: \"Struct\",\n enum_item: \"Enum\",\n impl_item: \"Class\",\n trait_item: \"Interface\",\n mod_item: \"Module\",\n\n // Java\n // class_declaration shared\n // method_declaration shared\n // interface_declaration shared\n // enum_declaration shared\n\n // Scala\n object_definition: \"Class\",\n trait_definition: \"Interface\",\n // class_definition shared with Python\n // function_definition shared with Python\n \n // Ruby\n module: \"Module\",\n // class shared\n // method shared\n\n // PHP\n // class_declaration shared\n // method_declaration shared\n // function_definition shared\n};\n\nexport class TreeSitterLspAdapter {\n static async getDocumentSymbols(filePath: string): Promise<LspSymbol[]> {\n const langId = ParserRegistry.getLanguage(filePath);\n if (!langId) {\n console.warn(`No language found for file: ${filePath}`);\n return [];\n }\n\n try {\n const parser = await loadLanguage(langId);\n const content = await readFile(filePath, \"utf-8\");\n const tree = parser.parse(content);\n\n return this.collectSymbols(tree.rootNode);\n } catch (error) {\n console.error(`Error parsing file ${filePath}:`, error);\n return [];\n }\n }\n\n private static collectSymbols(node: Node): LspSymbol[] {\n const symbols: LspSymbol[] = [];\n const kind = SYMBOL_KIND_MAP[node.type];\n\n if (kind) {\n const name = this.getName(node);\n if (name) {\n const symbol: LspSymbol = {\n name,\n kind,\n range: {\n start: { line: node.startPosition.row, character: node.startPosition.column },\n end: { line: node.endPosition.row, character: node.endPosition.column },\n },\n children: [],\n };\n\n // Recursively find children inside this symbol\n // We need to be careful not to double-count if we iterate all descendants\n // But for a simple tree, we can just iterate named children\n for (const child of node.namedChildren) {\n symbol.children?.push(...this.collectSymbols(child));\n }\n \n symbols.push(symbol);\n return symbols; // Return here so we don't process children again at the top level\n }\n }\n\n // If this node isn't a symbol, check its children\n for (const child of node.namedChildren) {\n symbols.push(...this.collectSymbols(child));\n }\n\n return symbols;\n }\n\n private static getName(node: Node): string | null {\n // Try standard \"name\" field\n const nameNode = node.childForFieldName(\"name\");\n if (nameNode) return nameNode.text;\n\n // TypeScript variable_declarator: \"name\" field works\n // Python function_definition: \"name\" field works\n \n // Fallback: If node has a child that is an identifier\n for (const child of node.namedChildren) {\n if (child.type === \"identifier\" || child.type === \"type_identifier\") {\n return child.text;\n }\n }\n\n return null;\n }\n}\n", "\nimport { ParserRegistry } from \"./registry\";\nimport { loadLanguage } from \"./loader\";\nimport { Parser, Query, type Node } from \"web-tree-sitter\";\n\ninterface ScopeResult {\n locals: string[];\n closure: string[];\n}\n\nconst QUERIES: Record<string, string> = {\n python: `\n (function_definition name: (identifier) @name)\n (parameters (identifier) @param)\n (assignment left: (identifier) @var)\n `,\n typescript: `\n (function_declaration name: (identifier) @name)\n (variable_declarator name: (identifier) @var)\n (required_parameter pattern: (identifier) @param)\n (optional_parameter pattern: (identifier) @param)\n `\n};\n\nexport class ScopeAnalyzer {\n static async getScope(\n filename: string, \n code: string, \n position: { row: number, column: number }\n ): Promise<ScopeResult> {\n const langKey = ParserRegistry.getLanguage(filename);\n if (!langKey) {\n throw new Error(`Unsupported language for file: ${filename}`);\n }\n\n const parser = await loadLanguage(langKey);\n const tree = parser.parse(code);\n const node = tree.rootNode.descendantForPosition(position);\n\n const ancestors = [];\n let current: Node | null = node;\n while (current) {\n ancestors.push(current);\n current = current.parent;\n }\n\n // Identify scope boundaries (simplified)\n // We treat function definitions and the root as scope boundaries.\n const scopeNodes = ancestors.filter(n => \n n.type === 'function_definition' || \n n.type === 'function_declaration' ||\n n.type === 'module' || // Python root\n n.type === 'program' // TS root\n );\n\n const result: ScopeResult = {\n locals: [],\n closure: []\n };\n\n if (scopeNodes.length === 0) return result;\n\n const queryStr = QUERIES[langKey];\n if (!queryStr) return result;\n\n const language = parser.language;\n if (!language) return result;\n const query = new Query(language, queryStr);\n\n // The nearest scope is the first one in the list (closest to leaf)\n // But wait, if we are INSIDE a function, the function node itself IS the scope?\n // descendantForPosition usually returns the leaf node (identifier, etc.)\n // Its parent might be 'expression_statement', then 'block', then 'function_definition'.\n \n // We iterate from closest scope to furthest.\n // 0 is closest (locals), others are closure.\n \n for (let i = 0; i < scopeNodes.length; i++) {\n const scopeNode = scopeNodes[i];\n const captures = query.captures(scopeNode);\n \n const names = new Set<string>();\n \n for (const capture of captures) {\n // We only care about definitions that are \"visible\"\n // For simplicity, we take all captured identifiers in this scope node.\n // But we must exclude nested scopes! \n // Query captures recursively. We need to filter out captures that belong to child scopes of this scopeNode.\n \n const defNode = capture.node;\n \n // Check if defNode belongs to this scopeNode directly (not inside a nested function)\n // We can check if the closest function-like ancestor of defNode is scopeNode.\n let temp: Node | null = defNode.parent;\n \n // Special case: if defNode is the name of a function definition, \n // it belongs to the *enclosing* scope, not the function itself.\n if (temp && (temp.type === 'function_definition' || temp.type === 'function_declaration')) {\n // If this identifier is the 'name' field\n // Note: childForFieldName might not be available on all node types or versions\n // We can check if defNode is the child at 'name' field index or just use field name check if available\n // But simpler: if capture name is @name, it is the function name.\n if (capture.name === 'name') {\n temp = temp.parent; // Start checking from outside the function\n }\n }\n\n let isDirect = true;\n while (temp && temp.id !== scopeNode.id) {\n if (temp.type === 'function_definition' || temp.type === 'function_declaration') {\n isDirect = false;\n break;\n }\n temp = temp.parent;\n }\n \n if (isDirect) {\n names.add(defNode.text);\n }\n }\n\n if (i === 0) {\n result.locals = Array.from(names);\n } else {\n for (const name of names) {\n result.closure.push(name);\n }\n }\n }\n\n // Unique closure\n result.closure = Array.from(new Set(result.closure));\n \n return result;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["extname", "pathToFileURL", "readFile", "waiters", "fileURLToPath", "fileURLToPath", "fileURLToPath", "relative", "relative", "fileURLToPath", "fileURLToPath", "path", "readFile", "SYMBOL_KIND_MAP", "pathToFileURL", "path", "extname", "readFile"]
7
+ }
@@ -6,10 +6,10 @@ import {
6
6
  } from "./chunk-ERMQRV55.js";
7
7
  import {
8
8
  debug
9
- } from "./chunk-M4X6YU4Q.js";
9
+ } from "./chunk-MN5A3I5G.js";
10
10
  import {
11
11
  logError
12
- } from "./chunk-SWH7ADMS.js";
12
+ } from "./chunk-WPA4GCGG.js";
13
13
 
14
14
  // src/utils/agent/storage.ts
15
15
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
@@ -4,7 +4,7 @@ const require = __pybCreateRequire(import.meta.url);
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "pybao-cli",
7
- version: "1.3.82",
7
+ version: "1.3.84",
8
8
  bin: {
9
9
  pyb: "cli.js",
10
10
  "pyb-acp": "cli-acp.js"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../package.json", "../src/constants/macros.ts"],
4
- "sourcesContent": ["{\n \"name\": \"pybao-cli\",\n \"version\": \"1.3.82\",\n \"bin\": {\n \"pyb\": \"cli.js\",\n \"pyb-acp\": \"cli-acp.js\"\n },\n \"engines\": {\n \"node\": \">=20.18.1\"\n },\n \"main\": \"cli.js\",\n \"author\": \"PYB-XC\",\n \"license\": \"MIT\",\n \"description\": \"PYB-CLI - Minimal AI Agent with multi-model support and CLI interface\",\n \"keywords\": [\n \"ai\",\n \"agent\",\n \"minimal\",\n \"claude\"\n ],\n \"homepage\": \"https://github.com/pyb-xc/pyb-ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/pyb-xc/pyb-ts.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/pyb-xc/pyb-ts/issues\"\n },\n \"files\": [\n \"cli.js\",\n \"cli-acp.js\",\n \"yoga.wasm\",\n \"dist/**/*\",\n \"scripts/binary-utils.cjs\",\n \"scripts/cli-wrapper.cjs\",\n \"scripts/cli-acp-wrapper.cjs\",\n \"scripts/postinstall.js\",\n \".npmrc\",\n \"resources/**/*\"\n ],\n \"scripts\": {\n \"dev\": \"bun run ./src/entrypoints/cli.tsx --verbose\",\n \"build:npm\": \"bun scripts/build.mjs\",\n \"build\": \"npm run build:npm\",\n \"build:binary\": \"node scripts/build-binary.mjs\",\n \"clean\": \"node scripts/clean.mjs\",\n \"prepublishOnly\": \"npm run build:npm && node scripts/prepublish-check.js\",\n \"postinstall\": \"node scripts/postinstall.js || true\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"lint\": \"eslint . --ext .ts,.tsx,.js --max-warnings 0\",\n \"lint:fix\": \"eslint . --ext .ts,.tsx,.js --fix\",\n \"test\": \"bun test\",\n \"test:unit\": \"bun test tests/unit\",\n \"test:integration\": \"bun test tests/integration\",\n \"test:e2e\": \"bun test tests/e2e\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepare\": \"bun run scripts/install-hooks.mjs\",\n \"publish:dev\": \"bun run scripts/publish-dev.js\",\n \"publish:release\": \"bun run scripts/publish-release.js\",\n \"bench:startup\": \"bun run scripts/bench-startup.mjs\",\n \"parity:reference\": \"bun run scripts/reference-parity-check.mjs\"\n },\n \"dependencies\": {\n \"@anthropic-ai/bedrock-sdk\": \"^0.12.6\",\n \"@anthropic-ai/sdk\": \"^0.39.0\",\n \"@anthropic-ai/vertex-sdk\": \"^0.7.0\",\n \"@astrojs/language-server\": \"2.16.2\",\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@inkjs/ui\": \"^2.0.0\",\n \"@modelcontextprotocol/sdk\": \"^1.15.1\",\n \"@prisma/language-server\": \"31.3.4\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/react\": \"^19.1.8\",\n \"@vscode/ripgrep\": \"^1.17.0\",\n \"@vue/language-server\": \"3.2.2\",\n \"ajv\": \"^8.17.1\",\n \"ansi-escapes\": \"^7.0.0\",\n \"bash-language-server\": \"5.6.0\",\n \"chalk\": \"^5.4.1\",\n \"cli-highlight\": \"^2.1.11\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"debug\": \"^4.4.1\",\n \"diff\": \"^7.0.0\",\n \"dockerfile-language-server-nodejs\": \"0.15.0\",\n \"dotenv\": \"^16.6.1\",\n \"env-paths\": \"^3.0.0\",\n \"fflate\": \"^0.8.2\",\n \"figures\": \"^6.1.0\",\n \"glob\": \"^11.0.3\",\n \"graphql-language-service-cli\": \"3.5.0\",\n \"gray-matter\": \"^4.0.3\",\n \"highlight.js\": \"^11.11.1\",\n \"ignore\": \"^7.0.5\",\n \"ink\": \"5.2.1\",\n \"ink-link\": \"^4.1.0\",\n \"ink-select-input\": \"^6.2.0\",\n \"ink-text-input\": \"^6.0.0\",\n \"intelephense\": \"1.16.3\",\n \"js-yaml\": \"^4.1.1\",\n \"lodash-es\": \"^4.17.21\",\n \"lru-cache\": \"^11.1.0\",\n \"marked\": \"^15.0.12\",\n \"minimatch\": \"^10.1.1\",\n \"nanoid\": \"^5.1.5\",\n \"node-html-parser\": \"^7.0.1\",\n \"openai\": \"4.104.0\",\n \"pyright\": \"1.1.408\",\n \"react\": \"18.3.1\",\n \"semver\": \"^7.7.2\",\n \"shell-quote\": \"1.8.3\",\n \"spawn-rx\": \"^5.1.2\",\n \"string-width\": \"^7.2.0\",\n \"strip-ansi\": \"^7.1.0\",\n \"svelte-language-server\": \"0.17.23\",\n \"tsx\": \"^4.20.3\",\n \"typescript-language-server\": \"5.1.3\",\n \"undici\": \"^7.11.0\",\n \"vscode-jsonrpc\": \"8.2.1\",\n \"vscode-langservers-extracted\": \"4.10.0\",\n \"web-tree-sitter\": \"0.25.10\",\n \"which\": \"^6.0.0\",\n \"wrap-ansi\": \"^9.0.0\",\n \"yaml-language-server\": \"1.19.2\",\n \"zod\": \"^3.25.76\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.1.0\",\n \"@types/which\": \"^3.0.4\",\n \"@typescript-eslint/eslint-plugin\": \"^8.50.1\",\n \"@typescript-eslint/parser\": \"^8.50.1\",\n \"abort-controller\": \"3.0.0\",\n \"bun-types\": \"latest\",\n \"cheerio\": \"1.1.2\",\n \"esbuild\": \"^0.25.9\",\n \"eslint\": \"8.57.0\",\n \"eslint-plugin-react-hooks\": \"^7.0.1\",\n \"ink-testing-library\": \"4.0.0\",\n \"node-fetch\": \"3.3.2\",\n \"prettier\": \"^3.6.2\",\n \"react-devtools-core\": \"^7.0.1\",\n \"tree-sitter-bash\": \"0.25.1\",\n \"tree-sitter-c-sharp\": \"0.23.1\",\n \"tree-sitter-clojure\": \"0.4.0\",\n \"tree-sitter-cpp\": \"0.23.4\",\n \"tree-sitter-go\": \"0.25.0\",\n \"tree-sitter-haskell\": \"0.23.1\",\n \"tree-sitter-java\": \"0.23.5\",\n \"tree-sitter-julia\": \"0.23.1\",\n \"tree-sitter-nix\": \"0.0.2\",\n \"tree-sitter-ocaml\": \"0.24.2\",\n \"tree-sitter-python\": \"0.25.0\",\n \"tree-sitter-rust\": \"0.24.0\",\n \"tree-sitter-scala\": \"0.24.0\",\n \"tree-sitter-swift\": \"0.7.1\",\n \"tree-sitter-typescript\": \"0.23.2\",\n \"turndown\": \"7.2.2\",\n \"typescript\": \"^5.9.2\"\n },\n \"overrides\": {\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@smithy/smithy-client\": \"2.5.1\"\n }\n}\n", "import pkg from '../../package.json'\n\nexport const MACRO = {\n VERSION: pkg.version,\n README_URL: 'https://github.com/pyb-xc/pyb-ts#readme',\n PACKAGE_URL: 'pybao-cli',\n ISSUES_EXPLAINER:\n 'report the issue at https://github.com/pyb-xc/pyb-ts/issues',\n}\n"],
4
+ "sourcesContent": ["{\n \"name\": \"pybao-cli\",\n \"version\": \"1.3.84\",\n \"bin\": {\n \"pyb\": \"cli.js\",\n \"pyb-acp\": \"cli-acp.js\"\n },\n \"engines\": {\n \"node\": \">=20.18.1\"\n },\n \"main\": \"cli.js\",\n \"author\": \"PYB-XC\",\n \"license\": \"MIT\",\n \"description\": \"PYB-CLI - Minimal AI Agent with multi-model support and CLI interface\",\n \"keywords\": [\n \"ai\",\n \"agent\",\n \"minimal\",\n \"claude\"\n ],\n \"homepage\": \"https://github.com/pyb-xc/pyb-ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/pyb-xc/pyb-ts.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/pyb-xc/pyb-ts/issues\"\n },\n \"files\": [\n \"cli.js\",\n \"cli-acp.js\",\n \"yoga.wasm\",\n \"dist/**/*\",\n \"scripts/binary-utils.cjs\",\n \"scripts/cli-wrapper.cjs\",\n \"scripts/cli-acp-wrapper.cjs\",\n \"scripts/postinstall.js\",\n \".npmrc\",\n \"resources/**/*\"\n ],\n \"scripts\": {\n \"dev\": \"bun run ./src/entrypoints/cli.tsx --verbose\",\n \"build:npm\": \"bun scripts/build.mjs\",\n \"build\": \"npm run build:npm\",\n \"build:binary\": \"node scripts/build-binary.mjs\",\n \"clean\": \"node scripts/clean.mjs\",\n \"prepublishOnly\": \"npm run build:npm && node scripts/prepublish-check.js\",\n \"postinstall\": \"node scripts/postinstall.js || true\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"lint\": \"eslint . --ext .ts,.tsx,.js --max-warnings 0\",\n \"lint:fix\": \"eslint . --ext .ts,.tsx,.js --fix\",\n \"test\": \"bun test\",\n \"test:unit\": \"bun test tests/unit\",\n \"test:integration\": \"bun test tests/integration\",\n \"test:e2e\": \"bun test tests/e2e\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepare\": \"bun run scripts/install-hooks.mjs\",\n \"publish:dev\": \"bun run scripts/publish-dev.js\",\n \"publish:release\": \"bun run scripts/publish-release.js\",\n \"bench:startup\": \"bun run scripts/bench-startup.mjs\",\n \"parity:reference\": \"bun run scripts/reference-parity-check.mjs\"\n },\n \"dependencies\": {\n \"@anthropic-ai/bedrock-sdk\": \"^0.12.6\",\n \"@anthropic-ai/sdk\": \"^0.39.0\",\n \"@anthropic-ai/vertex-sdk\": \"^0.7.0\",\n \"@astrojs/language-server\": \"2.16.2\",\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@inkjs/ui\": \"^2.0.0\",\n \"@modelcontextprotocol/sdk\": \"^1.15.1\",\n \"@prisma/language-server\": \"31.3.4\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/react\": \"^19.1.8\",\n \"@vscode/ripgrep\": \"^1.17.0\",\n \"@vue/language-server\": \"3.2.2\",\n \"ajv\": \"^8.17.1\",\n \"ansi-escapes\": \"^7.0.0\",\n \"bash-language-server\": \"5.6.0\",\n \"chalk\": \"^5.4.1\",\n \"cli-highlight\": \"^2.1.11\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"debug\": \"^4.4.1\",\n \"diff\": \"^7.0.0\",\n \"dockerfile-language-server-nodejs\": \"0.15.0\",\n \"dotenv\": \"^16.6.1\",\n \"env-paths\": \"^3.0.0\",\n \"fflate\": \"^0.8.2\",\n \"figures\": \"^6.1.0\",\n \"glob\": \"^11.0.3\",\n \"graphql-language-service-cli\": \"3.5.0\",\n \"gray-matter\": \"^4.0.3\",\n \"highlight.js\": \"^11.11.1\",\n \"ignore\": \"^7.0.5\",\n \"ink\": \"5.2.1\",\n \"ink-link\": \"^4.1.0\",\n \"ink-select-input\": \"^6.2.0\",\n \"ink-text-input\": \"^6.0.0\",\n \"intelephense\": \"1.16.3\",\n \"js-yaml\": \"^4.1.1\",\n \"lodash-es\": \"^4.17.21\",\n \"lru-cache\": \"^11.1.0\",\n \"marked\": \"^15.0.12\",\n \"minimatch\": \"^10.1.1\",\n \"nanoid\": \"^5.1.5\",\n \"node-html-parser\": \"^7.0.1\",\n \"openai\": \"4.104.0\",\n \"pyright\": \"1.1.408\",\n \"react\": \"18.3.1\",\n \"semver\": \"^7.7.2\",\n \"shell-quote\": \"1.8.3\",\n \"spawn-rx\": \"^5.1.2\",\n \"string-width\": \"^7.2.0\",\n \"strip-ansi\": \"^7.1.0\",\n \"svelte-language-server\": \"0.17.23\",\n \"tsx\": \"^4.20.3\",\n \"typescript-language-server\": \"5.1.3\",\n \"undici\": \"^7.11.0\",\n \"vscode-jsonrpc\": \"8.2.1\",\n \"vscode-langservers-extracted\": \"4.10.0\",\n \"web-tree-sitter\": \"0.25.10\",\n \"which\": \"^6.0.0\",\n \"wrap-ansi\": \"^9.0.0\",\n \"yaml-language-server\": \"1.19.2\",\n \"zod\": \"^3.25.76\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.1.0\",\n \"@types/which\": \"^3.0.4\",\n \"@typescript-eslint/eslint-plugin\": \"^8.50.1\",\n \"@typescript-eslint/parser\": \"^8.50.1\",\n \"abort-controller\": \"3.0.0\",\n \"bun-types\": \"latest\",\n \"cheerio\": \"1.1.2\",\n \"esbuild\": \"^0.25.9\",\n \"eslint\": \"8.57.0\",\n \"eslint-plugin-react-hooks\": \"^7.0.1\",\n \"ink-testing-library\": \"4.0.0\",\n \"node-fetch\": \"3.3.2\",\n \"prettier\": \"^3.6.2\",\n \"react-devtools-core\": \"^7.0.1\",\n \"tree-sitter-bash\": \"0.25.1\",\n \"tree-sitter-c-sharp\": \"0.23.1\",\n \"tree-sitter-clojure\": \"0.4.0\",\n \"tree-sitter-cpp\": \"0.23.4\",\n \"tree-sitter-go\": \"0.25.0\",\n \"tree-sitter-haskell\": \"0.23.1\",\n \"tree-sitter-java\": \"0.23.5\",\n \"tree-sitter-julia\": \"0.23.1\",\n \"tree-sitter-nix\": \"0.0.2\",\n \"tree-sitter-ocaml\": \"0.24.2\",\n \"tree-sitter-python\": \"0.25.0\",\n \"tree-sitter-rust\": \"0.24.0\",\n \"tree-sitter-scala\": \"0.24.0\",\n \"tree-sitter-swift\": \"0.7.1\",\n \"tree-sitter-typescript\": \"0.23.2\",\n \"turndown\": \"7.2.2\",\n \"typescript\": \"^5.9.2\"\n },\n \"overrides\": {\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@smithy/smithy-client\": \"2.5.1\"\n }\n}\n", "import pkg from '../../package.json'\n\nexport const MACRO = {\n VERSION: pkg.version,\n README_URL: 'https://github.com/pyb-xc/pyb-ts#readme',\n PACKAGE_URL: 'pybao-cli',\n ISSUES_EXPLAINER:\n 'report the issue at https://github.com/pyb-xc/pyb-ts/issues',\n}\n"],
5
5
  "mappings": ";;;;AAAA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,KAAO;AAAA,IACL,KAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,SAAW;AAAA,EACX,aAAe;AAAA,EACf,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAY;AAAA,EACZ,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,MAAQ;AAAA,IACN,KAAO;AAAA,EACT;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,KAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,OAAS;AAAA,IACT,gBAAkB;AAAA,IAClB,aAAe;AAAA,IACf,QAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,MAAQ;AAAA,IACR,YAAY;AAAA,IACZ,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,YAAY;AAAA,IACZ,WAAa;AAAA,IACb,SAAW;AAAA,IACX,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,EACtB;AAAA,EACA,cAAgB;AAAA,IACd,6BAA6B;AAAA,IAC7B,qBAAqB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,4BAA4B;AAAA,IAC5B,mCAAmC;AAAA,IACnC,+BAA+B;AAAA,IAC/B,aAAa;AAAA,IACb,6BAA6B;AAAA,IAC7B,2BAA2B;AAAA,IAC3B,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,wBAAwB;AAAA,IACxB,KAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,IACxB,OAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAa;AAAA,IACb,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,qCAAqC;AAAA,IACrC,QAAU;AAAA,IACV,aAAa;AAAA,IACb,QAAU;AAAA,IACV,SAAW;AAAA,IACX,MAAQ;AAAA,IACR,gCAAgC;AAAA,IAChC,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,QAAU;AAAA,IACV,KAAO;AAAA,IACP,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,cAAgB;AAAA,IAChB,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,QAAU;AAAA,IACV,WAAa;AAAA,IACb,QAAU;AAAA,IACV,oBAAoB;AAAA,IACpB,QAAU;AAAA,IACV,SAAW;AAAA,IACX,OAAS;AAAA,IACT,QAAU;AAAA,IACV,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,0BAA0B;AAAA,IAC1B,KAAO;AAAA,IACP,8BAA8B;AAAA,IAC9B,QAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,gCAAgC;AAAA,IAChC,mBAAmB;AAAA,IACnB,OAAS;AAAA,IACT,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,KAAO;AAAA,IACP,sBAAsB;AAAA,EACxB;AAAA,EACA,iBAAmB;AAAA,IACjB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,oCAAoC;AAAA,IACpC,6BAA6B;AAAA,IAC7B,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,SAAW;AAAA,IACX,SAAW;AAAA,IACX,QAAU;AAAA,IACV,6BAA6B;AAAA,IAC7B,uBAAuB;AAAA,IACvB,cAAc;AAAA,IACd,UAAY;AAAA,IACZ,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,0BAA0B;AAAA,IAC1B,UAAY;AAAA,IACZ,YAAc;AAAA,EAChB;AAAA,EACA,WAAa;AAAA,IACX,mCAAmC;AAAA,IACnC,yBAAyB;AAAA,EAC3B;AACF;;;ACtKO,IAAM,QAAQ;AAAA,EACnB,SAAS,gBAAI;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,kBACE;AACJ;",
6
6
  "names": []
7
7
  }
@@ -3,17 +3,17 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  isSettingSourceEnabled
5
5
  } from "./chunk-A3BVXXA3.js";
6
- import {
7
- getSessionPlugins
8
- } from "./chunk-BJSWTHRM.js";
9
6
  import {
10
7
  getSettingsFileCandidates,
11
8
  loadSettingsWithLegacyFallback,
12
9
  saveSettingsToPrimaryAndSyncLegacy
13
- } from "./chunk-65GO3IGH.js";
10
+ } from "./chunk-6WOCAHEK.js";
11
+ import {
12
+ getSessionPlugins
13
+ } from "./chunk-BJSWTHRM.js";
14
14
  import {
15
15
  getCwd
16
- } from "./chunk-SWH7ADMS.js";
16
+ } from "./chunk-WPA4GCGG.js";
17
17
 
18
18
  // src/services/ui/outputStyles.ts
19
19
  import figures from "figures";
@@ -1,6 +1,5 @@
1
1
  import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
- import "./chunk-I3J4JYES.js";
4
3
 
5
4
  // src/tools/filesystem/FileEditTool/blockParser.ts
6
5
  function parseBlockEdits(input) {
@@ -49,6 +48,7 @@ function parseBlockEdits(input) {
49
48
  }
50
49
  return edits;
51
50
  }
51
+
52
52
  export {
53
53
  parseBlockEdits
54
54
  };
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/tools/filesystem/FileEditTool/blockParser.ts"],
4
4
  "sourcesContent": ["export interface BlockEdit {\n search: string\n replace: string\n}\n\nexport function parseBlockEdits(input: string): BlockEdit[] {\n const edits: BlockEdit[] = []\n const lines = input.split('\\n')\n let currentSearch: string[] = []\n let currentReplace: string[] = []\n let state: 'IDLE' | 'SEARCH' | 'REPLACE' = 'IDLE'\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n\n if (line.trim() === '<<<<<<< SEARCH') {\n if (state !== 'IDLE') {\n throw new Error('Unexpected <<<<<<< SEARCH inside a block')\n }\n state = 'SEARCH'\n currentSearch = []\n continue\n }\n\n if (line.trim() === '=======') {\n if (state !== 'SEARCH') {\n throw new Error('Unexpected ======= without preceding SEARCH')\n }\n state = 'REPLACE'\n currentReplace = []\n continue\n }\n\n if (line.trim() === '>>>>>>> REPLACE') {\n if (state !== 'REPLACE') {\n throw new Error('Unexpected >>>>>>> REPLACE without preceding =======')\n }\n state = 'IDLE'\n edits.push({\n search: currentSearch.join('\\n'),\n replace: currentReplace.join('\\n'),\n })\n continue\n }\n\n if (state === 'SEARCH') {\n currentSearch.push(line)\n } else if (state === 'REPLACE') {\n currentReplace.push(line)\n }\n }\n\n if (state !== 'IDLE') {\n throw new Error('Unclosed block at end of input')\n }\n\n return edits\n}\n"],
5
- "mappings": ";;;;;AAKO,SAAS,gBAAgB,OAA4B;AAC1D,QAAM,QAAqB,CAAC;AAC5B,QAAM,QAAQ,MAAM,MAAM,IAAI;AAC9B,MAAI,gBAA0B,CAAC;AAC/B,MAAI,iBAA2B,CAAC;AAChC,MAAI,QAAuC;AAE3C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AAEpB,QAAI,KAAK,KAAK,MAAM,kBAAkB;AACpC,UAAI,UAAU,QAAQ;AACpB,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AACA,cAAQ;AACR,sBAAgB,CAAC;AACjB;AAAA,IACF;AAEA,QAAI,KAAK,KAAK,MAAM,WAAW;AAC7B,UAAI,UAAU,UAAU;AACtB,cAAM,IAAI,MAAM,6CAA6C;AAAA,MAC/D;AACA,cAAQ;AACR,uBAAiB,CAAC;AAClB;AAAA,IACF;AAEA,QAAI,KAAK,KAAK,MAAM,mBAAmB;AACrC,UAAI,UAAU,WAAW;AACvB,cAAM,IAAI,MAAM,sDAAsD;AAAA,MACxE;AACA,cAAQ;AACR,YAAM,KAAK;AAAA,QACT,QAAQ,cAAc,KAAK,IAAI;AAAA,QAC/B,SAAS,eAAe,KAAK,IAAI;AAAA,MACnC,CAAC;AACD;AAAA,IACF;AAEA,QAAI,UAAU,UAAU;AACtB,oBAAc,KAAK,IAAI;AAAA,IACzB,WAAW,UAAU,WAAW;AAC9B,qBAAe,KAAK,IAAI;AAAA,IAC1B;AAAA,EACF;AAEA,MAAI,UAAU,QAAQ;AACpB,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,SAAO;AACT;",
5
+ "mappings": ";;;;AAKO,SAAS,gBAAgB,OAA4B;AAC1D,QAAM,QAAqB,CAAC;AAC5B,QAAM,QAAQ,MAAM,MAAM,IAAI;AAC9B,MAAI,gBAA0B,CAAC;AAC/B,MAAI,iBAA2B,CAAC;AAChC,MAAI,QAAuC;AAE3C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AAEpB,QAAI,KAAK,KAAK,MAAM,kBAAkB;AACpC,UAAI,UAAU,QAAQ;AACpB,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AACA,cAAQ;AACR,sBAAgB,CAAC;AACjB;AAAA,IACF;AAEA,QAAI,KAAK,KAAK,MAAM,WAAW;AAC7B,UAAI,UAAU,UAAU;AACtB,cAAM,IAAI,MAAM,6CAA6C;AAAA,MAC/D;AACA,cAAQ;AACR,uBAAiB,CAAC;AAClB;AAAA,IACF;AAEA,QAAI,KAAK,KAAK,MAAM,mBAAmB;AACrC,UAAI,UAAU,WAAW;AACvB,cAAM,IAAI,MAAM,sDAAsD;AAAA,MACxE;AACA,cAAQ;AACR,YAAM,KAAK;AAAA,QACT,QAAQ,cAAc,KAAK,IAAI;AAAA,QAC/B,SAAS,eAAe,KAAK,IAAI;AAAA,MACnC,CAAC;AACD;AAAA,IACF;AAEA,QAAI,UAAU,UAAU;AACtB,oBAAc,KAAK,IAAI;AAAA,IACzB,WAAW,UAAU,WAAW;AAC9B,qBAAe,KAAK,IAAI;AAAA,IAC1B;AAAA,EACF;AAEA,MAAI,UAAU,QAAQ;AACpB,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }