pybao-cli 1.5.7 → 1.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/REPL-FDBOFOZN.js +50 -0
  2. package/dist/{acp-2LMTSBAU.js → acp-TKO6ZSSV.js} +54 -36
  3. package/dist/acp-TKO6ZSSV.js.map +7 -0
  4. package/dist/{agentsValidate-YQSHYCYC.js → agentsValidate-RDNLI7GA.js} +7 -7
  5. package/dist/{ask-4Z4LH5IS.js → ask-KTXMYPIA.js} +60 -34
  6. package/dist/ask-KTXMYPIA.js.map +7 -0
  7. package/dist/{autoUpdater-UTX7ZX2N.js → autoUpdater-53BZ6QWD.js} +3 -3
  8. package/dist/{chunk-OY6SB5B3.js → chunk-276RV4DQ.js} +4 -4
  9. package/dist/{chunk-7FFBXWS3.js → chunk-35X2VS4L.js} +3 -3
  10. package/dist/{chunk-VZDDKAL2.js → chunk-4C2CGHBI.js} +2 -2
  11. package/dist/{chunk-Y2RSIF7P.js → chunk-4KPVE4K7.js} +1 -1
  12. package/dist/{chunk-SDKYJZWD.js → chunk-57GJQMFS.js} +2 -2
  13. package/dist/{chunk-3JH34RBY.js → chunk-6PXEXL7C.js} +2 -2
  14. package/dist/{chunk-IKMMFSNJ.js → chunk-AMQ6XZOU.js} +1 -1
  15. package/dist/{chunk-W4PXRGP3.js → chunk-AWRDD6BG.js} +18 -1
  16. package/dist/chunk-AWRDD6BG.js.map +7 -0
  17. package/dist/{chunk-5JKCAVMI.js → chunk-BZGQQ4WZ.js} +3 -3
  18. package/dist/{chunk-4BFEUSKN.js → chunk-CATWZQ3R.js} +2 -2
  19. package/dist/{chunk-EGJRWKZ6.js → chunk-CPLMSZ63.js} +4 -4
  20. package/dist/{chunk-PI5RBPFA.js → chunk-DA6NJEFI.js} +2 -2
  21. package/dist/{chunk-IFC2PLAM.js → chunk-E35YJNX2.js} +4 -4
  22. package/dist/{chunk-TIMEEE5U.js → chunk-G7DKRXDS.js} +1 -4
  23. package/dist/{chunk-5F6IQJHF.js → chunk-HIJYNCCN.js} +1 -1
  24. package/dist/{chunk-F7HYDAWW.js → chunk-JE43CQYI.js} +3 -3
  25. package/dist/{chunk-JEAXJP2E.js → chunk-JLC2I3EY.js} +1 -1
  26. package/dist/chunk-JRMAK4PK.js +926 -0
  27. package/dist/chunk-JRMAK4PK.js.map +7 -0
  28. package/dist/{chunk-KLD4WAB6.js → chunk-KNLP4UO6.js} +4 -4
  29. package/dist/chunk-L3R7MPZU.js +81 -0
  30. package/dist/{chunk-ZD6NMP33.js.map → chunk-L3R7MPZU.js.map} +1 -1
  31. package/dist/{chunk-PMYMUSB4.js → chunk-LEYWQQ7V.js} +3 -3
  32. package/dist/{chunk-EN7L7JWN.js → chunk-LIOZM4KE.js} +1 -1
  33. package/dist/chunk-OC5CZWBQ.js.map +7 -0
  34. package/dist/{chunk-SWNNPHFY.js → chunk-PH6DPTO3.js} +2025 -1321
  35. package/dist/chunk-PH6DPTO3.js.map +7 -0
  36. package/dist/{chunk-CJ2YYIJN.js → chunk-PPFVOBEG.js} +144 -76
  37. package/dist/chunk-PPFVOBEG.js.map +7 -0
  38. package/dist/{chunk-4R7NUADF.js → chunk-Q5EZLUFC.js} +1 -1
  39. package/dist/{chunk-LYMH46VN.js → chunk-QMN64ICT.js} +3 -3
  40. package/dist/{chunk-VBV5RHIK.js → chunk-R4ZEH3KJ.js} +1 -1
  41. package/dist/{chunk-TKEWBSVM.js → chunk-SNASBZ2C.js} +3 -3
  42. package/dist/chunk-T7P3SSAQ.js +78 -0
  43. package/dist/chunk-T7P3SSAQ.js.map +7 -0
  44. package/dist/{chunk-T7UTA73F.js → chunk-TLZS274Y.js} +3 -3
  45. package/dist/{chunk-IOP3VA4X.js → chunk-YSL5H7NJ.js} +2 -2
  46. package/dist/{chunk-HFVRQO2J.js → chunk-YTEQEQ56.js} +48 -40
  47. package/dist/chunk-YTEQEQ56.js.map +7 -0
  48. package/dist/{cli-N3Q4D4BW.js → cli-LYWCNPC6.js} +131 -102
  49. package/dist/cli-LYWCNPC6.js.map +7 -0
  50. package/dist/commands-DYXAWJO6.js +54 -0
  51. package/dist/{config-GZXNPIIG.js → config-66BMMOES.js} +4 -4
  52. package/dist/{context-TUO5CUR3.js → context-PG7YTQCJ.js} +6 -6
  53. package/dist/conversationPersistence-DB6IUU2I.js +13 -0
  54. package/dist/{conversationTracker-APB6PR5Z.js → conversationTracker-WG3J56PX.js} +4 -3
  55. package/dist/{customCommands-J4DV6OI5.js → customCommands-XDKUVT73.js} +4 -4
  56. package/dist/{env-YBYEMHYQ.js → env-FW74XJHK.js} +2 -2
  57. package/dist/{file-KIBY6XZX.js → file-U2NXQ6RC.js} +4 -4
  58. package/dist/index.js +3 -3
  59. package/dist/{llm-T7C6QJWB.js → llm-6VJMMPDO.js} +416 -49
  60. package/dist/llm-6VJMMPDO.js.map +7 -0
  61. package/dist/{llmLazy-FDVUCPDQ.js → llmLazy-LYGZWC7G.js} +1 -1
  62. package/dist/{loader-QCHS455W.js → loader-DMZVU2XJ.js} +4 -4
  63. package/dist/{lsp-TE2SQ6CO.js → lsp-6LNF5DQB.js} +6 -6
  64. package/dist/{lspAnchor-IZ7YQJ64.js → lspAnchor-SF5Y7ZJT.js} +6 -6
  65. package/dist/{mcp-PLAWUZOQ.js → mcp-NLDX3RQE.js} +7 -7
  66. package/dist/{mentionProcessor-2O3AMZHB.js → mentionProcessor-BMX6VGRH.js} +5 -5
  67. package/dist/{messages-ZHFZ2OOG.js → messages-OTQ6IJM5.js} +9 -5
  68. package/dist/{model-GBC2PBVJ.js → model-KWGEASLY.js} +5 -5
  69. package/dist/{openai-2V2J23AE.js → openai-XIRWQY5H.js} +5 -5
  70. package/dist/{outputStyles-WD4VD4GZ.js → outputStyles-HKYM5C76.js} +4 -4
  71. package/dist/{pluginRuntime-WNZS26EV.js → pluginRuntime-25Y2MVIN.js} +6 -6
  72. package/dist/{pluginValidation-YP7MW35I.js → pluginValidation-CIJIQKGB.js} +6 -6
  73. package/dist/prompts-WH3VEHH6.js +56 -0
  74. package/dist/{pybAgentSessionLoad-YABCHELS.js → pybAgentSessionLoad-TF3BFX4S.js} +4 -4
  75. package/dist/{pybAgentSessionResume-C3LNSFQL.js → pybAgentSessionResume-Y5JO4GLH.js} +4 -4
  76. package/dist/{pybAgentStreamJsonSession-DFOGLEOB.js → pybAgentStreamJsonSession-46VLF4QN.js} +4 -3
  77. package/dist/pybAgentStreamJsonSession-46VLF4QN.js.map +7 -0
  78. package/dist/{pybHooks-LGGIB5PJ.js → pybHooks-LZPU4EF6.js} +4 -4
  79. package/dist/query-4B3GTPBN.js +58 -0
  80. package/dist/{registry-EYMCKHRG.js → registry-6LUE7ZWC.js} +5 -5
  81. package/dist/{ripgrep-JZN2MVSK.js → ripgrep-KVB55D22.js} +3 -3
  82. package/dist/{skillMarketplace-ETYXMAXF.js → skillMarketplace-2IVEPC2E.js} +3 -3
  83. package/dist/{state-MAVHRDNE.js → state-OGBESWFS.js} +2 -2
  84. package/dist/{theme-AUEZ6SNA.js → theme-QQ2SCFEK.js} +5 -5
  85. package/dist/{toolPermissionSettings-7JZYBUZC.js → toolPermissionSettings-ZGGPBK6S.js} +6 -6
  86. package/dist/tools-UXPFIHD4.js +55 -0
  87. package/dist/tools-UXPFIHD4.js.map +7 -0
  88. package/dist/{userInput-V6RU4BEQ.js → userInput-75VCTJDE.js} +76 -49
  89. package/dist/userInput-75VCTJDE.js.map +7 -0
  90. package/package.json +18 -1
  91. package/dist/REPL-YW6AH5YU.js +0 -49
  92. package/dist/acp-2LMTSBAU.js.map +0 -7
  93. package/dist/ask-4Z4LH5IS.js.map +0 -7
  94. package/dist/chunk-CJ2YYIJN.js.map +0 -7
  95. package/dist/chunk-HFVRQO2J.js.map +0 -7
  96. package/dist/chunk-O6DTZU7F.js.map +0 -7
  97. package/dist/chunk-SWNNPHFY.js.map +0 -7
  98. package/dist/chunk-W4PXRGP3.js.map +0 -7
  99. package/dist/chunk-YNGGZILT.js +0 -516
  100. package/dist/chunk-YNGGZILT.js.map +0 -7
  101. package/dist/chunk-ZD6NMP33.js +0 -240
  102. package/dist/cli-N3Q4D4BW.js.map +0 -7
  103. package/dist/commands-OOINF26E.js +0 -53
  104. package/dist/llm-T7C6QJWB.js.map +0 -7
  105. package/dist/prompts-QPYUI6SX.js +0 -55
  106. package/dist/pybAgentStreamJsonSession-DFOGLEOB.js.map +0 -7
  107. package/dist/query-EC6HGBDS.js +0 -57
  108. package/dist/tools-3JFVDDSZ.js +0 -54
  109. package/dist/userInput-V6RU4BEQ.js.map +0 -7
  110. /package/dist/{REPL-YW6AH5YU.js.map → REPL-FDBOFOZN.js.map} +0 -0
  111. /package/dist/{agentsValidate-YQSHYCYC.js.map → agentsValidate-RDNLI7GA.js.map} +0 -0
  112. /package/dist/{autoUpdater-UTX7ZX2N.js.map → autoUpdater-53BZ6QWD.js.map} +0 -0
  113. /package/dist/{chunk-OY6SB5B3.js.map → chunk-276RV4DQ.js.map} +0 -0
  114. /package/dist/{chunk-7FFBXWS3.js.map → chunk-35X2VS4L.js.map} +0 -0
  115. /package/dist/{chunk-VZDDKAL2.js.map → chunk-4C2CGHBI.js.map} +0 -0
  116. /package/dist/{chunk-Y2RSIF7P.js.map → chunk-4KPVE4K7.js.map} +0 -0
  117. /package/dist/{chunk-SDKYJZWD.js.map → chunk-57GJQMFS.js.map} +0 -0
  118. /package/dist/{chunk-3JH34RBY.js.map → chunk-6PXEXL7C.js.map} +0 -0
  119. /package/dist/{chunk-IKMMFSNJ.js.map → chunk-AMQ6XZOU.js.map} +0 -0
  120. /package/dist/{chunk-5JKCAVMI.js.map → chunk-BZGQQ4WZ.js.map} +0 -0
  121. /package/dist/{chunk-4BFEUSKN.js.map → chunk-CATWZQ3R.js.map} +0 -0
  122. /package/dist/{chunk-EGJRWKZ6.js.map → chunk-CPLMSZ63.js.map} +0 -0
  123. /package/dist/{chunk-PI5RBPFA.js.map → chunk-DA6NJEFI.js.map} +0 -0
  124. /package/dist/{chunk-IFC2PLAM.js.map → chunk-E35YJNX2.js.map} +0 -0
  125. /package/dist/{chunk-TIMEEE5U.js.map → chunk-G7DKRXDS.js.map} +0 -0
  126. /package/dist/{chunk-5F6IQJHF.js.map → chunk-HIJYNCCN.js.map} +0 -0
  127. /package/dist/{chunk-F7HYDAWW.js.map → chunk-JE43CQYI.js.map} +0 -0
  128. /package/dist/{chunk-JEAXJP2E.js.map → chunk-JLC2I3EY.js.map} +0 -0
  129. /package/dist/{chunk-KLD4WAB6.js.map → chunk-KNLP4UO6.js.map} +0 -0
  130. /package/dist/{chunk-PMYMUSB4.js.map → chunk-LEYWQQ7V.js.map} +0 -0
  131. /package/dist/{chunk-EN7L7JWN.js.map → chunk-LIOZM4KE.js.map} +0 -0
  132. /package/dist/{chunk-O6DTZU7F.js → chunk-OC5CZWBQ.js} +0 -0
  133. /package/dist/{chunk-4R7NUADF.js.map → chunk-Q5EZLUFC.js.map} +0 -0
  134. /package/dist/{chunk-LYMH46VN.js.map → chunk-QMN64ICT.js.map} +0 -0
  135. /package/dist/{chunk-VBV5RHIK.js.map → chunk-R4ZEH3KJ.js.map} +0 -0
  136. /package/dist/{chunk-TKEWBSVM.js.map → chunk-SNASBZ2C.js.map} +0 -0
  137. /package/dist/{chunk-T7UTA73F.js.map → chunk-TLZS274Y.js.map} +0 -0
  138. /package/dist/{chunk-IOP3VA4X.js.map → chunk-YSL5H7NJ.js.map} +0 -0
  139. /package/dist/{commands-OOINF26E.js.map → commands-DYXAWJO6.js.map} +0 -0
  140. /package/dist/{config-GZXNPIIG.js.map → config-66BMMOES.js.map} +0 -0
  141. /package/dist/{context-TUO5CUR3.js.map → context-PG7YTQCJ.js.map} +0 -0
  142. /package/dist/{conversationTracker-APB6PR5Z.js.map → conversationPersistence-DB6IUU2I.js.map} +0 -0
  143. /package/dist/{customCommands-J4DV6OI5.js.map → conversationTracker-WG3J56PX.js.map} +0 -0
  144. /package/dist/{env-YBYEMHYQ.js.map → customCommands-XDKUVT73.js.map} +0 -0
  145. /package/dist/{file-KIBY6XZX.js.map → env-FW74XJHK.js.map} +0 -0
  146. /package/dist/{llmLazy-FDVUCPDQ.js.map → file-U2NXQ6RC.js.map} +0 -0
  147. /package/dist/{loader-QCHS455W.js.map → llmLazy-LYGZWC7G.js.map} +0 -0
  148. /package/dist/{lsp-TE2SQ6CO.js.map → loader-DMZVU2XJ.js.map} +0 -0
  149. /package/dist/{mcp-PLAWUZOQ.js.map → lsp-6LNF5DQB.js.map} +0 -0
  150. /package/dist/{lspAnchor-IZ7YQJ64.js.map → lspAnchor-SF5Y7ZJT.js.map} +0 -0
  151. /package/dist/{messages-ZHFZ2OOG.js.map → mcp-NLDX3RQE.js.map} +0 -0
  152. /package/dist/{mentionProcessor-2O3AMZHB.js.map → mentionProcessor-BMX6VGRH.js.map} +0 -0
  153. /package/dist/{model-GBC2PBVJ.js.map → messages-OTQ6IJM5.js.map} +0 -0
  154. /package/dist/{openai-2V2J23AE.js.map → model-KWGEASLY.js.map} +0 -0
  155. /package/dist/{outputStyles-WD4VD4GZ.js.map → openai-XIRWQY5H.js.map} +0 -0
  156. /package/dist/{pluginValidation-YP7MW35I.js.map → outputStyles-HKYM5C76.js.map} +0 -0
  157. /package/dist/{pluginRuntime-WNZS26EV.js.map → pluginRuntime-25Y2MVIN.js.map} +0 -0
  158. /package/dist/{prompts-QPYUI6SX.js.map → pluginValidation-CIJIQKGB.js.map} +0 -0
  159. /package/dist/{pybAgentSessionLoad-YABCHELS.js.map → prompts-WH3VEHH6.js.map} +0 -0
  160. /package/dist/{pybAgentSessionResume-C3LNSFQL.js.map → pybAgentSessionLoad-TF3BFX4S.js.map} +0 -0
  161. /package/dist/{pybHooks-LGGIB5PJ.js.map → pybAgentSessionResume-Y5JO4GLH.js.map} +0 -0
  162. /package/dist/{query-EC6HGBDS.js.map → pybHooks-LZPU4EF6.js.map} +0 -0
  163. /package/dist/{registry-EYMCKHRG.js.map → query-4B3GTPBN.js.map} +0 -0
  164. /package/dist/{ripgrep-JZN2MVSK.js.map → registry-6LUE7ZWC.js.map} +0 -0
  165. /package/dist/{skillMarketplace-ETYXMAXF.js.map → ripgrep-KVB55D22.js.map} +0 -0
  166. /package/dist/{state-MAVHRDNE.js.map → skillMarketplace-2IVEPC2E.js.map} +0 -0
  167. /package/dist/{theme-AUEZ6SNA.js.map → state-OGBESWFS.js.map} +0 -0
  168. /package/dist/{toolPermissionSettings-7JZYBUZC.js.map → theme-QQ2SCFEK.js.map} +0 -0
  169. /package/dist/{tools-3JFVDDSZ.js.map → toolPermissionSettings-ZGGPBK6S.js.map} +0 -0
@@ -9,58 +9,61 @@ import {
9
9
  UserBashInputMessage,
10
10
  getCommand,
11
11
  hasCommand
12
- } from "./chunk-SWNNPHFY.js";
13
- import "./chunk-JEAXJP2E.js";
14
- import "./chunk-5JKCAVMI.js";
15
- import "./chunk-CJ2YYIJN.js";
12
+ } from "./chunk-PH6DPTO3.js";
13
+ import "./chunk-Q5EZLUFC.js";
14
+ import "./chunk-JLC2I3EY.js";
15
+ import "./chunk-L3R7MPZU.js";
16
+ import "./chunk-BZGQQ4WZ.js";
17
+ import "./chunk-PPFVOBEG.js";
18
+ import "./chunk-T7P3SSAQ.js";
16
19
  import "./chunk-F4AXICO7.js";
17
- import "./chunk-4R7NUADF.js";
18
- import "./chunk-ZD6NMP33.js";
19
20
  import "./chunk-5P7HBXTD.js";
20
- import "./chunk-T7UTA73F.js";
21
- import "./chunk-3JH34RBY.js";
22
- import "./chunk-4BFEUSKN.js";
21
+ import "./chunk-TLZS274Y.js";
22
+ import "./chunk-6PXEXL7C.js";
23
+ import "./chunk-CATWZQ3R.js";
23
24
  import "./chunk-XKYHFZEC.js";
24
- import "./chunk-KLD4WAB6.js";
25
- import "./chunk-OY6SB5B3.js";
26
- import "./chunk-VBV5RHIK.js";
27
- import "./chunk-7FFBXWS3.js";
25
+ import "./chunk-KNLP4UO6.js";
26
+ import "./chunk-276RV4DQ.js";
27
+ import "./chunk-R4ZEH3KJ.js";
28
+ import "./chunk-35X2VS4L.js";
28
29
  import "./chunk-UNNVICVU.js";
29
- import "./chunk-IOP3VA4X.js";
30
- import "./chunk-PI5RBPFA.js";
30
+ import "./chunk-YSL5H7NJ.js";
31
+ import "./chunk-DA6NJEFI.js";
31
32
  import "./chunk-A3BVXXA3.js";
32
33
  import {
33
34
  NO_RESPONSE_REQUESTED,
34
35
  createAssistantMessage,
35
- createUserMessage,
36
- createUserTurnMessage
37
- } from "./chunk-YNGGZILT.js";
36
+ createUserMessageFromBlocks,
37
+ createUserMessageFromText,
38
+ createUserTurnMessageFromBlocks,
39
+ createUserTurnMessageFromText
40
+ } from "./chunk-JRMAK4PK.js";
38
41
  import "./chunk-3DFBSQIT.js";
39
42
  import "./chunk-B6IMQJZM.js";
40
43
  import "./chunk-OUXHGDLH.js";
41
- import "./chunk-SDKYJZWD.js";
44
+ import "./chunk-57GJQMFS.js";
42
45
  import "./chunk-QWIBSCDN.js";
43
- import "./chunk-EGJRWKZ6.js";
44
- import "./chunk-F7HYDAWW.js";
45
- import "./chunk-5F6IQJHF.js";
46
+ import "./chunk-CPLMSZ63.js";
47
+ import "./chunk-JE43CQYI.js";
48
+ import "./chunk-HIJYNCCN.js";
46
49
  import "./chunk-UZ34JEUK.js";
47
- import "./chunk-VZDDKAL2.js";
50
+ import "./chunk-4C2CGHBI.js";
48
51
  import "./chunk-BJSWTHRM.js";
49
- import "./chunk-LYMH46VN.js";
50
- import "./chunk-IFC2PLAM.js";
51
- import "./chunk-EN7L7JWN.js";
52
- import "./chunk-Y2RSIF7P.js";
53
- import "./chunk-PMYMUSB4.js";
52
+ import "./chunk-QMN64ICT.js";
53
+ import "./chunk-E35YJNX2.js";
54
+ import "./chunk-LIOZM4KE.js";
55
+ import "./chunk-4KPVE4K7.js";
56
+ import "./chunk-LEYWQQ7V.js";
54
57
  import {
55
58
  MalformedCommandError
56
59
  } from "./chunk-RQVLBMP7.js";
57
- import "./chunk-IKMMFSNJ.js";
60
+ import "./chunk-AMQ6XZOU.js";
58
61
  import {
59
62
  getCwd,
60
63
  logError,
61
64
  setCwd
62
- } from "./chunk-TIMEEE5U.js";
63
- import "./chunk-W4PXRGP3.js";
65
+ } from "./chunk-G7DKRXDS.js";
66
+ import "./chunk-AWRDD6BG.js";
64
67
  import "./chunk-I3J4JYES.js";
65
68
 
66
69
  // src/utils/messages/userInput.tsx
@@ -68,9 +71,15 @@ import { Box } from "ink";
68
71
  import { resolve } from "path";
69
72
  import chalk from "chalk";
70
73
  import * as React from "react";
74
+ var LOCAL_COMMAND_STDOUT_OPEN_TAG = ["<local-command-", "stdout>"].join("");
75
+ var LOCAL_COMMAND_STDOUT_CLOSE_TAG = ["</local-command-", "stdout>"].join("");
76
+ var LOCAL_COMMAND_STDERR_OPEN_TAG = ["<local-command-", "stderr>"].join("");
77
+ var LOCAL_COMMAND_STDERR_CLOSE_TAG = ["</local-command-", "stderr>"].join("");
71
78
  async function processUserInput(input, mode, setToolJSX, context, pastedImages) {
72
79
  if (mode === "bash") {
73
- const userMessage2 = createUserTurnMessage(`<bash-input>${input}</bash-input>`);
80
+ const userMessage2 = createUserTurnMessageFromBlocks([
81
+ { type: "text", text: `<bash-input>${input}</bash-input>` }
82
+ ]);
74
83
  if (input.startsWith("cd ")) {
75
84
  const oldCwd = getCwd();
76
85
  const newCwd = resolve(getCwd(), input.slice(3).trim());
@@ -133,9 +142,12 @@ async function processUserInput(input, mode, setToolJSX, context, pastedImages)
133
142
  setToolJSX(null);
134
143
  }
135
144
  } else if (mode === "pyb") {
136
- const userMessage2 = createUserTurnMessage(
137
- `<pyb-input>${input}</pyb-input>`
138
- );
145
+ const userMessage2 = createUserTurnMessageFromBlocks([
146
+ {
147
+ type: "text",
148
+ text: `<pyb-input>${input}</pyb-input>`
149
+ }
150
+ ]);
139
151
  userMessage2.options = {
140
152
  ...userMessage2.options,
141
153
  isPybRequest: true
@@ -154,7 +166,7 @@ async function processUserInput(input, mode, setToolJSX, context, pastedImages)
154
166
  ];
155
167
  }
156
168
  if (!hasCommand(commandName, context.options.commands)) {
157
- return [createUserTurnMessage(input)];
169
+ return [createUserTurnMessageFromText(input)];
158
170
  }
159
171
  const args = input.slice(commandName.length + 2);
160
172
  const newMessages = await getMessagesForSlashCommand(
@@ -182,12 +194,12 @@ async function processUserInput(input, mode, setToolJSX, context, pastedImages)
182
194
  ${input}` : input;
183
195
  if (processedInput.includes("!`") || processedInput.includes("@")) {
184
196
  try {
185
- const { executeBashCommands } = await import("./customCommands-J4DV6OI5.js");
197
+ const { executeBashCommands } = await import("./customCommands-XDKUVT73.js");
186
198
  if (processedInput.includes("!`")) {
187
199
  processedInput = await executeBashCommands(processedInput);
188
200
  }
189
201
  if (processedInput.includes("@")) {
190
- const { processMentions } = await import("./mentionProcessor-2O3AMZHB.js");
202
+ const { processMentions } = await import("./mentionProcessor-BMX6VGRH.js");
191
203
  await processMentions(processedInput);
192
204
  }
193
205
  } catch (error) {
@@ -220,9 +232,9 @@ ${input}` : input;
220
232
  if (!blocks.some((b) => b.type === "text")) {
221
233
  blocks.push({ type: "text", text: "" });
222
234
  }
223
- userMessage = createUserTurnMessage(blocks);
235
+ userMessage = createUserTurnMessageFromBlocks(blocks);
224
236
  } else {
225
- userMessage = createUserTurnMessage(processedInput);
237
+ userMessage = createUserTurnMessageFromText(processedInput);
226
238
  }
227
239
  if (isPybRequest) {
228
240
  userMessage.options = {
@@ -242,9 +254,14 @@ async function getMessagesForSlashCommand(commandName, args, setToolJSX, context
242
254
  (r) => {
243
255
  setToolJSX(null);
244
256
  resolve2([
245
- createUserMessage(`<command-name>${command.userFacingName()}</command-name>
257
+ createUserMessageFromBlocks([
258
+ {
259
+ type: "text",
260
+ text: `<command-name>${command.userFacingName()}</command-name>
246
261
  <command-message>${command.userFacingName()}</command-message>
247
- <command-args>${args}</command-args>`),
262
+ <command-args>${args}</command-args>`
263
+ }
264
+ ]),
248
265
  r ? createAssistantMessage(r) : createAssistantMessage(NO_RESPONSE_REQUESTED)
249
266
  ]);
250
267
  },
@@ -257,9 +274,14 @@ async function getMessagesForSlashCommand(commandName, args, setToolJSX, context
257
274
  });
258
275
  }
259
276
  case "local": {
260
- const userMessage = createUserMessage(`<command-name>${command.userFacingName()}</command-name>
277
+ const userMessage = createUserMessageFromBlocks([
278
+ {
279
+ type: "text",
280
+ text: `<command-name>${command.userFacingName()}</command-name>
261
281
  <command-message>${command.userFacingName()}</command-message>
262
- <command-args>${args}</command-args>`);
282
+ <command-args>${args}</command-args>`
283
+ }
284
+ ]);
263
285
  try {
264
286
  const result = await command.call(args, {
265
287
  ...context,
@@ -272,7 +294,7 @@ async function getMessagesForSlashCommand(commandName, args, setToolJSX, context
272
294
  return [
273
295
  userMessage,
274
296
  createAssistantMessage(
275
- `<local-command-stdout>${result}</local-command-stdout>`
297
+ `${LOCAL_COMMAND_STDOUT_OPEN_TAG}${result}${LOCAL_COMMAND_STDOUT_CLOSE_TAG}`
276
298
  )
277
299
  ];
278
300
  } catch (e) {
@@ -280,7 +302,7 @@ async function getMessagesForSlashCommand(commandName, args, setToolJSX, context
280
302
  return [
281
303
  userMessage,
282
304
  createAssistantMessage(
283
- `<local-command-stderr>${String(e)}</local-command-stderr>`
305
+ `${LOCAL_COMMAND_STDERR_OPEN_TAG}${String(e)}${LOCAL_COMMAND_STDERR_CLOSE_TAG}`
284
306
  )
285
307
  ];
286
308
  }
@@ -288,12 +310,17 @@ async function getMessagesForSlashCommand(commandName, args, setToolJSX, context
288
310
  case "prompt": {
289
311
  const commandName2 = command.userFacingName();
290
312
  const progressMessage = command.progressMessage || "running";
291
- const metaMessage = createUserMessage(`<command-name>${commandName2}</command-name>
313
+ const metaMessage = createUserMessageFromBlocks([
314
+ {
315
+ type: "text",
316
+ text: `<command-name>${commandName2}</command-name>
292
317
  <command-message>${commandName2} is ${progressMessage}\u2026</command-message>
293
- <command-args>${args}</command-args>`);
318
+ <command-args>${args}</command-args>`
319
+ }
320
+ ]);
294
321
  const prompt = await command.getPromptForCommand(args);
295
322
  const expandedMessages = prompt.map((msg) => {
296
- const userMessage = createUserMessage(
323
+ const userMessage = createUserMessageFromText(
297
324
  typeof msg.content === "string" ? msg.content : msg.content.map((block) => block.type === "text" ? block.text : "").join("\n")
298
325
  );
299
326
  userMessage.options = {
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/messages/userInput.tsx"],
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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",
6
+ "names": ["userMessage", "resolve", "commandName"]
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pybao-cli",
3
- "version": "1.5.7",
3
+ "version": "1.5.9",
4
4
  "bin": {
5
5
  "pyb": "cli.js",
6
6
  "pyb-acp": "cli-acp.js"
@@ -66,6 +66,23 @@
66
66
  "gate:runtime-assets-trend": "node scripts/runtime-assets-trend-gate.mjs",
67
67
  "report:runtime-assets-trend": "node scripts/runtime-assets-trend-report.mjs",
68
68
  "report:auto-compact-trend": "bun run scripts/auto-compact-trend-report.mjs",
69
+ "precheck:auto-compact-release": "node scripts/auto-compact-release-precheck.mjs",
70
+ "ci:auto-compact-release": "node scripts/auto-compact-release-precheck.mjs --artifact-dir tmp/auto-compact-release-ci --skip-gate 1 --skip-quality-check 1",
71
+ "route:auto-compact-release": "node scripts/auto-compact-release-failure-router.mjs",
72
+ "report:auto-compact-release-trend": "node scripts/auto-compact-release-trend-extract.mjs",
73
+ "report:auto-compact-release-daily-digest": "node scripts/auto-compact-release-daily-digest.mjs",
74
+ "check:auto-compact-batch-d-tag-dependency": "node scripts/batch-d-text-tag-dependency-check.mjs",
75
+ "audit:auto-compact-batch-d-decision": "node scripts/batch-d-decision-zero-tag-audit.mjs",
76
+ "evidence:auto-compact-batch-d": "node scripts/batch-d-evidence-chain.mjs",
77
+ "close:auto-compact-batch-d": "node scripts/batch-d-final-closure.mjs",
78
+ "close:auto-compact-batch-e": "node scripts/batch-e-rollout-closure.mjs",
79
+ "index:auto-compact-batch-e-approval": "node scripts/batch-e-approval-index.mjs",
80
+ "runbook:phase2-batch-s0": "node scripts/phase2-batch-s0-runbook.mjs",
81
+ "dict:auto-compact-failure-codes": "node scripts/auto-compact-failure-code-dictionary.mjs",
82
+ "index:auto-compact-replay": "node scripts/auto-compact-replay-index.mjs",
83
+ "gate:auto-compact-single-track-quant": "node scripts/auto-compact-single-track-quant-gate.mjs",
84
+ "alert:auto-compact-release": "node scripts/auto-compact-release-alert-dispatch.mjs",
85
+ "govern:auto-compact-baseline": "node scripts/auto-compact-baseline-audit-hook.mjs",
69
86
  "typecheck": "tsc --noEmit",
70
87
  "prepare": "bun run scripts/install-hooks.mjs",
71
88
  "sync:native-lock": "node scripts/sync-native-lock-versions.mjs",
@@ -1,49 +0,0 @@
1
- import { createRequire as __pybCreateRequire } from "node:module";
2
- const require = __pybCreateRequire(import.meta.url);
3
- import {
4
- REPL
5
- } from "./chunk-SWNNPHFY.js";
6
- import "./chunk-JEAXJP2E.js";
7
- import "./chunk-5JKCAVMI.js";
8
- import "./chunk-CJ2YYIJN.js";
9
- import "./chunk-F4AXICO7.js";
10
- import "./chunk-4R7NUADF.js";
11
- import "./chunk-ZD6NMP33.js";
12
- import "./chunk-5P7HBXTD.js";
13
- import "./chunk-T7UTA73F.js";
14
- import "./chunk-3JH34RBY.js";
15
- import "./chunk-4BFEUSKN.js";
16
- import "./chunk-XKYHFZEC.js";
17
- import "./chunk-KLD4WAB6.js";
18
- import "./chunk-OY6SB5B3.js";
19
- import "./chunk-VBV5RHIK.js";
20
- import "./chunk-7FFBXWS3.js";
21
- import "./chunk-UNNVICVU.js";
22
- import "./chunk-IOP3VA4X.js";
23
- import "./chunk-PI5RBPFA.js";
24
- import "./chunk-A3BVXXA3.js";
25
- import "./chunk-YNGGZILT.js";
26
- import "./chunk-3DFBSQIT.js";
27
- import "./chunk-B6IMQJZM.js";
28
- import "./chunk-OUXHGDLH.js";
29
- import "./chunk-SDKYJZWD.js";
30
- import "./chunk-QWIBSCDN.js";
31
- import "./chunk-EGJRWKZ6.js";
32
- import "./chunk-F7HYDAWW.js";
33
- import "./chunk-5F6IQJHF.js";
34
- import "./chunk-UZ34JEUK.js";
35
- import "./chunk-VZDDKAL2.js";
36
- import "./chunk-BJSWTHRM.js";
37
- import "./chunk-LYMH46VN.js";
38
- import "./chunk-IFC2PLAM.js";
39
- import "./chunk-EN7L7JWN.js";
40
- import "./chunk-Y2RSIF7P.js";
41
- import "./chunk-PMYMUSB4.js";
42
- import "./chunk-RQVLBMP7.js";
43
- import "./chunk-IKMMFSNJ.js";
44
- import "./chunk-TIMEEE5U.js";
45
- import "./chunk-W4PXRGP3.js";
46
- import "./chunk-I3J4JYES.js";
47
- export {
48
- REPL
49
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/acp/jsonrpc.ts", "../src/acp/stdioTransport.ts", "../src/acp/stdoutGuard.ts", "../src/acp/pybAcpAgent.ts", "../src/acp/protocol.ts", "../src/entrypoints/acp.ts"],
4
- "sourcesContent": ["import { format } from 'node:util'\n\nexport type JsonRpcId = string | number | null\n\nexport type JsonRpcRequest = {\n jsonrpc: '2.0'\n id: string | number\n method: string\n params?: unknown\n}\n\nexport type JsonRpcNotification = {\n jsonrpc: '2.0'\n method: string\n params?: unknown\n}\n\nexport type JsonRpcResponse = {\n jsonrpc: '2.0'\n id: JsonRpcId\n result?: unknown\n error?: { code: number; message: string; data?: unknown }\n}\n\ntype JsonRpcIncoming = JsonRpcRequest | JsonRpcNotification | JsonRpcResponse\n\nexport class JsonRpcError extends Error {\n readonly code: number\n readonly data?: unknown\n\n constructor(code: number, message: string, data?: unknown) {\n super(message)\n this.code = code\n this.data = data\n }\n}\n\nexport type JsonRpcHandler = (params: unknown) => Promise<unknown> | unknown\n\nconst JSONRPC_VERSION = '2.0'\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value)\n } catch {\n return format(value)\n }\n}\n\nfunction makeErrorResponse(\n id: JsonRpcId,\n code: number,\n message: string,\n data?: unknown,\n): JsonRpcResponse {\n return {\n jsonrpc: JSONRPC_VERSION,\n id,\n error: data === undefined ? { code, message } : { code, message, data },\n }\n}\n\nfunction normalizeId(id: unknown): JsonRpcId {\n return typeof id === 'string' || typeof id === 'number' ? id : null\n}\n\nexport class JsonRpcPeer {\n private readonly handlers = new Map<string, JsonRpcHandler>()\n private readonly pending = new Map<\n string | number,\n {\n resolve: (value: unknown) => void\n reject: (err: unknown) => void\n abort?: AbortSignal\n timeoutId?: NodeJS.Timeout\n }\n >()\n private nextId = 1\n private sendLine: ((line: string) => void) | null = null\n\n setSend(send: (line: string) => void): void {\n this.sendLine = send\n }\n\n registerMethod(method: string, handler: JsonRpcHandler): void {\n this.handlers.set(method, handler)\n }\n\n async handleIncoming(payload: unknown): Promise<void> {\n if (Array.isArray(payload)) {\n const responses: JsonRpcResponse[] = []\n for (const item of payload) {\n const r = await this.handleIncomingOne(item)\n if (r) responses.push(r)\n }\n if (responses.length > 0) {\n this.sendRaw(responses)\n }\n return\n }\n\n const response = await this.handleIncomingOne(payload)\n if (response) this.sendRaw(response)\n }\n\n private async handleIncomingOne(payload: unknown): Promise<JsonRpcResponse | null> {\n if (!isObject(payload)) {\n return makeErrorResponse(null, -32600, 'Invalid Request')\n }\n\n const jsonrpc = payload.jsonrpc\n if (jsonrpc !== JSONRPC_VERSION) {\n return makeErrorResponse(normalizeId(payload.id), -32600, 'Invalid Request')\n }\n\n const hasMethod = typeof payload.method === 'string' && payload.method.length > 0\n const hasId = typeof payload.id === 'string' || typeof payload.id === 'number'\n\n if (!hasMethod && hasId && ('result' in payload || 'error' in payload)) {\n this.handleResponse(payload as unknown as JsonRpcResponse)\n return null\n }\n\n if (!hasMethod) {\n return makeErrorResponse(normalizeId(payload.id), -32600, 'Invalid Request')\n }\n\n const method = String(payload.method)\n const params = 'params' in payload ? (payload as any).params : undefined\n const id = hasId ? (payload.id as string | number) : null\n\n const handler = this.handlers.get(method)\n if (!handler) {\n if (id === null) return null\n return makeErrorResponse(id, -32601, `Method not found: ${method}`)\n }\n\n if (id === null) {\n try {\n await handler(params)\n } catch {\n }\n return null\n }\n\n try {\n const result = await handler(params)\n return { jsonrpc: JSONRPC_VERSION, id, result: result ?? null }\n } catch (err) {\n if (err instanceof JsonRpcError) {\n return makeErrorResponse(id, err.code, err.message, err.data)\n }\n const message = err instanceof Error ? err.message : safeStringify(err)\n return makeErrorResponse(id, -32603, message)\n }\n }\n\n private handleResponse(msg: JsonRpcResponse): void {\n const id = normalizeId(msg.id)\n if (id === null) return\n const pending = this.pending.get(id)\n if (!pending) return\n this.pending.delete(id)\n\n if (pending.timeoutId) clearTimeout(pending.timeoutId)\n\n if (msg && typeof msg === 'object' && 'error' in msg && (msg as any).error) {\n const e = (msg as any).error\n const code = typeof e.code === 'number' ? e.code : -32603\n const message = typeof e.message === 'string' ? e.message : 'Unknown error'\n pending.reject(new JsonRpcError(code, message, e.data))\n return\n }\n\n pending.resolve((msg as any).result)\n }\n\n sendNotification(method: string, params?: unknown): void {\n this.sendRaw({ jsonrpc: JSONRPC_VERSION, method, ...(params !== undefined ? { params } : {}) })\n }\n\n sendRequest<T = unknown>(args: {\n method: string\n params?: unknown\n signal?: AbortSignal\n timeoutMs?: number\n }): Promise<T> {\n const id = this.nextId++\n const timeoutMs = args.timeoutMs\n\n const p = new Promise<T>((resolve, reject) => {\n const entry: {\n resolve: (value: unknown) => void\n reject: (err: unknown) => void\n abort?: AbortSignal\n timeoutId?: NodeJS.Timeout\n } = { resolve, reject, abort: args.signal }\n\n if (timeoutMs && Number.isFinite(timeoutMs) && timeoutMs > 0) {\n entry.timeoutId = setTimeout(() => {\n this.pending.delete(id)\n reject(new JsonRpcError(-32000, `Request timed out: ${args.method}`))\n }, timeoutMs)\n }\n\n if (args.signal) {\n const onAbort = () => {\n this.pending.delete(id)\n if (entry.timeoutId) clearTimeout(entry.timeoutId)\n reject(new JsonRpcError(-32000, `Request aborted: ${args.method}`))\n }\n if (args.signal.aborted) {\n onAbort()\n return\n }\n args.signal.addEventListener('abort', onAbort, { once: true })\n }\n\n this.pending.set(id, entry)\n })\n\n this.sendRaw({\n jsonrpc: JSONRPC_VERSION,\n id,\n method: args.method,\n ...(args.params !== undefined ? { params: args.params } : {}),\n })\n\n return p\n }\n\n private sendRaw(obj: unknown): void {\n const send = this.sendLine\n if (!send) {\n throw new Error('JsonRpcPeer send() not configured')\n }\n const line = JSON.stringify(obj)\n send(line)\n }\n}\n\n", "import readline from 'node:readline'\n\nimport { JsonRpcPeer } from './jsonrpc'\n\ntype TransportOptions = {\n writeLine: (line: string) => void\n}\n\nexport class StdioTransport {\n private rl: readline.Interface | null = null\n private readonly pending = new Set<Promise<void>>()\n\n constructor(\n private readonly peer: JsonRpcPeer,\n private readonly opts: TransportOptions,\n ) {}\n\n start(): void {\n if (this.rl) return\n\n this.peer.setSend(this.opts.writeLine)\n\n this.rl = readline.createInterface({\n input: process.stdin,\n crlfDelay: Infinity,\n })\n\n this.rl.on('line', line => {\n const trimmed = line.trim()\n if (!trimmed) return\n\n try {\n const payload = JSON.parse(trimmed)\n const p = this.peer.handleIncoming(payload).catch(() => {\n })\n this.pending.add(p)\n void p.finally(() => this.pending.delete(p))\n } catch (err) {\n this.opts.writeLine(\n JSON.stringify({\n jsonrpc: '2.0',\n id: null,\n error: { code: -32700, message: 'Parse error' },\n }),\n )\n }\n })\n\n this.rl.on('close', () => {\n void (async () => {\n const pending = Array.from(this.pending)\n if (pending.length > 0) {\n await Promise.allSettled(pending)\n }\n process.exit(0)\n })()\n })\n }\n\n stop(): void {\n this.rl?.close()\n this.rl = null\n }\n}\n", "import { format } from 'node:util'\n\ntype WriteFn = typeof process.stdout.write\n\ntype GuardHandle = {\n writeAcpLine: (line: string) => void\n restore: () => void\n originalStdoutWrite: WriteFn\n}\n\nfunction writeTo(\n write: WriteFn,\n chunk: unknown,\n encoding?: BufferEncoding,\n cb?: (err?: Error | null) => void,\n): boolean {\n if (typeof encoding === 'function') {\n return write(chunk as any, undefined as any, encoding as any)\n }\n return write(chunk as any, encoding as any, cb as any)\n}\n\nexport function installStdoutGuard(): GuardHandle {\n const originalStdoutWrite = process.stdout.write.bind(process.stdout)\n const originalStderrWrite = process.stderr.write.bind(process.stderr)\n\n const originalConsoleLog = console.log.bind(console)\n const originalConsoleInfo = console.info.bind(console)\n const originalConsoleDebug = console.debug.bind(console)\n const originalConsoleWarn = console.warn.bind(console)\n const originalConsoleError = console.error.bind(console)\n\n const writeAcpLine = (line: string) => {\n writeTo(originalStdoutWrite, `${line}\\n`)\n }\n\n const writeLogToStderr = (...args: unknown[]) => {\n writeTo(originalStderrWrite, `${format(...args)}\\n`)\n }\n\n console.log = writeLogToStderr as any\n console.info = writeLogToStderr as any\n console.debug = writeLogToStderr as any\n console.warn = writeLogToStderr as any\n console.error = writeLogToStderr as any\n\n process.stdout.write = ((chunk: any, encoding?: any, cb?: any) => {\n return writeTo(originalStderrWrite, chunk, encoding, cb)\n }) as any\n\n const restore = () => {\n process.stdout.write = originalStdoutWrite as any\n console.log = originalConsoleLog as any\n console.info = originalConsoleInfo as any\n console.debug = originalConsoleDebug as any\n console.warn = originalConsoleWarn as any\n console.error = originalConsoleError as any\n }\n\n return { writeAcpLine, restore, originalStdoutWrite }\n}\n\n", "import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'\nimport { dirname, isAbsolute, join, resolve } from 'node:path'\n\nimport { nanoid } from 'nanoid'\n\nimport { JsonRpcError, JsonRpcPeer } from './jsonrpc'\nimport * as Protocol from './protocol'\n\nimport { MACRO } from '@constants/macros'\nimport { PRODUCT_COMMAND } from '@constants/product'\nimport { getContext } from '@context'\nimport { getCommands, type Command } from '@commands'\nimport { getTools } from '@tools'\nimport type { Tool, ToolUseContext } from '@tool'\nimport { query, type Message, type UserMessage, type AssistantMessage } from '@query'\nimport { hasPermissionsToUseTool } from '@permissions'\nimport { createAssistantMessage, createUserTurnMessage } from '@utils/messages'\nimport { getSystemPrompt } from '@constants/prompts'\nimport { setCwd, setOriginalCwd } from '@utils/state'\nimport { logError } from '@utils/log'\nimport { grantReadPermissionForOriginalDir } from '@utils/permissions/filesystem'\nimport { resolveXdgDataPath } from '@utils/config/env'\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js'\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport {\n loadToolPermissionContextFromDisk,\n persistToolPermissionUpdateToDisk,\n} from '@utils/permissions/toolPermissionSettings'\nimport { applyToolPermissionContextUpdates } from '@pyb-types/toolPermissionContext'\nimport type { ToolPermissionContext } from '@pyb-types/toolPermissionContext'\nimport type { CanUseToolFn } from '@pyb-types/canUseTool'\nimport type { WrappedClient } from '@services/mcpClient'\nimport { getClients } from '@services/mcpClient'\nimport { ConversationTracker } from '@utils/session/conversationTracker'\nimport { FileSystemConversationPersistence } from '@utils/session/conversationPersistence'\nimport {\n type SessionCoreStateShape,\n ensureSessionState,\n getCurrentSessionId,\n setCurrentSessionId,\n} from '@utils/session/sessionState'\n\ntype AcpSharedSessionCore = Required<\n SessionCoreStateShape<\n Message,\n ToolPermissionContext,\n ToolUseContext['responseState'],\n ConversationTracker,\n Protocol.SessionModeId\n >\n>\n\ntype SessionState = AcpSharedSessionCore & {\n mcpServers: Protocol.McpServer[]\n mcpClients: WrappedClient[]\n\n commands: Command[]\n tools: Tool[]\n\n systemPrompt: string[]\n context: Record<string, string>\n activeAbortController: AbortController | null\n\n toolCalls: Map<\n string,\n {\n title: string\n kind: Protocol.ToolKind\n status: Protocol.ToolCallStatus\n rawInput?: Protocol.JsonObject\n fileSnapshot?: {\n path: string\n content: string\n }\n }\n >\n}\n\nfunction asJsonObject(value: unknown): Protocol.JsonObject | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined\n try {\n JSON.stringify(value)\n return value as Protocol.JsonObject\n } catch {\n return undefined\n }\n}\n\nfunction toolKindForName(toolName: string): Protocol.ToolKind {\n switch (toolName) {\n case 'Read':\n return 'read'\n case 'Write':\n case 'Edit':\n case 'MultiEdit':\n case 'NotebookEdit':\n return 'edit'\n case 'Grep':\n case 'Glob':\n return 'search'\n case 'Bash':\n case 'TaskOutput':\n case 'KillShell':\n return 'execute'\n case 'SwitchModel':\n return 'switch_mode'\n default:\n return 'other'\n }\n}\n\nfunction titleForToolCall(toolName: string, input: Record<string, unknown>): string {\n if (toolName === 'Read' && typeof input.file_path === 'string') {\n return `Read ${input.file_path}`\n }\n if ((toolName === 'Write' || toolName === 'Edit' || toolName === 'MultiEdit') && typeof input.file_path === 'string') {\n return `${toolName} ${input.file_path}`\n }\n if (toolName === 'Bash' && typeof input.command === 'string') {\n const cmd = input.command.trim().replace(/\\s+/g, ' ')\n const clipped = cmd.length > 120 ? `${cmd.slice(0, 117)}...` : cmd\n return `Run ${clipped}`\n }\n return toolName\n}\n\nfunction blocksToText(blocks: Protocol.ContentBlock[]): string {\n const parts: string[] = []\n\n for (const block of blocks) {\n if (!block || typeof block !== 'object') continue\n\n switch ((block as any).type) {\n case 'text': {\n const text = typeof (block as any).text === 'string' ? (block as any).text : ''\n if (text) parts.push(text)\n break\n }\n case 'resource': {\n const resource = (block as any).resource || {}\n const uri = typeof resource.uri === 'string' ? resource.uri : ''\n const mimeType =\n typeof resource.mimeType === 'string' && resource.mimeType ? resource.mimeType : 'text/plain'\n if (typeof resource.text === 'string') {\n parts.push(\n [\n '',\n `@resource ${uri} (${mimeType})`,\n '```',\n resource.text,\n '```',\n ].join('\\n'),\n )\n } else if (typeof resource.blob === 'string') {\n parts.push(\n [\n '',\n `@resource ${uri} (${mimeType}) [base64]`,\n resource.blob,\n ].join('\\n'),\n )\n } else if (uri) {\n parts.push(`@resource ${uri} (${mimeType})`)\n }\n break\n }\n case 'resource_link': {\n const uri = typeof (block as any).uri === 'string' ? (block as any).uri : ''\n const name = typeof (block as any).name === 'string' ? (block as any).name : ''\n const title = typeof (block as any).title === 'string' ? (block as any).title : ''\n const description =\n typeof (block as any).description === 'string' ? (block as any).description : ''\n\n parts.push(\n [\n '',\n `@resource_link ${name || uri}`,\n ...(title ? [title] : []),\n ...(description ? [description] : []),\n ...(uri ? [uri] : []),\n ].join('\\n'),\n )\n break\n }\n case 'image':\n case 'audio': {\n break\n }\n default:\n break\n }\n }\n\n return parts.join('\\n').trim()\n}\n\nfunction extractAssistantText(msg: AssistantMessage): string {\n const blocks: any[] = Array.isArray((msg as any)?.message?.content) ? ((msg as any).message.content as any[]) : []\n const texts: string[] = []\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type === 'text' && typeof b.text === 'string') texts.push(b.text)\n if (b.type === 'thinking' && typeof (b as any).thinking === 'string') texts.push((b as any).thinking)\n }\n return texts.join('').trim()\n}\n\nfunction extractToolUses(msg: AssistantMessage): Array<{ id: string; name: string; input: Record<string, unknown> }> {\n const blocks: any[] = Array.isArray((msg as any)?.message?.content) ? ((msg as any).message.content as any[]) : []\n const out: Array<{ id: string; name: string; input: Record<string, unknown> }> = []\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type !== 'tool_use') continue\n const id = typeof b.id === 'string' ? b.id : ''\n const name = typeof b.name === 'string' ? b.name : ''\n const input = b.input && typeof b.input === 'object' && !Array.isArray(b.input) ? (b.input as Record<string, unknown>) : {}\n if (id && name) out.push({ id, name, input })\n }\n return out\n}\n\nfunction extractToolResults(msg: UserMessage): Array<{ toolUseId: string; isError: boolean; content: string }> {\n const content = (msg as any)?.message?.content\n const blocks: any[] = Array.isArray(content) ? content : []\n const out: Array<{ toolUseId: string; isError: boolean; content: string }> = []\n\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type !== 'tool_result') continue\n const toolUseId = typeof b.tool_use_id === 'string' ? b.tool_use_id : ''\n const isError = Boolean(b.is_error)\n const raw = b.content\n const text =\n typeof raw === 'string'\n ? raw\n : Array.isArray(raw)\n ? raw\n .filter(x => x && typeof x === 'object' && (x as any).type === 'text')\n .map(x => String((x as any).text ?? ''))\n .join('')\n : ''\n if (toolUseId) out.push({ toolUseId, isError, content: text })\n }\n\n return out\n}\n\nconst ACP_SESSION_STORE_VERSION = 1\nconst MAX_DIFF_FILE_BYTES = 512_000\nconst MAX_DIFF_TEXT_CHARS = 400_000\n\ntype PersistedAcpSession = {\n version: number\n sessionId: string\n cwd: string\n mcpServers: Protocol.McpServer[]\n messages: Message[]\n toolPermissionContext: ToolPermissionContext\n readFileTimestamps: Record<string, number>\n responseState: ToolUseContext['responseState']\n currentModeId: Protocol.SessionModeId\n}\n\nfunction getProjectDirSlug(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\n}\n\nfunction sanitizeSessionId(sessionId: string): string {\n return sessionId.replace(/[^a-zA-Z0-9_-]/g, '_')\n}\n\nfunction getAcpSessionDir(cwd: string): string {\n return resolveXdgDataPath(join(getProjectDirSlug(cwd), 'acp-sessions'))\n}\n\nfunction getConversationTrackerPersistenceDir(cwd: string): string {\n return resolveXdgDataPath(join(getProjectDirSlug(cwd), 'conversation-trackers'))\n}\n\nfunction getAcpSessionFilePath(cwd: string, sessionId: string): string {\n return join(getAcpSessionDir(cwd), `${sanitizeSessionId(sessionId)}.json`)\n}\n\nfunction readTextFileForDiff(filePath: string): string | null {\n try {\n const stats = statSync(filePath)\n if (!stats.isFile()) return null\n if (stats.size > MAX_DIFF_FILE_BYTES) return null\n return readFileSync(filePath, 'utf8')\n } catch {\n return null\n }\n}\n\nfunction truncateDiffText(text: string): string {\n if (text.length <= MAX_DIFF_TEXT_CHARS) return text\n return `${text.slice(0, MAX_DIFF_TEXT_CHARS)}\\n\\n[truncated ${text.length - MAX_DIFF_TEXT_CHARS} chars]`\n}\n\nfunction persistAcpSessionToDisk(session: SessionState): void {\n try {\n const dir = getAcpSessionDir(session.cwd)\n mkdirSync(dir, { recursive: true })\n\n const payload: PersistedAcpSession = {\n version: ACP_SESSION_STORE_VERSION,\n sessionId: session.sessionId,\n cwd: session.cwd,\n mcpServers: session.mcpServers,\n messages: session.messages,\n toolPermissionContext: session.toolPermissionContext,\n readFileTimestamps: session.readFileTimestamps,\n responseState: session.responseState,\n currentModeId: session.currentModeId,\n }\n\n const path = getAcpSessionFilePath(session.cwd, session.sessionId)\n writeFileSync(path, JSON.stringify(payload, null, 2), 'utf8')\n } catch (e) {\n logError(e)\n }\n}\n\nfunction loadAcpSessionFromDisk(cwd: string, sessionId: string): PersistedAcpSession | null {\n try {\n const path = getAcpSessionFilePath(cwd, sessionId)\n if (!existsSync(path)) return null\n const raw = readFileSync(path, 'utf8')\n const parsed = JSON.parse(raw) as PersistedAcpSession\n if (!parsed || typeof parsed !== 'object') return null\n if (parsed.sessionId !== sessionId) return null\n if (typeof parsed.cwd !== 'string' || parsed.cwd !== cwd) return null\n if (!Array.isArray(parsed.messages)) return null\n return parsed\n } catch {\n return null\n }\n}\n\nasync function connectAcpMcpServers(mcpServers: Protocol.McpServer[]): Promise<WrappedClient[]> {\n if (!Array.isArray(mcpServers) || mcpServers.length === 0) return []\n\n const rawTimeout = process.env.MCP_CONNECTION_TIMEOUT_MS\n const parsedTimeout = rawTimeout ? Number.parseInt(rawTimeout, 10) : NaN\n const timeoutMs = Number.isFinite(parsedTimeout) ? parsedTimeout : 30_000\n\n const results: WrappedClient[] = []\n\n type Candidate = { kind: 'stdio' | 'http' | 'sse'; transport: unknown }\n\n const connectWithTimeout = async (client: Client, transport: unknown, name: string): Promise<void> => {\n const connectPromise = client.connect(transport as any)\n if (timeoutMs > 0) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(`Connection to MCP server \"${name}\" timed out after ${timeoutMs}ms`))\n }, timeoutMs)\n connectPromise.then(\n () => clearTimeout(timeoutId),\n () => clearTimeout(timeoutId),\n )\n })\n await Promise.race([connectPromise, timeoutPromise])\n } else {\n await connectPromise\n }\n }\n\n for (const server of mcpServers) {\n const serverType = typeof (server as any)?.type === 'string' ? String((server as any).type) : 'stdio'\n\n const name = typeof (server as any)?.name === 'string' ? String((server as any).name) : ''\n if (!name) {\n results.push({ name: '<invalid>', type: 'failed' })\n continue\n }\n\n const candidates: Candidate[] = []\n\n\t if (serverType === 'http' || serverType === 'sse') {\n\t const url = typeof (server as any)?.url === 'string' ? String((server as any).url) : ''\n\t if (!url) {\n\t results.push({ name, type: 'failed' })\n\t continue\n\t }\n\t\n\t let parsedUrl: URL\n\t try {\n\t parsedUrl = new URL(url)\n\t } catch (e) {\n\t logError(e)\n\t results.push({ name, type: 'failed' })\n\t continue\n\t }\n\n\t const headerList = Array.isArray((server as any)?.headers) ? ((server as any).headers as unknown[]) : []\n\t const headers: Record<string, string> = {}\n\t for (const h of headerList) {\n\t if (!h || typeof h !== 'object') continue\n const k = typeof (h as any).name === 'string' ? String((h as any).name) : ''\n const val = typeof (h as any).value === 'string' ? String((h as any).value) : ''\n if (k) headers[k] = val\n }\n\n\t const requestInit = Object.keys(headers).length > 0 ? { requestInit: { headers } } : {}\n\n\t if (serverType === 'http') {\n\t candidates.push(\n\t { kind: 'http', transport: new StreamableHTTPClientTransport(parsedUrl, requestInit as any) },\n\t { kind: 'sse', transport: new SSEClientTransport(parsedUrl, requestInit as any) },\n\t )\n\t } else {\n\t candidates.push(\n\t { kind: 'sse', transport: new SSEClientTransport(parsedUrl, requestInit as any) },\n\t { kind: 'http', transport: new StreamableHTTPClientTransport(parsedUrl, requestInit as any) },\n\t )\n\t }\n\t } else {\n const command = typeof (server as any)?.command === 'string' ? String((server as any).command) : ''\n const args = Array.isArray((server as any)?.args) ? ((server as any).args as unknown[]).map(a => String(a)) : []\n const envList = Array.isArray((server as any)?.env) ? ((server as any).env as unknown[]) : []\n\n if (!command) {\n results.push({ name, type: 'failed' })\n continue\n }\n\n const envFromParams: Record<string, string> = {}\n for (const v of envList) {\n if (!v || typeof v !== 'object') continue\n const k = typeof (v as any).name === 'string' ? String((v as any).name) : ''\n const val = typeof (v as any).value === 'string' ? String((v as any).value) : ''\n if (k) envFromParams[k] = val\n }\n\n candidates.push({\n kind: 'stdio',\n transport: new StdioClientTransport({\n command,\n args,\n env: { ...process.env, ...envFromParams } as Record<string, string>,\n stderr: 'pipe',\n }),\n })\n }\n\n let lastError: unknown\n for (const candidate of candidates) {\n const client = new Client(\n { name: PRODUCT_COMMAND, version: MACRO.VERSION || '0.0.0' },\n { capabilities: {} },\n )\n\n try {\n await connectWithTimeout(client, candidate.transport, name)\n\n let capabilities: Record<string, unknown> | null = null\n try {\n capabilities = client.getServerCapabilities() as any\n } catch {\n capabilities = null\n }\n\n results.push({ name, client, capabilities, type: 'connected' as const })\n lastError = null\n break\n } catch (e) {\n lastError = e\n try {\n await client.close()\n } catch {}\n }\n }\n\n if (lastError) {\n logError(lastError)\n results.push({ name, type: 'failed' as const })\n }\n }\n\n return results\n}\n\nfunction mergeMcpClients(base: WrappedClient[], extra: WrappedClient[]): WrappedClient[] {\n const map = new Map<string, WrappedClient>()\n for (const c of base) map.set(c.name, c)\n for (const c of extra) map.set(c.name, c)\n return Array.from(map.values())\n}\n\nexport class PybAcpAgent {\n private clientCapabilities: Protocol.ClientCapabilities = {}\n private sessions = new Map<string, SessionState>()\n\n constructor(private readonly peer: JsonRpcPeer) {\n this.registerMethods()\n }\n\n private registerMethods(): void {\n this.peer.registerMethod('initialize', this.handleInitialize.bind(this))\n this.peer.registerMethod('authenticate', this.handleAuthenticate.bind(this))\n this.peer.registerMethod('session/new', this.handleSessionNew.bind(this))\n this.peer.registerMethod('session/load', this.handleSessionLoad.bind(this))\n this.peer.registerMethod('session/prompt', this.handleSessionPrompt.bind(this))\n this.peer.registerMethod('session/set_mode', this.handleSessionSetMode.bind(this))\n this.peer.registerMethod('session/cancel', this.handleSessionCancel.bind(this))\n }\n\n private async handleInitialize(params: unknown): Promise<Protocol.InitializeResponse> {\n const p = (params ?? {}) as Partial<Protocol.InitializeParams>\n const protocolVersion = typeof p.protocolVersion === 'number' ? p.protocolVersion : Protocol.ACP_PROTOCOL_VERSION\n\n this.clientCapabilities =\n p.clientCapabilities && typeof p.clientCapabilities === 'object' ? (p.clientCapabilities as Protocol.ClientCapabilities) : {}\n\n return {\n protocolVersion: Protocol.ACP_PROTOCOL_VERSION,\n agentCapabilities: {\n loadSession: true,\n promptCapabilities: {\n image: false,\n audio: false,\n embeddedContext: true,\n embeddedContent: true,\n },\n mcpCapabilities: {\n http: true,\n sse: true,\n },\n },\n agentInfo: {\n name: 'pyb',\n title: 'Pyb',\n version: MACRO.VERSION || '0.0.0',\n },\n authMethods: [],\n }\n }\n\n private async handleAuthenticate(_params: unknown): Promise<Protocol.AuthenticateResponse> {\n return {}\n }\n\n private async handleSessionNew(params: unknown): Promise<Protocol.NewSessionResponse> {\n const p = (params ?? {}) as Partial<Protocol.NewSessionParams>\n const cwd = typeof p.cwd === 'string' ? p.cwd : ''\n if (!cwd) {\n throw new JsonRpcError(-32602, 'Missing required param: cwd')\n }\n if (!isAbsolute(cwd)) {\n throw new JsonRpcError(-32602, `cwd must be an absolute path: ${cwd}`)\n }\n\n setOriginalCwd(cwd)\n await setCwd(cwd)\n grantReadPermissionForOriginalDir()\n\n const mcpServers = Array.isArray(p.mcpServers) ? (p.mcpServers as Protocol.McpServer[]) : []\n\n const [commands, tools, ctx, systemPrompt, configuredMcpClients] = await Promise.all([\n getCommands(),\n getTools(),\n getContext(),\n getSystemPrompt({ disableSlashCommands: false }),\n getClients().catch(() => [] as WrappedClient[]),\n ])\n const acpMcpClients = await connectAcpMcpServers(mcpServers)\n const mcpClients = mergeMcpClients(configuredMcpClients, acpMcpClients)\n\n const toolPermissionContext = loadToolPermissionContextFromDisk({\n projectDir: cwd,\n includePybProjectConfig: true,\n isBypassPermissionsModeAvailable: true,\n })\n\n const sessionId = `sess_${nanoid()}`\n const conversationTracker = new ConversationTracker({\n sessionId,\n persistence: new FileSystemConversationPersistence(\n getConversationTrackerPersistenceDir(cwd),\n ),\n })\n conversationTracker.restore()\n\n const session: SessionState = {\n sessionId,\n cwd,\n mcpServers,\n mcpClients,\n commands,\n tools,\n systemPrompt,\n context: ctx,\n messages: [],\n toolPermissionContext,\n readFileTimestamps: {},\n responseState: {},\n conversationTracker,\n currentModeId: toolPermissionContext.mode ?? 'default',\n activeAbortController: null,\n toolCalls: new Map(),\n }\n\n this.sessions.set(sessionId, session)\n ensureSessionState(sessionId, {\n sessionId,\n cwd,\n modelErrors: {},\n currentError: null,\n })\n setCurrentSessionId(sessionId)\n\n this.sendAvailableCommands(session)\n this.sendCurrentMode(session)\n persistAcpSessionToDisk(session)\n\n return {\n sessionId,\n modes: this.getModeState(session),\n }\n }\n\n private async handleSessionLoad(params: unknown): Promise<Protocol.LoadSessionResponse> {\n const p = (params ?? {}) as Partial<Protocol.LoadSessionParams>\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const cwd = typeof p.cwd === 'string' ? p.cwd : ''\n if (!sessionId) throw new JsonRpcError(-32602, 'Missing required param: sessionId')\n if (!cwd) throw new JsonRpcError(-32602, 'Missing required param: cwd')\n if (!isAbsolute(cwd)) {\n throw new JsonRpcError(-32602, `cwd must be an absolute path: ${cwd}`)\n }\n\n setOriginalCwd(cwd)\n await setCwd(cwd)\n grantReadPermissionForOriginalDir()\n\n const persisted = loadAcpSessionFromDisk(cwd, sessionId)\n if (!persisted) {\n throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n }\n\n const mcpServers = Array.isArray(p.mcpServers) ? (p.mcpServers as Protocol.McpServer[]) : []\n\n const [commands, tools, ctx, systemPrompt, configuredMcpClients] = await Promise.all([\n getCommands(),\n getTools(),\n getContext(),\n getSystemPrompt({ disableSlashCommands: false }),\n getClients().catch(() => [] as WrappedClient[]),\n ])\n\n const acpMcpClients = await connectAcpMcpServers(mcpServers)\n const mcpClients = mergeMcpClients(configuredMcpClients, acpMcpClients)\n\n const toolPermissionContext = loadToolPermissionContextFromDisk({\n projectDir: cwd,\n includePybProjectConfig: true,\n isBypassPermissionsModeAvailable: true,\n })\n\n const currentModeId =\n typeof persisted.currentModeId === 'string' && persisted.currentModeId\n ? persisted.currentModeId\n : toolPermissionContext.mode ?? 'default'\n toolPermissionContext.mode = currentModeId as any\n const conversationTracker = new ConversationTracker({\n sessionId,\n persistence: new FileSystemConversationPersistence(\n getConversationTrackerPersistenceDir(cwd),\n ),\n })\n conversationTracker.restore()\n\n const session: SessionState = {\n sessionId,\n cwd,\n mcpServers,\n mcpClients,\n commands,\n tools,\n systemPrompt,\n context: ctx,\n messages: Array.isArray(persisted.messages) ? persisted.messages : [],\n toolPermissionContext,\n readFileTimestamps:\n persisted.readFileTimestamps && typeof persisted.readFileTimestamps === 'object'\n ? (persisted.readFileTimestamps as Record<string, number>)\n : {},\n responseState:\n persisted.responseState && typeof persisted.responseState === 'object'\n ? (persisted.responseState as ToolUseContext['responseState'])\n : {},\n conversationTracker,\n currentModeId,\n activeAbortController: null,\n toolCalls: new Map(),\n }\n\n this.sessions.set(sessionId, session)\n ensureSessionState(sessionId, {\n sessionId,\n cwd,\n modelErrors: {},\n currentError: null,\n })\n setCurrentSessionId(sessionId)\n this.sendAvailableCommands(session)\n this.sendCurrentMode(session)\n this.replayConversation(session)\n\n return { modes: this.getModeState(session) }\n }\n\n private async handleSessionSetMode(params: unknown): Promise<Protocol.SetSessionModeResponse> {\n const p = (params ?? {}) as Partial<Protocol.SetSessionModeParams>\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const modeId = typeof p.modeId === 'string' ? p.modeId : ''\n\n const session = this.sessions.get(sessionId)\n if (!session) throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n\n const allowed = new Set(this.getModeState(session).availableModes.map(m => m.id))\n if (!allowed.has(modeId)) {\n throw new JsonRpcError(-32602, `Unknown modeId: ${modeId}`)\n }\n\n session.currentModeId = modeId\n session.toolPermissionContext.mode = modeId as any\n this.sendCurrentMode(session)\n persistAcpSessionToDisk(session)\n\n return {}\n }\n\n private async handleSessionCancel(params: unknown): Promise<void> {\n const p = (params ?? {}) as Partial<Protocol.SessionCancelParams>\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const session = this.sessions.get(sessionId)\n if (!session) return\n session.activeAbortController?.abort()\n }\n\n private async handleSessionPrompt(params: unknown): Promise<Protocol.PromptResponse> {\n const p = (params ?? {}) as any\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const blocks: Protocol.ContentBlock[] = Array.isArray(p.prompt)\n ? (p.prompt as Protocol.ContentBlock[])\n : Array.isArray(p.content)\n ? (p.content as Protocol.ContentBlock[])\n : []\n\n const session = this.sessions.get(sessionId)\n if (!session) throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n\n if (session.activeAbortController) {\n throw new JsonRpcError(-32000, `Session already has an active prompt: ${sessionId}`)\n }\n\n setOriginalCwd(session.cwd)\n await setCwd(session.cwd)\n grantReadPermissionForOriginalDir()\n\n const promptText = blocksToText(blocks)\n const userMsg = createUserTurnMessage(promptText)\n\n const baseMessages: Message[] = [...session.messages, userMsg]\n session.messages.push(userMsg)\n\n if (process.env.PYB_ACP_ECHO === '1') {\n await this.handlePybMessage(session, createAssistantMessage(promptText))\n persistAcpSessionToDisk(session)\n return { stopReason: 'end_turn' }\n }\n\n const abortController = new AbortController()\n session.activeAbortController = abortController\n\n const canUseTool = this.createAcpCanUseTool(session)\n const previousSessionId = getCurrentSessionId()\n setCurrentSessionId(session.sessionId)\n\n const options = {\n commands: session.commands,\n tools: session.tools,\n verbose: false,\n safeMode: false,\n forkNumber: 0,\n messageLogName: session.sessionId,\n maxThinkingTokens: 0,\n persistSession: false,\n toolPermissionContext: session.toolPermissionContext,\n mcpClients: session.mcpClients,\n shouldAvoidPermissionPrompts: false,\n }\n\n let stopReason: Protocol.StopReason = 'end_turn'\n try {\n for await (const m of query(baseMessages, session.systemPrompt, session.context, canUseTool, {\n options,\n abortController,\n messageId: undefined,\n readFileTimestamps: session.readFileTimestamps,\n setToolJSX: () => {},\n agentId: 'main',\n responseState: session.responseState,\n conversationTracker: session.conversationTracker,\n })) {\n if (abortController.signal.aborted) {\n stopReason = 'cancelled'\n }\n await this.handlePybMessage(session, m)\n }\n if (abortController.signal.aborted) stopReason = 'cancelled'\n } catch (err) {\n if (abortController.signal.aborted) {\n stopReason = 'cancelled'\n } else {\n logError(err)\n const msg = err instanceof Error ? err.message : String(err)\n this.sendAgentMessage(session.sessionId, msg)\n stopReason = 'end_turn'\n }\n } finally {\n session.activeAbortController = null\n setCurrentSessionId(previousSessionId)\n persistAcpSessionToDisk(session)\n }\n\n return { stopReason }\n }\n\n private async handlePybMessage(session: SessionState, m: Message): Promise<void> {\n if (!m || typeof m !== 'object') return\n\n if (m.type === 'assistant') {\n session.messages.push(m)\n\n const blocks: any[] = Array.isArray((m as any).message?.content) ? ((m as any).message.content as any[]) : []\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type === 'text' && typeof b.text === 'string') {\n this.sendAgentMessage(session.sessionId, b.text)\n } else if (b.type === 'thinking' && typeof (b as any).thinking === 'string') {\n this.sendAgentThought(session.sessionId, (b as any).thinking)\n } else if (b.type === 'tool_use') {\n const toolUseId = typeof b.id === 'string' ? b.id : ''\n const toolName = typeof b.name === 'string' ? b.name : ''\n const input = b.input && typeof b.input === 'object' && !Array.isArray(b.input) ? (b.input as Record<string, unknown>) : {}\n if (!toolUseId || !toolName) continue\n const kind = toolKindForName(toolName)\n const title = titleForToolCall(toolName, input)\n session.toolCalls.set(toolUseId, {\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n })\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n } satisfies Protocol.ToolCall,\n } satisfies Protocol.SessionUpdateNotification)\n }\n }\n return\n }\n\n if (m.type === 'progress') {\n const toolCallId = m.toolUseID\n const existing = session.toolCalls.get(toolCallId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing || existing.status === 'pending') {\n session.toolCalls.set(toolCallId, {\n title,\n kind,\n status: 'in_progress',\n rawInput: existing?.rawInput,\n })\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId,\n status: 'in_progress',\n })\n }\n\n const text = extractAssistantText(m.content)\n if (text) {\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId,\n content: [\n {\n type: 'content',\n content: { type: 'text', text },\n },\n ],\n })\n }\n return\n }\n\n if (m.type === 'user') {\n const toolResults = extractToolResults(m)\n if (toolResults.length === 0) {\n session.messages.push(m)\n return\n }\n\n for (const tr of toolResults) {\n const existing = session.toolCalls.get(tr.toolUseId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing || existing.status === 'pending') {\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status: 'in_progress',\n rawInput: existing?.rawInput,\n })\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId: tr.toolUseId,\n status: 'in_progress',\n })\n }\n\n const status: Protocol.ToolCallStatus = tr.isError ? 'failed' : 'completed'\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status,\n rawInput: existing?.rawInput,\n })\n\n const rawOutput = asJsonObject((m as any).toolUseResult?.data)\n\n const content: Protocol.ToolCallContent[] = []\n const diffContent = status === 'completed' ? this.buildDiffContentForToolResult(session, tr.toolUseId, rawOutput) : null\n if (diffContent) content.push(diffContent)\n if (tr.content) {\n content.push({ type: 'content', content: { type: 'text', text: tr.content } })\n }\n\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId: tr.toolUseId,\n status,\n ...(content.length > 0 ? { content } : {}),\n ...(rawOutput ? { rawOutput } : {}),\n })\n }\n\n session.messages.push(m)\n return\n }\n }\n\n private createAcpCanUseTool(session: SessionState): CanUseToolFn {\n const timeoutMs = (() => {\n const raw = process.env.PYB_ACP_PERMISSION_TIMEOUT_MS\n const parsed = raw ? Number(raw) : NaN\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 30_000\n })()\n\n return async (tool, input, toolUseContext, assistantMessage) => {\n const toolUseId =\n typeof toolUseContext?.toolUseId === 'string' && toolUseContext.toolUseId\n ? toolUseContext.toolUseId\n : `call_${nanoid()}`\n\n const base = await hasPermissionsToUseTool(tool, input, toolUseContext, assistantMessage)\n if (base.result === true) {\n this.captureFileSnapshotForTool(session, toolUseId, tool.name, input)\n return base\n }\n\n const denied = base as Extract<typeof base, { result: false }>\n if (denied.shouldPromptUser === false) {\n return { result: false as const, message: denied.message }\n }\n\n const title = titleForToolCall(tool.name, input as any)\n const kind = toolKindForName(tool.name)\n\n if (!session.toolCalls.has(toolUseId)) {\n session.toolCalls.set(toolUseId, { title, kind, status: 'pending', rawInput: asJsonObject(input) })\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n } satisfies Protocol.ToolCall,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n const options: Protocol.PermissionOption[] = [\n { optionId: 'allow_once', name: 'Allow once', kind: 'allow_once' },\n { optionId: 'reject_once', name: 'Reject', kind: 'reject_once' },\n ]\n if (Array.isArray((denied as any).suggestions) && (denied as any).suggestions.length > 0) {\n options.splice(1, 0, {\n optionId: 'allow_always',\n name: 'Allow always (remember)',\n kind: 'allow_always',\n })\n }\n\n try {\n const response = await this.peer.sendRequest<Protocol.RequestPermissionResponse>({\n method: 'session/request_permission',\n params: {\n sessionId: session.sessionId,\n toolCall: {\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n content: [\n {\n type: 'content',\n content: { type: 'text', text: denied.message },\n },\n ],\n rawInput: asJsonObject(input),\n },\n options,\n } satisfies Protocol.RequestPermissionParams,\n signal: toolUseContext.abortController.signal,\n timeoutMs,\n })\n\n const outcome = response?.outcome\n if (!outcome || outcome.outcome === 'cancelled') {\n toolUseContext.abortController.abort()\n return { result: false as const, message: denied.message, shouldPromptUser: false }\n }\n\n if (outcome.outcome === 'selected' && outcome.optionId === 'allow_once') {\n this.captureFileSnapshotForTool(session, toolUseId, tool.name, input)\n return { result: true as const }\n }\n\n if (outcome.outcome === 'selected' && outcome.optionId === 'allow_always') {\n const suggestions = Array.isArray((denied as any).suggestions) ? ((denied as any).suggestions as any[]) : []\n if (suggestions.length > 0) {\n const next = applyToolPermissionContextUpdates(session.toolPermissionContext, suggestions as any)\n session.toolPermissionContext = next\n if (toolUseContext?.options) toolUseContext.options.toolPermissionContext = next\n for (const update of suggestions) {\n try {\n persistToolPermissionUpdateToDisk({ update, projectDir: session.cwd })\n } catch (e) {\n logError(e)\n }\n }\n }\n this.captureFileSnapshotForTool(session, toolUseId, tool.name, input)\n return { result: true as const }\n }\n\n return { result: false as const, message: denied.message }\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e)\n return { result: false as const, message: `Permission prompt failed: ${msg}`, shouldPromptUser: false }\n }\n }\n }\n\n private captureFileSnapshotForTool(\n session: SessionState,\n toolUseId: string,\n toolName: string,\n input: unknown,\n ): void {\n if (toolName !== 'Write' && toolName !== 'MultiEdit') return\n\n const filePath = input && typeof input === 'object' ? String((input as any).file_path ?? '') : ''\n if (!filePath) return\n\n const absPath = isAbsolute(filePath) ? filePath : resolve(session.cwd, filePath)\n\n const oldContent = existsSync(absPath) ? readTextFileForDiff(absPath) : ''\n if (oldContent === null) return\n\n const existing = session.toolCalls.get(toolUseId)\n if (existing) {\n existing.fileSnapshot = { path: absPath, content: oldContent }\n session.toolCalls.set(toolUseId, existing)\n return\n }\n\n session.toolCalls.set(toolUseId, {\n title: toolName,\n kind: toolKindForName(toolName),\n status: 'pending',\n rawInput: asJsonObject(input),\n fileSnapshot: { path: absPath, content: oldContent },\n })\n }\n\n private buildDiffContentForToolResult(\n session: SessionState,\n toolUseId: string,\n rawOutput: Protocol.JsonObject | undefined,\n ): Protocol.ToolCallContent | null {\n const existing = session.toolCalls.get(toolUseId)\n if (!existing || existing.kind !== 'edit') return null\n\n const inputFilePath =\n typeof existing.rawInput?.file_path === 'string'\n ? existing.rawInput.file_path\n : rawOutput && typeof (rawOutput as any).filePath === 'string'\n ? String((rawOutput as any).filePath)\n : ''\n\n if (!inputFilePath) return null\n\n const absPath = isAbsolute(inputFilePath) ? inputFilePath : resolve(session.cwd, inputFilePath)\n\n const oldText =\n rawOutput && typeof (rawOutput as any).originalFile === 'string'\n ? String((rawOutput as any).originalFile)\n : existing.fileSnapshot && existing.fileSnapshot.path === absPath\n ? existing.fileSnapshot.content\n : undefined\n\n if (oldText === undefined) return null\n\n const newTextFromDisk = readTextFileForDiff(absPath)\n const newTextFromOutput = rawOutput && typeof (rawOutput as any).content === 'string' ? String((rawOutput as any).content) : null\n const newText = newTextFromDisk ?? newTextFromOutput\n if (newText === null) return null\n\n return {\n type: 'diff',\n path: absPath,\n oldText: truncateDiffText(oldText),\n newText: truncateDiffText(newText),\n }\n }\n\n private replayConversation(session: SessionState): void {\n session.toolCalls.clear()\n\n for (const m of session.messages) {\n if (!m || typeof m !== 'object') continue\n\n if (m.type === 'assistant') {\n const blocks: any[] = Array.isArray((m as any).message?.content) ? ((m as any).message.content as any[]) : []\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type === 'text' && typeof b.text === 'string') {\n this.sendAgentMessage(session.sessionId, b.text)\n } else if (b.type === 'thinking' && typeof (b as any).thinking === 'string') {\n this.sendAgentThought(session.sessionId, (b as any).thinking)\n } else if (b.type === 'tool_use') {\n const toolUseId = typeof b.id === 'string' ? b.id : ''\n const toolName = typeof b.name === 'string' ? b.name : ''\n const input = b.input && typeof b.input === 'object' && !Array.isArray(b.input) ? (b.input as Record<string, unknown>) : {}\n if (!toolUseId || !toolName) continue\n\n if (!session.toolCalls.has(toolUseId)) {\n const kind = toolKindForName(toolName)\n const title = titleForToolCall(toolName, input)\n session.toolCalls.set(toolUseId, {\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n })\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n } satisfies Protocol.ToolCall,\n } satisfies Protocol.SessionUpdateNotification)\n }\n }\n }\n continue\n }\n\n if (m.type === 'user') {\n const content = (m as any)?.message?.content\n if (typeof content === 'string' && content.trim()) {\n this.sendUserMessage(session.sessionId, content)\n }\n\n const toolResults = extractToolResults(m)\n if (toolResults.length === 0) continue\n\n for (const tr of toolResults) {\n const existing = session.toolCalls.get(tr.toolUseId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing) {\n session.toolCalls.set(tr.toolUseId, { title, kind, status: 'pending' })\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId: tr.toolUseId,\n title,\n kind,\n status: 'pending',\n } satisfies Protocol.ToolCall,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n const status: Protocol.ToolCallStatus = tr.isError ? 'failed' : 'completed'\n const contentBlocks: Protocol.ToolCallContent[] = []\n if (tr.content) {\n contentBlocks.push({ type: 'content', content: { type: 'text', text: tr.content } })\n }\n\n const rawOutput = asJsonObject((m as any).toolUseResult?.data)\n\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId: tr.toolUseId,\n status,\n ...(contentBlocks.length > 0 ? { content: contentBlocks } : {}),\n ...(rawOutput ? { rawOutput } : {}),\n })\n\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status,\n rawInput: existing?.rawInput,\n })\n }\n }\n }\n }\n\n private getModeState(session: SessionState): Protocol.SessionModeState {\n const availableModes: Protocol.SessionMode[] = [\n { id: 'default', name: 'Default', description: 'Normal permissions (prompt when needed)' },\n { id: 'acceptEdits', name: 'Accept Edits', description: 'Auto-approve safe file edits' },\n { id: 'plan', name: 'Plan', description: 'Read-only planning mode' },\n { id: 'dontAsk', name: \"Don't Ask\", description: 'Auto-deny permission prompts' },\n { id: 'bypassPermissions', name: 'Bypass', description: 'Bypass permission prompts (dangerous)' },\n ]\n\n const currentModeId = availableModes.some(m => m.id === session.currentModeId) ? session.currentModeId : 'default'\n return { currentModeId, availableModes }\n }\n\n private sendAvailableCommands(session: SessionState): void {\n const availableCommands: Protocol.AvailableCommand[] = session.commands\n .filter(c => !c.isHidden)\n .map(c => ({\n name: c.userFacingName(),\n description: c.description,\n ...(c.argumentHint ? { input: { hint: c.argumentHint } } : {}),\n }))\n\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'available_commands_update',\n availableCommands,\n } satisfies Protocol.AvailableCommandsUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendCurrentMode(session: SessionState): void {\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'current_mode_update',\n currentModeId: session.currentModeId,\n } satisfies Protocol.CurrentModeUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendUserMessage(sessionId: string, text: string): void {\n if (!text) return\n this.peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'user_message_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.UserMessageChunk,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendAgentMessage(sessionId: string, text: string): void {\n if (!text) return\n this.peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.AgentMessageChunk,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendAgentThought(sessionId: string, text: string): void {\n if (!text) return\n this.peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'agent_thought_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.AgentThoughtChunk,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendToolCallUpdate(sessionId: string, update: Omit<Protocol.ToolCallUpdate, 'sessionUpdate'>): void {\n this.peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n ...update,\n } satisfies Protocol.ToolCallUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n }\n}\n", "export const ACP_PROTOCOL_VERSION = 1\n\nexport type JsonObject = Record<string, unknown>\n\nexport type Implementation = {\n name: string\n title?: string | null\n version: string\n _meta?: JsonObject | null\n}\n\nexport type FileSystemCapability = {\n readTextFile?: boolean\n writeTextFile?: boolean\n _meta?: JsonObject | null\n}\n\nexport type ClientCapabilities = {\n fs?: FileSystemCapability\n terminal?: boolean\n _meta?: JsonObject | null\n}\n\nexport type PromptCapabilities = {\n audio?: boolean\n image?: boolean\n embeddedContext?: boolean\n embeddedContent?: boolean\n _meta?: JsonObject | null\n}\n\nexport type McpCapabilities = {\n http?: boolean\n sse?: boolean\n _meta?: JsonObject | null\n}\n\nexport type AgentCapabilities = {\n loadSession?: boolean\n promptCapabilities?: PromptCapabilities\n mcpCapabilities?: McpCapabilities\n sessionCapabilities?: JsonObject\n _meta?: JsonObject | null\n}\n\nexport type AuthMethod = {\n id: string\n name: string\n description?: string | null\n _meta?: JsonObject | null\n}\n\nexport type InitializeParams = {\n protocolVersion: number\n clientCapabilities?: ClientCapabilities\n clientInfo?: Implementation | null\n _meta?: JsonObject | null\n}\n\nexport type InitializeResponse = {\n protocolVersion: number\n agentCapabilities: AgentCapabilities\n agentInfo?: Implementation | null\n authMethods?: AuthMethod[]\n _meta?: JsonObject | null\n}\n\nexport type AuthenticateParams = {\n methodId: string\n _meta?: JsonObject | null\n}\n\nexport type AuthenticateResponse = JsonObject\n\nexport type EnvVariable = {\n name: string\n value: string\n _meta?: JsonObject | null\n}\n\nexport type HttpHeader = {\n name: string\n value: string\n _meta?: JsonObject | null\n}\n\nexport type McpServerStdio = {\n type?: 'stdio'\n name: string\n command: string\n args: string[]\n env: EnvVariable[]\n _meta?: JsonObject | null\n}\n\nexport type McpServerHttp = {\n type: 'http'\n name: string\n url: string\n headers: HttpHeader[]\n _meta?: JsonObject | null\n}\n\nexport type McpServerSse = {\n type: 'sse'\n name: string\n url: string\n headers: HttpHeader[]\n _meta?: JsonObject | null\n}\n\nexport type McpServer = McpServerStdio | McpServerHttp | McpServerSse\n\nexport type SessionModeId = string\n\nexport type SessionMode = {\n id: SessionModeId\n name: string\n description?: string | null\n _meta?: JsonObject | null\n}\n\nexport type SessionModeState = {\n currentModeId: SessionModeId\n availableModes: SessionMode[]\n _meta?: JsonObject | null\n}\n\nexport type NewSessionParams = {\n cwd: string\n mcpServers: McpServer[]\n _meta?: JsonObject | null\n}\n\nexport type NewSessionResponse = {\n sessionId: string\n modes?: SessionModeState | null\n _meta?: JsonObject | null\n}\n\nexport type LoadSessionParams = {\n sessionId: string\n cwd: string\n mcpServers: McpServer[]\n _meta?: JsonObject | null\n}\n\nexport type LoadSessionResponse = {\n modes?: SessionModeState | null\n _meta?: JsonObject | null\n}\n\nexport type StopReason =\n | 'end_turn'\n | 'max_tokens'\n | 'max_turn_requests'\n | 'refusal'\n | 'cancelled'\n\nexport type PromptResponse = {\n stopReason: StopReason\n _meta?: JsonObject | null\n}\n\nexport type SessionCancelParams = {\n sessionId: string\n _meta?: JsonObject | null\n}\n\nexport type SetSessionModeParams = {\n sessionId: string\n modeId: SessionModeId\n _meta?: JsonObject | null\n}\n\nexport type SetSessionModeResponse = JsonObject\n\nexport type TextContent = {\n type: 'text'\n text: string\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type ImageContent = {\n type: 'image'\n data?: string\n mimeType?: string\n url?: string\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type AudioContent = {\n type: 'audio'\n data: string\n mimeType: string\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type EmbeddedResource = {\n uri: string\n mimeType?: string | null\n text?: string\n blob?: string\n _meta?: JsonObject | null\n}\n\nexport type EmbeddedResourceContent = {\n type: 'resource'\n resource: EmbeddedResource\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type ResourceLinkContent = {\n type: 'resource_link'\n uri: string\n name: string\n title?: string | null\n description?: string | null\n mimeType?: string | null\n size?: number | null\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type ContentBlock =\n | TextContent\n | ImageContent\n | AudioContent\n | EmbeddedResourceContent\n | ResourceLinkContent\n\nexport type PromptParams = {\n sessionId: string\n prompt: ContentBlock[]\n _meta?: JsonObject | null\n}\n\nexport type SessionUpdateKind =\n | 'user_message_chunk'\n | 'agent_message_chunk'\n | 'agent_thought_chunk'\n | 'tool_call'\n | 'tool_call_update'\n | 'plan'\n | 'available_commands_update'\n | 'current_mode_update'\n\nexport type PlanEntryPriority = 'high' | 'medium' | 'low'\n\nexport type PlanEntryStatus = 'pending' | 'in_progress' | 'completed'\n\nexport type PlanEntry = {\n content: string\n priority: PlanEntryPriority\n status: PlanEntryStatus\n _meta?: JsonObject | null\n}\n\nexport type PlanUpdate = {\n sessionUpdate: 'plan'\n entries: PlanEntry[]\n _meta?: JsonObject | null\n}\n\nexport type ToolKind =\n | 'read'\n | 'edit'\n | 'delete'\n | 'move'\n | 'search'\n | 'execute'\n | 'think'\n | 'fetch'\n | 'switch_mode'\n | 'other'\n\nexport type ToolCallStatus = 'pending' | 'in_progress' | 'completed' | 'failed'\n\nexport type ToolCallLocation = {\n path: string\n line?: number | null\n _meta?: JsonObject | null\n}\n\nexport type ToolCallContent =\n | { type: 'content'; content: ContentBlock; _meta?: JsonObject | null }\n | {\n type: 'diff'\n path: string\n newText: string\n oldText?: string | null\n _meta?: JsonObject | null\n }\n | { type: 'terminal'; terminalId: string; _meta?: JsonObject | null }\n\nexport type ToolCall = {\n sessionUpdate: 'tool_call'\n toolCallId: string\n title: string\n kind?: ToolKind\n status?: ToolCallStatus\n content?: ToolCallContent[]\n locations?: ToolCallLocation[]\n rawInput?: JsonObject\n rawOutput?: JsonObject\n _meta?: JsonObject | null\n}\n\nexport type ToolCallUpdate = {\n sessionUpdate: 'tool_call_update'\n toolCallId: string\n title?: string | null\n kind?: ToolKind | null\n status?: ToolCallStatus | null\n content?: ToolCallContent[] | null\n locations?: ToolCallLocation[] | null\n rawInput?: JsonObject\n rawOutput?: JsonObject\n _meta?: JsonObject | null\n}\n\nexport type ToolCallUpdatePermissionRequest = Omit<ToolCallUpdate, 'sessionUpdate'>\n\nexport type PermissionOptionKind =\n | 'allow_once'\n | 'allow_always'\n | 'reject_once'\n | 'reject_always'\n\nexport type PermissionOption = {\n optionId: string\n name: string\n kind: PermissionOptionKind\n _meta?: JsonObject | null\n}\n\nexport type OutcomeCancelled = { outcome: 'cancelled'; _meta?: JsonObject | null }\nexport type OutcomeSelected = {\n outcome: 'selected'\n optionId: string\n _meta?: JsonObject | null\n}\nexport type RequestPermissionOutcome = OutcomeCancelled | OutcomeSelected\n\nexport type RequestPermissionParams = {\n sessionId: string\n toolCall: ToolCallUpdatePermissionRequest\n options: PermissionOption[]\n _meta?: JsonObject | null\n}\n\nexport type RequestPermissionResponse = {\n outcome: RequestPermissionOutcome\n _meta?: JsonObject | null\n}\n\nexport type AvailableCommandInput = { hint: string; _meta?: JsonObject | null }\nexport type AvailableCommand = {\n name: string\n description: string\n input?: AvailableCommandInput | null\n _meta?: JsonObject | null\n}\n\nexport type AvailableCommandsUpdate = {\n sessionUpdate: 'available_commands_update'\n availableCommands: AvailableCommand[]\n _meta?: JsonObject | null\n}\n\nexport type CurrentModeUpdate = {\n sessionUpdate: 'current_mode_update'\n currentModeId: SessionModeId\n _meta?: JsonObject | null\n}\n\nexport type UserMessageChunk = {\n sessionUpdate: 'user_message_chunk'\n content: ContentBlock\n _meta?: JsonObject | null\n}\n\nexport type AgentMessageChunk = {\n sessionUpdate: 'agent_message_chunk'\n content: ContentBlock\n _meta?: JsonObject | null\n}\n\nexport type AgentThoughtChunk = {\n sessionUpdate: 'agent_thought_chunk'\n content: ContentBlock\n _meta?: JsonObject | null\n}\n\nexport type SessionUpdate =\n | UserMessageChunk\n | AgentMessageChunk\n | AgentThoughtChunk\n | ToolCall\n | ToolCallUpdate\n | PlanUpdate\n | AvailableCommandsUpdate\n | CurrentModeUpdate\n\nexport type SessionUpdateNotification = {\n sessionId: string\n update: SessionUpdate\n _meta?: JsonObject | null\n}\n", "#!/usr/bin/env bun\nimport '@utils/config/sanitizeAnthropicEnv'\nimport { initSentry } from '@services/sentry'\nimport { ensurePackagedRuntimeEnv } from './cli/bootstrapEnv'\nimport { initDebugLogger } from '@utils/log/debugLogger'\nimport { enableConfigs } from '@utils/config'\nimport { logError } from '@utils/log'\n\nimport { JsonRpcPeer } from '../acp/jsonrpc'\nimport { StdioTransport } from '../acp/stdioTransport'\nimport { installStdoutGuard } from '../acp/stdoutGuard'\nimport { PybAcpAgent } from '../acp/pybAcpAgent'\n\ninitSentry()\nensurePackagedRuntimeEnv()\n\nconst { writeAcpLine } = installStdoutGuard()\n\ninitDebugLogger()\ntry {\n enableConfigs()\n} catch (e) {\n logError(e)\n}\n\nconst peer = new JsonRpcPeer()\nnew PybAcpAgent(peer)\n\nconst transport = new StdioTransport(peer, { writeLine: writeAcpLine })\ntransport.start()\n\n"],
5
- "mappings": "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",
6
- "names": ["resolve", "peer", "format", "writeAcpLine", "transport", "peer"]
7
- }