pybao-cli 1.5.8 → 1.5.10

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 (179) hide show
  1. package/cli-acp.js +29 -5
  2. package/cli.js +28 -6
  3. package/dist/REPL-LEORZMM6.js +50 -0
  4. package/dist/{acp-53E7A6L4.js → acp-OPW4NHQM.js} +46 -35
  5. package/dist/acp-OPW4NHQM.js.map +7 -0
  6. package/dist/{agentsValidate-VSDRHIJQ.js → agentsValidate-ZVFEF4KY.js} +7 -7
  7. package/dist/{ask-XUXTH3EI.js → ask-SLRDSXCI.js} +55 -33
  8. package/dist/ask-SLRDSXCI.js.map +7 -0
  9. package/dist/{autoUpdater-GAWZB7YO.js → autoUpdater-BZ7E2E54.js} +3 -3
  10. package/dist/{chunk-4QTASHFO.js → chunk-25MWUHVP.js} +1 -1
  11. package/dist/{chunk-HOBCGAUT.js → chunk-2KTGONPT.js} +1 -1
  12. package/dist/{chunk-H67PQDUM.js → chunk-3YDOR2NA.js} +4 -4
  13. package/dist/{chunk-YABL4JYT.js → chunk-46JMZBCX.js} +1 -1
  14. package/dist/{chunk-JFIH5LIP.js → chunk-4LLCMT3D.js} +2 -2
  15. package/dist/{chunk-TJUTH3WH.js → chunk-4USBSNI7.js} +2241 -1530
  16. package/dist/chunk-4USBSNI7.js.map +7 -0
  17. package/dist/{chunk-VBJ6J63U.js → chunk-6UPWXBMK.js} +144 -76
  18. package/dist/chunk-6UPWXBMK.js.map +7 -0
  19. package/dist/{chunk-KRTFCQTN.js → chunk-72ICL3CH.js} +19 -6
  20. package/dist/{chunk-KRTFCQTN.js.map → chunk-72ICL3CH.js.map} +2 -2
  21. package/dist/{chunk-62CZOFWT.js → chunk-7FGPQ22V.js} +1 -1
  22. package/dist/{chunk-DRP66QHJ.js → chunk-7SZNDNLK.js} +1 -4
  23. package/dist/{chunk-LNPUQ3UL.js → chunk-AJEGTH5Q.js} +1 -1
  24. package/dist/{chunk-LNE2PRIU.js → chunk-AO6J7LEE.js} +3 -3
  25. package/dist/{chunk-4I2M26LO.js → chunk-E6OFGHIW.js} +3 -3
  26. package/dist/{chunk-543LWZDY.js → chunk-EEKXOPVZ.js} +3 -3
  27. package/dist/chunk-EWXKQF7L.js +922 -0
  28. package/dist/chunk-EWXKQF7L.js.map +7 -0
  29. package/dist/{chunk-FKDSZPS4.js → chunk-HPUNAUYE.js} +2 -7
  30. package/dist/chunk-HPUNAUYE.js.map +7 -0
  31. package/dist/{chunk-IWKEQNWI.js → chunk-MPEAANUT.js} +3 -3
  32. package/dist/{chunk-JZPXOQK3.js → chunk-MT3ZAKKO.js} +3 -3
  33. package/dist/{chunk-WQVP2232.js → chunk-NIW3GVZ6.js} +45 -61
  34. package/dist/chunk-NIW3GVZ6.js.map +7 -0
  35. package/dist/chunk-OC5CZWBQ.js.map +7 -0
  36. package/dist/{chunk-VW7ZPH5U.js → chunk-OHW6JWIB.js} +4 -4
  37. package/dist/{chunk-AQXOZUAV.js → chunk-P6O6FCAD.js} +2 -2
  38. package/dist/{chunk-Z35GPUWK.js → chunk-PUG4EOMG.js} +1 -1
  39. package/dist/{chunk-WBAZ4MMW.js → chunk-RSYAAJ5F.js} +4 -4
  40. package/dist/{chunk-46Z3GAE4.js → chunk-SJIE5KQR.js} +4 -4
  41. package/dist/{chunk-FQMMZCOL.js → chunk-TF4T573B.js} +2 -2
  42. package/dist/chunk-TQTC7KJZ.js +81 -0
  43. package/dist/{chunk-MHFWCK5F.js.map → chunk-TQTC7KJZ.js.map} +1 -1
  44. package/dist/{chunk-5PSLFGDF.js → chunk-UFR47H5I.js} +11 -7
  45. package/dist/chunk-UFR47H5I.js.map +7 -0
  46. package/dist/{chunk-IZ6NAVRD.js → chunk-UPULEKBE.js} +1 -1
  47. package/dist/{chunk-VRWY6YIJ.js → chunk-UV2N4M64.js} +3 -3
  48. package/dist/{chunk-RAOXUYK3.js → chunk-W6OFNZ3W.js} +2 -2
  49. package/dist/{chunk-RFY3YUHB.js → chunk-WKSMEOKH.js} +3 -3
  50. package/dist/chunk-YTESBILA.js +78 -0
  51. package/dist/chunk-YTESBILA.js.map +7 -0
  52. package/dist/{cli-3QFWTKDS.js → cli-OZWYRJHM.js} +127 -102
  53. package/dist/cli-OZWYRJHM.js.map +7 -0
  54. package/dist/commands-ASLDRXGO.js +54 -0
  55. package/dist/{config-DFRB2SLO.js → config-LCNYYLVP.js} +4 -4
  56. package/dist/{context-V62FBZVF.js → context-DPW4MYE4.js} +6 -6
  57. package/dist/conversationPersistence-JLI7ZCBG.js +13 -0
  58. package/dist/{conversationTracker-DZR2N3FQ.js → conversationTracker-KVYAMRCS.js} +4 -3
  59. package/dist/{customCommands-3ZIVHLTU.js → customCommands-O2J3V24X.js} +4 -4
  60. package/dist/{env-BMFEDWPX.js → env-VUPUO64W.js} +2 -2
  61. package/dist/{file-SD5NRUTD.js → file-VJBZTSIC.js} +4 -4
  62. package/dist/index.js +3 -3
  63. package/dist/{llm-466UDKVG.js → llm-BXWBQJQA.js} +416 -49
  64. package/dist/llm-BXWBQJQA.js.map +7 -0
  65. package/dist/{llmLazy-7R7P5A3P.js → llmLazy-XR66QEVP.js} +1 -1
  66. package/dist/{loader-X7RIUXJB.js → loader-IHQ33LHG.js} +4 -4
  67. package/dist/{lsp-2FPBS2M3.js → lsp-57NLFUAK.js} +6 -6
  68. package/dist/{lspAnchor-KQNSWWL3.js → lspAnchor-VWSO7YZY.js} +6 -6
  69. package/dist/{mcp-3SV4TZYL.js → mcp-XJJDR27I.js} +7 -7
  70. package/dist/{mentionProcessor-KJP4IYVF.js → mentionProcessor-6MSAZVVB.js} +5 -5
  71. package/dist/{messages-BXF7LJIV.js → messages-4KD4FLFL.js} +9 -5
  72. package/dist/{model-F6VCUHDL.js → model-AA5UZIM5.js} +5 -5
  73. package/dist/{openai-QTTJIB6O.js → openai-HAAQ3Y7C.js} +5 -5
  74. package/dist/{outputStyles-SJ57QG7S.js → outputStyles-MJS6OUKM.js} +4 -4
  75. package/dist/{pluginRuntime-4SDXCK4Q.js → pluginRuntime-O23ERPKS.js} +6 -6
  76. package/dist/{pluginValidation-YJ4W3MX4.js → pluginValidation-T25KVTG4.js} +6 -6
  77. package/dist/prompts-CU2RK7D3.js +56 -0
  78. package/dist/{pybAgentSessionLoad-IZULLNUL.js → pybAgentSessionLoad-M3JZ2DH3.js} +4 -4
  79. package/dist/{pybAgentSessionResume-QRNTC3A3.js → pybAgentSessionResume-D2R55SPH.js} +4 -4
  80. package/dist/{pybAgentStreamJsonSession-RUHPYCTJ.js → pybAgentStreamJsonSession-LKZILYAG.js} +4 -3
  81. package/dist/pybAgentStreamJsonSession-LKZILYAG.js.map +7 -0
  82. package/dist/{pybHooks-GX3AIY4U.js → pybHooks-GAJ5GRHI.js} +4 -4
  83. package/dist/query-2X4R5ZCX.js +58 -0
  84. package/dist/{registry-JNPRNIFB.js → registry-GDKX2X34.js} +5 -5
  85. package/dist/{ripgrep-ZKWM7RMS.js → ripgrep-FJH77I5J.js} +3 -3
  86. package/dist/{skillMarketplace-4LJAYRMX.js → skillMarketplace-6NXN5AYJ.js} +3 -3
  87. package/dist/{state-I6BQR2T5.js → state-5JZ6HLQY.js} +2 -2
  88. package/dist/{theme-GL7HKKCQ.js → theme-HJNALYGQ.js} +5 -5
  89. package/dist/{toolPermissionSettings-ZRTSQVQ2.js → toolPermissionSettings-KPM5KUAD.js} +6 -6
  90. package/dist/tools-C65SWXV6.js +55 -0
  91. package/dist/tools-C65SWXV6.js.map +7 -0
  92. package/dist/{userInput-M6JYKQCU.js → userInput-BXJEMFWI.js} +76 -49
  93. package/dist/userInput-BXJEMFWI.js.map +7 -0
  94. package/package.json +11 -7
  95. package/scripts/cli-acp-wrapper.cjs +29 -5
  96. package/scripts/cli-wrapper.cjs +28 -6
  97. package/scripts/postinstall.js +3 -1
  98. package/scripts/typed-sql-install-smoke.mjs +69 -0
  99. package/scripts/typed-sql-no-fallback-gate.mjs +61 -0
  100. package/scripts/typed-sql-release-gate.mjs +51 -0
  101. package/dist/REPL-AHBTBEED.js +0 -49
  102. package/dist/acp-53E7A6L4.js.map +0 -7
  103. package/dist/ask-XUXTH3EI.js.map +0 -7
  104. package/dist/chunk-5PSLFGDF.js.map +0 -7
  105. package/dist/chunk-B62BK4YK.js +0 -516
  106. package/dist/chunk-B62BK4YK.js.map +0 -7
  107. package/dist/chunk-FKDSZPS4.js.map +0 -7
  108. package/dist/chunk-MHFWCK5F.js +0 -240
  109. package/dist/chunk-O6DTZU7F.js.map +0 -7
  110. package/dist/chunk-TJUTH3WH.js.map +0 -7
  111. package/dist/chunk-VBJ6J63U.js.map +0 -7
  112. package/dist/chunk-WQVP2232.js.map +0 -7
  113. package/dist/cli-3QFWTKDS.js.map +0 -7
  114. package/dist/commands-ITOHDPPP.js +0 -53
  115. package/dist/llm-466UDKVG.js.map +0 -7
  116. package/dist/prompts-5RPQRZ3L.js +0 -55
  117. package/dist/pybAgentStreamJsonSession-RUHPYCTJ.js.map +0 -7
  118. package/dist/query-YLKPJVHB.js +0 -57
  119. package/dist/tools-4GEB2BRR.js +0 -54
  120. package/dist/userInput-M6JYKQCU.js.map +0 -7
  121. package/resources/output-styles/legacy-system-maintainer.md +0 -47
  122. /package/dist/{REPL-AHBTBEED.js.map → REPL-LEORZMM6.js.map} +0 -0
  123. /package/dist/{agentsValidate-VSDRHIJQ.js.map → agentsValidate-ZVFEF4KY.js.map} +0 -0
  124. /package/dist/{autoUpdater-GAWZB7YO.js.map → autoUpdater-BZ7E2E54.js.map} +0 -0
  125. /package/dist/{chunk-4QTASHFO.js.map → chunk-25MWUHVP.js.map} +0 -0
  126. /package/dist/{chunk-HOBCGAUT.js.map → chunk-2KTGONPT.js.map} +0 -0
  127. /package/dist/{chunk-H67PQDUM.js.map → chunk-3YDOR2NA.js.map} +0 -0
  128. /package/dist/{chunk-YABL4JYT.js.map → chunk-46JMZBCX.js.map} +0 -0
  129. /package/dist/{chunk-JFIH5LIP.js.map → chunk-4LLCMT3D.js.map} +0 -0
  130. /package/dist/{chunk-62CZOFWT.js.map → chunk-7FGPQ22V.js.map} +0 -0
  131. /package/dist/{chunk-DRP66QHJ.js.map → chunk-7SZNDNLK.js.map} +0 -0
  132. /package/dist/{chunk-LNPUQ3UL.js.map → chunk-AJEGTH5Q.js.map} +0 -0
  133. /package/dist/{chunk-LNE2PRIU.js.map → chunk-AO6J7LEE.js.map} +0 -0
  134. /package/dist/{chunk-4I2M26LO.js.map → chunk-E6OFGHIW.js.map} +0 -0
  135. /package/dist/{chunk-543LWZDY.js.map → chunk-EEKXOPVZ.js.map} +0 -0
  136. /package/dist/{chunk-IWKEQNWI.js.map → chunk-MPEAANUT.js.map} +0 -0
  137. /package/dist/{chunk-JZPXOQK3.js.map → chunk-MT3ZAKKO.js.map} +0 -0
  138. /package/dist/{chunk-O6DTZU7F.js → chunk-OC5CZWBQ.js} +0 -0
  139. /package/dist/{chunk-VW7ZPH5U.js.map → chunk-OHW6JWIB.js.map} +0 -0
  140. /package/dist/{chunk-AQXOZUAV.js.map → chunk-P6O6FCAD.js.map} +0 -0
  141. /package/dist/{chunk-Z35GPUWK.js.map → chunk-PUG4EOMG.js.map} +0 -0
  142. /package/dist/{chunk-WBAZ4MMW.js.map → chunk-RSYAAJ5F.js.map} +0 -0
  143. /package/dist/{chunk-46Z3GAE4.js.map → chunk-SJIE5KQR.js.map} +0 -0
  144. /package/dist/{chunk-FQMMZCOL.js.map → chunk-TF4T573B.js.map} +0 -0
  145. /package/dist/{chunk-IZ6NAVRD.js.map → chunk-UPULEKBE.js.map} +0 -0
  146. /package/dist/{chunk-VRWY6YIJ.js.map → chunk-UV2N4M64.js.map} +0 -0
  147. /package/dist/{chunk-RAOXUYK3.js.map → chunk-W6OFNZ3W.js.map} +0 -0
  148. /package/dist/{chunk-RFY3YUHB.js.map → chunk-WKSMEOKH.js.map} +0 -0
  149. /package/dist/{commands-ITOHDPPP.js.map → commands-ASLDRXGO.js.map} +0 -0
  150. /package/dist/{config-DFRB2SLO.js.map → config-LCNYYLVP.js.map} +0 -0
  151. /package/dist/{context-V62FBZVF.js.map → context-DPW4MYE4.js.map} +0 -0
  152. /package/dist/{conversationTracker-DZR2N3FQ.js.map → conversationPersistence-JLI7ZCBG.js.map} +0 -0
  153. /package/dist/{customCommands-3ZIVHLTU.js.map → conversationTracker-KVYAMRCS.js.map} +0 -0
  154. /package/dist/{env-BMFEDWPX.js.map → customCommands-O2J3V24X.js.map} +0 -0
  155. /package/dist/{file-SD5NRUTD.js.map → env-VUPUO64W.js.map} +0 -0
  156. /package/dist/{llmLazy-7R7P5A3P.js.map → file-VJBZTSIC.js.map} +0 -0
  157. /package/dist/{loader-X7RIUXJB.js.map → llmLazy-XR66QEVP.js.map} +0 -0
  158. /package/dist/{lsp-2FPBS2M3.js.map → loader-IHQ33LHG.js.map} +0 -0
  159. /package/dist/{mcp-3SV4TZYL.js.map → lsp-57NLFUAK.js.map} +0 -0
  160. /package/dist/{lspAnchor-KQNSWWL3.js.map → lspAnchor-VWSO7YZY.js.map} +0 -0
  161. /package/dist/{messages-BXF7LJIV.js.map → mcp-XJJDR27I.js.map} +0 -0
  162. /package/dist/{mentionProcessor-KJP4IYVF.js.map → mentionProcessor-6MSAZVVB.js.map} +0 -0
  163. /package/dist/{model-F6VCUHDL.js.map → messages-4KD4FLFL.js.map} +0 -0
  164. /package/dist/{openai-QTTJIB6O.js.map → model-AA5UZIM5.js.map} +0 -0
  165. /package/dist/{outputStyles-SJ57QG7S.js.map → openai-HAAQ3Y7C.js.map} +0 -0
  166. /package/dist/{pluginValidation-YJ4W3MX4.js.map → outputStyles-MJS6OUKM.js.map} +0 -0
  167. /package/dist/{pluginRuntime-4SDXCK4Q.js.map → pluginRuntime-O23ERPKS.js.map} +0 -0
  168. /package/dist/{prompts-5RPQRZ3L.js.map → pluginValidation-T25KVTG4.js.map} +0 -0
  169. /package/dist/{pybAgentSessionLoad-IZULLNUL.js.map → prompts-CU2RK7D3.js.map} +0 -0
  170. /package/dist/{pybAgentSessionResume-QRNTC3A3.js.map → pybAgentSessionLoad-M3JZ2DH3.js.map} +0 -0
  171. /package/dist/{pybHooks-GX3AIY4U.js.map → pybAgentSessionResume-D2R55SPH.js.map} +0 -0
  172. /package/dist/{query-YLKPJVHB.js.map → pybHooks-GAJ5GRHI.js.map} +0 -0
  173. /package/dist/{registry-JNPRNIFB.js.map → query-2X4R5ZCX.js.map} +0 -0
  174. /package/dist/{ripgrep-ZKWM7RMS.js.map → registry-GDKX2X34.js.map} +0 -0
  175. /package/dist/{skillMarketplace-4LJAYRMX.js.map → ripgrep-FJH77I5J.js.map} +0 -0
  176. /package/dist/{state-I6BQR2T5.js.map → skillMarketplace-6NXN5AYJ.js.map} +0 -0
  177. /package/dist/{theme-GL7HKKCQ.js.map → state-5JZ6HLQY.js.map} +0 -0
  178. /package/dist/{toolPermissionSettings-ZRTSQVQ2.js.map → theme-HJNALYGQ.js.map} +0 -0
  179. /package/dist/{tools-4GEB2BRR.js.map → toolPermissionSettings-KPM5KUAD.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/tools/tool.ts"],
4
+ "sourcesContent": ["import { z } from 'zod'\nimport type * as React from 'react'\nimport type { PermissionMode } from '@pyb-types/permissionMode'\nimport type { ToolPermissionContext } from '@pyb-types/toolPermissionContext'\n\nexport type SetToolJSXFn = (\n jsx: {\n jsx: React.ReactNode | null\n shouldHidePromptInput: boolean\n } | null,\n) => void\n\nexport interface ToolUseContext {\n messageId: string | undefined\n toolUseId?: string\n agentId?: string\n agentType?: string\n safeMode?: boolean\n abortController: AbortController\n readFileTimestamps: { [filePath: string]: number }\n options?: {\n commands?: any[]\n tools?: any[]\n verbose?: boolean\n slowAndCapableModel?: string\n safeMode?: boolean\n permissionMode?: PermissionMode\n toolPermissionContext?: ToolPermissionContext\n lastUserPrompt?: string\n forkNumber?: number\n messageLogName?: string\n maxThinkingTokens?: any\n model?: string\n commandAllowedTools?: string[]\n isPybRequest?: boolean\n pybContext?: string\n isCustomCommand?: boolean\n contentInputPath?: 'blocks' | 'string_adapted'\n mcpClients?: any[]\n disableSlashCommands?: boolean\n persistSession?: boolean\n shouldAvoidPermissionPrompts?: boolean\n }\n responseState?: {\n previousResponseId?: string\n conversationId?: string\n }\n}\n\nexport interface ExtendedToolUseContext extends ToolUseContext {\n setToolJSX: SetToolJSXFn\n}\n\nexport interface ValidationResult {\n result: boolean\n message?: string\n errorCode?: number\n meta?: any\n}\n\nexport interface Tool<\n TInput extends z.ZodTypeAny = z.ZodTypeAny,\n TOutput = any,\n> {\n name: string\n description?: string | ((input?: z.infer<TInput>) => Promise<string>)\n inputSchema: TInput\n inputJSONSchema?: Record<string, unknown>\n prompt: (options?: { safeMode?: boolean }) => Promise<string>\n userFacingName?: (input?: z.infer<TInput>) => string\n cachedDescription?: string\n isEnabled: () => Promise<boolean>\n isReadOnly: (input?: z.infer<TInput>) => boolean\n isConcurrencySafe: (input?: z.infer<TInput>) => boolean\n needsPermissions: (input?: z.infer<TInput>) => boolean\n requiresUserInteraction?: (input?: z.infer<TInput>) => boolean\n validateInput?: (\n input: z.infer<TInput>,\n context?: ToolUseContext,\n ) => Promise<ValidationResult>\n renderResultForAssistant: (output: TOutput) => string | any[]\n renderToolUseMessage: (\n input: z.infer<TInput>,\n options: { verbose: boolean },\n ) => string | React.ReactElement | null\n renderToolUseRejectedMessage?: (...args: any[]) => React.ReactElement\n renderToolResultMessage?: (\n output: TOutput,\n options: { verbose: boolean },\n ) => React.ReactNode\n call: (\n input: z.infer<TInput>,\n context: ToolUseContext,\n ) => AsyncGenerator<\n | {\n type: 'result'\n data: TOutput\n resultForAssistant?: string | any[]\n newMessages?: unknown[]\n contextModifier?: {\n modifyContext: (ctx: ToolUseContext) => ToolUseContext\n }\n }\n | {\n type: 'progress'\n content: any\n normalizedMessages?: any[]\n tools?: any[]\n },\n void,\n unknown\n >\n}\n\nexport function getToolDescription(tool: Tool): string {\n if (tool.cachedDescription) {\n return tool.cachedDescription\n }\n\n if (typeof tool.description === 'string') {\n return tool.description\n }\n\n return `Tool: ${tool.name}`\n}\n"],
5
+ "mappings": ";;;;AAkHO,SAAS,mBAAmB,MAAoB;AACrD,MAAI,KAAK,mBAAmB;AAC1B,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,OAAO,KAAK,gBAAgB,UAAU;AACxC,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,SAAS,KAAK,IAAI;AAC3B;",
6
+ "names": []
7
+ }
@@ -3,7 +3,7 @@ const require = __pybCreateRequire(import.meta.url);
3
3
 
4
4
  // src/services/ai/llmLazy.ts
5
5
  async function queryLLM(messages, systemPrompt, maxThinkingTokens, tools, signal, options) {
6
- const { queryLLM: inner } = await import("./llm-466UDKVG.js");
6
+ const { queryLLM: inner } = await import("./llm-BXWBQJQA.js");
7
7
  return inner(
8
8
  messages,
9
9
  systemPrompt,
@@ -14,15 +14,15 @@ async function queryLLM(messages, systemPrompt, maxThinkingTokens, tools, signal
14
14
  );
15
15
  }
16
16
  async function queryQuick(args) {
17
- const { queryQuick: inner } = await import("./llm-466UDKVG.js");
17
+ const { queryQuick: inner } = await import("./llm-BXWBQJQA.js");
18
18
  return inner(args);
19
19
  }
20
20
  async function verifyApiKey(apiKey, baseURL, provider) {
21
- const { verifyApiKey: inner } = await import("./llm-466UDKVG.js");
21
+ const { verifyApiKey: inner } = await import("./llm-BXWBQJQA.js");
22
22
  return inner(apiKey, baseURL, provider);
23
23
  }
24
24
  async function fetchAnthropicModels(apiKey, baseURL) {
25
- const { fetchAnthropicModels: inner } = await import("./llm-466UDKVG.js");
25
+ const { fetchAnthropicModels: inner } = await import("./llm-BXWBQJQA.js");
26
26
  return inner(apiKey, baseURL);
27
27
  }
28
28
 
@@ -6,12 +6,12 @@ import {
6
6
  } from "./chunk-XKYHFZEC.js";
7
7
  import {
8
8
  getGlobalConfig
9
- } from "./chunk-LNE2PRIU.js";
9
+ } from "./chunk-AO6J7LEE.js";
10
10
  import {
11
11
  debug,
12
12
  getCurrentRequest,
13
13
  logAPIError
14
- } from "./chunk-HOBCGAUT.js";
14
+ } from "./chunk-2KTGONPT.js";
15
15
 
16
16
  // src/services/ai/openai.ts
17
17
  import { ProxyAgent, fetch } from "undici";
@@ -4,7 +4,7 @@ import {
4
4
  BunShell,
5
5
  execFileNoThrow,
6
6
  logError
7
- } from "./chunk-DRP66QHJ.js";
7
+ } from "./chunk-7SZNDNLK.js";
8
8
 
9
9
  // src/utils/system/ripgrep.ts
10
10
  import { findActualExecutable } from "spawn-rx";
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSettingsFileCandidates,
5
5
  loadSettingsWithLegacyFallback
6
- } from "./chunk-62CZOFWT.js";
6
+ } from "./chunk-7FGPQ22V.js";
7
7
  import {
8
8
  getSessionPlugins
9
9
  } from "./chunk-BJSWTHRM.js";
10
10
  import {
11
11
  getTheme
12
- } from "./chunk-YABL4JYT.js";
12
+ } from "./chunk-46JMZBCX.js";
13
13
  import {
14
14
  addMcprcServerForTesting,
15
15
  getCurrentProjectConfig,
@@ -19,13 +19,13 @@ import {
19
19
  safeParseJSON,
20
20
  saveCurrentProjectConfig,
21
21
  saveGlobalConfig
22
- } from "./chunk-LNE2PRIU.js";
22
+ } from "./chunk-AO6J7LEE.js";
23
23
  import {
24
24
  PRODUCT_COMMAND,
25
25
  PRODUCT_NAME,
26
26
  getCwd,
27
27
  logMCPError
28
- } from "./chunk-DRP66QHJ.js";
28
+ } from "./chunk-7SZNDNLK.js";
29
29
 
30
30
  // src/services/mcp/client.ts
31
31
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
@@ -2,13 +2,13 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  ripGrepWithStatus
5
- } from "./chunk-Z35GPUWK.js";
5
+ } from "./chunk-PUG4EOMG.js";
6
6
  import {
7
7
  getCurrentProjectConfig,
8
8
  getGlobalConfig,
9
9
  getOrCreateUserID,
10
10
  saveCurrentProjectConfig
11
- } from "./chunk-LNE2PRIU.js";
11
+ } from "./chunk-AO6J7LEE.js";
12
12
  import {
13
13
  SESSION_ID,
14
14
  env,
@@ -16,10 +16,10 @@ import {
16
16
  getCwd,
17
17
  isContextScanDisabled,
18
18
  logError
19
- } from "./chunk-DRP66QHJ.js";
19
+ } from "./chunk-7SZNDNLK.js";
20
20
  import {
21
21
  MACRO
22
- } from "./chunk-5PSLFGDF.js";
22
+ } from "./chunk-UFR47H5I.js";
23
23
  import {
24
24
  __require
25
25
  } from "./chunk-I3J4JYES.js";
@@ -2,10 +2,10 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  debug
5
- } from "./chunk-HOBCGAUT.js";
5
+ } from "./chunk-2KTGONPT.js";
6
6
  import {
7
7
  logError
8
- } from "./chunk-DRP66QHJ.js";
8
+ } from "./chunk-7SZNDNLK.js";
9
9
 
10
10
  // src/services/system/systemReminder.ts
11
11
  var SystemReminderService = class {
@@ -0,0 +1,81 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ getPybAgentSessionId
5
+ } from "./chunk-B6IMQJZM.js";
6
+ import {
7
+ getCwd,
8
+ resolveXdgDataPath
9
+ } from "./chunk-7SZNDNLK.js";
10
+
11
+ // src/utils/protocol/pybAgentSessionLog.ts
12
+ import {
13
+ appendFileSync,
14
+ existsSync,
15
+ mkdirSync,
16
+ readFileSync,
17
+ statSync,
18
+ writeFileSync
19
+ } from "fs";
20
+ import { dirname, join } from "path";
21
+ function getSessionStoreBaseDir() {
22
+ return resolveXdgDataPath("sessions");
23
+ }
24
+ function sanitizeProjectNameForSessionStore(cwd) {
25
+ return cwd.replace(/[^a-zA-Z0-9]/g, "-");
26
+ }
27
+ function getSessionProjectsDir() {
28
+ return join(getSessionStoreBaseDir(), "projects");
29
+ }
30
+ function getSessionProjectDir(cwd) {
31
+ return join(getSessionProjectsDir(), sanitizeProjectNameForSessionStore(cwd));
32
+ }
33
+ function getSessionLogFilePath(args) {
34
+ return join(getSessionProjectDir(args.cwd), `${args.sessionId}.jsonl`);
35
+ }
36
+ function safeMkdir(dir) {
37
+ if (existsSync(dir)) return;
38
+ mkdirSync(dir, { recursive: true });
39
+ }
40
+ function safeEnsureFile(path) {
41
+ safeMkdir(dirname(path));
42
+ if (!existsSync(path)) writeFileSync(path, "", "utf8");
43
+ }
44
+ function safeAppendJsonl(path, record) {
45
+ try {
46
+ safeEnsureFile(path);
47
+ appendFileSync(path, JSON.stringify(record) + "\n", "utf8");
48
+ } catch {
49
+ }
50
+ }
51
+ var currentSessionCustomTitle = null;
52
+ var currentSessionTag = null;
53
+ function appendSessionCustomTitleRecord(args) {
54
+ const cwd = getCwd();
55
+ safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId: args.sessionId }), {
56
+ type: "custom-title",
57
+ sessionId: args.sessionId,
58
+ customTitle: args.customTitle
59
+ });
60
+ if (args.sessionId === getPybAgentSessionId()) {
61
+ currentSessionCustomTitle = args.customTitle;
62
+ }
63
+ }
64
+ function appendSessionTagRecord(args) {
65
+ const cwd = getCwd();
66
+ safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId: args.sessionId }), {
67
+ type: "tag",
68
+ sessionId: args.sessionId,
69
+ tag: args.tag
70
+ });
71
+ if (args.sessionId === getPybAgentSessionId()) {
72
+ currentSessionTag = args.tag;
73
+ }
74
+ }
75
+
76
+ export {
77
+ getSessionProjectsDir,
78
+ getSessionProjectDir,
79
+ appendSessionCustomTitleRecord,
80
+ appendSessionTagRecord
81
+ };
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/protocol/pybAgentSessionLog.ts"],
4
4
  "sourcesContent": ["import { execFileSync } from 'child_process'\nimport {\n appendFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n statSync,\n writeFileSync,\n} from 'fs'\nimport { randomBytes } from 'crypto'\nimport { dirname, join } from 'path'\nimport type { Message } from '@query'\nimport { MACRO } from '@constants/macros'\nimport { getCwd } from '@utils/state'\nimport { getPybAgentSessionId } from './pybAgentSessionId'\nimport { resolveXdgDataPath } from '@utils/config/env'\nimport {\n PLAN_SLUG_ADJECTIVES,\n PLAN_SLUG_NOUNS,\n PLAN_SLUG_VERBS,\n} from '@utils/plan/planSlugWords'\n\ntype PersistTarget =\n | { kind: 'session'; sessionId: string }\n | { kind: 'agent'; agentId: string }\n\ntype JsonlEnvelopeBase = {\n cwd: string\n sessionId: string\n version: string\n gitBranch?: string\n userType: string\n isSidechain: boolean\n parentUuid: string | null\n logicalParentUuid?: string\n agentId: string\n slug: string\n uuid: string\n timestamp: string\n}\n\ntype SessionJsonlEntry =\n | (JsonlEnvelopeBase & {\n type: 'user'\n message: any\n toolUseResult?: any\n })\n | (JsonlEnvelopeBase & {\n type: 'assistant'\n message: any\n requestId?: string\n isApiErrorMessage?: boolean\n })\n | { type: 'summary'; summary: string; leafUuid: string }\n | { type: 'custom-title'; sessionId: string; customTitle: string }\n | { type: 'tag'; sessionId: string; tag: string }\n | {\n type: 'file-history-snapshot'\n messageId: string\n snapshot: {\n messageId: string\n trackedFileBackups: Record<string, unknown>\n timestamp: string\n }\n isSnapshotUpdate: boolean\n }\n\nfunction getSessionStoreBaseDir(): string {\n return resolveXdgDataPath('sessions')\n}\n\nexport function sanitizeProjectNameForSessionStore(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\n}\n\nexport function getSessionProjectsDir(): string {\n return join(getSessionStoreBaseDir(), 'projects')\n}\n\nexport function getSessionProjectDir(cwd: string): string {\n return join(getSessionProjectsDir(), sanitizeProjectNameForSessionStore(cwd))\n}\n\nexport function getSessionLogFilePath(args: {\n cwd: string\n sessionId: string\n}): string {\n return join(getSessionProjectDir(args.cwd), `${args.sessionId}.jsonl`)\n}\n\nexport function getAgentLogFilePath(args: {\n cwd: string\n agentId: string\n}): string {\n return join(getSessionProjectDir(args.cwd), `agent-${args.agentId}.jsonl`)\n}\n\nfunction safeMkdir(dir: string): void {\n if (existsSync(dir)) return\n mkdirSync(dir, { recursive: true })\n}\n\nfunction safeEnsureFile(path: string): void {\n safeMkdir(dirname(path))\n if (!existsSync(path)) writeFileSync(path, '', 'utf8')\n}\n\nfunction safeAppendJsonl(path: string, record: unknown): void {\n try {\n safeEnsureFile(path)\n appendFileSync(path, JSON.stringify(record) + '\\n', 'utf8')\n } catch {\n }\n}\n\nconst lastUuidByFile = new Map<string, string | null>()\nconst snapshotWrittenByFile = new Set<string>()\nconst slugBySessionId = new Map<string, string>()\nlet currentSessionCustomTitle: string | null = null\nlet currentSessionTag: string | null = null\n\ntype LastPersistedInfo = { uuid: string | null; slug: string | null }\n\nfunction safeReadLastPersistedInfo(filePath: string): LastPersistedInfo {\n try {\n if (!existsSync(filePath)) return { uuid: null, slug: null }\n const content = readFileSync(filePath, 'utf8')\n const lines = content.split('\\n')\n\n let lastSlug: string | null = null\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]?.trim()\n if (!line) continue\n let parsed: any\n try {\n parsed = JSON.parse(line)\n } catch {\n continue\n }\n if (!parsed || typeof parsed !== 'object') continue\n\n if (!lastSlug && typeof parsed.slug === 'string' && parsed.slug.trim()) {\n lastSlug = parsed.slug.trim()\n }\n\n if (typeof parsed.uuid === 'string' && parsed.uuid) {\n return { uuid: parsed.uuid, slug: lastSlug }\n }\n }\n\n return { uuid: null, slug: lastSlug }\n } catch {\n return { uuid: null, slug: null }\n }\n}\n\nfunction pickIndex(length: number): number {\n return randomBytes(4).readUInt32BE(0) % length\n}\n\nfunction pickWord(words: readonly string[]): string {\n return words[pickIndex(words.length)]!\n}\n\nfunction generateSessionSlug(): string {\n const adjective = pickWord(PLAN_SLUG_ADJECTIVES)\n const verb = pickWord(PLAN_SLUG_VERBS)\n const noun = pickWord(PLAN_SLUG_NOUNS)\n return `${adjective}-${verb}-${noun}`\n}\n\nfunction getOrCreateSessionSlug(sessionId: string): string {\n const existing = slugBySessionId.get(sessionId)\n if (existing) return existing\n const slug = generateSessionSlug()\n slugBySessionId.set(sessionId, slug)\n return slug\n}\n\ntype GitBranchCacheEntry = { cwd: string; value: string | undefined }\nlet gitBranchCache: GitBranchCacheEntry | null = null\n\nfunction getGitBranchBestEffort(cwd: string): string | undefined {\n if (gitBranchCache && gitBranchCache.cwd === cwd) return gitBranchCache.value\n\n let value: string | undefined\n try {\n const stdout = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {\n cwd,\n stdio: ['ignore', 'pipe', 'ignore'],\n timeout: 750,\n })\n const branch = stdout.toString('utf8').trim()\n value = branch || undefined\n } catch {\n value = undefined\n }\n\n gitBranchCache = { cwd, value }\n return value\n}\n\nfunction ensureFileHistorySnapshot(\n filePath: string,\n firstMessageUuid: string,\n): void {\n if (snapshotWrittenByFile.has(filePath)) return\n\n try {\n safeEnsureFile(filePath)\n const size = statSync(filePath).size\n if (size > 0) {\n snapshotWrittenByFile.add(filePath)\n return\n }\n } catch {\n }\n\n const now = new Date().toISOString()\n safeAppendJsonl(filePath, {\n type: 'file-history-snapshot',\n messageId: firstMessageUuid,\n snapshot: {\n messageId: firstMessageUuid,\n trackedFileBackups: {},\n timestamp: now,\n },\n isSnapshotUpdate: false,\n } satisfies SessionJsonlEntry)\n\n snapshotWrittenByFile.add(filePath)\n}\n\nfunction resolvePersistTarget(toolUseContext: {\n agentId?: string\n}): PersistTarget {\n const agentId = toolUseContext.agentId\n if (agentId && agentId !== 'main') return { kind: 'agent', agentId }\n return { kind: 'session', sessionId: getPybAgentSessionId() }\n}\n\nexport function appendSessionJsonlFromMessage(args: {\n message: Message\n toolUseContext: { agentId?: string }\n}): void {\n const { message, toolUseContext } = args\n if (message.type !== 'user' && message.type !== 'assistant') return\n\n const cwd = getCwd()\n const userType = (process.env.USER_TYPE ?? 'external').trim() || 'external'\n const sessionId = getPybAgentSessionId()\n const agentId = (toolUseContext.agentId ?? 'main').trim() || 'main'\n const isSidechain = agentId !== 'main'\n const gitBranch = getGitBranchBestEffort(cwd)\n\n const target = resolvePersistTarget(toolUseContext)\n const filePath =\n target.kind === 'agent'\n ? getAgentLogFilePath({ cwd, agentId: target.agentId })\n : getSessionLogFilePath({ cwd, sessionId: target.sessionId })\n\n if (!lastUuidByFile.has(filePath)) {\n const info = safeReadLastPersistedInfo(filePath)\n lastUuidByFile.set(filePath, info.uuid)\n if (info.slug) slugBySessionId.set(sessionId, info.slug)\n }\n const previousUuid = lastUuidByFile.get(filePath) ?? null\n\n const slug = getOrCreateSessionSlug(sessionId)\n\n if (target.kind === 'session') {\n ensureFileHistorySnapshot(filePath, message.uuid)\n }\n\n const base: JsonlEnvelopeBase = {\n parentUuid: previousUuid,\n logicalParentUuid: undefined,\n isSidechain,\n userType,\n cwd,\n sessionId,\n version: MACRO.VERSION,\n ...(gitBranch ? { gitBranch } : {}),\n agentId,\n slug,\n uuid: message.uuid,\n timestamp: new Date().toISOString(),\n }\n\n const record: SessionJsonlEntry =\n message.type === 'user'\n ? {\n ...base,\n type: 'user',\n message: message.message,\n ...(message.toolUseResult?.data !== undefined\n ? { toolUseResult: message.toolUseResult.data }\n : {}),\n }\n : {\n ...base,\n type: 'assistant',\n message: message.message,\n ...(typeof (message as any).requestId === 'string'\n ? { requestId: String((message as any).requestId) }\n : {}),\n ...(message.isApiErrorMessage ? { isApiErrorMessage: true } : {}),\n }\n\n safeAppendJsonl(filePath, record)\n lastUuidByFile.set(filePath, message.uuid)\n}\n\nexport function appendSessionSummaryRecord(args: {\n summary: string\n leafUuid: string\n sessionId?: string\n}): void {\n const sessionId = args.sessionId ?? getPybAgentSessionId()\n const cwd = getCwd()\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId }), {\n type: 'summary',\n summary: args.summary,\n leafUuid: args.leafUuid,\n } satisfies SessionJsonlEntry)\n}\n\nexport function appendSessionCustomTitleRecord(args: {\n sessionId: string\n customTitle: string\n}): void {\n const cwd = getCwd()\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId: args.sessionId }), {\n type: 'custom-title',\n sessionId: args.sessionId,\n customTitle: args.customTitle,\n } satisfies SessionJsonlEntry)\n if (args.sessionId === getPybAgentSessionId()) {\n currentSessionCustomTitle = args.customTitle\n }\n}\n\nexport function appendSessionTagRecord(args: {\n sessionId: string\n tag: string\n}): void {\n const cwd = getCwd()\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId: args.sessionId }), {\n type: 'tag',\n sessionId: args.sessionId,\n tag: args.tag,\n } satisfies SessionJsonlEntry)\n if (args.sessionId === getPybAgentSessionId()) {\n currentSessionTag = args.tag\n }\n}\n\nexport function getCurrentSessionCustomTitle(): string | null {\n return currentSessionCustomTitle\n}\n\nexport function getCurrentSessionTag(): string | null {\n return currentSessionTag\n}\n\nexport function resetSessionJsonlStateForTests(): void {\n lastUuidByFile.clear()\n snapshotWrittenByFile.clear()\n slugBySessionId.clear()\n gitBranchCache = null\n currentSessionCustomTitle = null\n currentSessionTag = null\n}\n"],
5
- "mappings": "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",
5
+ "mappings": ";;;;;;;;;;;AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,SAAS,YAAY;AAyD9B,SAAS,yBAAiC;AACxC,SAAO,mBAAmB,UAAU;AACtC;AAEO,SAAS,mCAAmC,KAAqB;AACtE,SAAO,IAAI,QAAQ,iBAAiB,GAAG;AACzC;AAEO,SAAS,wBAAgC;AAC9C,SAAO,KAAK,uBAAuB,GAAG,UAAU;AAClD;AAEO,SAAS,qBAAqB,KAAqB;AACxD,SAAO,KAAK,sBAAsB,GAAG,mCAAmC,GAAG,CAAC;AAC9E;AAEO,SAAS,sBAAsB,MAG3B;AACT,SAAO,KAAK,qBAAqB,KAAK,GAAG,GAAG,GAAG,KAAK,SAAS,QAAQ;AACvE;AASA,SAAS,UAAU,KAAmB;AACpC,MAAI,WAAW,GAAG,EAAG;AACrB,YAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC;AAEA,SAAS,eAAe,MAAoB;AAC1C,YAAU,QAAQ,IAAI,CAAC;AACvB,MAAI,CAAC,WAAW,IAAI,EAAG,eAAc,MAAM,IAAI,MAAM;AACvD;AAEA,SAAS,gBAAgB,MAAc,QAAuB;AAC5D,MAAI;AACF,mBAAe,IAAI;AACnB,mBAAe,MAAM,KAAK,UAAU,MAAM,IAAI,MAAM,MAAM;AAAA,EAC5D,QAAQ;AAAA,EACR;AACF;AAKA,IAAI,4BAA2C;AAC/C,IAAI,oBAAmC;AAgNhC,SAAS,+BAA+B,MAGtC;AACP,QAAM,MAAM,OAAO;AACnB,kBAAgB,sBAAsB,EAAE,KAAK,WAAW,KAAK,UAAU,CAAC,GAAG;AAAA,IACzE,MAAM;AAAA,IACN,WAAW,KAAK;AAAA,IAChB,aAAa,KAAK;AAAA,EACpB,CAA6B;AAC7B,MAAI,KAAK,cAAc,qBAAqB,GAAG;AAC7C,gCAA4B,KAAK;AAAA,EACnC;AACF;AAEO,SAAS,uBAAuB,MAG9B;AACP,QAAM,MAAM,OAAO;AACnB,kBAAgB,sBAAsB,EAAE,KAAK,WAAW,KAAK,UAAU,CAAC,GAAG;AAAA,IACzE,MAAM;AAAA,IACN,WAAW,KAAK;AAAA,IAChB,KAAK,KAAK;AAAA,EACZ,CAA6B;AAC7B,MAAI,KAAK,cAAc,qBAAqB,GAAG;AAC7C,wBAAoB,KAAK;AAAA,EAC3B;AACF;",
6
6
  "names": []
7
7
  }
@@ -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.5.8",
7
+ version: "1.5.10",
8
8
  bin: {
9
9
  pyb: "cli.js",
10
10
  "pyb-acp": "cli-acp.js"
@@ -39,6 +39,9 @@ var package_default = {
39
39
  "scripts/cli-wrapper.cjs",
40
40
  "scripts/cli-acp-wrapper.cjs",
41
41
  "scripts/postinstall.js",
42
+ "scripts/typed-sql-release-gate.mjs",
43
+ "scripts/typed-sql-install-smoke.mjs",
44
+ "scripts/typed-sql-no-fallback-gate.mjs",
42
45
  ".npmrc",
43
46
  "resources/**/*"
44
47
  ],
@@ -59,9 +62,7 @@ var package_default = {
59
62
  "test:unit": "bun test --preload ./tests/setup/native-lock-test-setup.ts tests/unit",
60
63
  "test:integration": "bun test tests/integration",
61
64
  "test:e2e": "bun test tests/e2e",
62
- "gate:auto-compact": "bun run scripts/auto-compact-gate-check.mjs",
63
65
  "gate:runtime-assets": "bun run scripts/runtime-assets-gate-check.mjs",
64
- "gate:ripgrep-layout": "node scripts/ripgrep-resource-layout-gate.mjs",
65
66
  "preflight:runtime-assets": "node scripts/runtime-assets-preflight.mjs",
66
67
  "verify:runtime-assets": "node scripts/runtime-assets-verify.mjs",
67
68
  "validate:runtime-assets-contract": "node scripts/runtime-assets-schema-validate.mjs",
@@ -69,16 +70,19 @@ var package_default = {
69
70
  "gate:runtime-assets-trend-store": "node scripts/runtime-assets-trend-store.mjs",
70
71
  "gate:runtime-assets-trend": "node scripts/runtime-assets-trend-gate.mjs",
71
72
  "report:runtime-assets-trend": "node scripts/runtime-assets-trend-report.mjs",
72
- "report:auto-compact-trend": "bun run scripts/auto-compact-trend-report.mjs",
73
+ "gate:typed-compat-retirement": "node scripts/typed-compat-retirement-gate.mjs",
74
+ "plan:typed-compat-retirement": "node scripts/typed-compat-retirement-plan.mjs",
75
+ "enforce:typed-compat-retirement": "node scripts/typed-compat-retirement-enforce.mjs",
76
+ "gate:typed-sql-release": "node scripts/typed-sql-release-gate.mjs",
77
+ "smoke:typed-sql-install": "node scripts/typed-sql-install-smoke.mjs",
78
+ "gate:typed-sql-no-fallback": "node scripts/typed-sql-no-fallback-gate.mjs",
73
79
  typecheck: "tsc --noEmit",
74
80
  prepare: "bun run scripts/install-hooks.mjs",
75
81
  "sync:native-lock": "node scripts/sync-native-lock-versions.mjs",
76
82
  "publish:native-lock": "node scripts/publish-native-lock.mjs",
77
83
  "verify:native-lock": "node scripts/verify-native-lock.mjs",
78
84
  "publish:dev": "bun run scripts/publish-dev.js",
79
- "publish:release": "bun run scripts/publish-release.js",
80
- "bench:startup": "bun run scripts/bench-startup.mjs",
81
- "parity:reference": "bun run scripts/reference-parity-check.mjs"
85
+ "publish:release": "bun run scripts/publish-release.js"
82
86
  },
83
87
  dependencies: {
84
88
  "@anthropic-ai/bedrock-sdk": "^0.12.6",
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../package.json", "../src/constants/macros.ts"],
4
+ "sourcesContent": ["{\n \"name\": \"pybao-cli\",\n \"version\": \"1.5.10\",\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 \"scripts/typed-sql-release-gate.mjs\",\n \"scripts/typed-sql-install-smoke.mjs\",\n \"scripts/typed-sql-no-fallback-gate.mjs\",\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 \"build:native-lock\": \"node scripts/build-native-lock.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 --preload ./tests/setup/native-lock-test-setup.ts tests/unit\",\n \"test:integration\": \"bun test tests/integration\",\n \"test:e2e\": \"bun test tests/e2e\",\n \"gate:runtime-assets\": \"bun run scripts/runtime-assets-gate-check.mjs\",\n \"preflight:runtime-assets\": \"node scripts/runtime-assets-preflight.mjs\",\n \"verify:runtime-assets\": \"node scripts/runtime-assets-verify.mjs\",\n \"validate:runtime-assets-contract\": \"node scripts/runtime-assets-schema-validate.mjs\",\n \"gate:runtime-assets-threshold\": \"node scripts/runtime-assets-threshold-gate.mjs\",\n \"gate:runtime-assets-trend-store\": \"node scripts/runtime-assets-trend-store.mjs\",\n \"gate:runtime-assets-trend\": \"node scripts/runtime-assets-trend-gate.mjs\",\n \"report:runtime-assets-trend\": \"node scripts/runtime-assets-trend-report.mjs\",\n \"gate:typed-compat-retirement\": \"node scripts/typed-compat-retirement-gate.mjs\",\n \"plan:typed-compat-retirement\": \"node scripts/typed-compat-retirement-plan.mjs\",\n \"enforce:typed-compat-retirement\": \"node scripts/typed-compat-retirement-enforce.mjs\",\n \"gate:typed-sql-release\": \"node scripts/typed-sql-release-gate.mjs\",\n \"smoke:typed-sql-install\": \"node scripts/typed-sql-install-smoke.mjs\",\n \"gate:typed-sql-no-fallback\": \"node scripts/typed-sql-no-fallback-gate.mjs\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepare\": \"bun run scripts/install-hooks.mjs\",\n \"sync:native-lock\": \"node scripts/sync-native-lock-versions.mjs\",\n \"publish:native-lock\": \"node scripts/publish-native-lock.mjs\",\n \"verify:native-lock\": \"node scripts/verify-native-lock.mjs\",\n \"publish:dev\": \"bun run scripts/publish-dev.js\",\n \"publish:release\": \"bun run scripts/publish-release.js\"\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 \"parse5-htmlparser2-tree-adapter\": \"6.0.1\"\n },\n \"optionalDependencies\": {\n \"@puyib-cli/lock-win32-x64-msvc\": \"1.4.55\",\n \"@puyib-cli/lock-win32-arm64-msvc\": \"1.4.56\",\n \"@puyib-cli/lock-linux-x64-gnu\": \"1.4.56\",\n \"@puyib-cli/lock-linux-x64-musl\": \"1.4.56\",\n \"@puyib-cli/lock-linux-arm64-gnu\": \"1.4.56\",\n \"@puyib-cli/lock-linux-armv7-gnueabihf\": \"1.4.56\",\n \"@puyib-cli/lock-darwin-x64\": \"1.4.56\",\n \"@puyib-cli/lock-darwin-arm64\": \"1.4.56\"\n },\n \"pybNativeLockPlatforms\": [\n \"win32-x64-msvc\",\n \"win32-arm64-msvc\",\n \"linux-x64-gnu\",\n \"linux-x64-musl\",\n \"linux-arm64-gnu\",\n \"linux-armv7-gnueabihf\",\n \"darwin-x64\",\n \"darwin-arm64\"\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
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSessionProjectDir
5
- } from "./chunk-MHFWCK5F.js";
5
+ } from "./chunk-TQTC7KJZ.js";
6
6
  import {
7
7
  isUuid
8
8
  } from "./chunk-5P7HBXTD.js";
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getGlobalConfig,
5
5
  saveGlobalConfig
6
- } from "./chunk-LNE2PRIU.js";
6
+ } from "./chunk-AO6J7LEE.js";
7
7
  import {
8
8
  debug
9
- } from "./chunk-HOBCGAUT.js";
9
+ } from "./chunk-2KTGONPT.js";
10
10
  import {
11
11
  logError
12
- } from "./chunk-DRP66QHJ.js";
12
+ } from "./chunk-7SZNDNLK.js";
13
13
 
14
14
  // src/utils/model/index.ts
15
15
  import { memoize } from "lodash-es";
@@ -5,12 +5,12 @@ import {
5
5
  } from "./chunk-BJSWTHRM.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-HOBCGAUT.js";
8
+ } from "./chunk-2KTGONPT.js";
9
9
  import {
10
10
  getCwd,
11
11
  logError,
12
12
  resolveXdgDataPath
13
- } from "./chunk-DRP66QHJ.js";
13
+ } from "./chunk-7SZNDNLK.js";
14
14
 
15
15
  // src/services/plugins/customCommands.ts
16
16
  import { existsSync, readFileSync, readdirSync, statSync } from "fs";
@@ -5,14 +5,14 @@ import {
5
5
  } from "./chunk-B6IMQJZM.js";
6
6
  import {
7
7
  loadSettingsWithLegacyFallback
8
- } from "./chunk-62CZOFWT.js";
8
+ } from "./chunk-7FGPQ22V.js";
9
9
  import {
10
10
  getSessionPlugins
11
11
  } from "./chunk-BJSWTHRM.js";
12
12
  import {
13
13
  getCwd,
14
14
  logError
15
- } from "./chunk-DRP66QHJ.js";
15
+ } from "./chunk-7SZNDNLK.js";
16
16
 
17
17
  // src/utils/session/pybHooks.ts
18
18
  import { spawn } from "child_process";
@@ -496,7 +496,7 @@ async function runPromptHook(args) {
496
496
  fallbackTimeoutMs: args.fallbackTimeoutMs
497
497
  });
498
498
  try {
499
- const { queryQuick } = await import("./llmLazy-7R7P5A3P.js");
499
+ const { queryQuick } = await import("./llmLazy-XR66QEVP.js");
500
500
  const systemPrompt = [
501
501
  "You are executing a Pyb prompt hook.",
502
502
  "Return a single JSON object only (no markdown, no prose).",
@@ -0,0 +1,78 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ logError
5
+ } from "./chunk-7SZNDNLK.js";
6
+
7
+ // src/utils/session/conversationPersistence.ts
8
+ import {
9
+ existsSync,
10
+ mkdirSync,
11
+ readFileSync,
12
+ renameSync,
13
+ unlinkSync,
14
+ writeFileSync
15
+ } from "fs";
16
+ import { join } from "path";
17
+ var PERSISTENCE_VERSION = 1;
18
+ function sanitizeSessionId(sessionId) {
19
+ return sessionId.replace(/[^a-zA-Z0-9_-]/g, "_");
20
+ }
21
+ function isValidPersistedCompletedQuery(value) {
22
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
23
+ const item = value;
24
+ return typeof item.queryId === "string" && typeof item.userMessageUUID === "string" && typeof item.userQuery === "string" && typeof item.summary === "string" && typeof item.completedAt === "number" && (item.finish === "end_turn" || item.finish === "tool_calls" || item.finish === "max_tokens" || item.finish === "pause_turn");
25
+ }
26
+ function isValidPersistedConversationState(value) {
27
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
28
+ const state = value;
29
+ return typeof state.version === "number" && typeof state.sessionId === "string" && Array.isArray(state.completedQueries) && state.completedQueries.every(isValidPersistedCompletedQuery) && typeof state.lastUpdatedAt === "number";
30
+ }
31
+ var FileSystemConversationPersistence = class {
32
+ constructor(baseDir) {
33
+ this.baseDir = baseDir;
34
+ }
35
+ getFilePath(sessionId) {
36
+ return join(this.baseDir, `${sanitizeSessionId(sessionId)}.json`);
37
+ }
38
+ saveSync(sessionId, state) {
39
+ const filePath = this.getFilePath(sessionId);
40
+ const tempPath = `${filePath}.tmp`;
41
+ try {
42
+ mkdirSync(this.baseDir, { recursive: true });
43
+ writeFileSync(tempPath, JSON.stringify(state, null, 2), "utf8");
44
+ renameSync(tempPath, filePath);
45
+ } catch (error) {
46
+ logError(error);
47
+ try {
48
+ if (existsSync(tempPath)) unlinkSync(tempPath);
49
+ } catch {
50
+ }
51
+ }
52
+ }
53
+ loadSync(sessionId) {
54
+ const filePath = this.getFilePath(sessionId);
55
+ if (!existsSync(filePath)) return null;
56
+ try {
57
+ const raw = readFileSync(filePath, "utf8");
58
+ const parsed = JSON.parse(raw);
59
+ if (!isValidPersistedConversationState(parsed)) return null;
60
+ return parsed;
61
+ } catch {
62
+ return null;
63
+ }
64
+ }
65
+ clearSync(sessionId) {
66
+ const filePath = this.getFilePath(sessionId);
67
+ try {
68
+ if (existsSync(filePath)) unlinkSync(filePath);
69
+ } catch (error) {
70
+ logError(error);
71
+ }
72
+ }
73
+ };
74
+
75
+ export {
76
+ PERSISTENCE_VERSION,
77
+ FileSystemConversationPersistence
78
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/session/conversationPersistence.ts"],
4
+ "sourcesContent": ["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"],
5
+ "mappings": ";;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,YAAY;AAGd,IAAM,sBAAsB;AAwBnC,SAAS,kBAAkB,WAA2B;AACpD,SAAO,UAAU,QAAQ,mBAAmB,GAAG;AACjD;AAEA,SAAS,+BAA+B,OAAkD;AACxF,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,OAAO;AACb,SACE,OAAO,KAAK,YAAY,YACxB,OAAO,KAAK,oBAAoB,YAChC,OAAO,KAAK,cAAc,YAC1B,OAAO,KAAK,YAAY,YACxB,OAAO,KAAK,gBAAgB,aAC3B,KAAK,WAAW,cACf,KAAK,WAAW,gBAChB,KAAK,WAAW,gBAChB,KAAK,WAAW;AAEtB;AAEA,SAAS,kCACP,OACqC;AACrC,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,QAAQ;AACd,SACE,OAAO,MAAM,YAAY,YACzB,OAAO,MAAM,cAAc,YAC3B,MAAM,QAAQ,MAAM,gBAAgB,KACpC,MAAM,iBAAiB,MAAM,8BAA8B,KAC3D,OAAO,MAAM,kBAAkB;AAEnC;AAEO,IAAM,oCAAN,MAA2E;AAAA,EAChF,YAA6B,SAAiB;AAAjB;AAAA,EAAkB;AAAA,EAEvC,YAAY,WAA2B;AAC7C,WAAO,KAAK,KAAK,SAAS,GAAG,kBAAkB,SAAS,CAAC,OAAO;AAAA,EAClE;AAAA,EAEA,SAAS,WAAmB,OAAyC;AACnE,UAAM,WAAW,KAAK,YAAY,SAAS;AAC3C,UAAM,WAAW,GAAG,QAAQ;AAC5B,QAAI;AACF,gBAAU,KAAK,SAAS,EAAE,WAAW,KAAK,CAAC;AAC3C,oBAAc,UAAU,KAAK,UAAU,OAAO,MAAM,CAAC,GAAG,MAAM;AAC9D,iBAAW,UAAU,QAAQ;AAAA,IAC/B,SAAS,OAAO;AACd,eAAS,KAAK;AACd,UAAI;AACF,YAAI,WAAW,QAAQ,EAAG,YAAW,QAAQ;AAAA,MAC/C,QAAQ;AAAA,MAAC;AAAA,IACX;AAAA,EACF;AAAA,EAEA,SAAS,WAAsD;AAC7D,UAAM,WAAW,KAAK,YAAY,SAAS;AAC3C,QAAI,CAAC,WAAW,QAAQ,EAAG,QAAO;AAClC,QAAI;AACF,YAAM,MAAM,aAAa,UAAU,MAAM;AACzC,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,UAAI,CAAC,kCAAkC,MAAM,EAAG,QAAO;AACvD,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,UAAU,WAAyB;AACjC,UAAM,WAAW,KAAK,YAAY,SAAS;AAC3C,QAAI;AACF,UAAI,WAAW,QAAQ,EAAG,YAAW,QAAQ;AAAA,IAC/C,SAAS,OAAO;AACd,eAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }