pybao-cli 1.5.8 → 1.5.9

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 (169) hide show
  1. package/dist/REPL-FDBOFOZN.js +50 -0
  2. package/dist/{acp-53E7A6L4.js → acp-TKO6ZSSV.js} +54 -36
  3. package/dist/acp-TKO6ZSSV.js.map +7 -0
  4. package/dist/{agentsValidate-VSDRHIJQ.js → agentsValidate-RDNLI7GA.js} +7 -7
  5. package/dist/{ask-XUXTH3EI.js → ask-KTXMYPIA.js} +60 -34
  6. package/dist/ask-KTXMYPIA.js.map +7 -0
  7. package/dist/{autoUpdater-GAWZB7YO.js → autoUpdater-53BZ6QWD.js} +3 -3
  8. package/dist/{chunk-WBAZ4MMW.js → chunk-276RV4DQ.js} +4 -4
  9. package/dist/{chunk-4I2M26LO.js → chunk-35X2VS4L.js} +3 -3
  10. package/dist/{chunk-RAOXUYK3.js → chunk-4C2CGHBI.js} +2 -2
  11. package/dist/{chunk-YABL4JYT.js → chunk-4KPVE4K7.js} +1 -1
  12. package/dist/{chunk-JFIH5LIP.js → chunk-57GJQMFS.js} +2 -2
  13. package/dist/{chunk-FKDSZPS4.js → chunk-6PXEXL7C.js} +2 -2
  14. package/dist/{chunk-HOBCGAUT.js → chunk-AMQ6XZOU.js} +1 -1
  15. package/dist/{chunk-5PSLFGDF.js → chunk-AWRDD6BG.js} +18 -1
  16. package/dist/chunk-AWRDD6BG.js.map +7 -0
  17. package/dist/{chunk-JZPXOQK3.js → chunk-BZGQQ4WZ.js} +3 -3
  18. package/dist/{chunk-AQXOZUAV.js → chunk-CATWZQ3R.js} +2 -2
  19. package/dist/{chunk-H67PQDUM.js → chunk-CPLMSZ63.js} +4 -4
  20. package/dist/{chunk-KRTFCQTN.js → chunk-DA6NJEFI.js} +2 -2
  21. package/dist/{chunk-46Z3GAE4.js → chunk-E35YJNX2.js} +4 -4
  22. package/dist/{chunk-DRP66QHJ.js → chunk-G7DKRXDS.js} +1 -4
  23. package/dist/{chunk-62CZOFWT.js → chunk-HIJYNCCN.js} +1 -1
  24. package/dist/{chunk-543LWZDY.js → chunk-JE43CQYI.js} +3 -3
  25. package/dist/{chunk-LNPUQ3UL.js → chunk-JLC2I3EY.js} +1 -1
  26. package/dist/chunk-JRMAK4PK.js +926 -0
  27. package/dist/chunk-JRMAK4PK.js.map +7 -0
  28. package/dist/{chunk-VW7ZPH5U.js → chunk-KNLP4UO6.js} +4 -4
  29. package/dist/chunk-L3R7MPZU.js +81 -0
  30. package/dist/{chunk-MHFWCK5F.js.map → chunk-L3R7MPZU.js.map} +1 -1
  31. package/dist/{chunk-LNE2PRIU.js → chunk-LEYWQQ7V.js} +3 -3
  32. package/dist/{chunk-Z35GPUWK.js → chunk-LIOZM4KE.js} +1 -1
  33. package/dist/chunk-OC5CZWBQ.js.map +7 -0
  34. package/dist/{chunk-TJUTH3WH.js → chunk-PH6DPTO3.js} +2014 -1318
  35. package/dist/chunk-PH6DPTO3.js.map +7 -0
  36. package/dist/{chunk-VBJ6J63U.js → chunk-PPFVOBEG.js} +144 -76
  37. package/dist/chunk-PPFVOBEG.js.map +7 -0
  38. package/dist/{chunk-IZ6NAVRD.js → chunk-Q5EZLUFC.js} +1 -1
  39. package/dist/{chunk-VRWY6YIJ.js → chunk-QMN64ICT.js} +3 -3
  40. package/dist/{chunk-4QTASHFO.js → chunk-R4ZEH3KJ.js} +1 -1
  41. package/dist/{chunk-IWKEQNWI.js → chunk-SNASBZ2C.js} +3 -3
  42. package/dist/chunk-T7P3SSAQ.js +78 -0
  43. package/dist/chunk-T7P3SSAQ.js.map +7 -0
  44. package/dist/{chunk-RFY3YUHB.js → chunk-TLZS274Y.js} +3 -3
  45. package/dist/{chunk-FQMMZCOL.js → chunk-YSL5H7NJ.js} +2 -2
  46. package/dist/{chunk-WQVP2232.js → chunk-YTEQEQ56.js} +43 -34
  47. package/dist/chunk-YTEQEQ56.js.map +7 -0
  48. package/dist/{cli-3QFWTKDS.js → cli-LYWCNPC6.js} +131 -102
  49. package/dist/cli-LYWCNPC6.js.map +7 -0
  50. package/dist/commands-DYXAWJO6.js +54 -0
  51. package/dist/{config-DFRB2SLO.js → config-66BMMOES.js} +4 -4
  52. package/dist/{context-V62FBZVF.js → context-PG7YTQCJ.js} +6 -6
  53. package/dist/conversationPersistence-DB6IUU2I.js +13 -0
  54. package/dist/{conversationTracker-DZR2N3FQ.js → conversationTracker-WG3J56PX.js} +4 -3
  55. package/dist/{customCommands-3ZIVHLTU.js → customCommands-XDKUVT73.js} +4 -4
  56. package/dist/{env-BMFEDWPX.js → env-FW74XJHK.js} +2 -2
  57. package/dist/{file-SD5NRUTD.js → file-U2NXQ6RC.js} +4 -4
  58. package/dist/index.js +3 -3
  59. package/dist/{llm-466UDKVG.js → llm-6VJMMPDO.js} +416 -49
  60. package/dist/llm-6VJMMPDO.js.map +7 -0
  61. package/dist/{llmLazy-7R7P5A3P.js → llmLazy-LYGZWC7G.js} +1 -1
  62. package/dist/{loader-X7RIUXJB.js → loader-DMZVU2XJ.js} +4 -4
  63. package/dist/{lsp-2FPBS2M3.js → lsp-6LNF5DQB.js} +6 -6
  64. package/dist/{lspAnchor-KQNSWWL3.js → lspAnchor-SF5Y7ZJT.js} +6 -6
  65. package/dist/{mcp-3SV4TZYL.js → mcp-NLDX3RQE.js} +7 -7
  66. package/dist/{mentionProcessor-KJP4IYVF.js → mentionProcessor-BMX6VGRH.js} +5 -5
  67. package/dist/{messages-BXF7LJIV.js → messages-OTQ6IJM5.js} +9 -5
  68. package/dist/{model-F6VCUHDL.js → model-KWGEASLY.js} +5 -5
  69. package/dist/{openai-QTTJIB6O.js → openai-XIRWQY5H.js} +5 -5
  70. package/dist/{outputStyles-SJ57QG7S.js → outputStyles-HKYM5C76.js} +4 -4
  71. package/dist/{pluginRuntime-4SDXCK4Q.js → pluginRuntime-25Y2MVIN.js} +6 -6
  72. package/dist/{pluginValidation-YJ4W3MX4.js → pluginValidation-CIJIQKGB.js} +6 -6
  73. package/dist/prompts-WH3VEHH6.js +56 -0
  74. package/dist/{pybAgentSessionLoad-IZULLNUL.js → pybAgentSessionLoad-TF3BFX4S.js} +4 -4
  75. package/dist/{pybAgentSessionResume-QRNTC3A3.js → pybAgentSessionResume-Y5JO4GLH.js} +4 -4
  76. package/dist/{pybAgentStreamJsonSession-RUHPYCTJ.js → pybAgentStreamJsonSession-46VLF4QN.js} +4 -3
  77. package/dist/pybAgentStreamJsonSession-46VLF4QN.js.map +7 -0
  78. package/dist/{pybHooks-GX3AIY4U.js → pybHooks-LZPU4EF6.js} +4 -4
  79. package/dist/query-4B3GTPBN.js +58 -0
  80. package/dist/{registry-JNPRNIFB.js → registry-6LUE7ZWC.js} +5 -5
  81. package/dist/{ripgrep-ZKWM7RMS.js → ripgrep-KVB55D22.js} +3 -3
  82. package/dist/{skillMarketplace-4LJAYRMX.js → skillMarketplace-2IVEPC2E.js} +3 -3
  83. package/dist/{state-I6BQR2T5.js → state-OGBESWFS.js} +2 -2
  84. package/dist/{theme-GL7HKKCQ.js → theme-QQ2SCFEK.js} +5 -5
  85. package/dist/{toolPermissionSettings-ZRTSQVQ2.js → toolPermissionSettings-ZGGPBK6S.js} +6 -6
  86. package/dist/tools-UXPFIHD4.js +55 -0
  87. package/dist/tools-UXPFIHD4.js.map +7 -0
  88. package/dist/{userInput-M6JYKQCU.js → userInput-75VCTJDE.js} +76 -49
  89. package/dist/userInput-75VCTJDE.js.map +7 -0
  90. package/package.json +18 -1
  91. package/dist/REPL-AHBTBEED.js +0 -49
  92. package/dist/acp-53E7A6L4.js.map +0 -7
  93. package/dist/ask-XUXTH3EI.js.map +0 -7
  94. package/dist/chunk-5PSLFGDF.js.map +0 -7
  95. package/dist/chunk-B62BK4YK.js +0 -516
  96. package/dist/chunk-B62BK4YK.js.map +0 -7
  97. package/dist/chunk-MHFWCK5F.js +0 -240
  98. package/dist/chunk-O6DTZU7F.js.map +0 -7
  99. package/dist/chunk-TJUTH3WH.js.map +0 -7
  100. package/dist/chunk-VBJ6J63U.js.map +0 -7
  101. package/dist/chunk-WQVP2232.js.map +0 -7
  102. package/dist/cli-3QFWTKDS.js.map +0 -7
  103. package/dist/commands-ITOHDPPP.js +0 -53
  104. package/dist/llm-466UDKVG.js.map +0 -7
  105. package/dist/prompts-5RPQRZ3L.js +0 -55
  106. package/dist/pybAgentStreamJsonSession-RUHPYCTJ.js.map +0 -7
  107. package/dist/query-YLKPJVHB.js +0 -57
  108. package/dist/tools-4GEB2BRR.js +0 -54
  109. package/dist/userInput-M6JYKQCU.js.map +0 -7
  110. /package/dist/{REPL-AHBTBEED.js.map → REPL-FDBOFOZN.js.map} +0 -0
  111. /package/dist/{agentsValidate-VSDRHIJQ.js.map → agentsValidate-RDNLI7GA.js.map} +0 -0
  112. /package/dist/{autoUpdater-GAWZB7YO.js.map → autoUpdater-53BZ6QWD.js.map} +0 -0
  113. /package/dist/{chunk-WBAZ4MMW.js.map → chunk-276RV4DQ.js.map} +0 -0
  114. /package/dist/{chunk-4I2M26LO.js.map → chunk-35X2VS4L.js.map} +0 -0
  115. /package/dist/{chunk-RAOXUYK3.js.map → chunk-4C2CGHBI.js.map} +0 -0
  116. /package/dist/{chunk-YABL4JYT.js.map → chunk-4KPVE4K7.js.map} +0 -0
  117. /package/dist/{chunk-JFIH5LIP.js.map → chunk-57GJQMFS.js.map} +0 -0
  118. /package/dist/{chunk-FKDSZPS4.js.map → chunk-6PXEXL7C.js.map} +0 -0
  119. /package/dist/{chunk-HOBCGAUT.js.map → chunk-AMQ6XZOU.js.map} +0 -0
  120. /package/dist/{chunk-JZPXOQK3.js.map → chunk-BZGQQ4WZ.js.map} +0 -0
  121. /package/dist/{chunk-AQXOZUAV.js.map → chunk-CATWZQ3R.js.map} +0 -0
  122. /package/dist/{chunk-H67PQDUM.js.map → chunk-CPLMSZ63.js.map} +0 -0
  123. /package/dist/{chunk-KRTFCQTN.js.map → chunk-DA6NJEFI.js.map} +0 -0
  124. /package/dist/{chunk-46Z3GAE4.js.map → chunk-E35YJNX2.js.map} +0 -0
  125. /package/dist/{chunk-DRP66QHJ.js.map → chunk-G7DKRXDS.js.map} +0 -0
  126. /package/dist/{chunk-62CZOFWT.js.map → chunk-HIJYNCCN.js.map} +0 -0
  127. /package/dist/{chunk-543LWZDY.js.map → chunk-JE43CQYI.js.map} +0 -0
  128. /package/dist/{chunk-LNPUQ3UL.js.map → chunk-JLC2I3EY.js.map} +0 -0
  129. /package/dist/{chunk-VW7ZPH5U.js.map → chunk-KNLP4UO6.js.map} +0 -0
  130. /package/dist/{chunk-LNE2PRIU.js.map → chunk-LEYWQQ7V.js.map} +0 -0
  131. /package/dist/{chunk-Z35GPUWK.js.map → chunk-LIOZM4KE.js.map} +0 -0
  132. /package/dist/{chunk-O6DTZU7F.js → chunk-OC5CZWBQ.js} +0 -0
  133. /package/dist/{chunk-IZ6NAVRD.js.map → chunk-Q5EZLUFC.js.map} +0 -0
  134. /package/dist/{chunk-VRWY6YIJ.js.map → chunk-QMN64ICT.js.map} +0 -0
  135. /package/dist/{chunk-4QTASHFO.js.map → chunk-R4ZEH3KJ.js.map} +0 -0
  136. /package/dist/{chunk-IWKEQNWI.js.map → chunk-SNASBZ2C.js.map} +0 -0
  137. /package/dist/{chunk-RFY3YUHB.js.map → chunk-TLZS274Y.js.map} +0 -0
  138. /package/dist/{chunk-FQMMZCOL.js.map → chunk-YSL5H7NJ.js.map} +0 -0
  139. /package/dist/{commands-ITOHDPPP.js.map → commands-DYXAWJO6.js.map} +0 -0
  140. /package/dist/{config-DFRB2SLO.js.map → config-66BMMOES.js.map} +0 -0
  141. /package/dist/{context-V62FBZVF.js.map → context-PG7YTQCJ.js.map} +0 -0
  142. /package/dist/{conversationTracker-DZR2N3FQ.js.map → conversationPersistence-DB6IUU2I.js.map} +0 -0
  143. /package/dist/{customCommands-3ZIVHLTU.js.map → conversationTracker-WG3J56PX.js.map} +0 -0
  144. /package/dist/{env-BMFEDWPX.js.map → customCommands-XDKUVT73.js.map} +0 -0
  145. /package/dist/{file-SD5NRUTD.js.map → env-FW74XJHK.js.map} +0 -0
  146. /package/dist/{llmLazy-7R7P5A3P.js.map → file-U2NXQ6RC.js.map} +0 -0
  147. /package/dist/{loader-X7RIUXJB.js.map → llmLazy-LYGZWC7G.js.map} +0 -0
  148. /package/dist/{lsp-2FPBS2M3.js.map → loader-DMZVU2XJ.js.map} +0 -0
  149. /package/dist/{mcp-3SV4TZYL.js.map → lsp-6LNF5DQB.js.map} +0 -0
  150. /package/dist/{lspAnchor-KQNSWWL3.js.map → lspAnchor-SF5Y7ZJT.js.map} +0 -0
  151. /package/dist/{messages-BXF7LJIV.js.map → mcp-NLDX3RQE.js.map} +0 -0
  152. /package/dist/{mentionProcessor-KJP4IYVF.js.map → mentionProcessor-BMX6VGRH.js.map} +0 -0
  153. /package/dist/{model-F6VCUHDL.js.map → messages-OTQ6IJM5.js.map} +0 -0
  154. /package/dist/{openai-QTTJIB6O.js.map → model-KWGEASLY.js.map} +0 -0
  155. /package/dist/{outputStyles-SJ57QG7S.js.map → openai-XIRWQY5H.js.map} +0 -0
  156. /package/dist/{pluginValidation-YJ4W3MX4.js.map → outputStyles-HKYM5C76.js.map} +0 -0
  157. /package/dist/{pluginRuntime-4SDXCK4Q.js.map → pluginRuntime-25Y2MVIN.js.map} +0 -0
  158. /package/dist/{prompts-5RPQRZ3L.js.map → pluginValidation-CIJIQKGB.js.map} +0 -0
  159. /package/dist/{pybAgentSessionLoad-IZULLNUL.js.map → prompts-WH3VEHH6.js.map} +0 -0
  160. /package/dist/{pybAgentSessionResume-QRNTC3A3.js.map → pybAgentSessionLoad-TF3BFX4S.js.map} +0 -0
  161. /package/dist/{pybHooks-GX3AIY4U.js.map → pybAgentSessionResume-Y5JO4GLH.js.map} +0 -0
  162. /package/dist/{query-YLKPJVHB.js.map → pybHooks-LZPU4EF6.js.map} +0 -0
  163. /package/dist/{registry-JNPRNIFB.js.map → query-4B3GTPBN.js.map} +0 -0
  164. /package/dist/{ripgrep-ZKWM7RMS.js.map → registry-6LUE7ZWC.js.map} +0 -0
  165. /package/dist/{skillMarketplace-4LJAYRMX.js.map → ripgrep-KVB55D22.js.map} +0 -0
  166. /package/dist/{state-I6BQR2T5.js.map → skillMarketplace-2IVEPC2E.js.map} +0 -0
  167. /package/dist/{theme-GL7HKKCQ.js.map → state-OGBESWFS.js.map} +0 -0
  168. /package/dist/{toolPermissionSettings-ZRTSQVQ2.js.map → theme-QQ2SCFEK.js.map} +0 -0
  169. /package/dist/{tools-4GEB2BRR.js.map → toolPermissionSettings-ZGGPBK6S.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/session/conversationMessageState.ts", "../src/utils/session/conversationPersistence.ts", "../src/utils/session/conversationTracker.ts"],
4
- "sourcesContent": ["import type { AssistantMessage, Message, UserMessage } from '@query'\n\nexport type ConversationFinishReason =\n | 'end_turn'\n | 'tool_calls'\n | 'max_tokens'\n | 'pause_turn'\n\nexport function mapFinishReason(rawReason?: string | null): ConversationFinishReason {\n const reason = String(rawReason ?? '')\n .trim()\n .toLowerCase()\n if (!reason) return 'end_turn'\n if (reason === 'tool_use' || reason === 'tool_calls') return 'tool_calls'\n if (reason === 'max_tokens' || reason === 'length') return 'max_tokens'\n if (reason === 'pause_turn') return 'pause_turn'\n if (reason === 'end_turn' || reason === 'stop' || reason === 'stop_sequence') {\n return 'end_turn'\n }\n return 'end_turn'\n}\n\nexport function isFinishComplete(finish: ConversationFinishReason): boolean {\n return finish === 'end_turn'\n}\n\nexport function isToolResultUserMessage(message: UserMessage): boolean {\n if (!Array.isArray(message.message.content)) return false\n return message.message.content.some(\n block => block && typeof block === 'object' && (block as any).type === 'tool_result',\n )\n}\n\nexport function findNaturalUserMessageForParent(\n messages: Message[],\n): UserMessage | undefined {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i]\n if (!msg || msg.type !== 'user') continue\n if (isToolResultUserMessage(msg)) continue\n return msg\n }\n return undefined\n}\n\nexport function appendFinishState(\n assistantMessage: AssistantMessage,\n state: {\n finish: ConversationFinishReason\n parentID: string\n completedAt?: number\n },\n): AssistantMessage {\n return {\n ...assistantMessage,\n finish: state.finish,\n parentID: state.parentID,\n ...(typeof state.completedAt === 'number'\n ? { completedAt: state.completedAt }\n : {}),\n }\n}\n\nexport function isCompactionMessage(message: Message): boolean {\n return (\n message.type === 'assistant' &&\n !!(message as AssistantMessage).compaction &&\n (message as AssistantMessage).compaction?.type === 'compaction'\n )\n}\n\nexport function getCompactedQueryIds(messages: Message[]): string[] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (!isCompactionMessage(message)) continue\n const ids = (message as AssistantMessage).compaction?.compactedQueryIds\n if (Array.isArray(ids)) return ids\n }\n return []\n}\n", "import {\n existsSync,\n mkdirSync,\n readFileSync,\n renameSync,\n unlinkSync,\n writeFileSync,\n} from 'fs'\nimport { join } from 'path'\nimport { logError } from '@utils/log'\n\nexport const PERSISTENCE_VERSION = 1\n\nexport type PersistedCompletedQuery = {\n queryId: string\n userMessageUUID: string\n userQuery: string\n summary: string\n completedAt: number\n finish: 'end_turn' | 'tool_calls' | 'max_tokens' | 'pause_turn'\n}\n\nexport type PersistedConversationState = {\n version: number\n sessionId: string\n completedQueries: PersistedCompletedQuery[]\n lastUpdatedAt: number\n}\n\nexport interface ConversationPersistence {\n saveSync(sessionId: string, state: PersistedConversationState): void\n loadSync(sessionId: string): PersistedConversationState | null\n clearSync(sessionId: string): void\n}\n\nfunction sanitizeSessionId(sessionId: string): string {\n return sessionId.replace(/[^a-zA-Z0-9_-]/g, '_')\n}\n\nfunction isValidPersistedCompletedQuery(value: unknown): value is PersistedCompletedQuery {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const item = value as PersistedCompletedQuery\n return (\n typeof item.queryId === 'string' &&\n typeof item.userMessageUUID === 'string' &&\n typeof item.userQuery === 'string' &&\n typeof item.summary === 'string' &&\n typeof item.completedAt === 'number' &&\n (item.finish === 'end_turn' ||\n item.finish === 'tool_calls' ||\n item.finish === 'max_tokens' ||\n item.finish === 'pause_turn')\n )\n}\n\nfunction isValidPersistedConversationState(\n value: unknown,\n): value is PersistedConversationState {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const state = value as PersistedConversationState\n return (\n typeof state.version === 'number' &&\n typeof state.sessionId === 'string' &&\n Array.isArray(state.completedQueries) &&\n state.completedQueries.every(isValidPersistedCompletedQuery) &&\n typeof state.lastUpdatedAt === 'number'\n )\n}\n\nexport class FileSystemConversationPersistence implements ConversationPersistence {\n constructor(private readonly baseDir: string) {}\n\n private getFilePath(sessionId: string): string {\n return join(this.baseDir, `${sanitizeSessionId(sessionId)}.json`)\n }\n\n saveSync(sessionId: string, state: PersistedConversationState): void {\n const filePath = this.getFilePath(sessionId)\n const tempPath = `${filePath}.tmp`\n try {\n mkdirSync(this.baseDir, { recursive: true })\n writeFileSync(tempPath, JSON.stringify(state, null, 2), 'utf8')\n renameSync(tempPath, filePath)\n } catch (error) {\n logError(error)\n try {\n if (existsSync(tempPath)) unlinkSync(tempPath)\n } catch {}\n }\n }\n\n loadSync(sessionId: string): PersistedConversationState | null {\n const filePath = this.getFilePath(sessionId)\n if (!existsSync(filePath)) return null\n try {\n const raw = readFileSync(filePath, 'utf8')\n const parsed = JSON.parse(raw) as unknown\n if (!isValidPersistedConversationState(parsed)) return null\n return parsed\n } catch {\n return null\n }\n }\n\n clearSync(sessionId: string): void {\n const filePath = this.getFilePath(sessionId)\n try {\n if (existsSync(filePath)) unlinkSync(filePath)\n } catch (error) {\n logError(error)\n }\n }\n}\n", "import type { AssistantMessage, UserMessage } from '@query'\nimport { isToolResultUserMessage } from './conversationMessageState'\nimport {\n type ConversationPersistence,\n type PersistedCompletedQuery,\n type PersistedConversationState,\n PERSISTENCE_VERSION,\n} from './conversationPersistence'\n\nexport type CompletedQuery = {\n queryId: string\n userMessageUUID: string\n userQuery: string\n summary: string\n completedAt: number\n finish: 'end_turn' | 'tool_calls' | 'max_tokens' | 'pause_turn'\n}\n\ntype SummaryOptions = {\n maxEntries?: number\n maxEntryChars?: number\n maxTotalChars?: number\n}\n\nfunction extractText(content: unknown): string {\n if (typeof content === 'string') return content.trim()\n if (!Array.isArray(content)) return ''\n return content\n .filter(block => block && typeof block === 'object' && (block as any).type === 'text')\n .map(block => String((block as any).text ?? '').trim())\n .filter(Boolean)\n .join('\\n')\n .trim()\n}\n\nfunction truncate(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text\n return `${text.slice(0, Math.max(0, maxChars - 3))}...`\n}\n\nexport class ConversationTracker {\n private completedQueries = new Map<string, CompletedQuery>()\n private currentQueryId: string | null = null\n private readonly persistence?: ConversationPersistence\n private readonly sessionId?: string\n\n constructor(options?: {\n persistence?: ConversationPersistence\n sessionId?: string\n }) {\n this.persistence = options?.persistence\n this.sessionId = options?.sessionId\n }\n\n startQuery(queryId: string, userMessage: UserMessage): boolean {\n if (!queryId) return false\n if (isToolResultUserMessage(userMessage)) return false\n if (this.completedQueries.has(queryId)) return false\n if (this.currentQueryId === queryId) return true\n this.currentQueryId = queryId\n return true\n }\n\n completeQuery(\n queryId: string,\n assistantMessage: AssistantMessage,\n userMessage: UserMessage,\n ): boolean {\n if (!queryId) return false\n if (this.completedQueries.has(queryId)) return false\n if (assistantMessage.finish !== 'end_turn') return false\n if (assistantMessage.parentID !== userMessage.uuid) return false\n\n const userQuery = extractText(userMessage.message.content)\n const summaryRaw = extractText(assistantMessage.message.content)\n const completedAt =\n typeof assistantMessage.completedAt === 'number'\n ? assistantMessage.completedAt\n : Date.now()\n\n this.completedQueries.set(queryId, {\n queryId,\n userMessageUUID: userMessage.uuid,\n userQuery,\n summary: summaryRaw,\n completedAt,\n finish: assistantMessage.finish,\n })\n if (this.currentQueryId === queryId) {\n this.currentQueryId = null\n }\n return true\n }\n\n isQueryCompleted(queryId: string): boolean {\n return this.completedQueries.has(queryId)\n }\n\n getCurrentQueryId(): string | null {\n return this.currentQueryId\n }\n\n getCompletedQueries(): CompletedQuery[] {\n return Array.from(this.completedQueries.values()).sort(\n (a, b) => a.completedAt - b.completedAt,\n )\n }\n\n generateConversationSummary(options?: SummaryOptions): string {\n const maxEntries = options?.maxEntries ?? 10\n const maxEntryChars = options?.maxEntryChars ?? 80\n const maxTotalChars = options?.maxTotalChars ?? 2000\n const completed = this.getCompletedQueries()\n if (completed.length === 0) return ''\n\n const recent = completed.slice(-maxEntries)\n const lines = recent.map(item => {\n const q = truncate(item.userQuery || '(\u7A7A\u95EE\u9898)', maxEntryChars)\n const a = truncate(item.summary || '(\u7A7A\u56DE\u7B54)', maxEntryChars)\n return `- Q: ${q}\\n A: ${a}`\n })\n const body = `## \u5DF2\u5B8C\u6210\u95EE\u9898\u6458\u8981\\n${lines.join('\\n')}`\n if (body.length <= maxTotalChars) return body\n return truncate(body, maxTotalChars)\n }\n\n persist(): boolean {\n if (!this.persistence || !this.sessionId) return false\n try {\n const state: PersistedConversationState = {\n version: PERSISTENCE_VERSION,\n sessionId: this.sessionId,\n completedQueries: this.getCompletedQueries().map(item => ({\n queryId: item.queryId,\n userMessageUUID: item.userMessageUUID,\n userQuery: item.userQuery,\n summary: item.summary,\n completedAt: item.completedAt,\n finish: item.finish,\n })),\n lastUpdatedAt: Date.now(),\n }\n this.persistence.saveSync(this.sessionId, state)\n return true\n } catch {\n return false\n }\n }\n\n restore(): boolean {\n if (!this.persistence || !this.sessionId) return false\n try {\n const state = this.persistence.loadSync(this.sessionId)\n if (!state || state.version !== PERSISTENCE_VERSION) {\n return false\n }\n this.completedQueries.clear()\n const list = Array.isArray(state.completedQueries)\n ? state.completedQueries\n : []\n for (const item of list) {\n const normalized: CompletedQuery = {\n queryId: String(item.queryId),\n userMessageUUID: String(item.userMessageUUID),\n userQuery: String(item.userQuery ?? ''),\n summary: String(item.summary ?? ''),\n completedAt: Number(item.completedAt ?? Date.now()),\n finish: item.finish as PersistedCompletedQuery['finish'],\n }\n this.completedQueries.set(normalized.queryId, normalized)\n }\n this.currentQueryId = null\n return true\n } catch {\n return false\n }\n }\n\n reset(): void {\n this.completedQueries.clear()\n this.currentQueryId = null\n }\n}\n\nexport const conversationTracker = new ConversationTracker()\n\nexport function getConversationTrackerForContext(context?: {\n conversationTracker?: ConversationTracker\n}): ConversationTracker {\n return context?.conversationTracker ?? new ConversationTracker()\n}\n\nexport function resetConversationTrackerForTests(): void {\n conversationTracker.reset()\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }