pybao-cli 1.5.23 → 1.5.25

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 (162) hide show
  1. package/dist/REPL-AWUJ6DTI.js +51 -0
  2. package/dist/{acp-5G7LPADD.js → acp-3G6FUTMV.js} +32 -31
  3. package/dist/{acp-5G7LPADD.js.map → acp-3G6FUTMV.js.map} +1 -1
  4. package/dist/{agentsValidate-BIRAVXBL.js → agentsValidate-7J62UR4G.js} +7 -7
  5. package/dist/{ask-XQZT6WIO.js → ask-DPX5KTMK.js} +31 -30
  6. package/dist/{ask-XQZT6WIO.js.map → ask-DPX5KTMK.js.map} +1 -1
  7. package/dist/{autoUpdater-DDJAJPKA.js → autoUpdater-7CK6CMUK.js} +3 -3
  8. package/dist/{chunk-XEVB4WON.js → chunk-2JSYG54Z.js} +15 -15
  9. package/dist/{chunk-GU4XA76N.js → chunk-3COHIXJE.js} +3 -3
  10. package/dist/{chunk-W7VIESST.js → chunk-3JZI3ZBU.js} +3 -3
  11. package/dist/{chunk-5B7UCAYL.js → chunk-3RKGBZUV.js} +1 -1
  12. package/dist/{chunk-ABJT5MG2.js → chunk-6PW6SJXE.js} +1 -1
  13. package/dist/{chunk-N7GEPTZB.js → chunk-6UGNUC4K.js} +3 -3
  14. package/dist/{chunk-4ZZYPG6P.js → chunk-BDHA3QOT.js} +4 -4
  15. package/dist/{chunk-MN77HNBB.js → chunk-BOOTTYGZ.js} +4 -4
  16. package/dist/{chunk-CNMNKSWQ.js → chunk-CVPWG3IX.js} +3 -3
  17. package/dist/{chunk-6QGIRDZS.js → chunk-FXUTVJRS.js} +1 -1
  18. package/dist/{chunk-2GHNW642.js → chunk-HL6ARNBJ.js} +1 -1
  19. package/dist/{chunk-MMW6MLFR.js → chunk-HSAO34GP.js} +2 -2
  20. package/dist/{chunk-KQZAS4DO.js → chunk-I377E5OW.js} +17 -25
  21. package/dist/chunk-I377E5OW.js.map +7 -0
  22. package/dist/{chunk-QSMZLK7K.js → chunk-IBRK4QMC.js} +3 -3
  23. package/dist/{chunk-2SVUNNJB.js → chunk-K3DSRWYV.js} +2 -2
  24. package/dist/chunk-KFEHHKZ2.js +145 -0
  25. package/dist/chunk-KFEHHKZ2.js.map +7 -0
  26. package/dist/{chunk-76BOJQUE.js → chunk-KNPPPVBG.js} +1 -1
  27. package/dist/{chunk-7SYDIES4.js → chunk-KP3LQCMR.js} +5 -1
  28. package/dist/chunk-KP3LQCMR.js.map +7 -0
  29. package/dist/{chunk-V22PQM4W.js → chunk-LGQJPZKC.js} +3 -3
  30. package/dist/{chunk-S65MIABQ.js → chunk-NSPYODPF.js} +4 -4
  31. package/dist/{chunk-A6QEPK5J.js → chunk-OZBYDL7N.js} +2 -2
  32. package/dist/{chunk-C2GNLGBM.js → chunk-RBLKS6FX.js} +1 -1
  33. package/dist/{chunk-G5MP72ZL.js → chunk-RVTZE6UF.js} +181 -15
  34. package/dist/chunk-RVTZE6UF.js.map +7 -0
  35. package/dist/{chunk-M7FEUIHO.js → chunk-SAVBIJ5O.js} +2 -2
  36. package/dist/{chunk-CT7LWVB7.js → chunk-SVRRQBLT.js} +1 -1
  37. package/dist/{chunk-VVXC3SNP.js → chunk-THSULC47.js} +35 -167
  38. package/dist/chunk-THSULC47.js.map +7 -0
  39. package/dist/{chunk-PUPDIRI6.js → chunk-TO2NPV6U.js} +2 -2
  40. package/dist/{chunk-652OMXEE.js → chunk-V4UJI656.js} +2 -2
  41. package/dist/{chunk-QCI5HPTA.js → chunk-VGFXCETY.js} +1 -1
  42. package/dist/{chunk-ZB3ZWD2K.js → chunk-VJFKQQTV.js} +2 -2
  43. package/dist/{chunk-ZB3ZWD2K.js.map → chunk-VJFKQQTV.js.map} +2 -2
  44. package/dist/{chunk-O7LWCCRJ.js → chunk-WIQFF44D.js} +3 -3
  45. package/dist/{chunk-LBDLSBXN.js → chunk-WLEPTDKU.js} +1 -1
  46. package/dist/{chunk-3CC7QXCN.js → chunk-Z75SOPJ5.js} +165 -40
  47. package/dist/{chunk-3CC7QXCN.js.map → chunk-Z75SOPJ5.js.map} +3 -3
  48. package/dist/{cli-YIANCHDD.js → cli-2DWH2RIO.js} +92 -91
  49. package/dist/{cli-YIANCHDD.js.map → cli-2DWH2RIO.js.map} +1 -1
  50. package/dist/commands-OXOLWX75.js +55 -0
  51. package/dist/{config-QVH3VNUQ.js → config-MDAX3T7G.js} +4 -4
  52. package/dist/{context-5VXEWH3G.js → context-S4ASBZ3O.js} +7 -6
  53. package/dist/{conversationPersistence-INUNJHOV.js → conversationPersistence-WIBFJR62.js} +3 -3
  54. package/dist/{conversationTracker-H25IOHBE.js → conversationTracker-X53D6RLQ.js} +4 -4
  55. package/dist/{customCommands-7RZHKH2K.js → customCommands-S3CSA3GB.js} +4 -4
  56. package/dist/{env-DPJTGHMP.js → env-P2GOYAXV.js} +2 -2
  57. package/dist/{file-D7W2FBZP.js → file-HUPYIU7Y.js} +4 -4
  58. package/dist/index.js +3 -3
  59. package/dist/{llm-TOU5REY5.js → llm-KOMOHPJY.js} +108 -39
  60. package/dist/llm-KOMOHPJY.js.map +7 -0
  61. package/dist/{llmLazy-HSKKIGLC.js → llmLazy-MXAQT2DG.js} +1 -1
  62. package/dist/{loader-YUP6OJTJ.js → loader-CFPDXJTQ.js} +4 -4
  63. package/dist/{lsp-7QKC4DVK.js → lsp-XR7JCI4Q.js} +6 -6
  64. package/dist/{lspAnchor-LCRZ23GA.js → lspAnchor-CY46EOLW.js} +6 -6
  65. package/dist/{mcp-KK6BOD6I.js → mcp-MACS532E.js} +7 -7
  66. package/dist/{mentionProcessor-V6JH6HUD.js → mentionProcessor-WT7DIUO6.js} +5 -5
  67. package/dist/{messages-7NVTXWIJ.js → messages-TQAKPPWM.js} +1 -1
  68. package/dist/{model-QSDSUJDB.js → model-R7YMMBAR.js} +5 -5
  69. package/dist/{openai-JC3KJN3H.js → openai-BISFRGPN.js} +5 -5
  70. package/dist/{outputStyles-TPH3CCB4.js → outputStyles-HLA3OEH2.js} +4 -4
  71. package/dist/{pluginRuntime-7EK4LQDD.js → pluginRuntime-LD6VPBWN.js} +6 -6
  72. package/dist/{pluginValidation-BJWCS55I.js → pluginValidation-MQFVM3M5.js} +6 -6
  73. package/dist/prompts-BFS3LOCS.js +57 -0
  74. package/dist/{pybAgentSessionLoad-V3IAJJPS.js → pybAgentSessionLoad-BQJ2JPPT.js} +5 -4
  75. package/dist/{pybAgentSessionResume-WE7ET356.js → pybAgentSessionResume-BBX6KVFN.js} +5 -4
  76. package/dist/{pybAgentStreamJsonSession-VWDYV4XL.js → pybAgentStreamJsonSession-N2AYCHRN.js} +1 -1
  77. package/dist/{pybHooks-UV7BTIVT.js → pybHooks-U4ATAT57.js} +4 -4
  78. package/dist/query-PZKEVMJY.js +55 -0
  79. package/dist/{registry-FK6UGJPV.js → registry-G2FLVWSF.js} +5 -5
  80. package/dist/{ripgrep-CXJ4DFPU.js → ripgrep-NPYGQPV3.js} +3 -3
  81. package/dist/{skillMarketplace-QUJXDKZK.js → skillMarketplace-H5P3PRHJ.js} +3 -3
  82. package/dist/{state-GC3XELIE.js → state-RM2QGI3K.js} +2 -2
  83. package/dist/{theme-24PLJSPD.js → theme-6GGT3D7J.js} +5 -5
  84. package/dist/{toolPermissionSettings-S6NJPBKT.js → toolPermissionSettings-IC6ELOVR.js} +6 -6
  85. package/dist/tools-F4GLOVTV.js +56 -0
  86. package/dist/{userInput-4VZSNII7.js → userInput-O26M5EYX.js} +33 -32
  87. package/dist/{userInput-4VZSNII7.js.map → userInput-O26M5EYX.js.map} +1 -1
  88. package/package.json +5 -1
  89. package/scripts/protected-tool-names-gate.mjs +102 -0
  90. package/scripts/session-project-gate.mjs +95 -0
  91. package/dist/REPL-CI5ET6VF.js +0 -50
  92. package/dist/chunk-7SYDIES4.js.map +0 -7
  93. package/dist/chunk-G5MP72ZL.js.map +0 -7
  94. package/dist/chunk-KQZAS4DO.js.map +0 -7
  95. package/dist/chunk-VVXC3SNP.js.map +0 -7
  96. package/dist/commands-4YMZW52K.js +0 -54
  97. package/dist/llm-TOU5REY5.js.map +0 -7
  98. package/dist/prompts-KQNPPEOG.js +0 -56
  99. package/dist/query-KAZY5LOW.js +0 -54
  100. package/dist/tools-NC5R4I6F.js +0 -55
  101. /package/dist/{REPL-CI5ET6VF.js.map → REPL-AWUJ6DTI.js.map} +0 -0
  102. /package/dist/{agentsValidate-BIRAVXBL.js.map → agentsValidate-7J62UR4G.js.map} +0 -0
  103. /package/dist/{autoUpdater-DDJAJPKA.js.map → autoUpdater-7CK6CMUK.js.map} +0 -0
  104. /package/dist/{chunk-XEVB4WON.js.map → chunk-2JSYG54Z.js.map} +0 -0
  105. /package/dist/{chunk-GU4XA76N.js.map → chunk-3COHIXJE.js.map} +0 -0
  106. /package/dist/{chunk-W7VIESST.js.map → chunk-3JZI3ZBU.js.map} +0 -0
  107. /package/dist/{chunk-5B7UCAYL.js.map → chunk-3RKGBZUV.js.map} +0 -0
  108. /package/dist/{chunk-ABJT5MG2.js.map → chunk-6PW6SJXE.js.map} +0 -0
  109. /package/dist/{chunk-N7GEPTZB.js.map → chunk-6UGNUC4K.js.map} +0 -0
  110. /package/dist/{chunk-4ZZYPG6P.js.map → chunk-BDHA3QOT.js.map} +0 -0
  111. /package/dist/{chunk-MN77HNBB.js.map → chunk-BOOTTYGZ.js.map} +0 -0
  112. /package/dist/{chunk-CNMNKSWQ.js.map → chunk-CVPWG3IX.js.map} +0 -0
  113. /package/dist/{chunk-6QGIRDZS.js.map → chunk-FXUTVJRS.js.map} +0 -0
  114. /package/dist/{chunk-2GHNW642.js.map → chunk-HL6ARNBJ.js.map} +0 -0
  115. /package/dist/{chunk-MMW6MLFR.js.map → chunk-HSAO34GP.js.map} +0 -0
  116. /package/dist/{chunk-QSMZLK7K.js.map → chunk-IBRK4QMC.js.map} +0 -0
  117. /package/dist/{chunk-2SVUNNJB.js.map → chunk-K3DSRWYV.js.map} +0 -0
  118. /package/dist/{chunk-76BOJQUE.js.map → chunk-KNPPPVBG.js.map} +0 -0
  119. /package/dist/{chunk-V22PQM4W.js.map → chunk-LGQJPZKC.js.map} +0 -0
  120. /package/dist/{chunk-S65MIABQ.js.map → chunk-NSPYODPF.js.map} +0 -0
  121. /package/dist/{chunk-A6QEPK5J.js.map → chunk-OZBYDL7N.js.map} +0 -0
  122. /package/dist/{chunk-C2GNLGBM.js.map → chunk-RBLKS6FX.js.map} +0 -0
  123. /package/dist/{chunk-M7FEUIHO.js.map → chunk-SAVBIJ5O.js.map} +0 -0
  124. /package/dist/{chunk-CT7LWVB7.js.map → chunk-SVRRQBLT.js.map} +0 -0
  125. /package/dist/{chunk-PUPDIRI6.js.map → chunk-TO2NPV6U.js.map} +0 -0
  126. /package/dist/{chunk-652OMXEE.js.map → chunk-V4UJI656.js.map} +0 -0
  127. /package/dist/{chunk-QCI5HPTA.js.map → chunk-VGFXCETY.js.map} +0 -0
  128. /package/dist/{chunk-O7LWCCRJ.js.map → chunk-WIQFF44D.js.map} +0 -0
  129. /package/dist/{chunk-LBDLSBXN.js.map → chunk-WLEPTDKU.js.map} +0 -0
  130. /package/dist/{commands-4YMZW52K.js.map → commands-OXOLWX75.js.map} +0 -0
  131. /package/dist/{config-QVH3VNUQ.js.map → config-MDAX3T7G.js.map} +0 -0
  132. /package/dist/{context-5VXEWH3G.js.map → context-S4ASBZ3O.js.map} +0 -0
  133. /package/dist/{conversationPersistence-INUNJHOV.js.map → conversationPersistence-WIBFJR62.js.map} +0 -0
  134. /package/dist/{conversationTracker-H25IOHBE.js.map → conversationTracker-X53D6RLQ.js.map} +0 -0
  135. /package/dist/{customCommands-7RZHKH2K.js.map → customCommands-S3CSA3GB.js.map} +0 -0
  136. /package/dist/{env-DPJTGHMP.js.map → env-P2GOYAXV.js.map} +0 -0
  137. /package/dist/{file-D7W2FBZP.js.map → file-HUPYIU7Y.js.map} +0 -0
  138. /package/dist/{llmLazy-HSKKIGLC.js.map → llmLazy-MXAQT2DG.js.map} +0 -0
  139. /package/dist/{loader-YUP6OJTJ.js.map → loader-CFPDXJTQ.js.map} +0 -0
  140. /package/dist/{lsp-7QKC4DVK.js.map → lsp-XR7JCI4Q.js.map} +0 -0
  141. /package/dist/{lspAnchor-LCRZ23GA.js.map → lspAnchor-CY46EOLW.js.map} +0 -0
  142. /package/dist/{mcp-KK6BOD6I.js.map → mcp-MACS532E.js.map} +0 -0
  143. /package/dist/{mentionProcessor-V6JH6HUD.js.map → mentionProcessor-WT7DIUO6.js.map} +0 -0
  144. /package/dist/{messages-7NVTXWIJ.js.map → messages-TQAKPPWM.js.map} +0 -0
  145. /package/dist/{model-QSDSUJDB.js.map → model-R7YMMBAR.js.map} +0 -0
  146. /package/dist/{openai-JC3KJN3H.js.map → openai-BISFRGPN.js.map} +0 -0
  147. /package/dist/{outputStyles-TPH3CCB4.js.map → outputStyles-HLA3OEH2.js.map} +0 -0
  148. /package/dist/{pluginRuntime-7EK4LQDD.js.map → pluginRuntime-LD6VPBWN.js.map} +0 -0
  149. /package/dist/{pluginValidation-BJWCS55I.js.map → pluginValidation-MQFVM3M5.js.map} +0 -0
  150. /package/dist/{prompts-KQNPPEOG.js.map → prompts-BFS3LOCS.js.map} +0 -0
  151. /package/dist/{pybAgentSessionLoad-V3IAJJPS.js.map → pybAgentSessionLoad-BQJ2JPPT.js.map} +0 -0
  152. /package/dist/{pybAgentSessionResume-WE7ET356.js.map → pybAgentSessionResume-BBX6KVFN.js.map} +0 -0
  153. /package/dist/{pybAgentStreamJsonSession-VWDYV4XL.js.map → pybAgentStreamJsonSession-N2AYCHRN.js.map} +0 -0
  154. /package/dist/{pybHooks-UV7BTIVT.js.map → pybHooks-U4ATAT57.js.map} +0 -0
  155. /package/dist/{query-KAZY5LOW.js.map → query-PZKEVMJY.js.map} +0 -0
  156. /package/dist/{registry-FK6UGJPV.js.map → registry-G2FLVWSF.js.map} +0 -0
  157. /package/dist/{ripgrep-CXJ4DFPU.js.map → ripgrep-NPYGQPV3.js.map} +0 -0
  158. /package/dist/{skillMarketplace-QUJXDKZK.js.map → skillMarketplace-H5P3PRHJ.js.map} +0 -0
  159. /package/dist/{state-GC3XELIE.js.map → state-RM2QGI3K.js.map} +0 -0
  160. /package/dist/{theme-24PLJSPD.js.map → theme-6GGT3D7J.js.map} +0 -0
  161. /package/dist/{toolPermissionSettings-S6NJPBKT.js.map → toolPermissionSettings-IC6ELOVR.js.map} +0 -0
  162. /package/dist/{tools-NC5R4I6F.js.map → tools-F4GLOVTV.js.map} +0 -0
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/messages/userInput.tsx"],
4
4
  "sourcesContent": ["import { Box } from 'ink'\nimport { getCommand, hasCommand } from '@commands'\nimport { MalformedCommandError } from '@utils/text/errors'\nimport { logError } from '@utils/log'\nimport { resolve } from 'path'\nimport { lastX } from '@utils/text/generators'\nimport type { SetToolJSXFn, ToolUseContext } from '@tool'\nimport type { ContentBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport { setCwd } from '@utils/state'\nimport { getCwd } from '@utils/state'\nimport chalk from 'chalk'\nimport * as React from 'react'\nimport { UserBashInputMessage } from '@components/messages/UserBashInputMessage'\nimport { Spinner } from '@components/Spinner'\nimport { BashTool } from '@tools/BashTool/BashTool'\nimport type { Message, UserMessage } from '@query'\nimport {\n NO_RESPONSE_REQUESTED,\n createAssistantMessage,\n createUserMessageFromText,\n createUserMessageFromBlocks,\n createUserTurnMessageFromText,\n createUserTurnMessageFromBlocks,\n} from './core'\n\nconst LOCAL_COMMAND_STDOUT_OPEN_TAG = ['<local-command-', 'stdout>'].join('')\nconst LOCAL_COMMAND_STDOUT_CLOSE_TAG = ['</local-command-', 'stdout>'].join('')\nconst LOCAL_COMMAND_STDERR_OPEN_TAG = ['<local-command-', 'stderr>'].join('')\nconst LOCAL_COMMAND_STDERR_CLOSE_TAG = ['</local-command-', 'stderr>'].join('')\n\n\nexport async function processUserInput(\n input: string,\n mode: 'bash' | 'prompt' | 'pyb',\n setToolJSX: SetToolJSXFn,\n context: ToolUseContext & {\n setForkConvoWithMessagesOnTheNextRender: (\n forkConvoWithMessages: Message[],\n ) => void\n options?: {\n isPybRequest?: boolean\n pybContext?: string\n }\n },\n pastedImages: Array<{\n placeholder: string\n data: string\n mediaType: string\n }> | null,\n): Promise<Message[]> {\n if (mode === 'bash') {\n const userMessage = createUserTurnMessageFromBlocks([\n { type: 'text', text: `<bash-input>${input}</bash-input>` },\n ])\n\n if (input.startsWith('cd ')) {\n const oldCwd = getCwd()\n const newCwd = resolve(getCwd(), input.slice(3).trim())\n try {\n await setCwd(newCwd)\n return [\n userMessage,\n createAssistantMessage(\n `<bash-stdout>Changed directory to ${chalk.bold(`${newCwd}/`)}</bash-stdout>`,\n ),\n ]\n } catch (e) {\n logError(e)\n return [\n userMessage,\n createAssistantMessage(\n `<bash-stderr>cwd error: ${e instanceof Error ? e.message : String(e)}</bash-stderr>`,\n ),\n ]\n }\n }\n\n setToolJSX({\n jsx: (\n <Box flexDirection=\"column\" marginTop={1}>\n <UserBashInputMessage\n addMargin={false}\n param={{ text: `<bash-input>${input}</bash-input>`, type: 'text' }}\n />\n <Spinner />\n </Box>\n ),\n shouldHidePromptInput: false,\n })\n try {\n const validationResult = await BashTool.validateInput(\n { command: input },\n { commandSource: 'user_bash_mode' } as any,\n )\n if (!validationResult.result) {\n return [userMessage, createAssistantMessage(validationResult.message)]\n }\n const { data } = await lastX(\n BashTool.call({ command: input }, {\n ...(context as any),\n commandSource: 'user_bash_mode',\n } as any),\n )\n return [\n userMessage,\n createAssistantMessage(\n `<bash-stdout>${data.stdout}</bash-stdout><bash-stderr>${data.stderr}</bash-stderr>`,\n ),\n ]\n } catch (e) {\n return [\n userMessage,\n createAssistantMessage(\n `<bash-stderr>Command failed: ${e instanceof Error ? e.message : String(e)}</bash-stderr>`,\n ),\n ]\n } finally {\n setToolJSX(null)\n }\n }\n else if (mode === 'pyb') {\n const userMessage = createUserTurnMessageFromBlocks([\n {\n type: 'text',\n text: `<pyb-input>${input}</pyb-input>`,\n },\n ])\n userMessage.options = {\n ...userMessage.options,\n isPybRequest: true,\n }\n\n return [userMessage]\n }\n\n if (context.options?.disableSlashCommands !== true && input.startsWith('/')) {\n const words = input.slice(1).split(' ')\n let commandName = words[0]\n if (words.length > 1 && words[1] === '(MCP)') {\n commandName = commandName + ' (MCP)'\n }\n if (!commandName) {\n return [\n createAssistantMessage('Commands are in the form `/command [args]`'),\n ]\n }\n\n if (!hasCommand(commandName, context.options.commands)) {\n\n return [createUserTurnMessageFromText(input)]\n }\n\n const args = input.slice(commandName.length + 2)\n const newMessages = await getMessagesForSlashCommand(\n commandName,\n args,\n setToolJSX,\n context,\n )\n\n if (newMessages.length === 0) {\n return []\n }\n\n if (\n newMessages.length === 2 &&\n newMessages[0]!.type === 'user' &&\n newMessages[1]!.type === 'assistant' &&\n typeof newMessages[1]!.message.content === 'string' &&\n newMessages[1]!.message.content.startsWith('Unknown command:')\n ) {\n return newMessages\n }\n\n if (newMessages.length === 2) {\n return newMessages\n }\n\n\n return newMessages\n }\n\n\n const isPybRequest = context.options?.isPybRequest === true\n const pybContextInfo = context.options?.pybContext\n\n let userMessage: UserMessage\n\n let processedInput =\n isPybRequest && pybContextInfo\n ? `${pybContextInfo}\\n\\n${input}`\n : input\n\n if (processedInput.includes('!`') || processedInput.includes('@')) {\n try {\n const { executeBashCommands } = await import('@services/customCommands')\n\n if (processedInput.includes('!`')) {\n processedInput = await executeBashCommands(processedInput)\n }\n\n if (processedInput.includes('@')) {\n const { processMentions } = await import('@services/mentionProcessor')\n await processMentions(processedInput)\n }\n } catch (error) {\n logError(error)\n }\n }\n\n if (pastedImages && pastedImages.length > 0) {\n const occurrences = pastedImages\n .map(img => ({ img, index: processedInput.indexOf(img.placeholder) }))\n .filter(o => o.index >= 0)\n .sort((a, b) => a.index - b.index)\n\n const blocks: ContentBlockParam[] = []\n let cursor = 0\n\n for (const { img, index } of occurrences) {\n const before = processedInput.slice(cursor, index)\n if (before) {\n blocks.push({ type: 'text', text: before })\n }\n blocks.push({\n type: 'image',\n source: {\n type: 'base64',\n media_type: img.mediaType,\n data: img.data,\n },\n } as any)\n cursor = index + img.placeholder.length\n }\n\n const after = processedInput.slice(cursor)\n if (after) {\n blocks.push({ type: 'text', text: after })\n }\n\n if (!blocks.some(b => b.type === 'text')) {\n blocks.push({ type: 'text', text: '' })\n }\n\n userMessage = createUserTurnMessageFromBlocks(blocks)\n } else {\n userMessage = createUserTurnMessageFromText(processedInput)\n }\n\n if (isPybRequest) {\n userMessage.options = {\n ...userMessage.options,\n isPybRequest: true,\n }\n }\n\n return [userMessage]\n}\n\nasync function getMessagesForSlashCommand(\n commandName: string,\n args: string,\n setToolJSX: SetToolJSXFn,\n context: ToolUseContext & {\n setForkConvoWithMessagesOnTheNextRender: (\n forkConvoWithMessages: Message[],\n ) => void\n },\n): Promise<Message[]> {\n try {\n const command = getCommand(commandName, context.options.commands)\n switch (command.type) {\n case 'local-jsx': {\n return new Promise(resolve => {\n command\n .call(\n r => {\n setToolJSX(null)\n resolve([\n createUserMessageFromBlocks([\n {\n type: 'text',\n text: `<command-name>${command.userFacingName()}</command-name>\n <command-message>${command.userFacingName()}</command-message>\n <command-args>${args}</command-args>`,\n },\n ]),\n r\n ? createAssistantMessage(r)\n : createAssistantMessage(NO_RESPONSE_REQUESTED),\n ])\n },\n context,\n args,\n )\n .then(jsx => {\n if (!jsx) return\n setToolJSX({ jsx, shouldHidePromptInput: true })\n })\n })\n }\n case 'local': {\n const userMessage = createUserMessageFromBlocks([\n {\n type: 'text',\n text: `<command-name>${command.userFacingName()}</command-name>\n <command-message>${command.userFacingName()}</command-message>\n <command-args>${args}</command-args>`,\n },\n ])\n\n try {\n const result = await command.call(args, {\n ...context,\n options: {\n commands: context.options.commands || [],\n tools: context.options.tools || [],\n slowAndCapableModel:\n context.options.slowAndCapableModel || 'main',\n },\n })\n\n return [\n userMessage,\n createAssistantMessage(\n `${LOCAL_COMMAND_STDOUT_OPEN_TAG}${result}${LOCAL_COMMAND_STDOUT_CLOSE_TAG}`,\n ),\n ]\n } catch (e) {\n logError(e)\n return [\n userMessage,\n createAssistantMessage(\n `${LOCAL_COMMAND_STDERR_OPEN_TAG}${String(e)}${LOCAL_COMMAND_STDERR_CLOSE_TAG}`,\n ),\n ]\n }\n }\n case 'prompt': {\n const commandName = command.userFacingName()\n const progressMessage = (command as any).progressMessage || 'running'\n const metaMessage = createUserMessageFromBlocks([\n {\n type: 'text',\n text: `<command-name>${commandName}</command-name>\n <command-message>${commandName} is ${progressMessage}\u2026</command-message>\n <command-args>${args}</command-args>`,\n },\n ])\n\n const prompt = await command.getPromptForCommand(args)\n const expandedMessages = prompt.map(msg => {\n const userMessage = createUserMessageFromText(\n typeof msg.content === 'string'\n ? msg.content\n : msg.content\n .map(block => (block.type === 'text' ? block.text : ''))\n .join('\\n'),\n )\n\n userMessage.options = {\n ...userMessage.options,\n isCustomCommand: true,\n commandName: command.userFacingName(),\n commandArgs: args,\n }\n\n return userMessage\n })\n\n return [metaMessage, ...expandedMessages]\n }\n }\n } catch (e) {\n if (e instanceof MalformedCommandError) {\n return [createAssistantMessage(e.message)]\n }\n throw e\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,WAAW;AAIpB,SAAS,eAAe;AAMxB,OAAO,WAAW;AAClB,YAAY,WAAW;AAcvB,IAAM,gCAAgC,CAAC,mBAAmB,SAAS,EAAE,KAAK,EAAE;AAC5E,IAAM,iCAAiC,CAAC,oBAAoB,SAAS,EAAE,KAAK,EAAE;AAC9E,IAAM,gCAAgC,CAAC,mBAAmB,SAAS,EAAE,KAAK,EAAE;AAC5E,IAAM,iCAAiC,CAAC,oBAAoB,SAAS,EAAE,KAAK,EAAE;AAG9E,eAAsB,iBACpB,OACA,MACA,YACA,SASA,cAKoB;AACpB,MAAI,SAAS,QAAQ;AACnB,UAAMA,eAAc,gCAAgC;AAAA,MAClD,EAAE,MAAM,QAAQ,MAAM,eAAe,KAAK,gBAAgB;AAAA,IAC5D,CAAC;AAED,QAAI,MAAM,WAAW,KAAK,GAAG;AAC3B,YAAM,SAAS,OAAO;AACtB,YAAM,SAAS,QAAQ,OAAO,GAAG,MAAM,MAAM,CAAC,EAAE,KAAK,CAAC;AACtD,UAAI;AACF,cAAM,OAAO,MAAM;AACnB,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,YACE,qCAAqC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC;AAAA,UAC/D;AAAA,QACF;AAAA,MACF,SAAS,GAAG;AACV,iBAAS,CAAC;AACV,eAAO;AAAA,UACLA;AAAA,UACA;AAAA,YACE,2BAA2B,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,UACvE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,eAAW;AAAA,MACT,KACE,oCAAC,OAAI,eAAc,UAAS,WAAW,KACrC;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,OAAO,EAAE,MAAM,eAAe,KAAK,iBAAiB,MAAM,OAAO;AAAA;AAAA,MACnE,GACA,oCAAC,aAAQ,CACX;AAAA,MAEF,uBAAuB;AAAA,IACzB,CAAC;AACD,QAAI;AACF,YAAM,mBAAmB,MAAM,SAAS;AAAA,QACtC,EAAE,SAAS,MAAM;AAAA,QACjB,EAAE,eAAe,iBAAiB;AAAA,MACpC;AACA,UAAI,CAAC,iBAAiB,QAAQ;AAC5B,eAAO,CAACA,cAAa,uBAAuB,iBAAiB,OAAO,CAAC;AAAA,MACvE;AACA,YAAM,EAAE,KAAK,IAAI,MAAM;AAAA,QACrB,SAAS,KAAK,EAAE,SAAS,MAAM,GAAG;AAAA,UAChC,GAAI;AAAA,UACJ,eAAe;AAAA,QACjB,CAAQ;AAAA,MACV;AACA,aAAO;AAAA,QACLA;AAAA,QACA;AAAA,UACE,gBAAgB,KAAK,MAAM,8BAA8B,KAAK,MAAM;AAAA,QACtE;AAAA,MACF;AAAA,IACF,SAAS,GAAG;AACV,aAAO;AAAA,QACLA;AAAA,QACA;AAAA,UACE,gCAAgC,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,QAC5E;AAAA,MACF;AAAA,IACF,UAAE;AACA,iBAAW,IAAI;AAAA,IACjB;AAAA,EACF,WACS,SAAS,OAAO;AACvB,UAAMA,eAAc,gCAAgC;AAAA,MAClD;AAAA,QACE,MAAM;AAAA,QACN,MAAM,cAAc,KAAK;AAAA,MAC3B;AAAA,IACF,CAAC;AACD,IAAAA,aAAY,UAAU;AAAA,MACpB,GAAGA,aAAY;AAAA,MACf,cAAc;AAAA,IAChB;AAEA,WAAO,CAACA,YAAW;AAAA,EACrB;AAEA,MAAI,QAAQ,SAAS,yBAAyB,QAAQ,MAAM,WAAW,GAAG,GAAG;AAC3E,UAAM,QAAQ,MAAM,MAAM,CAAC,EAAE,MAAM,GAAG;AACtC,QAAI,cAAc,MAAM,CAAC;AACzB,QAAI,MAAM,SAAS,KAAK,MAAM,CAAC,MAAM,SAAS;AAC5C,oBAAc,cAAc;AAAA,IAC9B;AACA,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,QACL,uBAAuB,4CAA4C;AAAA,MACrE;AAAA,IACF;AAEA,QAAI,CAAC,WAAW,aAAa,QAAQ,QAAQ,QAAQ,GAAG;AAEtD,aAAO,CAAC,8BAA8B,KAAK,CAAC;AAAA,IAC9C;AAEA,UAAM,OAAO,MAAM,MAAM,YAAY,SAAS,CAAC;AAC/C,UAAM,cAAc,MAAM;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,YAAY,WAAW,GAAG;AAC5B,aAAO,CAAC;AAAA,IACV;AAEA,QACE,YAAY,WAAW,KACvB,YAAY,CAAC,EAAG,SAAS,UACzB,YAAY,CAAC,EAAG,SAAS,eACzB,OAAO,YAAY,CAAC,EAAG,QAAQ,YAAY,YAC3C,YAAY,CAAC,EAAG,QAAQ,QAAQ,WAAW,kBAAkB,GAC7D;AACA,aAAO;AAAA,IACT;AAEA,QAAI,YAAY,WAAW,GAAG;AAC5B,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT;AAGA,QAAM,eAAe,QAAQ,SAAS,iBAAiB;AACvD,QAAM,iBAAiB,QAAQ,SAAS;AAExC,MAAI;AAEJ,MAAI,iBACF,gBAAgB,iBACZ,GAAG,cAAc;AAAA;AAAA,EAAO,KAAK,KAC7B;AAEN,MAAI,eAAe,SAAS,IAAI,KAAK,eAAe,SAAS,GAAG,GAAG;AACjE,QAAI;AACF,YAAM,EAAE,oBAAoB,IAAI,MAAM,OAAO,8BAA0B;AAEvE,UAAI,eAAe,SAAS,IAAI,GAAG;AACjC,yBAAiB,MAAM,oBAAoB,cAAc;AAAA,MAC3D;AAEA,UAAI,eAAe,SAAS,GAAG,GAAG;AAChC,cAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,gCAA4B;AACrE,cAAM,gBAAgB,cAAc;AAAA,MACtC;AAAA,IACF,SAAS,OAAO;AACd,eAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,gBAAgB,aAAa,SAAS,GAAG;AAC3C,UAAM,cAAc,aACjB,IAAI,UAAQ,EAAE,KAAK,OAAO,eAAe,QAAQ,IAAI,WAAW,EAAE,EAAE,EACpE,OAAO,OAAK,EAAE,SAAS,CAAC,EACxB,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAEnC,UAAM,SAA8B,CAAC;AACrC,QAAI,SAAS;AAEb,eAAW,EAAE,KAAK,MAAM,KAAK,aAAa;AACxC,YAAM,SAAS,eAAe,MAAM,QAAQ,KAAK;AACjD,UAAI,QAAQ;AACV,eAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,OAAO,CAAC;AAAA,MAC5C;AACA,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,YAAY,IAAI;AAAA,UAChB,MAAM,IAAI;AAAA,QACZ;AAAA,MACF,CAAQ;AACR,eAAS,QAAQ,IAAI,YAAY;AAAA,IACnC;AAEA,UAAM,QAAQ,eAAe,MAAM,MAAM;AACzC,QAAI,OAAO;AACT,aAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,IAC3C;AAEA,QAAI,CAAC,OAAO,KAAK,OAAK,EAAE,SAAS,MAAM,GAAG;AACxC,aAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,GAAG,CAAC;AAAA,IACxC;AAEA,kBAAc,gCAAgC,MAAM;AAAA,EACtD,OAAO;AACL,kBAAc,8BAA8B,cAAc;AAAA,EAC5D;AAEA,MAAI,cAAc;AAChB,gBAAY,UAAU;AAAA,MACpB,GAAG,YAAY;AAAA,MACf,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO,CAAC,WAAW;AACrB;AAEA,eAAe,2BACb,aACA,MACA,YACA,SAKoB;AACpB,MAAI;AACF,UAAM,UAAU,WAAW,aAAa,QAAQ,QAAQ,QAAQ;AAChE,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK,aAAa;AAChB,eAAO,IAAI,QAAQ,CAAAC,aAAW;AAC5B,kBACG;AAAA,YACC,OAAK;AACH,yBAAW,IAAI;AACf,cAAAA,SAAQ;AAAA,gBACN,4BAA4B;AAAA,kBAC1B;AAAA,oBACE,MAAM;AAAA,oBACN,MAAM,iBAAiB,QAAQ,eAAe,CAAC;AAAA,6BACxC,QAAQ,eAAe,CAAC;AAAA,0BAC3B,IAAI;AAAA,kBACV;AAAA,gBACF,CAAC;AAAA,gBACD,IACI,uBAAuB,CAAC,IACxB,uBAAuB,qBAAqB;AAAA,cAClD,CAAC;AAAA,YACH;AAAA,YACA;AAAA,YACA;AAAA,UACF,EACC,KAAK,SAAO;AACX,gBAAI,CAAC,IAAK;AACV,uBAAW,EAAE,KAAK,uBAAuB,KAAK,CAAC;AAAA,UACjD,CAAC;AAAA,QACL,CAAC;AAAA,MACH;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,cAAc,4BAA4B;AAAA,UAC9C;AAAA,YACE,MAAM;AAAA,YACN,MAAM,iBAAiB,QAAQ,eAAe,CAAC;AAAA,2BAChC,QAAQ,eAAe,CAAC;AAAA,wBAC3B,IAAI;AAAA,UAClB;AAAA,QACF,CAAC;AAED,YAAI;AACF,gBAAM,SAAS,MAAM,QAAQ,KAAK,MAAM;AAAA,YACtC,GAAG;AAAA,YACH,SAAS;AAAA,cACP,UAAU,QAAQ,QAAQ,YAAY,CAAC;AAAA,cACvC,OAAO,QAAQ,QAAQ,SAAS,CAAC;AAAA,cACjC,qBACE,QAAQ,QAAQ,uBAAuB;AAAA,YAC3C;AAAA,UACF,CAAC;AAED,iBAAO;AAAA,YACL;AAAA,YACA;AAAA,cACE,GAAG,6BAA6B,GAAG,MAAM,GAAG,8BAA8B;AAAA,YAC5E;AAAA,UACF;AAAA,QACF,SAAS,GAAG;AACV,mBAAS,CAAC;AACV,iBAAO;AAAA,YACL;AAAA,YACA;AAAA,cACE,GAAG,6BAA6B,GAAG,OAAO,CAAC,CAAC,GAAG,8BAA8B;AAAA,YAC/E;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AACb,cAAMC,eAAc,QAAQ,eAAe;AAC3C,cAAM,kBAAmB,QAAgB,mBAAmB;AAC5D,cAAM,cAAc,4BAA4B;AAAA,UAC9C;AAAA,YACE,MAAM;AAAA,YACN,MAAM,iBAAiBA,YAAW;AAAA,2BACnBA,YAAW,OAAO,eAAe;AAAA,wBACpC,IAAI;AAAA,UAClB;AAAA,QACF,CAAC;AAED,cAAM,SAAS,MAAM,QAAQ,oBAAoB,IAAI;AACrD,cAAM,mBAAmB,OAAO,IAAI,SAAO;AACzC,gBAAM,cAAc;AAAA,YAClB,OAAO,IAAI,YAAY,WACnB,IAAI,UACJ,IAAI,QACD,IAAI,WAAU,MAAM,SAAS,SAAS,MAAM,OAAO,EAAG,EACtD,KAAK,IAAI;AAAA,UAClB;AAEA,sBAAY,UAAU;AAAA,YACpB,GAAG,YAAY;AAAA,YACf,iBAAiB;AAAA,YACjB,aAAa,QAAQ,eAAe;AAAA,YACpC,aAAa;AAAA,UACf;AAEA,iBAAO;AAAA,QACT,CAAC;AAED,eAAO,CAAC,aAAa,GAAG,gBAAgB;AAAA,MAC1C;AAAA,IACF;AAAA,EACF,SAAS,GAAG;AACV,QAAI,aAAa,uBAAuB;AACtC,aAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;AAAA,IAC3C;AACA,UAAM;AAAA,EACR;AACF;",
6
6
  "names": ["userMessage", "resolve", "commandName"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pybao-cli",
3
- "version": "1.5.23",
3
+ "version": "1.5.25",
4
4
  "bin": {
5
5
  "pyb": "cli.js",
6
6
  "pyb-acp": "cli-acp.js"
@@ -43,6 +43,8 @@
43
43
  "scripts/typed-part-performance-gate.mjs",
44
44
  "scripts/session-contract-gate.mjs",
45
45
  "scripts/session-behavior-invariant-gate.mjs",
46
+ "scripts/session-project-gate.mjs",
47
+ "scripts/protected-tool-names-gate.mjs",
46
48
  ".npmrc",
47
49
  "resources/**/*"
48
50
  ],
@@ -75,6 +77,8 @@
75
77
  "gate:query-adapter-boundary": "node scripts/query-adapter-boundary-gate.mjs",
76
78
  "gate:session-contract": "node scripts/session-contract-gate.mjs",
77
79
  "gate:session-behavior-invariant": "node scripts/session-behavior-invariant-gate.mjs",
80
+ "gate:session-project": "node scripts/session-project-gate.mjs",
81
+ "gate:protected-tool-names": "node scripts/protected-tool-names-gate.mjs",
78
82
  "plan:typed-compat-retirement": "node scripts/typed-compat-retirement-plan.mjs",
79
83
  "enforce:typed-compat-retirement": "node scripts/typed-compat-retirement-enforce.mjs",
80
84
  "gate:typed-sql-release": "node scripts/typed-sql-release-gate.mjs",
@@ -0,0 +1,102 @@
1
+ import { existsSync, readFileSync } from 'node:fs'
2
+ import { resolve } from 'node:path'
3
+
4
+ const DEFAULT_TARGETS = [
5
+ 'src/utils/session/toolOutputLifecycle.ts',
6
+ 'src/services/ai/messageTransform/index.ts',
7
+ 'tests/unit/tool-output-lifecycle.test.ts',
8
+ 'tests/unit/message-transform.prune-execution.test.ts',
9
+ ]
10
+
11
+ const REQUIRED_RULES = [
12
+ {
13
+ ruleId: 'lifecycle_skill_default_guard',
14
+ filePathIncludes: 'src/utils/session/toolOutputLifecycle.ts',
15
+ requiredSnippets: [
16
+ 'resolveProtectedToolNames(',
17
+ "parseToolNameList(options.protectedToolNames ?? ['skill'])",
18
+ 'shouldProtectToolResult(',
19
+ ],
20
+ },
21
+ {
22
+ ruleId: 'prune_execution_skill_default_guard',
23
+ filePathIncludes: 'src/services/ai/messageTransform/index.ts',
24
+ requiredSnippets: [
25
+ "parseProtectedToolNames(context.pruneExecutionProtectedToolNames ?? ['skill'])",
26
+ 'resolveToolNameForBlock(block, toolUseNameIndex)',
27
+ 'pruneExecutionProtectedBlocks',
28
+ ],
29
+ },
30
+ {
31
+ ruleId: 'lifecycle_skill_regression_test_guard',
32
+ filePathIncludes: 'tests/unit/tool-output-lifecycle.test.ts',
33
+ requiredSnippets: ['A1 keeps aged skill tool_result unchanged by protected tool names'],
34
+ },
35
+ {
36
+ ruleId: 'prune_execution_skill_regression_test_guard',
37
+ filePathIncludes: 'tests/unit/message-transform.prune-execution.test.ts',
38
+ requiredSnippets: ['B1 keeps protected skill blocks before checkpoint when enabled'],
39
+ },
40
+ ]
41
+
42
+ function readArg(name, fallback = '') {
43
+ const index = process.argv.indexOf(name)
44
+ if (index < 0) return fallback
45
+ return String(process.argv[index + 1] ?? fallback).trim()
46
+ }
47
+
48
+ function resolveTargets() {
49
+ const raw = readArg('--targets', '')
50
+ if (!raw) return DEFAULT_TARGETS
51
+ return raw
52
+ .split(';')
53
+ .map(item => item.trim())
54
+ .filter(Boolean)
55
+ }
56
+
57
+ function findProtectedToolNamesGateViolations(files) {
58
+ const violations = []
59
+ for (const rule of REQUIRED_RULES) {
60
+ const file = files.find(item =>
61
+ item.filePath.replace(/\\/g, '/').includes(rule.filePathIncludes),
62
+ )
63
+ if (!file) {
64
+ violations.push({ ruleId: rule.ruleId, filePath: rule.filePathIncludes })
65
+ continue
66
+ }
67
+ const missing = rule.requiredSnippets.some(snippet => !file.content.includes(snippet))
68
+ if (missing) {
69
+ violations.push({ ruleId: rule.ruleId, filePath: file.filePath })
70
+ }
71
+ }
72
+ return violations
73
+ }
74
+
75
+ function main() {
76
+ const cwd = process.cwd()
77
+ const targets = resolveTargets()
78
+ const files = targets.map(item => {
79
+ const filePath = resolve(cwd, item)
80
+ return {
81
+ filePath,
82
+ content: existsSync(filePath) ? readFileSync(filePath, 'utf8') : '',
83
+ }
84
+ })
85
+ const violations = findProtectedToolNamesGateViolations(files)
86
+ const passed = violations.length === 0
87
+ process.stdout.write(
88
+ `${JSON.stringify(
89
+ {
90
+ passed,
91
+ hardViolations: passed ? [] : ['protected_tool_names_regression_detected'],
92
+ scannedFiles: files.map(item => item.filePath),
93
+ violations,
94
+ },
95
+ null,
96
+ 2,
97
+ )}\n`,
98
+ )
99
+ process.exit(passed ? 0 : 1)
100
+ }
101
+
102
+ main()
@@ -0,0 +1,95 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'
2
+ import { resolve } from 'node:path'
3
+
4
+ const DEFAULT_PATHS = ['src']
5
+ const DEFAULT_ALLOW_PATH_INCLUDES = [
6
+ 'docs/',
7
+ '/src/utils/session/sessionProjectPathGate.ts',
8
+ '/scripts/session-project-gate.mjs',
9
+ ]
10
+ const BANNED_PATTERNS = [
11
+ 'INSERT INTO session (id, created_at, updated_at)',
12
+ 'upsertSession.run(sessionId, timeCreated, now)',
13
+ 'findLatestSessionId()',
14
+ ]
15
+
16
+ function readArg(name, fallback = '') {
17
+ const index = process.argv.indexOf(name)
18
+ if (index < 0) return fallback
19
+ return String(process.argv[index + 1] ?? fallback).trim()
20
+ }
21
+
22
+ function readPaths() {
23
+ const raw = readArg('--paths', '')
24
+ if (!raw) return DEFAULT_PATHS
25
+ return raw
26
+ .split(';')
27
+ .map(item => item.trim())
28
+ .filter(Boolean)
29
+ }
30
+
31
+ function readAllowIncludes() {
32
+ const raw = readArg('--allow-includes', '')
33
+ if (!raw) return DEFAULT_ALLOW_PATH_INCLUDES
34
+ return raw
35
+ .split(';')
36
+ .map(item => item.trim())
37
+ .filter(Boolean)
38
+ }
39
+
40
+ function collectFiles(targetPath) {
41
+ if (!existsSync(targetPath)) return []
42
+ const stat = statSync(targetPath)
43
+ if (stat.isFile()) return [targetPath]
44
+ if (!stat.isDirectory()) return []
45
+ const files = []
46
+ const stack = [targetPath]
47
+ while (stack.length > 0) {
48
+ const current = stack.pop()
49
+ if (!current) continue
50
+ for (const entry of readdirSync(current, { withFileTypes: true })) {
51
+ const fullPath = resolve(current, entry.name)
52
+ if (entry.isDirectory()) {
53
+ stack.push(fullPath)
54
+ continue
55
+ }
56
+ if (!entry.isFile()) continue
57
+ files.push(fullPath)
58
+ }
59
+ }
60
+ return files
61
+ }
62
+
63
+ function main() {
64
+ const cwd = process.cwd()
65
+ const targets = readPaths().map(item => resolve(cwd, item))
66
+ const allowIncludes = readAllowIncludes()
67
+ const files = targets.flatMap(item => collectFiles(item))
68
+ const violations = []
69
+ for (const filePath of files) {
70
+ const relativePath = filePath.replace(cwd, '').replace(/\\/g, '/')
71
+ if (allowIncludes.some(item => relativePath.includes(item))) continue
72
+ const content = readFileSync(filePath, 'utf8')
73
+ for (const pattern of BANNED_PATTERNS) {
74
+ if (content.includes(pattern)) {
75
+ violations.push({ filePath, pattern })
76
+ }
77
+ }
78
+ }
79
+ const passed = violations.length === 0
80
+ process.stdout.write(
81
+ `${JSON.stringify(
82
+ {
83
+ passed,
84
+ hardViolations: passed ? [] : ['session_project_path_regression_detected'],
85
+ scannedFiles: files,
86
+ violations,
87
+ },
88
+ null,
89
+ 2,
90
+ )}\n`,
91
+ )
92
+ process.exit(passed ? 0 : 1)
93
+ }
94
+
95
+ main()
@@ -1,50 +0,0 @@
1
- import { createRequire as __pybCreateRequire } from "node:module";
2
- const require = __pybCreateRequire(import.meta.url);
3
- import {
4
- REPL
5
- } from "./chunk-3CC7QXCN.js";
6
- import "./chunk-KQZAS4DO.js";
7
- import "./chunk-5P7HBXTD.js";
8
- import "./chunk-W7VIESST.js";
9
- import "./chunk-2GHNW642.js";
10
- import "./chunk-6QGIRDZS.js";
11
- import "./chunk-F4AXICO7.js";
12
- import "./chunk-ZB3ZWD2K.js";
13
- import "./chunk-G5MP72ZL.js";
14
- import "./chunk-CNMNKSWQ.js";
15
- import "./chunk-M7FEUIHO.js";
16
- import "./chunk-A6QEPK5J.js";
17
- import "./chunk-XKYHFZEC.js";
18
- import "./chunk-S65MIABQ.js";
19
- import "./chunk-4ZZYPG6P.js";
20
- import "./chunk-CT7LWVB7.js";
21
- import "./chunk-QSMZLK7K.js";
22
- import "./chunk-UNNVICVU.js";
23
- import "./chunk-652OMXEE.js";
24
- import "./chunk-2SVUNNJB.js";
25
- import "./chunk-A3BVXXA3.js";
26
- import "./chunk-QCI5HPTA.js";
27
- import "./chunk-3DFBSQIT.js";
28
- import "./chunk-B6IMQJZM.js";
29
- import "./chunk-OUXHGDLH.js";
30
- import "./chunk-MMW6MLFR.js";
31
- import "./chunk-QWIBSCDN.js";
32
- import "./chunk-MN77HNBB.js";
33
- import "./chunk-O7LWCCRJ.js";
34
- import "./chunk-ABJT5MG2.js";
35
- import "./chunk-UZ34JEUK.js";
36
- import "./chunk-PUPDIRI6.js";
37
- import "./chunk-BJSWTHRM.js";
38
- import "./chunk-GU4XA76N.js";
39
- import "./chunk-VVXC3SNP.js";
40
- import "./chunk-76BOJQUE.js";
41
- import "./chunk-C2GNLGBM.js";
42
- import "./chunk-V22PQM4W.js";
43
- import "./chunk-RQVLBMP7.js";
44
- import "./chunk-5B7UCAYL.js";
45
- import "./chunk-LBDLSBXN.js";
46
- import "./chunk-7SYDIES4.js";
47
- import "./chunk-I3J4JYES.js";
48
- export {
49
- REPL
50
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../package.json", "../src/constants/macros.ts"],
4
- "sourcesContent": ["{\n \"name\": \"pybao-cli\",\n \"version\": \"1.5.23\",\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-schema-guard.mjs\",\n \"scripts/typed-sql-install-smoke.mjs\",\n \"scripts/typed-sql-no-fallback-gate.mjs\",\n \"scripts/typed-part-baseline-benchmark.mjs\",\n \"scripts/typed-part-performance-gate.mjs\",\n \"scripts/session-contract-gate.mjs\",\n \"scripts/session-behavior-invariant-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 \"gate:query-adapter-boundary\": \"node scripts/query-adapter-boundary-gate.mjs\",\n \"gate:session-contract\": \"node scripts/session-contract-gate.mjs\",\n \"gate:session-behavior-invariant\": \"node scripts/session-behavior-invariant-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 \"gate:typed-sql-schema\": \"node scripts/typed-sql-schema-guard.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 \"benchmark:typed-part-baseline\": \"bun scripts/typed-part-baseline-benchmark.mjs\",\n \"gate:typed-part-performance\": \"node scripts/typed-part-performance-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
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/session/sessionSqlStore.ts", "../src/utils/session/sessionStoreConfig.ts", "../src/utils/session/sessionStoreSchema.ts"],
4
- "sourcesContent": ["import { createRequire } from 'node:module'\nimport { existsSync, mkdirSync } from 'fs'\nimport { dirname } from 'path'\nimport type {\n SessionStoreLoadedFileHistorySnapshot,\n SessionStoreLoadedMetaEvent,\n SessionStoreLoadedSummary,\n SessionStore,\n SessionStoreAppendFileHistorySnapshotInput,\n SessionStoreAppendMessageInput,\n SessionStoreAppendMetaEventInput,\n SessionStoreAppendPartInput,\n SessionStoreAppendSummaryInput,\n SessionStoreLoadOptions,\n SessionStoreLoadedMessage,\n} from './sessionStore'\nimport { getSessionStoreDbPath } from './sessionStoreConfig'\nimport { ensureSessionStoreSchema } from './sessionStoreSchema'\n\ntype BunSqliteDatabase = any\ntype BunSqliteDatabaseCtor = new (\n filePath: string,\n options?: { create?: boolean },\n) => BunSqliteDatabase\n\nconst requireForSqlite = createRequire(import.meta.url)\nlet cachedDatabaseCtor: BunSqliteDatabaseCtor | null | undefined\n\nfunction getDatabaseCtor(): BunSqliteDatabaseCtor | null {\n if (cachedDatabaseCtor !== undefined) return cachedDatabaseCtor\n try {\n const mod = requireForSqlite('bun:sqlite') as {\n Database?: BunSqliteDatabaseCtor\n }\n if (typeof mod?.Database === 'function') {\n cachedDatabaseCtor = mod.Database\n return cachedDatabaseCtor\n }\n } catch {}\n cachedDatabaseCtor = null\n return null\n}\n\nfunction getDatabaseCtorOrThrow(): BunSqliteDatabaseCtor {\n const Database = getDatabaseCtor()\n if (Database) return Database\n const error = new Error(\n 'PYB_SESSION_SQL_UNAVAILABLE: bun:sqlite is unavailable for session store',\n ) as Error & { code?: string }\n error.code = 'PYB_SESSION_SQL_UNAVAILABLE'\n throw error\n}\n\nfunction asNullableText(value: unknown): string | null {\n const text = String(value ?? '').trim()\n return text ? text : null\n}\n\nfunction asRole(value: unknown): 'user' | 'assistant' | 'progress' {\n return value === 'assistant' || value === 'progress' ? value : 'user'\n}\n\nexport function createSessionSqlStore(options?: { dbFilePath?: string }): SessionStore {\n const dbFilePath = options?.dbFilePath ?? getSessionStoreDbPath()\n if (!existsSync(dirname(dbFilePath))) {\n mkdirSync(dirname(dbFilePath), { recursive: true })\n }\n const Database = getDatabaseCtorOrThrow()\n const db = new Database(dbFilePath, { create: true })\n ensureSessionStoreSchema(db)\n const upsertSession = db.prepare(`\n INSERT INTO session (id, created_at, updated_at)\n VALUES (?1, ?2, ?3)\n ON CONFLICT(id) DO UPDATE SET\n updated_at = excluded.updated_at\n `)\n const upsertMessage = db.prepare(`\n INSERT INTO message (\n uuid, session_id, agent_id, role, parent_uuid, logical_parent_uuid,\n request_id, is_api_error, time_created, raw_message_json, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)\n ON CONFLICT(uuid) DO UPDATE SET\n session_id = excluded.session_id,\n agent_id = excluded.agent_id,\n role = excluded.role,\n parent_uuid = excluded.parent_uuid,\n logical_parent_uuid = excluded.logical_parent_uuid,\n request_id = excluded.request_id,\n is_api_error = excluded.is_api_error,\n time_created = excluded.time_created,\n raw_message_json = excluded.raw_message_json,\n updated_at = excluded.updated_at\n `)\n const upsertPart = db.prepare(`\n INSERT INTO part (\n id, message_uuid, session_id, part_index, part_type, raw_part_json, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8)\n ON CONFLICT(id) DO UPDATE SET\n message_uuid = excluded.message_uuid,\n session_id = excluded.session_id,\n part_index = excluded.part_index,\n part_type = excluded.part_type,\n raw_part_json = excluded.raw_part_json,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertSummary = db.prepare(`\n INSERT INTO session_summary (\n id, session_id, leaf_uuid, summary, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n leaf_uuid = excluded.leaf_uuid,\n summary = excluded.summary,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertMetaEvent = db.prepare(`\n INSERT INTO session_meta_event (\n id, session_id, event_type, payload_json, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n event_type = excluded.event_type,\n payload_json = excluded.payload_json,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertFileHistorySnapshot = db.prepare(`\n INSERT INTO file_history_snapshot (\n id, session_id, message_uuid, snapshot_json, is_update, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n message_uuid = excluded.message_uuid,\n snapshot_json = excluded.snapshot_json,\n is_update = excluded.is_update,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const appendMessages = (messages: SessionStoreAppendMessageInput[]) => {\n if (!Array.isArray(messages) || messages.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendMessageInput[]) => {\n for (const item of list) {\n const sessionId = String(item.sessionId ?? '').trim()\n const uuid = String(item.uuid ?? '').trim()\n if (!sessionId || !uuid) continue\n const timeCreated = Number(item.timeCreated) || now\n upsertSession.run(sessionId, timeCreated, now)\n upsertMessage.run(\n uuid,\n sessionId,\n asNullableText(item.agentId),\n asRole(item.role),\n asNullableText(item.parentUuid),\n asNullableText(item.logicalParentUuid),\n asNullableText(item.requestId),\n item.isApiError ? 1 : 0,\n timeCreated,\n JSON.stringify(item.rawMessage ?? {}),\n now,\n )\n }\n })\n tx(messages)\n return messages.length\n }\n const appendParts = (parts: SessionStoreAppendPartInput[]) => {\n if (!Array.isArray(parts) || parts.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendPartInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const messageUuid = String(item.messageUuid ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !messageUuid || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n upsertSession.run(sessionId, timeCreated, now)\n upsertPart.run(\n id,\n messageUuid,\n sessionId,\n Number(item.partIndex) || 0,\n String(item.partType ?? 'unknown'),\n JSON.stringify(item.rawPart ?? {}),\n timeCreated,\n now,\n )\n }\n })\n tx(parts)\n return parts.length\n }\n const appendSessionSummaries = (records: SessionStoreAppendSummaryInput[]) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendSummaryInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n upsertSession.run(sessionId, timeCreated, now)\n upsertSummary.run(\n id,\n sessionId,\n asNullableText(item.leafUuid),\n String(item.summary ?? ''),\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const appendSessionMetaEvents = (records: SessionStoreAppendMetaEventInput[]) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendMetaEventInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n upsertSession.run(sessionId, timeCreated, now)\n upsertMetaEvent.run(\n id,\n sessionId,\n String(item.eventType ?? 'unknown'),\n JSON.stringify(item.payload ?? {}),\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const appendFileHistorySnapshots = (\n records: SessionStoreAppendFileHistorySnapshotInput[],\n ) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendFileHistorySnapshotInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n upsertSession.run(sessionId, timeCreated, now)\n upsertFileHistorySnapshot.run(\n id,\n sessionId,\n asNullableText(item.messageUuid),\n JSON.stringify(item.snapshot ?? {}),\n item.isSnapshotUpdate ? 1 : 0,\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const loadMessages = (\n sessionId: string,\n options: SessionStoreLoadOptions = {},\n ): SessionStoreLoadedMessage[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const fromTime = Number.isFinite(options.fromTime) ? Number(options.fromTime) : null\n const toTime = Number.isFinite(options.toTime) ? Number(options.toTime) : null\n const rows = db\n .prepare(\n `\n SELECT\n session_id, uuid, role, time_created, raw_message_json,\n agent_id, parent_uuid, logical_parent_uuid, request_id, is_api_error\n FROM message\n WHERE session_id = ?1\n AND (?2 IS NULL OR time_created >= ?2)\n AND (?3 IS NULL OR time_created <= ?3)\n ORDER BY time_created ASC, uuid ASC\n `,\n )\n .all(target, fromTime, toTime) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n uuid: String(row.uuid),\n role: asRole(row.role),\n timeCreated: Number(row.time_created) || 0,\n rawMessage: JSON.parse(String(row.raw_message_json ?? '{}')),\n agentId: asNullableText(row.agent_id),\n parentUuid: asNullableText(row.parent_uuid),\n logicalParentUuid: asNullableText(row.logical_parent_uuid),\n requestId: asNullableText(row.request_id),\n isApiError: Number(row.is_api_error ?? 0) > 0,\n }))\n }\n const loadSessionSummaries = (sessionId: string): SessionStoreLoadedSummary[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, leaf_uuid, summary, time_created\n FROM session_summary\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n leafUuid: asNullableText(row.leaf_uuid),\n summary: String(row.summary ?? ''),\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const loadSessionMetaEvents = (sessionId: string): SessionStoreLoadedMetaEvent[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, event_type, payload_json, time_created\n FROM session_meta_event\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n eventType: String(row.event_type ?? ''),\n payload: JSON.parse(String(row.payload_json ?? '{}')),\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const loadFileHistorySnapshots = (\n sessionId: string,\n ): SessionStoreLoadedFileHistorySnapshot[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, message_uuid, snapshot_json, is_update, time_created\n FROM file_history_snapshot\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n messageUuid: asNullableText(row.message_uuid),\n snapshot: JSON.parse(String(row.snapshot_json ?? '{}')),\n isSnapshotUpdate: Number(row.is_update ?? 0) > 0,\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const findLatestSessionId = (): string | null => {\n const row = db\n .prepare(\n `\n SELECT session_id\n FROM message\n ORDER BY time_created DESC, uuid DESC\n LIMIT 1\n `,\n )\n .get() as { session_id?: string } | null\n return asNullableText(row?.session_id)\n }\n const close = () => {\n db.close()\n }\n return {\n appendMessages,\n appendParts,\n appendSessionSummaries,\n appendSessionMetaEvents,\n appendFileHistorySnapshots,\n loadSessionSummaries,\n loadSessionMetaEvents,\n loadFileHistorySnapshots,\n loadMessages,\n findLatestSessionId,\n close,\n }\n}\n", "import { resolveXdgDataPath } from '@utils/config/env'\n\nexport type SessionStoreFlags = {\n sqlWriteEnabled: boolean\n sqlReadEnabled: boolean\n jsonlWriteEnabled: boolean\n}\n\nlet cachedFlags: SessionStoreFlags | null = null\n\nfunction parseBooleanFlag(\n rawValue: string | undefined,\n defaultValue: boolean,\n): boolean {\n const normalized = String(rawValue ?? '')\n .trim()\n .toLowerCase()\n if (!normalized) return defaultValue\n if (['1', 'true', 'yes', 'on'].includes(normalized)) return true\n if (['0', 'false', 'no', 'off'].includes(normalized)) return false\n return defaultValue\n}\n\nexport function getSessionStoreFlags(): SessionStoreFlags {\n if (cachedFlags) return cachedFlags\n cachedFlags = {\n sqlWriteEnabled: parseBooleanFlag(\n process.env.PYB_SESSION_STORE_SQL_WRITE,\n true,\n ),\n sqlReadEnabled: parseBooleanFlag(process.env.PYB_SESSION_STORE_SQL_READ, true),\n jsonlWriteEnabled: parseBooleanFlag(\n process.env.PYB_SESSION_STORE_JSONL_WRITE,\n false,\n ),\n }\n return cachedFlags\n}\n\nexport function getSessionStoreDbPath(): string {\n const override = String(process.env.PYB_SESSION_STORE_DB_PATH ?? '').trim()\n if (override) return override\n return resolveXdgDataPath('sessions/session-store.db')\n}\n\nexport function resetSessionStoreFlagsForTest() {\n cachedFlags = null\n}\n", "type BunSqliteDatabase = any\n\nexport const SESSION_STORE_SCHEMA_VERSION = 1\n\nfunction applyRuntimePragmas(db: BunSqliteDatabase) {\n db.exec(`PRAGMA journal_mode=WAL;`)\n db.exec(`PRAGMA synchronous=NORMAL;`)\n db.exec(`PRAGMA busy_timeout=5000;`)\n db.exec(`PRAGMA foreign_keys=ON;`)\n}\n\nexport function ensureSessionStoreSchema(db: BunSqliteDatabase) {\n applyRuntimePragmas(db)\n db.exec(`\n CREATE TABLE IF NOT EXISTS schema_version (\n name TEXT PRIMARY KEY,\n version INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session (\n id TEXT PRIMARY KEY,\n cwd TEXT,\n slug TEXT,\n git_branch TEXT,\n user_type TEXT,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS message (\n uuid TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n agent_id TEXT,\n role TEXT NOT NULL,\n parent_uuid TEXT,\n logical_parent_uuid TEXT,\n request_id TEXT,\n is_api_error INTEGER NOT NULL DEFAULT 0,\n time_created INTEGER NOT NULL,\n raw_message_json TEXT NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS part (\n id TEXT PRIMARY KEY,\n message_uuid TEXT NOT NULL,\n session_id TEXT NOT NULL,\n part_index INTEGER NOT NULL,\n part_type TEXT NOT NULL,\n raw_part_json TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(message_uuid) REFERENCES message(uuid) ON DELETE CASCADE,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session_meta_event (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n event_type TEXT NOT NULL,\n payload_json TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session_summary (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n leaf_uuid TEXT,\n summary TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS file_history_snapshot (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n message_uuid TEXT,\n snapshot_json TEXT NOT NULL,\n is_update INTEGER NOT NULL DEFAULT 0,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_message_session_time_uuid\n ON message(session_id, time_created, uuid);\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_part_session_message_part_index\n ON part(session_id, message_uuid, part_index);\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_meta_event_session_time\n ON session_meta_event(session_id, time_created);\n `)\n const now = Date.now()\n db.prepare(\n `\n INSERT INTO schema_version (name, version, updated_at)\n VALUES (?1, ?2, ?3)\n ON CONFLICT(name) DO UPDATE SET\n version = excluded.version,\n updated_at = excluded.updated_at\n `,\n ).run('session_store', SESSION_STORE_SCHEMA_VERSION, now)\n}\n"],
5
- "mappings": "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",
6
- "names": ["options"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/protocol/pybAgentSessionResume.ts", "../src/utils/protocol/pybAgentSessionLog.ts", "../src/utils/session/sessionSqlDualWriteTelemetry.ts", "../src/utils/session/sessionSqlDualWrite.ts"],
4
- "sourcesContent": ["import { existsSync, readdirSync, readFileSync, statSync } from 'fs'\nimport { basename, join } from 'path'\nimport {\n getSessionProjectDir,\n getSessionProjectsDir,\n} from './pybAgentSessionLog'\nimport { isUuid } from '@utils/text/uuid'\n\nexport type PybAgentSessionListItem = {\n sessionId: string\n slug: string | null\n customTitle: string | null\n tag: string | null\n summary: string | null\n cwd: string | null\n createdAt: Date | null\n modifiedAt: Date | null\n}\n\nexport type ResumeResolveResult =\n | { kind: 'ok'; sessionId: string }\n | { kind: 'ambiguous'; identifier: string; matchingSessionIds: string[] }\n | { kind: 'different_directory'; sessionId: string; otherCwd: string | null }\n | { kind: 'not_found'; identifier: string }\n\nfunction safeParseJson(line: string): unknown | null {\n try {\n return JSON.parse(line)\n } catch {\n return null\n }\n}\n\nfunction safeParseDate(value: unknown): Date | null {\n if (typeof value !== 'string') return null\n const d = new Date(value)\n if (Number.isNaN(d.getTime())) return null\n return d\n}\n\nfunction readSessionListItemBestEffort(args: {\n filePath: string\n sessionId: string\n}): Omit<PybAgentSessionListItem, 'sessionId'> {\n const { filePath, sessionId } = args\n\n let slug: string | null = null\n let cwd: string | null = null\n let createdAt: Date | null = null\n let modifiedAt: Date | null = null\n let customTitle: string | null = null\n let tag: string | null = null\n let lastAssistantUuid: string | null = null\n const summariesByLeaf = new Map<string, string>()\n let lastSummary: string | null = null\n\n try {\n modifiedAt = new Date(statSync(filePath).mtimeMs)\n } catch {\n modifiedAt = null\n }\n\n let content: string\n try {\n content = readFileSync(filePath, 'utf8')\n } catch {\n return {\n slug,\n customTitle,\n tag,\n summary: null,\n cwd,\n createdAt,\n modifiedAt,\n }\n }\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim()\n if (!line) continue\n const parsed = safeParseJson(line)\n if (!parsed || typeof parsed !== 'object') continue\n\n const entry: any = parsed\n\n if (!slug && typeof entry.slug === 'string' && entry.slug.trim()) {\n slug = entry.slug.trim()\n }\n if (!cwd && typeof entry.cwd === 'string' && entry.cwd.trim()) {\n cwd = entry.cwd.trim()\n }\n if (!createdAt) {\n const ts = safeParseDate(entry.timestamp)\n if (ts) createdAt = ts\n }\n\n if (typeof entry.type !== 'string') continue\n\n if (entry.type === 'assistant') {\n if (typeof entry.uuid === 'string' && entry.uuid)\n lastAssistantUuid = entry.uuid\n continue\n }\n\n if (entry.type === 'summary') {\n const leafUuid = typeof entry.leafUuid === 'string' ? entry.leafUuid : ''\n const summary = typeof entry.summary === 'string' ? entry.summary : ''\n if (leafUuid && summary) {\n summariesByLeaf.set(leafUuid, summary)\n lastSummary = summary\n }\n continue\n }\n\n if (entry.type === 'custom-title') {\n const id = typeof entry.sessionId === 'string' ? entry.sessionId : ''\n const title =\n typeof entry.customTitle === 'string' ? entry.customTitle : ''\n if (id === sessionId && title) customTitle = title\n continue\n }\n\n if (entry.type === 'tag') {\n const id = typeof entry.sessionId === 'string' ? entry.sessionId : ''\n const t = typeof entry.tag === 'string' ? entry.tag : ''\n if (id === sessionId && t) tag = t\n continue\n }\n }\n\n const summary =\n (lastAssistantUuid\n ? (summariesByLeaf.get(lastAssistantUuid) ?? null)\n : null) ??\n lastSummary ??\n null\n\n return {\n slug,\n customTitle,\n tag,\n summary,\n cwd,\n createdAt,\n modifiedAt,\n }\n}\n\nexport function listPybAgentSessions(args: {\n cwd: string\n}): PybAgentSessionListItem[] {\n const { cwd } = args\n const projectDir = getSessionProjectDir(cwd)\n if (!existsSync(projectDir)) return []\n\n const candidates = readdirSync(projectDir)\n .filter(name => name.endsWith('.jsonl'))\n .filter(name => !name.startsWith('agent-'))\n .map(name => ({\n sessionId: basename(name, '.jsonl'),\n filePath: join(projectDir, name),\n }))\n .filter(c => isUuid(c.sessionId))\n\n const items = candidates.map(({ sessionId, filePath }) => ({\n sessionId,\n ...readSessionListItemBestEffort({ filePath, sessionId }),\n }))\n\n items.sort((a, b) => {\n const am = a.modifiedAt?.getTime() ?? 0\n const bm = b.modifiedAt?.getTime() ?? 0\n return bm - am\n })\n\n return items\n}\n\nfunction findSessionFileAcrossProjects(args: {\n sessionId: string\n}): { filePath: string } | null {\n const { sessionId } = args\n const projectsDir = getSessionProjectsDir()\n if (!existsSync(projectsDir)) return null\n\n let projectNames: string[]\n try {\n projectNames = readdirSync(projectsDir)\n } catch {\n return null\n }\n\n for (const projectName of projectNames) {\n const candidate = join(projectsDir, projectName, `${sessionId}.jsonl`)\n if (existsSync(candidate)) return { filePath: candidate }\n }\n\n return null\n}\n\nfunction readSessionCwdBestEffort(filePath: string): string | null {\n try {\n const content = readFileSync(filePath, 'utf8')\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim()\n if (!line) continue\n const parsed = safeParseJson(line)\n if (!parsed || typeof parsed !== 'object') continue\n const cwd = (parsed as any).cwd\n if (typeof cwd === 'string' && cwd.trim()) return cwd.trim()\n }\n } catch {\n }\n return null\n}\n\nfunction sessionExistsInProject(cwd: string, sessionId: string): boolean {\n try {\n return existsSync(join(getSessionProjectDir(cwd), `${sessionId}.jsonl`))\n } catch {\n return false\n }\n}\n\nexport function resolvePybResumeSessionIdentifier(args: {\n cwd: string\n identifier: string\n}): ResumeResolveResult {\n const { cwd, identifier } = args\n const id = identifier.trim()\n if (!id) return { kind: 'not_found', identifier }\n\n if (isUuid(id)) {\n if (sessionExistsInProject(cwd, id)) return { kind: 'ok', sessionId: id }\n\n const elsewhere = findSessionFileAcrossProjects({ sessionId: id })\n if (elsewhere) {\n return {\n kind: 'different_directory',\n sessionId: id,\n otherCwd: readSessionCwdBestEffort(elsewhere.filePath),\n }\n }\n\n return { kind: 'not_found', identifier: id }\n }\n\n const sessions = listPybAgentSessions({ cwd })\n const matches = sessions\n .filter(s => s.slug === id || s.customTitle === id)\n .map(s => s.sessionId)\n\n if (matches.length === 1) return { kind: 'ok', sessionId: matches[0]! }\n if (matches.length > 1)\n return { kind: 'ambiguous', identifier: id, matchingSessionIds: matches }\n return { kind: 'not_found', identifier: id }\n}\n", "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 { getSessionStoreFlags } from '@utils/session/sessionStoreConfig'\nimport {\n tryDualWriteFileHistorySnapshot,\n tryDualWriteSessionMessage,\n tryDualWriteSessionMetaEvent,\n tryDualWriteSessionSummary,\n} from '@utils/session/sessionSqlDualWrite'\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\nfunction shouldWriteJsonlForSessionStore(): boolean {\n const flags = getSessionStoreFlags()\n if (!flags.sqlWriteEnabled) return true\n return flags.jsonlWriteEnabled\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 sessionId: string,\n firstMessageUuid: string,\n): void {\n if (snapshotWrittenByFile.has(filePath)) return\n const shouldWriteJsonl = shouldWriteJsonlForSessionStore()\n\n if (shouldWriteJsonl) {\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\n const now = new Date().toISOString()\n const snapshot = {\n messageId: firstMessageUuid,\n trackedFileBackups: {},\n timestamp: now,\n }\n if (shouldWriteJsonl) {\n safeAppendJsonl(filePath, {\n type: 'file-history-snapshot',\n messageId: firstMessageUuid,\n snapshot,\n isSnapshotUpdate: false,\n } satisfies SessionJsonlEntry)\n }\n tryDualWriteFileHistorySnapshot({\n sessionId,\n messageUuid: firstMessageUuid,\n snapshot: snapshot as Record<string, any>,\n isSnapshotUpdate: false,\n timestampIso: now,\n })\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, sessionId, 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 if (shouldWriteJsonlForSessionStore()) {\n safeAppendJsonl(filePath, record)\n }\n tryDualWriteSessionMessage({\n message,\n sessionId,\n agentId,\n parentUuid: previousUuid,\n logicalParentUuid: undefined,\n timestampIso: base.timestamp,\n })\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 if (shouldWriteJsonlForSessionStore()) {\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId }), {\n type: 'summary',\n summary: args.summary,\n leafUuid: args.leafUuid,\n } satisfies SessionJsonlEntry)\n }\n tryDualWriteSessionSummary({\n sessionId,\n summary: args.summary,\n leafUuid: args.leafUuid,\n timestampIso: new Date().toISOString(),\n })\n}\n\nexport function appendSessionCustomTitleRecord(args: {\n sessionId: string\n customTitle: string\n}): void {\n const cwd = getCwd()\n if (shouldWriteJsonlForSessionStore()) {\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId: args.sessionId }), {\n type: 'custom-title',\n sessionId: args.sessionId,\n customTitle: args.customTitle,\n } satisfies SessionJsonlEntry)\n }\n tryDualWriteSessionMetaEvent({\n sessionId: args.sessionId,\n eventType: 'custom-title',\n payload: { customTitle: args.customTitle },\n timestampIso: new Date().toISOString(),\n })\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 if (shouldWriteJsonlForSessionStore()) {\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId: args.sessionId }), {\n type: 'tag',\n sessionId: args.sessionId,\n tag: args.tag,\n } satisfies SessionJsonlEntry)\n }\n tryDualWriteSessionMetaEvent({\n sessionId: args.sessionId,\n eventType: 'tag',\n payload: { tag: args.tag },\n timestampIso: new Date().toISOString(),\n })\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", "export type SessionSqlDualWriteSnapshot = {\n successCount: number\n failCount: number\n totalLatencyMs: number\n lastErrorCode: string | null\n}\n\nexport type SessionSqlDualWriteMetrics = SessionSqlDualWriteSnapshot & {\n totalAttempts: number\n successRate: number\n avgSuccessLatencyMs: number\n}\n\nconst state: SessionSqlDualWriteSnapshot = {\n successCount: 0,\n failCount: 0,\n totalLatencyMs: 0,\n lastErrorCode: null,\n}\n\nexport function recordSessionSqlDualWriteSuccess(latencyMs: number) {\n state.successCount += 1\n state.totalLatencyMs += Math.max(0, Number(latencyMs) || 0)\n}\n\nexport function recordSessionSqlDualWriteFailure(errorCode?: string | null) {\n state.failCount += 1\n state.lastErrorCode = errorCode ? String(errorCode) : 'SESSION_SQL_DUALWRITE_FAILED'\n}\n\nexport function getSessionSqlDualWriteSnapshot(): SessionSqlDualWriteSnapshot {\n return { ...state }\n}\n\nexport function getSessionSqlDualWriteMetrics(): SessionSqlDualWriteMetrics {\n const totalAttempts = state.successCount + state.failCount\n const successRate = totalAttempts > 0 ? state.successCount / totalAttempts : 0\n const avgSuccessLatencyMs =\n state.successCount > 0 ? state.totalLatencyMs / state.successCount : 0\n return {\n ...state,\n totalAttempts,\n successRate,\n avgSuccessLatencyMs,\n }\n}\n\nexport function resetSessionSqlDualWriteTelemetry() {\n state.successCount = 0\n state.failCount = 0\n state.totalLatencyMs = 0\n state.lastErrorCode = null\n}\n", "import type { Message } from '@query'\nimport { createSessionSqlStore } from './sessionSqlStore'\nimport { getSessionStoreFlags } from './sessionStoreConfig'\nimport {\n recordSessionSqlDualWriteFailure,\n recordSessionSqlDualWriteSuccess,\n} from './sessionSqlDualWriteTelemetry'\n\nfunction parseTime(timestampIso: string): number {\n return Number(Date.parse(timestampIso)) || Date.now()\n}\n\nfunction withSessionSqlDualWrite(action: (store: ReturnType<typeof createSessionSqlStore>) => void) {\n const flags = getSessionStoreFlags()\n if (!flags.sqlWriteEnabled) return\n const startedAt = Date.now()\n let store: ReturnType<typeof createSessionSqlStore> | null = null\n try {\n store = createSessionSqlStore()\n action(store)\n recordSessionSqlDualWriteSuccess(Date.now() - startedAt)\n } catch (error: any) {\n const errorCode =\n typeof error?.code === 'string'\n ? error.code\n : typeof error?.name === 'string'\n ? error.name\n : null\n recordSessionSqlDualWriteFailure(errorCode)\n } finally {\n try {\n store?.close()\n } catch {}\n }\n}\n\nexport function tryDualWriteSessionMessage(input: {\n message: Message\n sessionId: string\n agentId: string\n parentUuid: string | null\n logicalParentUuid?: string\n timestampIso: string\n}) {\n const message = input.message\n if (message.type !== 'user' && message.type !== 'assistant') return\n withSessionSqlDualWrite(store => {\n const timeCreated = parseTime(input.timestampIso)\n store.appendMessages([\n {\n sessionId: input.sessionId,\n uuid: message.uuid,\n role: message.type,\n timeCreated,\n rawMessage: message.message as any,\n agentId: input.agentId,\n parentUuid: input.parentUuid,\n logicalParentUuid: input.logicalParentUuid ?? null,\n requestId:\n message.type === 'assistant' && typeof (message as any).requestId === 'string'\n ? String((message as any).requestId)\n : null,\n isApiError:\n message.type === 'assistant' ? Boolean(message.isApiErrorMessage) : false,\n },\n ])\n const blocks = Array.isArray((message as any)?.message?.content)\n ? ((message as any).message.content as Array<Record<string, any>>)\n : []\n if (blocks.length > 0) {\n store.appendParts(\n blocks.map((block, partIndex) => ({\n id: `${message.uuid}:${partIndex}`,\n messageUuid: message.uuid,\n sessionId: input.sessionId,\n partIndex,\n partType: String(block?.type ?? 'unknown'),\n rawPart: block ?? {},\n timeCreated,\n })),\n )\n }\n })\n}\n\nexport function tryDualWriteSessionSummary(input: {\n sessionId: string\n leafUuid: string\n summary: string\n timestampIso: string\n}) {\n withSessionSqlDualWrite(store => {\n const timeCreated = parseTime(input.timestampIso)\n store.appendSessionSummaries([\n {\n id: `${input.sessionId}:${input.leafUuid}:${timeCreated}`,\n sessionId: input.sessionId,\n leafUuid: input.leafUuid,\n summary: input.summary,\n timeCreated,\n },\n ])\n })\n}\n\nexport function tryDualWriteSessionMetaEvent(input: {\n sessionId: string\n eventType: 'custom-title' | 'tag'\n payload: Record<string, any>\n timestampIso: string\n}) {\n withSessionSqlDualWrite(store => {\n const timeCreated = parseTime(input.timestampIso)\n const eventKey =\n input.eventType === 'custom-title'\n ? String(input.payload.customTitle ?? '')\n : String(input.payload.tag ?? '')\n store.appendSessionMetaEvents([\n {\n id: `${input.sessionId}:${input.eventType}:${timeCreated}:${eventKey}`,\n sessionId: input.sessionId,\n eventType: input.eventType,\n payload: input.payload,\n timeCreated,\n },\n ])\n })\n}\n\nexport function tryDualWriteFileHistorySnapshot(input: {\n sessionId: string\n messageUuid: string\n snapshot: Record<string, any>\n isSnapshotUpdate: boolean\n timestampIso: string\n}) {\n withSessionSqlDualWrite(store => {\n const timeCreated = parseTime(input.timestampIso)\n store.appendFileHistorySnapshots([\n {\n id: `${input.sessionId}:${input.messageUuid}:${timeCreated}`,\n sessionId: input.sessionId,\n messageUuid: input.messageUuid,\n snapshot: input.snapshot,\n isSnapshotUpdate: input.isSnapshotUpdate,\n timeCreated,\n },\n ])\n })\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,cAAAA,aAAY,aAAa,gBAAAC,eAAc,YAAAC,iBAAgB;AAChE,SAAS,UAAU,QAAAC,aAAY;;;ACD/B,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB;AAC5B,SAAS,SAAS,YAAY;;;ACG9B,IAAM,QAAqC;AAAA,EACzC,cAAc;AAAA,EACd,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,eAAe;AACjB;AAEO,SAAS,iCAAiC,WAAmB;AAClE,QAAM,gBAAgB;AACtB,QAAM,kBAAkB,KAAK,IAAI,GAAG,OAAO,SAAS,KAAK,CAAC;AAC5D;AAEO,SAAS,iCAAiC,WAA2B;AAC1E,QAAM,aAAa;AACnB,QAAM,gBAAgB,YAAY,OAAO,SAAS,IAAI;AACxD;;;ACpBA,SAAS,UAAU,cAA8B;AAC/C,SAAO,OAAO,KAAK,MAAM,YAAY,CAAC,KAAK,KAAK,IAAI;AACtD;AAEA,SAAS,wBAAwB,QAAmE;AAClG,QAAM,QAAQ,qBAAqB;AACnC,MAAI,CAAC,MAAM,gBAAiB;AAC5B,QAAM,YAAY,KAAK,IAAI;AAC3B,MAAI,QAAyD;AAC7D,MAAI;AACF,YAAQ,sBAAsB;AAC9B,WAAO,KAAK;AACZ,qCAAiC,KAAK,IAAI,IAAI,SAAS;AAAA,EACzD,SAAS,OAAY;AACnB,UAAM,YACJ,OAAO,OAAO,SAAS,WACnB,MAAM,OACN,OAAO,OAAO,SAAS,WACrB,MAAM,OACN;AACR,qCAAiC,SAAS;AAAA,EAC5C,UAAE;AACA,QAAI;AACF,aAAO,MAAM;AAAA,IACf,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;AAEO,SAAS,2BAA2B,OAOxC;AACD,QAAM,UAAU,MAAM;AACtB,MAAI,QAAQ,SAAS,UAAU,QAAQ,SAAS,YAAa;AAC7D,0BAAwB,WAAS;AAC/B,UAAM,cAAc,UAAU,MAAM,YAAY;AAChD,UAAM,eAAe;AAAA,MACnB;AAAA,QACE,WAAW,MAAM;AAAA,QACjB,MAAM,QAAQ;AAAA,QACd,MAAM,QAAQ;AAAA,QACd;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB,SAAS,MAAM;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,mBAAmB,MAAM,qBAAqB;AAAA,QAC9C,WACE,QAAQ,SAAS,eAAe,OAAQ,QAAgB,cAAc,WAClE,OAAQ,QAAgB,SAAS,IACjC;AAAA,QACN,YACE,QAAQ,SAAS,cAAc,QAAQ,QAAQ,iBAAiB,IAAI;AAAA,MACxE;AAAA,IACF,CAAC;AACD,UAAM,SAAS,MAAM,QAAS,SAAiB,SAAS,OAAO,IACzD,QAAgB,QAAQ,UAC1B,CAAC;AACL,QAAI,OAAO,SAAS,GAAG;AACrB,YAAM;AAAA,QACJ,OAAO,IAAI,CAAC,OAAO,eAAe;AAAA,UAChC,IAAI,GAAG,QAAQ,IAAI,IAAI,SAAS;AAAA,UAChC,aAAa,QAAQ;AAAA,UACrB,WAAW,MAAM;AAAA,UACjB;AAAA,UACA,UAAU,OAAO,OAAO,QAAQ,SAAS;AAAA,UACzC,SAAS,SAAS,CAAC;AAAA,UACnB;AAAA,QACF,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAsBO,SAAS,6BAA6B,OAK1C;AACD,0BAAwB,WAAS;AAC/B,UAAM,cAAc,UAAU,MAAM,YAAY;AAChD,UAAM,WACJ,MAAM,cAAc,iBAChB,OAAO,MAAM,QAAQ,eAAe,EAAE,IACtC,OAAO,MAAM,QAAQ,OAAO,EAAE;AACpC,UAAM,wBAAwB;AAAA,MAC5B;AAAA,QACE,IAAI,GAAG,MAAM,SAAS,IAAI,MAAM,SAAS,IAAI,WAAW,IAAI,QAAQ;AAAA,QACpE,WAAW,MAAM;AAAA,QACjB,WAAW,MAAM;AAAA,QACjB,SAAS,MAAM;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,gCAAgC,OAM7C;AACD,0BAAwB,WAAS;AAC/B,UAAM,cAAc,UAAU,MAAM,YAAY;AAChD,UAAM,2BAA2B;AAAA,MAC/B;AAAA,QACE,IAAI,GAAG,MAAM,SAAS,IAAI,MAAM,WAAW,IAAI,WAAW;AAAA,QAC1D,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,UAAU,MAAM;AAAA,QAChB,kBAAkB,MAAM;AAAA,QACxB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AF3EA,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;AAEO,SAAS,oBAAoB,MAGzB;AACT,SAAO,KAAK,qBAAqB,KAAK,GAAG,GAAG,SAAS,KAAK,OAAO,QAAQ;AAC3E;AAEA,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;AAEA,SAAS,kCAA2C;AAClD,QAAM,QAAQ,qBAAqB;AACnC,MAAI,CAAC,MAAM,gBAAiB,QAAO;AACnC,SAAO,MAAM;AACf;AAEA,IAAM,iBAAiB,oBAAI,IAA2B;AACtD,IAAM,wBAAwB,oBAAI,IAAY;AAC9C,IAAM,kBAAkB,oBAAI,IAAoB;AAChD,IAAI,4BAA2C;AAC/C,IAAI,oBAAmC;AAIvC,SAAS,0BAA0B,UAAqC;AACtE,MAAI;AACF,QAAI,CAAC,WAAW,QAAQ,EAAG,QAAO,EAAE,MAAM,MAAM,MAAM,KAAK;AAC3D,UAAM,UAAU,aAAa,UAAU,MAAM;AAC7C,UAAM,QAAQ,QAAQ,MAAM,IAAI;AAEhC,QAAI,WAA0B;AAC9B,aAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,YAAM,OAAO,MAAM,CAAC,GAAG,KAAK;AAC5B,UAAI,CAAC,KAAM;AACX,UAAI;AACJ,UAAI;AACF,iBAAS,KAAK,MAAM,IAAI;AAAA,MAC1B,QAAQ;AACN;AAAA,MACF;AACA,UAAI,CAAC,UAAU,OAAO,WAAW,SAAU;AAE3C,UAAI,CAAC,YAAY,OAAO,OAAO,SAAS,YAAY,OAAO,KAAK,KAAK,GAAG;AACtE,mBAAW,OAAO,KAAK,KAAK;AAAA,MAC9B;AAEA,UAAI,OAAO,OAAO,SAAS,YAAY,OAAO,MAAM;AAClD,eAAO,EAAE,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA,MAC7C;AAAA,IACF;AAEA,WAAO,EAAE,MAAM,MAAM,MAAM,SAAS;AAAA,EACtC,QAAQ;AACN,WAAO,EAAE,MAAM,MAAM,MAAM,KAAK;AAAA,EAClC;AACF;AAEA,SAAS,UAAU,QAAwB;AACzC,SAAO,YAAY,CAAC,EAAE,aAAa,CAAC,IAAI;AAC1C;AAEA,SAAS,SAAS,OAAkC;AAClD,SAAO,MAAM,UAAU,MAAM,MAAM,CAAC;AACtC;AAEA,SAAS,sBAA8B;AACrC,QAAM,YAAY,SAAS,oBAAoB;AAC/C,QAAM,OAAO,SAAS,eAAe;AACrC,QAAM,OAAO,SAAS,eAAe;AACrC,SAAO,GAAG,SAAS,IAAI,IAAI,IAAI,IAAI;AACrC;AAEA,SAAS,uBAAuB,WAA2B;AACzD,QAAM,WAAW,gBAAgB,IAAI,SAAS;AAC9C,MAAI,SAAU,QAAO;AACrB,QAAM,OAAO,oBAAoB;AACjC,kBAAgB,IAAI,WAAW,IAAI;AACnC,SAAO;AACT;AAGA,IAAI,iBAA6C;AAEjD,SAAS,uBAAuB,KAAiC;AAC/D,MAAI,kBAAkB,eAAe,QAAQ,IAAK,QAAO,eAAe;AAExE,MAAI;AACJ,MAAI;AACF,UAAM,SAAS,aAAa,OAAO,CAAC,aAAa,gBAAgB,MAAM,GAAG;AAAA,MACxE;AAAA,MACA,OAAO,CAAC,UAAU,QAAQ,QAAQ;AAAA,MAClC,SAAS;AAAA,IACX,CAAC;AACD,UAAM,SAAS,OAAO,SAAS,MAAM,EAAE,KAAK;AAC5C,YAAQ,UAAU;AAAA,EACpB,QAAQ;AACN,YAAQ;AAAA,EACV;AAEA,mBAAiB,EAAE,KAAK,MAAM;AAC9B,SAAO;AACT;AAEA,SAAS,0BACP,UACA,WACA,kBACM;AACN,MAAI,sBAAsB,IAAI,QAAQ,EAAG;AACzC,QAAM,mBAAmB,gCAAgC;AAEzD,MAAI,kBAAkB;AACpB,QAAI;AACF,qBAAe,QAAQ;AACvB,YAAM,OAAO,SAAS,QAAQ,EAAE;AAChC,UAAI,OAAO,GAAG;AACZ,8BAAsB,IAAI,QAAQ;AAClC;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IACR;AAAA,EACF;AAEA,QAAM,OAAM,oBAAI,KAAK,GAAE,YAAY;AACnC,QAAM,WAAW;AAAA,IACf,WAAW;AAAA,IACX,oBAAoB,CAAC;AAAA,IACrB,WAAW;AAAA,EACb;AACA,MAAI,kBAAkB;AACpB,oBAAgB,UAAU;AAAA,MACxB,MAAM;AAAA,MACN,WAAW;AAAA,MACX;AAAA,MACA,kBAAkB;AAAA,IACpB,CAA6B;AAAA,EAC/B;AACA,kCAAgC;AAAA,IAC9B;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB,CAAC;AAED,wBAAsB,IAAI,QAAQ;AACpC;AAEA,SAAS,qBAAqB,gBAEZ;AAChB,QAAM,UAAU,eAAe;AAC/B,MAAI,WAAW,YAAY,OAAQ,QAAO,EAAE,MAAM,SAAS,QAAQ;AACnE,SAAO,EAAE,MAAM,WAAW,WAAW,qBAAqB,EAAE;AAC9D;AAEO,SAAS,8BAA8B,MAGrC;AACP,QAAM,EAAE,SAAS,eAAe,IAAI;AACpC,MAAI,QAAQ,SAAS,UAAU,QAAQ,SAAS,YAAa;AAE7D,QAAM,MAAM,OAAO;AACnB,QAAM,YAAY,QAAQ,IAAI,aAAa,YAAY,KAAK,KAAK;AACjE,QAAM,YAAY,qBAAqB;AACvC,QAAM,WAAW,eAAe,WAAW,QAAQ,KAAK,KAAK;AAC7D,QAAM,cAAc,YAAY;AAChC,QAAM,YAAY,uBAAuB,GAAG;AAE5C,QAAM,SAAS,qBAAqB,cAAc;AAClD,QAAM,WACJ,OAAO,SAAS,UACZ,oBAAoB,EAAE,KAAK,SAAS,OAAO,QAAQ,CAAC,IACpD,sBAAsB,EAAE,KAAK,WAAW,OAAO,UAAU,CAAC;AAEhE,MAAI,CAAC,eAAe,IAAI,QAAQ,GAAG;AACjC,UAAM,OAAO,0BAA0B,QAAQ;AAC/C,mBAAe,IAAI,UAAU,KAAK,IAAI;AACtC,QAAI,KAAK,KAAM,iBAAgB,IAAI,WAAW,KAAK,IAAI;AAAA,EACzD;AACA,QAAM,eAAe,eAAe,IAAI,QAAQ,KAAK;AAErD,QAAM,OAAO,uBAAuB,SAAS;AAE7C,MAAI,OAAO,SAAS,WAAW;AAC7B,8BAA0B,UAAU,WAAW,QAAQ,IAAI;AAAA,EAC7D;AAEA,QAAM,OAA0B;AAAA,IAC9B,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,MAAM;AAAA,IACf,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,IACjC;AAAA,IACA;AAAA,IACA,MAAM,QAAQ;AAAA,IACd,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,EACpC;AAEA,QAAM,SACJ,QAAQ,SAAS,SACb;AAAA,IACE,GAAG;AAAA,IACH,MAAM;AAAA,IACN,SAAS,QAAQ;AAAA,IACjB,GAAI,QAAQ,eAAe,SAAS,SAChC,EAAE,eAAe,QAAQ,cAAc,KAAK,IAC5C,CAAC;AAAA,EACP,IACA;AAAA,IACE,GAAG;AAAA,IACH,MAAM;AAAA,IACN,SAAS,QAAQ;AAAA,IACjB,GAAI,OAAQ,QAAgB,cAAc,WACtC,EAAE,WAAW,OAAQ,QAAgB,SAAS,EAAE,IAChD,CAAC;AAAA,IACL,GAAI,QAAQ,oBAAoB,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAAA,EACjE;AAEN,MAAI,gCAAgC,GAAG;AACrC,oBAAgB,UAAU,MAAM;AAAA,EAClC;AACA,6BAA2B;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,cAAc,KAAK;AAAA,EACrB,CAAC;AACD,iBAAe,IAAI,UAAU,QAAQ,IAAI;AAC3C;AAwBO,SAAS,+BAA+B,MAGtC;AACP,QAAM,MAAM,OAAO;AACnB,MAAI,gCAAgC,GAAG;AACrC,oBAAgB,sBAAsB,EAAE,KAAK,WAAW,KAAK,UAAU,CAAC,GAAG;AAAA,MACzE,MAAM;AAAA,MACN,WAAW,KAAK;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB,CAA6B;AAAA,EAC/B;AACA,+BAA6B;AAAA,IAC3B,WAAW,KAAK;AAAA,IAChB,WAAW;AAAA,IACX,SAAS,EAAE,aAAa,KAAK,YAAY;AAAA,IACzC,eAAc,oBAAI,KAAK,GAAE,YAAY;AAAA,EACvC,CAAC;AACD,MAAI,KAAK,cAAc,qBAAqB,GAAG;AAC7C,gCAA4B,KAAK;AAAA,EACnC;AACF;AAEO,SAAS,uBAAuB,MAG9B;AACP,QAAM,MAAM,OAAO;AACnB,MAAI,gCAAgC,GAAG;AACrC,oBAAgB,sBAAsB,EAAE,KAAK,WAAW,KAAK,UAAU,CAAC,GAAG;AAAA,MACzE,MAAM;AAAA,MACN,WAAW,KAAK;AAAA,MAChB,KAAK,KAAK;AAAA,IACZ,CAA6B;AAAA,EAC/B;AACA,+BAA6B;AAAA,IAC3B,WAAW,KAAK;AAAA,IAChB,WAAW;AAAA,IACX,SAAS,EAAE,KAAK,KAAK,IAAI;AAAA,IACzB,eAAc,oBAAI,KAAK,GAAE,YAAY;AAAA,EACvC,CAAC;AACD,MAAI,KAAK,cAAc,qBAAqB,GAAG;AAC7C,wBAAoB,KAAK;AAAA,EAC3B;AACF;;;ADvYA,SAAS,cAAc,MAA8B;AACnD,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,OAA6B;AAClD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,IAAI,IAAI,KAAK,KAAK;AACxB,MAAI,OAAO,MAAM,EAAE,QAAQ,CAAC,EAAG,QAAO;AACtC,SAAO;AACT;AAEA,SAAS,8BAA8B,MAGQ;AAC7C,QAAM,EAAE,UAAU,UAAU,IAAI;AAEhC,MAAI,OAAsB;AAC1B,MAAI,MAAqB;AACzB,MAAI,YAAyB;AAC7B,MAAI,aAA0B;AAC9B,MAAI,cAA6B;AACjC,MAAI,MAAqB;AACzB,MAAI,oBAAmC;AACvC,QAAM,kBAAkB,oBAAI,IAAoB;AAChD,MAAI,cAA6B;AAEjC,MAAI;AACF,iBAAa,IAAI,KAAKC,UAAS,QAAQ,EAAE,OAAO;AAAA,EAClD,QAAQ;AACN,iBAAa;AAAA,EACf;AAEA,MAAI;AACJ,MAAI;AACF,cAAUC,cAAa,UAAU,MAAM;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,aAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,UAAM,OAAO,QAAQ,KAAK;AAC1B,QAAI,CAAC,KAAM;AACX,UAAM,SAAS,cAAc,IAAI;AACjC,QAAI,CAAC,UAAU,OAAO,WAAW,SAAU;AAE3C,UAAM,QAAa;AAEnB,QAAI,CAAC,QAAQ,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,KAAK,GAAG;AAChE,aAAO,MAAM,KAAK,KAAK;AAAA,IACzB;AACA,QAAI,CAAC,OAAO,OAAO,MAAM,QAAQ,YAAY,MAAM,IAAI,KAAK,GAAG;AAC7D,YAAM,MAAM,IAAI,KAAK;AAAA,IACvB;AACA,QAAI,CAAC,WAAW;AACd,YAAM,KAAK,cAAc,MAAM,SAAS;AACxC,UAAI,GAAI,aAAY;AAAA,IACtB;AAEA,QAAI,OAAO,MAAM,SAAS,SAAU;AAEpC,QAAI,MAAM,SAAS,aAAa;AAC9B,UAAI,OAAO,MAAM,SAAS,YAAY,MAAM;AAC1C,4BAAoB,MAAM;AAC5B;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,WAAW;AAC5B,YAAM,WAAW,OAAO,MAAM,aAAa,WAAW,MAAM,WAAW;AACvE,YAAMC,WAAU,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;AACpE,UAAI,YAAYA,UAAS;AACvB,wBAAgB,IAAI,UAAUA,QAAO;AACrC,sBAAcA;AAAA,MAChB;AACA;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,gBAAgB;AACjC,YAAM,KAAK,OAAO,MAAM,cAAc,WAAW,MAAM,YAAY;AACnE,YAAM,QACJ,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc;AAC9D,UAAI,OAAO,aAAa,MAAO,eAAc;AAC7C;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,OAAO;AACxB,YAAM,KAAK,OAAO,MAAM,cAAc,WAAW,MAAM,YAAY;AACnE,YAAM,IAAI,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM;AACtD,UAAI,OAAO,aAAa,EAAG,OAAM;AACjC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WACH,oBACI,gBAAgB,IAAI,iBAAiB,KAAK,OAC3C,SACJ,eACA;AAEF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,qBAAqB,MAEP;AAC5B,QAAM,EAAE,IAAI,IAAI;AAChB,QAAM,aAAa,qBAAqB,GAAG;AAC3C,MAAI,CAACC,YAAW,UAAU,EAAG,QAAO,CAAC;AAErC,QAAM,aAAa,YAAY,UAAU,EACtC,OAAO,UAAQ,KAAK,SAAS,QAAQ,CAAC,EACtC,OAAO,UAAQ,CAAC,KAAK,WAAW,QAAQ,CAAC,EACzC,IAAI,WAAS;AAAA,IACZ,WAAW,SAAS,MAAM,QAAQ;AAAA,IAClC,UAAUC,MAAK,YAAY,IAAI;AAAA,EACjC,EAAE,EACD,OAAO,OAAK,OAAO,EAAE,SAAS,CAAC;AAElC,QAAM,QAAQ,WAAW,IAAI,CAAC,EAAE,WAAW,SAAS,OAAO;AAAA,IACzD;AAAA,IACA,GAAG,8BAA8B,EAAE,UAAU,UAAU,CAAC;AAAA,EAC1D,EAAE;AAEF,QAAM,KAAK,CAAC,GAAG,MAAM;AACnB,UAAM,KAAK,EAAE,YAAY,QAAQ,KAAK;AACtC,UAAM,KAAK,EAAE,YAAY,QAAQ,KAAK;AACtC,WAAO,KAAK;AAAA,EACd,CAAC;AAED,SAAO;AACT;AAEA,SAAS,8BAA8B,MAEP;AAC9B,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,cAAc,sBAAsB;AAC1C,MAAI,CAACD,YAAW,WAAW,EAAG,QAAO;AAErC,MAAI;AACJ,MAAI;AACF,mBAAe,YAAY,WAAW;AAAA,EACxC,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,aAAW,eAAe,cAAc;AACtC,UAAM,YAAYC,MAAK,aAAa,aAAa,GAAG,SAAS,QAAQ;AACrE,QAAID,YAAW,SAAS,EAAG,QAAO,EAAE,UAAU,UAAU;AAAA,EAC1D;AAEA,SAAO;AACT;AAEA,SAAS,yBAAyB,UAAiC;AACjE,MAAI;AACF,UAAM,UAAUF,cAAa,UAAU,MAAM;AAC7C,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,YAAM,OAAO,QAAQ,KAAK;AAC1B,UAAI,CAAC,KAAM;AACX,YAAM,SAAS,cAAc,IAAI;AACjC,UAAI,CAAC,UAAU,OAAO,WAAW,SAAU;AAC3C,YAAM,MAAO,OAAe;AAC5B,UAAI,OAAO,QAAQ,YAAY,IAAI,KAAK,EAAG,QAAO,IAAI,KAAK;AAAA,IAC7D;AAAA,EACF,QAAQ;AAAA,EACR;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,KAAa,WAA4B;AACvE,MAAI;AACF,WAAOE,YAAWC,MAAK,qBAAqB,GAAG,GAAG,GAAG,SAAS,QAAQ,CAAC;AAAA,EACzE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,kCAAkC,MAG1B;AACtB,QAAM,EAAE,KAAK,WAAW,IAAI;AAC5B,QAAM,KAAK,WAAW,KAAK;AAC3B,MAAI,CAAC,GAAI,QAAO,EAAE,MAAM,aAAa,WAAW;AAEhD,MAAI,OAAO,EAAE,GAAG;AACd,QAAI,uBAAuB,KAAK,EAAE,EAAG,QAAO,EAAE,MAAM,MAAM,WAAW,GAAG;AAExE,UAAM,YAAY,8BAA8B,EAAE,WAAW,GAAG,CAAC;AACjE,QAAI,WAAW;AACb,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW;AAAA,QACX,UAAU,yBAAyB,UAAU,QAAQ;AAAA,MACvD;AAAA,IACF;AAEA,WAAO,EAAE,MAAM,aAAa,YAAY,GAAG;AAAA,EAC7C;AAEA,QAAM,WAAW,qBAAqB,EAAE,IAAI,CAAC;AAC7C,QAAM,UAAU,SACb,OAAO,OAAK,EAAE,SAAS,MAAM,EAAE,gBAAgB,EAAE,EACjD,IAAI,OAAK,EAAE,SAAS;AAEvB,MAAI,QAAQ,WAAW,EAAG,QAAO,EAAE,MAAM,MAAM,WAAW,QAAQ,CAAC,EAAG;AACtE,MAAI,QAAQ,SAAS;AACnB,WAAO,EAAE,MAAM,aAAa,YAAY,IAAI,oBAAoB,QAAQ;AAC1E,SAAO,EAAE,MAAM,aAAa,YAAY,GAAG;AAC7C;",
6
- "names": ["existsSync", "readFileSync", "statSync", "join", "statSync", "readFileSync", "summary", "existsSync", "join"]
7
- }