pybao-cli 1.4.81 → 1.4.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/REPL-VOJCD6X6.js +49 -0
  2. package/dist/{acp-YXMNP56B.js → acp-ASRH57AF.js} +79 -32
  3. package/dist/acp-ASRH57AF.js.map +7 -0
  4. package/dist/{agentsValidate-LQFWOCPZ.js → agentsValidate-35AHZXNB.js} +7 -7
  5. package/dist/ask-TI3ITWN7.js +143 -0
  6. package/dist/ask-TI3ITWN7.js.map +7 -0
  7. package/dist/{autoUpdater-DEH233RT.js → autoUpdater-MRK5BD2L.js} +3 -3
  8. package/dist/{chunk-JVF6KNE3.js → chunk-2AG4BTRV.js} +1 -1
  9. package/dist/{chunk-PRRYL2E2.js → chunk-2S2V2ZI7.js} +16 -16
  10. package/dist/{chunk-ZE75JZFY.js → chunk-2WIUQUTU.js} +3 -3
  11. package/dist/{chunk-5KAIY3II.js → chunk-2YM35XWE.js} +3 -3
  12. package/dist/{chunk-H44O47XJ.js → chunk-AUGXOUTX.js} +11 -1
  13. package/dist/chunk-AUGXOUTX.js.map +7 -0
  14. package/dist/{chunk-FDGIVQNE.js → chunk-AYVB6VUF.js} +1 -1
  15. package/dist/{chunk-6XINCIUI.js → chunk-DYJD66YF.js} +1 -1
  16. package/dist/{chunk-EYY3QDKX.js → chunk-DZTZPEPA.js} +2 -2
  17. package/dist/chunk-F4AXICO7.js +28 -0
  18. package/dist/chunk-F4AXICO7.js.map +7 -0
  19. package/dist/{chunk-HNHWG52B.js → chunk-GSAG6WNQ.js} +1 -1
  20. package/dist/{chunk-CLGB56HY.js → chunk-GUTLXPN6.js} +36 -2
  21. package/dist/{chunk-CLGB56HY.js.map → chunk-GUTLXPN6.js.map} +2 -2
  22. package/dist/{chunk-VW3NZKCP.js → chunk-GZT2DWED.js} +1 -1
  23. package/dist/{chunk-BJMVIICS.js → chunk-HJWUPFGF.js} +4 -4
  24. package/dist/{chunk-KH3U5BR5.js → chunk-IIVG2SHE.js} +3 -3
  25. package/dist/{chunk-GS4PRJHV.js → chunk-JQVZNIKI.js} +4 -4
  26. package/dist/{chunk-MKNRYFQR.js → chunk-JT3RE7UH.js} +6 -22
  27. package/dist/{chunk-MKNRYFQR.js.map → chunk-JT3RE7UH.js.map} +3 -3
  28. package/dist/{chunk-4SWM6FWR.js → chunk-KNWW4HGV.js} +2 -2
  29. package/dist/chunk-LM665HND.js +262 -0
  30. package/dist/chunk-LM665HND.js.map +7 -0
  31. package/dist/{chunk-Z73SPR4B.js → chunk-NTL5PKCX.js} +3 -3
  32. package/dist/{chunk-2NFKKANF.js → chunk-PXPTGNYH.js} +2 -2
  33. package/dist/{chunk-HIZXCXUG.js → chunk-QUWUFGZF.js} +4 -4
  34. package/dist/{chunk-BX6HNPWQ.js → chunk-SZEYDC6A.js} +3 -3
  35. package/dist/{chunk-AB3F7T5N.js → chunk-TWWQYBVK.js} +3 -3
  36. package/dist/{chunk-UUS77RPP.js → chunk-U265OPSO.js} +1 -1
  37. package/dist/{chunk-4NNDWUSZ.js → chunk-UBX7JQR2.js} +2 -2
  38. package/dist/{chunk-4VUECEM6.js → chunk-UXVOYFKL.js} +2 -2
  39. package/dist/{chunk-37ZXN5M4.js → chunk-VMWEFYQB.js} +1 -1
  40. package/dist/{chunk-CCF52HVZ.js → chunk-WBBMOYXK.js} +1 -1
  41. package/dist/{chunk-CCF52HVZ.js.map → chunk-WBBMOYXK.js.map} +1 -1
  42. package/dist/{chunk-B3NR3UMC.js → chunk-WVYIFMLG.js} +4 -4
  43. package/dist/chunk-XKYHFZEC.js +68 -0
  44. package/dist/chunk-XKYHFZEC.js.map +7 -0
  45. package/dist/{chunk-TVUG5GLX.js → chunk-XOOHCC63.js} +356 -161
  46. package/dist/chunk-XOOHCC63.js.map +7 -0
  47. package/dist/{chunk-GMKASRN7.js → chunk-Y5JPSTQ4.js} +1 -1
  48. package/dist/{chunk-7ANXEZRS.js → chunk-ZW25QNXS.js} +3 -3
  49. package/dist/{cli-VNT2RTPP.js → cli-ECB4WYUZ.js} +399 -379
  50. package/dist/cli-ECB4WYUZ.js.map +7 -0
  51. package/dist/commands-3B77L2SI.js +53 -0
  52. package/dist/{config-VK55G2IB.js → config-KZHPV37P.js} +4 -4
  53. package/dist/{context-QHTEENJ6.js → context-ZZI53BPM.js} +6 -6
  54. package/dist/conversationTracker-SC6NCQHL.js +17 -0
  55. package/dist/{customCommands-HRHE7ZIM.js → customCommands-MX6OENKO.js} +4 -4
  56. package/dist/{env-GGYUE5V7.js → env-76WAAGI6.js} +2 -2
  57. package/dist/{file-KHYC624L.js → file-LCS77XWE.js} +4 -4
  58. package/dist/index.js +3 -3
  59. package/dist/{llm-A3S75CLF.js → llm-AR66BS2U.js} +32 -29
  60. package/dist/{llm-A3S75CLF.js.map → llm-AR66BS2U.js.map} +1 -1
  61. package/dist/{llmLazy-USVVGSVL.js → llmLazy-5W6E5BCB.js} +1 -1
  62. package/dist/{loader-JPKYTFFC.js → loader-OWZ3WD2X.js} +4 -4
  63. package/dist/{lsp-B7QJVI2U.js → lsp-NLPSJYH4.js} +6 -6
  64. package/dist/{lspAnchor-JJJ2WKI7.js → lspAnchor-MWASWGQD.js} +6 -6
  65. package/dist/{mcp-YOR7UMEZ.js → mcp-T2UB74Y2.js} +7 -7
  66. package/dist/{mentionProcessor-5CYA4NR4.js → mentionProcessor-KIBWOHEC.js} +5 -5
  67. package/dist/{messages-ICKAWGUW.js → messages-6BHCXDWR.js} +5 -1
  68. package/dist/{model-P33QONA2.js → model-5NDSZPIL.js} +5 -5
  69. package/dist/{openai-POLCH476.js → openai-7XPWH2G7.js} +6 -5
  70. package/dist/{outputStyles-EZGCOEE2.js → outputStyles-QUE4ALJQ.js} +4 -4
  71. package/dist/{pluginRuntime-KJ3YFO2O.js → pluginRuntime-PQ3VZRX7.js} +6 -6
  72. package/dist/{pluginValidation-MR5GV7PL.js → pluginValidation-RQ34XQY3.js} +6 -6
  73. package/dist/prompts-5576MRUX.js +55 -0
  74. package/dist/{pybAgentSessionLoad-TRSWA62U.js → pybAgentSessionLoad-5MWAY2A4.js} +4 -4
  75. package/dist/{pybAgentSessionResume-3IRNTCVI.js → pybAgentSessionResume-NZGSUGGS.js} +4 -4
  76. package/dist/{pybAgentStreamJsonSession-5IBYEXS5.js → pybAgentStreamJsonSession-UP4WOINX.js} +3 -3
  77. package/dist/pybAgentStreamJsonSession-UP4WOINX.js.map +7 -0
  78. package/dist/{pybHooks-HFAKEYDS.js → pybHooks-HILU7ZB4.js} +4 -4
  79. package/dist/query-LMPE4HBF.js +57 -0
  80. package/dist/{registry-LOKL3JBE.js → registry-4MWYBUFA.js} +5 -5
  81. package/dist/replSessionBridge-EBXNFUAD.js +10 -0
  82. package/dist/{ripgrep-X4LOQHA7.js → ripgrep-J74GL455.js} +3 -3
  83. package/dist/{skillMarketplace-UITGQNZD.js → skillMarketplace-ATLDIEEX.js} +3 -3
  84. package/dist/{state-I7LIGIFJ.js → state-Y2Q4MPY5.js} +2 -2
  85. package/dist/{theme-RVIXXPSQ.js → theme-3L66ZU5Z.js} +5 -5
  86. package/dist/{toolPermissionSettings-TALALPH3.js → toolPermissionSettings-PDGMFGN2.js} +6 -6
  87. package/dist/toolPermissionSettings-PDGMFGN2.js.map +7 -0
  88. package/dist/tools-45UHHM5S.js +54 -0
  89. package/dist/tools-45UHHM5S.js.map +7 -0
  90. package/dist/{userInput-WFPUGJ4L.js → userInput-GBXOUS4W.js} +40 -36
  91. package/dist/userInput-GBXOUS4W.js.map +7 -0
  92. package/package.json +1 -1
  93. package/dist/REPL-WXPYXBW2.js +0 -46
  94. package/dist/acp-YXMNP56B.js.map +0 -7
  95. package/dist/ask-CUR6IJ2W.js +0 -129
  96. package/dist/ask-CUR6IJ2W.js.map +0 -7
  97. package/dist/chunk-H44O47XJ.js.map +0 -7
  98. package/dist/chunk-TVUG5GLX.js.map +0 -7
  99. package/dist/cli-VNT2RTPP.js.map +0 -7
  100. package/dist/commands-LAZD5O4M.js +0 -50
  101. package/dist/prompts-P4JU57HZ.js +0 -52
  102. package/dist/pybAgentStreamJsonSession-5IBYEXS5.js.map +0 -7
  103. package/dist/query-NHQFKSCC.js +0 -54
  104. package/dist/tools-HVGZBEHZ.js +0 -51
  105. package/dist/userInput-WFPUGJ4L.js.map +0 -7
  106. /package/dist/{REPL-WXPYXBW2.js.map → REPL-VOJCD6X6.js.map} +0 -0
  107. /package/dist/{agentsValidate-LQFWOCPZ.js.map → agentsValidate-35AHZXNB.js.map} +0 -0
  108. /package/dist/{autoUpdater-DEH233RT.js.map → autoUpdater-MRK5BD2L.js.map} +0 -0
  109. /package/dist/{chunk-JVF6KNE3.js.map → chunk-2AG4BTRV.js.map} +0 -0
  110. /package/dist/{chunk-PRRYL2E2.js.map → chunk-2S2V2ZI7.js.map} +0 -0
  111. /package/dist/{chunk-ZE75JZFY.js.map → chunk-2WIUQUTU.js.map} +0 -0
  112. /package/dist/{chunk-5KAIY3II.js.map → chunk-2YM35XWE.js.map} +0 -0
  113. /package/dist/{chunk-FDGIVQNE.js.map → chunk-AYVB6VUF.js.map} +0 -0
  114. /package/dist/{chunk-6XINCIUI.js.map → chunk-DYJD66YF.js.map} +0 -0
  115. /package/dist/{chunk-EYY3QDKX.js.map → chunk-DZTZPEPA.js.map} +0 -0
  116. /package/dist/{chunk-HNHWG52B.js.map → chunk-GSAG6WNQ.js.map} +0 -0
  117. /package/dist/{chunk-VW3NZKCP.js.map → chunk-GZT2DWED.js.map} +0 -0
  118. /package/dist/{chunk-BJMVIICS.js.map → chunk-HJWUPFGF.js.map} +0 -0
  119. /package/dist/{chunk-KH3U5BR5.js.map → chunk-IIVG2SHE.js.map} +0 -0
  120. /package/dist/{chunk-GS4PRJHV.js.map → chunk-JQVZNIKI.js.map} +0 -0
  121. /package/dist/{chunk-4SWM6FWR.js.map → chunk-KNWW4HGV.js.map} +0 -0
  122. /package/dist/{chunk-Z73SPR4B.js.map → chunk-NTL5PKCX.js.map} +0 -0
  123. /package/dist/{chunk-2NFKKANF.js.map → chunk-PXPTGNYH.js.map} +0 -0
  124. /package/dist/{chunk-HIZXCXUG.js.map → chunk-QUWUFGZF.js.map} +0 -0
  125. /package/dist/{chunk-BX6HNPWQ.js.map → chunk-SZEYDC6A.js.map} +0 -0
  126. /package/dist/{chunk-AB3F7T5N.js.map → chunk-TWWQYBVK.js.map} +0 -0
  127. /package/dist/{chunk-UUS77RPP.js.map → chunk-U265OPSO.js.map} +0 -0
  128. /package/dist/{chunk-4NNDWUSZ.js.map → chunk-UBX7JQR2.js.map} +0 -0
  129. /package/dist/{chunk-4VUECEM6.js.map → chunk-UXVOYFKL.js.map} +0 -0
  130. /package/dist/{chunk-37ZXN5M4.js.map → chunk-VMWEFYQB.js.map} +0 -0
  131. /package/dist/{chunk-B3NR3UMC.js.map → chunk-WVYIFMLG.js.map} +0 -0
  132. /package/dist/{chunk-GMKASRN7.js.map → chunk-Y5JPSTQ4.js.map} +0 -0
  133. /package/dist/{chunk-7ANXEZRS.js.map → chunk-ZW25QNXS.js.map} +0 -0
  134. /package/dist/{commands-LAZD5O4M.js.map → commands-3B77L2SI.js.map} +0 -0
  135. /package/dist/{config-VK55G2IB.js.map → config-KZHPV37P.js.map} +0 -0
  136. /package/dist/{context-QHTEENJ6.js.map → context-ZZI53BPM.js.map} +0 -0
  137. /package/dist/{customCommands-HRHE7ZIM.js.map → conversationTracker-SC6NCQHL.js.map} +0 -0
  138. /package/dist/{env-GGYUE5V7.js.map → customCommands-MX6OENKO.js.map} +0 -0
  139. /package/dist/{file-KHYC624L.js.map → env-76WAAGI6.js.map} +0 -0
  140. /package/dist/{llmLazy-USVVGSVL.js.map → file-LCS77XWE.js.map} +0 -0
  141. /package/dist/{loader-JPKYTFFC.js.map → llmLazy-5W6E5BCB.js.map} +0 -0
  142. /package/dist/{lsp-B7QJVI2U.js.map → loader-OWZ3WD2X.js.map} +0 -0
  143. /package/dist/{mcp-YOR7UMEZ.js.map → lsp-NLPSJYH4.js.map} +0 -0
  144. /package/dist/{lspAnchor-JJJ2WKI7.js.map → lspAnchor-MWASWGQD.js.map} +0 -0
  145. /package/dist/{messages-ICKAWGUW.js.map → mcp-T2UB74Y2.js.map} +0 -0
  146. /package/dist/{mentionProcessor-5CYA4NR4.js.map → mentionProcessor-KIBWOHEC.js.map} +0 -0
  147. /package/dist/{model-P33QONA2.js.map → messages-6BHCXDWR.js.map} +0 -0
  148. /package/dist/{openai-POLCH476.js.map → model-5NDSZPIL.js.map} +0 -0
  149. /package/dist/{outputStyles-EZGCOEE2.js.map → openai-7XPWH2G7.js.map} +0 -0
  150. /package/dist/{pluginValidation-MR5GV7PL.js.map → outputStyles-QUE4ALJQ.js.map} +0 -0
  151. /package/dist/{pluginRuntime-KJ3YFO2O.js.map → pluginRuntime-PQ3VZRX7.js.map} +0 -0
  152. /package/dist/{prompts-P4JU57HZ.js.map → pluginValidation-RQ34XQY3.js.map} +0 -0
  153. /package/dist/{pybAgentSessionLoad-TRSWA62U.js.map → prompts-5576MRUX.js.map} +0 -0
  154. /package/dist/{pybAgentSessionResume-3IRNTCVI.js.map → pybAgentSessionLoad-5MWAY2A4.js.map} +0 -0
  155. /package/dist/{pybHooks-HFAKEYDS.js.map → pybAgentSessionResume-NZGSUGGS.js.map} +0 -0
  156. /package/dist/{query-NHQFKSCC.js.map → pybHooks-HILU7ZB4.js.map} +0 -0
  157. /package/dist/{registry-LOKL3JBE.js.map → query-LMPE4HBF.js.map} +0 -0
  158. /package/dist/{ripgrep-X4LOQHA7.js.map → registry-4MWYBUFA.js.map} +0 -0
  159. /package/dist/{skillMarketplace-UITGQNZD.js.map → replSessionBridge-EBXNFUAD.js.map} +0 -0
  160. /package/dist/{state-I7LIGIFJ.js.map → ripgrep-J74GL455.js.map} +0 -0
  161. /package/dist/{theme-RVIXXPSQ.js.map → skillMarketplace-ATLDIEEX.js.map} +0 -0
  162. /package/dist/{toolPermissionSettings-TALALPH3.js.map → state-Y2Q4MPY5.js.map} +0 -0
  163. /package/dist/{tools-HVGZBEHZ.js.map → theme-3L66ZU5Z.js.map} +0 -0
@@ -0,0 +1,143 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ getSystemPrompt,
5
+ query
6
+ } from "./chunk-XOOHCC63.js";
7
+ import "./chunk-GZT2DWED.js";
8
+ import "./chunk-ZW25QNXS.js";
9
+ import {
10
+ ConversationTracker
11
+ } from "./chunk-LM665HND.js";
12
+ import {
13
+ beginReplSessionScope
14
+ } from "./chunk-F4AXICO7.js";
15
+ import "./chunk-AYVB6VUF.js";
16
+ import "./chunk-UBX7JQR2.js";
17
+ import "./chunk-5P7HBXTD.js";
18
+ import "./chunk-IIVG2SHE.js";
19
+ import "./chunk-UXVOYFKL.js";
20
+ import "./chunk-JT3RE7UH.js";
21
+ import "./chunk-XKYHFZEC.js";
22
+ import "./chunk-HJWUPFGF.js";
23
+ import "./chunk-QUWUFGZF.js";
24
+ import "./chunk-GSAG6WNQ.js";
25
+ import "./chunk-SZEYDC6A.js";
26
+ import "./chunk-UNNVICVU.js";
27
+ import "./chunk-PXPTGNYH.js";
28
+ import "./chunk-GUTLXPN6.js";
29
+ import "./chunk-A3BVXXA3.js";
30
+ import {
31
+ createUserTurnMessage
32
+ } from "./chunk-AUGXOUTX.js";
33
+ import "./chunk-3DFBSQIT.js";
34
+ import "./chunk-B6IMQJZM.js";
35
+ import {
36
+ getTotalCost
37
+ } from "./chunk-OUXHGDLH.js";
38
+ import "./chunk-DZTZPEPA.js";
39
+ import "./chunk-QWIBSCDN.js";
40
+ import "./chunk-JQVZNIKI.js";
41
+ import "./chunk-2YM35XWE.js";
42
+ import "./chunk-2AG4BTRV.js";
43
+ import "./chunk-UZ34JEUK.js";
44
+ import "./chunk-KNWW4HGV.js";
45
+ import "./chunk-BJSWTHRM.js";
46
+ import {
47
+ getModelManager
48
+ } from "./chunk-NTL5PKCX.js";
49
+ import {
50
+ getContext
51
+ } from "./chunk-WVYIFMLG.js";
52
+ import "./chunk-VMWEFYQB.js";
53
+ import "./chunk-Y5JPSTQ4.js";
54
+ import "./chunk-2WIUQUTU.js";
55
+ import "./chunk-RQVLBMP7.js";
56
+ import "./chunk-DYJD66YF.js";
57
+ import {
58
+ getMessagesPath,
59
+ overwriteLog,
60
+ setCwd
61
+ } from "./chunk-U265OPSO.js";
62
+ import "./chunk-WBBMOYXK.js";
63
+ import "./chunk-I3J4JYES.js";
64
+
65
+ // src/app/ask.ts
66
+ import { last } from "lodash-es";
67
+ async function ask({
68
+ commands,
69
+ safeMode,
70
+ hasPermissionsToUseTool,
71
+ messageLogName,
72
+ prompt,
73
+ cwd,
74
+ tools,
75
+ verbose = false,
76
+ initialMessages,
77
+ persistSession = true
78
+ }) {
79
+ await setCwd(cwd);
80
+ const restoreSessionScope = beginReplSessionScope(`ask:${messageLogName}:0`);
81
+ const conversationTracker = new ConversationTracker();
82
+ const message = createUserTurnMessage(prompt);
83
+ const messages = [...initialMessages ?? [], message];
84
+ const [systemPrompt, context, model] = await Promise.all([
85
+ getSystemPrompt(),
86
+ getContext(),
87
+ getModelManager().getModelName("main")
88
+ ]);
89
+ try {
90
+ for await (const m of query(
91
+ messages,
92
+ systemPrompt,
93
+ context,
94
+ hasPermissionsToUseTool,
95
+ {
96
+ options: {
97
+ commands,
98
+ tools,
99
+ verbose,
100
+ safeMode,
101
+ forkNumber: 0,
102
+ messageLogName: "unused",
103
+ maxThinkingTokens: 0,
104
+ persistSession
105
+ },
106
+ abortController: new AbortController(),
107
+ messageId: void 0,
108
+ readFileTimestamps: {},
109
+ setToolJSX: () => {
110
+ },
111
+ conversationTracker
112
+ }
113
+ )) {
114
+ messages.push(m);
115
+ }
116
+ } finally {
117
+ restoreSessionScope();
118
+ }
119
+ const result = last(messages);
120
+ if (!result || result.type !== "assistant") {
121
+ throw new Error("Expected content to be an assistant message");
122
+ }
123
+ const textContent = result.message.content.find((c) => c.type === "text");
124
+ if (!textContent) {
125
+ throw new Error(
126
+ `Expected at least one text content item, but got ${JSON.stringify(
127
+ result.message.content,
128
+ null,
129
+ 2
130
+ )}`
131
+ );
132
+ }
133
+ const messageHistoryFile = getMessagesPath(messageLogName, 0, 0);
134
+ overwriteLog(messageHistoryFile, messages);
135
+ return {
136
+ resultText: textContent.text,
137
+ totalCost: getTotalCost(),
138
+ messageHistoryFile
139
+ };
140
+ }
141
+ export {
142
+ ask
143
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/app/ask.ts"],
4
+ "sourcesContent": ["import { last } from 'lodash-es'\nimport { Command } from '@commands'\nimport { getSystemPrompt } from '@constants/prompts'\nimport { getContext } from '@context'\nimport { getTotalCost } from '@costTracker'\nimport { Message, query } from '@query'\nimport type { CanUseToolFn } from '@pyb-types/canUseTool'\nimport { Tool } from '@tool'\nimport { getModelManager } from '@utils/model'\nimport { setCwd } from '@utils/state'\nimport { getMessagesPath, overwriteLog } from '@utils/log'\nimport { createUserTurnMessage } from '@utils/messages'\nimport { ConversationTracker } from '@utils/session/conversationTracker'\nimport { beginReplSessionScope } from '@utils/session/replSessionBridge'\n\ntype Props = {\n commands: Command[]\n safeMode?: boolean\n hasPermissionsToUseTool: CanUseToolFn\n messageLogName: string\n prompt: string\n cwd: string\n tools: Tool[]\n verbose?: boolean\n initialMessages?: Message[]\n persistSession?: boolean\n}\n\nexport async function ask({\n commands,\n safeMode,\n hasPermissionsToUseTool,\n messageLogName,\n prompt,\n cwd,\n tools,\n verbose = false,\n initialMessages,\n persistSession = true,\n}: Props): Promise<{\n resultText: string\n totalCost: number\n messageHistoryFile: string\n}> {\n await setCwd(cwd)\n const restoreSessionScope = beginReplSessionScope(`ask:${messageLogName}:0`)\n const conversationTracker = new ConversationTracker()\n const message = createUserTurnMessage(prompt)\n const messages: Message[] = [...(initialMessages ?? []), message]\n\n const [systemPrompt, context, model] = await Promise.all([\n getSystemPrompt(),\n getContext(),\n getModelManager().getModelName('main'),\n ])\n\n try {\n for await (const m of query(\n messages,\n systemPrompt,\n context,\n hasPermissionsToUseTool,\n {\n options: {\n commands,\n tools,\n verbose,\n safeMode,\n forkNumber: 0,\n messageLogName: 'unused',\n maxThinkingTokens: 0,\n persistSession,\n },\n abortController: new AbortController(),\n messageId: undefined,\n readFileTimestamps: {},\n setToolJSX: () => {},\n conversationTracker,\n },\n )) {\n messages.push(m)\n }\n } finally {\n restoreSessionScope()\n }\n\n const result = last(messages)\n if (!result || result.type !== 'assistant') {\n throw new Error('Expected content to be an assistant message')\n }\n\n const textContent = result.message.content.find(c => c.type === 'text')\n if (!textContent) {\n throw new Error(\n `Expected at least one text content item, but got ${JSON.stringify(\n result.message.content,\n null,\n 2,\n )}`,\n )\n }\n\n const messageHistoryFile = getMessagesPath(messageLogName, 0, 0)\n overwriteLog(messageHistoryFile, messages)\n\n return {\n resultText: textContent.text,\n totalCost: getTotalCost(),\n messageHistoryFile,\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,YAAY;AA4BrB,eAAsB,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,iBAAiB;AACnB,GAIG;AACD,QAAM,OAAO,GAAG;AAChB,QAAM,sBAAsB,sBAAsB,OAAO,cAAc,IAAI;AAC3E,QAAM,sBAAsB,IAAI,oBAAoB;AACpD,QAAM,UAAU,sBAAsB,MAAM;AAC5C,QAAM,WAAsB,CAAC,GAAI,mBAAmB,CAAC,GAAI,OAAO;AAEhE,QAAM,CAAC,cAAc,SAAS,KAAK,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,gBAAgB,EAAE,aAAa,MAAM;AAAA,EACvC,CAAC;AAED,MAAI;AACF,qBAAiB,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,mBAAmB;AAAA,UACnB;AAAA,QACF;AAAA,QACA,iBAAiB,IAAI,gBAAgB;AAAA,QACrC,WAAW;AAAA,QACX,oBAAoB,CAAC;AAAA,QACrB,YAAY,MAAM;AAAA,QAAC;AAAA,QACnB;AAAA,MACF;AAAA,IACF,GAAG;AACD,eAAS,KAAK,CAAC;AAAA,IACjB;AAAA,EACF,UAAE;AACA,wBAAoB;AAAA,EACtB;AAEA,QAAM,SAAS,KAAK,QAAQ;AAC5B,MAAI,CAAC,UAAU,OAAO,SAAS,aAAa;AAC1C,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AAEA,QAAM,cAAc,OAAO,QAAQ,QAAQ,KAAK,OAAK,EAAE,SAAS,MAAM;AACtE,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR,oDAAoD,KAAK;AAAA,QACvD,OAAO,QAAQ;AAAA,QACf;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,qBAAqB,gBAAgB,gBAAgB,GAAG,CAAC;AAC/D,eAAa,oBAAoB,QAAQ;AAEzC,SAAO;AAAA,IACL,YAAY,YAAY;AAAA,IACxB,WAAW,aAAa;AAAA,IACxB;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -5,9 +5,9 @@ import {
5
5
  checkAndNotifyUpdate,
6
6
  getLatestVersion,
7
7
  getUpdateCommandSuggestions
8
- } from "./chunk-AB3F7T5N.js";
9
- import "./chunk-UUS77RPP.js";
10
- import "./chunk-CCF52HVZ.js";
8
+ } from "./chunk-TWWQYBVK.js";
9
+ import "./chunk-U265OPSO.js";
10
+ import "./chunk-WBBMOYXK.js";
11
11
  import "./chunk-I3J4JYES.js";
12
12
  export {
13
13
  assertMinVersion,
@@ -3,7 +3,7 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getCwd,
5
5
  logError
6
- } from "./chunk-UUS77RPP.js";
6
+ } from "./chunk-U265OPSO.js";
7
7
 
8
8
  // src/utils/config/settingsFiles.ts
9
9
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -33,57 +33,57 @@ import {
33
33
  runWithTaskListEnv,
34
34
  runWithTaskListId,
35
35
  updateTask
36
- } from "./chunk-TVUG5GLX.js";
36
+ } from "./chunk-XOOHCC63.js";
37
37
  import {
38
38
  queryLLM
39
- } from "./chunk-BJMVIICS.js";
39
+ } from "./chunk-HJWUPFGF.js";
40
40
  import {
41
41
  FallbackToolUseRejectedMessage,
42
42
  MCPTool,
43
43
  getClients,
44
44
  getMCPTools
45
- } from "./chunk-HIZXCXUG.js";
45
+ } from "./chunk-QUWUFGZF.js";
46
46
  import {
47
47
  emitReminderEvent
48
- } from "./chunk-2NFKKANF.js";
48
+ } from "./chunk-PXPTGNYH.js";
49
49
  import {
50
50
  getActiveAgents,
51
51
  getAgentByType,
52
52
  getAvailableAgentTypes
53
- } from "./chunk-CLGB56HY.js";
53
+ } from "./chunk-GUTLXPN6.js";
54
54
  import {
55
55
  INTERRUPT_MESSAGE,
56
56
  createAssistantMessage,
57
57
  createUserMessage,
58
58
  getLastAssistantMessageId
59
- } from "./chunk-H44O47XJ.js";
59
+ } from "./chunk-AUGXOUTX.js";
60
60
  import {
61
61
  formatDuration,
62
62
  formatNumber
63
63
  } from "./chunk-OUXHGDLH.js";
64
64
  import {
65
65
  getAbsolutePath
66
- } from "./chunk-EYY3QDKX.js";
66
+ } from "./chunk-DZTZPEPA.js";
67
67
  import {
68
68
  LspFacade,
69
69
  formatDiagnosticsPretty
70
- } from "./chunk-GS4PRJHV.js";
70
+ } from "./chunk-JQVZNIKI.js";
71
71
  import {
72
72
  getModelManager
73
- } from "./chunk-Z73SPR4B.js";
73
+ } from "./chunk-NTL5PKCX.js";
74
74
  import {
75
75
  getContext
76
- } from "./chunk-B3NR3UMC.js";
76
+ } from "./chunk-WVYIFMLG.js";
77
77
  import {
78
78
  filesToTree,
79
79
  ripGrepWithStatus
80
- } from "./chunk-37ZXN5M4.js";
80
+ } from "./chunk-VMWEFYQB.js";
81
81
  import {
82
82
  getTheme
83
- } from "./chunk-GMKASRN7.js";
83
+ } from "./chunk-Y5JPSTQ4.js";
84
84
  import {
85
85
  debug
86
- } from "./chunk-6XINCIUI.js";
86
+ } from "./chunk-DYJD66YF.js";
87
87
  import {
88
88
  BunShell,
89
89
  getCwd,
@@ -94,7 +94,7 @@ import {
94
94
  overwriteLog,
95
95
  readTaskOutput,
96
96
  resolveXdgDataPath
97
- } from "./chunk-UUS77RPP.js";
97
+ } from "./chunk-U265OPSO.js";
98
98
 
99
99
  // src/tools/index.ts
100
100
  import { memoize as memoize2 } from "lodash-es";
@@ -773,7 +773,7 @@ async function analyzeOutputWithLsp(output, exitCode) {
773
773
  if (exitCode !== 0 || errorCount > 0 || warningCount > 0) {
774
774
  try {
775
775
  const { isAbsolute: isAbsolute3, resolve: resolve4 } = await import("path");
776
- const { getSessionRoot: getSessionRoot2 } = await import("./state-I7LIGIFJ.js");
776
+ const { getSessionRoot: getSessionRoot2 } = await import("./state-Y2Q4MPY5.js");
777
777
  const lines = output.split("\n");
778
778
  const uniqueFiles = /* @__PURE__ */ new Set();
779
779
  const lspSuggestions = [];
@@ -1146,7 +1146,7 @@ var DeleteTool = {
1146
1146
  }
1147
1147
  if (!force) {
1148
1148
  try {
1149
- const { LspFacade: LspFacade2 } = await import("./lsp-B7QJVI2U.js");
1149
+ const { LspFacade: LspFacade2 } = await import("./lsp-NLPSJYH4.js");
1150
1150
  const referenceDetail = await LspFacade2.checkFileReferences(fullPath);
1151
1151
  if (referenceDetail) {
1152
1152
  failedItems.push(
@@ -5,13 +5,13 @@ import {
5
5
  } from "./chunk-RQVLBMP7.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-6XINCIUI.js";
8
+ } from "./chunk-DYJD66YF.js";
9
9
  import {
10
10
  getCwd,
11
11
  getGlobalConfigFilePath,
12
12
  getLegacyGlobalConfigFilePath,
13
13
  logError
14
- } from "./chunk-UUS77RPP.js";
14
+ } from "./chunk-U265OPSO.js";
15
15
 
16
16
  // src/core/config/schema.ts
17
17
  function isAutoUpdaterStatus(value) {
@@ -688,7 +688,7 @@ function setModelPointer(pointer, modelName) {
688
688
  }
689
689
  };
690
690
  saveGlobalConfig(updatedConfig);
691
- import("./model-P33QONA2.js").then(({ reloadModelManager }) => {
691
+ import("./model-5NDSZPIL.js").then(({ reloadModelManager }) => {
692
692
  reloadModelManager();
693
693
  });
694
694
  }
@@ -2,15 +2,15 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  loadSettingsWithLegacyFallback
5
- } from "./chunk-JVF6KNE3.js";
5
+ } from "./chunk-2AG4BTRV.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-6XINCIUI.js";
8
+ } from "./chunk-DYJD66YF.js";
9
9
  import {
10
10
  env,
11
11
  getSessionRoot,
12
12
  resolveXdgDataPath
13
- } from "./chunk-UUS77RPP.js";
13
+ } from "./chunk-U265OPSO.js";
14
14
  import {
15
15
  __require
16
16
  } from "./chunk-I3J4JYES.js";
@@ -93,6 +93,14 @@ function createUserMessage(content, toolUseResult) {
93
93
  };
94
94
  return m;
95
95
  }
96
+ function generateQueryId() {
97
+ return randomUUID();
98
+ }
99
+ function createUserTurnMessage(content, toolUseResult) {
100
+ const m = createUserMessage(content, toolUseResult);
101
+ m.queryId = generateQueryId();
102
+ return m;
103
+ }
96
104
  function createProgressMessage(toolUseID, siblingToolUseIDs, content, normalizedMessages, tools) {
97
105
  return {
98
106
  type: "progress",
@@ -463,7 +471,7 @@ function getLastAssistantMessageId(messages) {
463
471
 
464
472
  // src/utils/messages/index.ts
465
473
  async function processUserInput(input, mode, setToolJSX, context, pastedImages) {
466
- const impl = await import("./userInput-WFPUGJ4L.js");
474
+ const impl = await import("./userInput-GBXOUS4W.js");
467
475
  return impl.processUserInput(input, mode, setToolJSX, context, pastedImages);
468
476
  }
469
477
 
@@ -485,6 +493,8 @@ export {
485
493
  createAssistantMessage,
486
494
  createAssistantAPIErrorMessage,
487
495
  createUserMessage,
496
+ generateQueryId,
497
+ createUserTurnMessage,
488
498
  createProgressMessage,
489
499
  filterProgressMessagesForTools,
490
500
  createToolResultStopMessage,
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/messages/core.ts", "../src/services/ai/llmConstants.ts", "../src/utils/messages/index.ts"],
4
+ "sourcesContent": ["import { createHash, randomUUID, UUID } from 'crypto'\nimport { AssistantMessage, Message, ProgressMessage, UserMessage } from '@query'\nimport { last, memoize } from 'lodash-es'\nimport type { Tool } from '@tool'\nimport { NO_CONTENT_MESSAGE } from '@services/llmConstants'\nimport {\n ImageBlockParam,\n TextBlockParam,\n ToolResultBlockParam,\n ToolUseBlockParam,\n Message as APIMessage,\n ContentBlockParam,\n ContentBlock,\n} from '@anthropic-ai/sdk/resources/index.mjs'\n\nexport const INTERRUPT_MESSAGE = '[Request interrupted by user]'\nexport const INTERRUPT_MESSAGE_FOR_TOOL_USE =\n '[Request interrupted by user for tool use]'\nexport const CANCEL_MESSAGE =\n \"The user doesn't want to take this action right now. STOP what you are doing and wait for the user to tell you how to proceed.\"\nexport const REJECT_MESSAGE =\n \"The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.\"\nexport const REJECT_MESSAGE_WITH_FEEDBACK_PREFIX = `The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). To tell you how to proceed, the user said:\\n`\nexport const REJECTED_PLAN_PREFIX = `The agent proposed a plan that was rejected by the user. The user chose to stay in plan mode rather than proceed with implementation.\\n\\nRejected plan:\\n`\nexport const NO_RESPONSE_REQUESTED = 'No response requested.'\n\nexport const SYNTHETIC_ASSISTANT_MESSAGES = new Set([\n INTERRUPT_MESSAGE,\n INTERRUPT_MESSAGE_FOR_TOOL_USE,\n CANCEL_MESSAGE,\n REJECT_MESSAGE,\n NO_RESPONSE_REQUESTED,\n])\n\nfunction stableUuidFromSeed(seed: string): UUID {\n const hex = createHash('sha256').update(seed).digest('hex').slice(0, 32)\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}` as UUID\n}\n\nfunction baseCreateAssistantMessage(\n content: ContentBlock[],\n extra?: Partial<AssistantMessage>,\n): AssistantMessage {\n return {\n type: 'assistant',\n costUSD: 0,\n durationMs: 0,\n uuid: randomUUID(),\n message: {\n id: randomUUID(),\n model: '<synthetic>',\n role: 'assistant',\n stop_reason: 'stop_sequence',\n stop_sequence: '',\n type: 'message',\n usage: {\n input_tokens: 0,\n output_tokens: 0,\n cache_creation_input_tokens: 0,\n cache_read_input_tokens: 0,\n },\n content,\n },\n ...extra,\n }\n}\n\nexport function createAssistantMessage(content: string): AssistantMessage {\n return baseCreateAssistantMessage([\n {\n type: 'text' as const,\n text: content === '' ? NO_CONTENT_MESSAGE : content,\n citations: [],\n },\n ])\n}\n\nexport function createAssistantAPIErrorMessage(\n content: string,\n): AssistantMessage {\n return baseCreateAssistantMessage(\n [\n {\n type: 'text' as const,\n text: content === '' ? NO_CONTENT_MESSAGE : content,\n citations: [],\n },\n ],\n { isApiErrorMessage: true },\n )\n}\n\nexport type FullToolUseResult = {\n data: unknown\n resultForAssistant: ToolResultBlockParam['content']\n newMessages?: Message[]\n contextModifier?: { modifyContext: (ctx: any) => any }\n}\n\nexport function createUserMessage(\n content: string | ContentBlockParam[],\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m: UserMessage = {\n type: 'user',\n message: {\n role: 'user',\n content,\n },\n uuid: randomUUID(),\n toolUseResult,\n }\n return m\n}\n\nexport function generateQueryId(): string {\n return randomUUID()\n}\n\nexport function createUserTurnMessage(\n content: string | ContentBlockParam[],\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m = createUserMessage(content, toolUseResult)\n m.queryId = generateQueryId()\n return m\n}\n\nexport function createProgressMessage(\n toolUseID: string,\n siblingToolUseIDs: Set<string>,\n content: AssistantMessage,\n normalizedMessages: NormalizedMessage[],\n tools: Tool[],\n): ProgressMessage {\n return {\n type: 'progress',\n content,\n normalizedMessages,\n siblingToolUseIDs,\n tools,\n toolUseID,\n uuid: randomUUID(),\n }\n}\n\nexport function filterProgressMessagesForTools(\n messages: NormalizedMessage[],\n toolNames: Set<string>,\n): NormalizedMessage[] {\n const toolUseIds = new Set<string>()\n for (const message of messages) {\n if (message.type !== 'assistant') continue\n const block = message.message.content[0]\n if (!isToolUseLikeBlockParam(block)) continue\n if (toolNames.has(block.name)) {\n toolUseIds.add(block.id)\n }\n }\n if (toolUseIds.size === 0) return messages\n return messages.filter(\n message => message.type !== 'progress' || !toolUseIds.has(message.toolUseID),\n )\n}\n\nexport function createToolResultStopMessage(\n toolUseID: string,\n): ToolResultBlockParam {\n return {\n type: 'tool_result',\n content: CANCEL_MESSAGE,\n is_error: true,\n tool_use_id: toolUseID,\n }\n}\n\nexport function extractTagFromMessage(\n message: Message,\n tagName: string,\n): string | null {\n if (message.type === 'progress') {\n return null\n }\n if (typeof message.message.content !== 'string') {\n return null\n }\n return extractTag(message.message.content, tagName)\n}\n\nexport function extractTag(html: string, tagName: string): string | null {\n if (!html.trim() || !tagName.trim()) {\n return null\n }\n\n const escapedTag = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n const pattern = new RegExp(\n `<${escapedTag}(?:\\\\s+[^>]*)?>` + '([\\\\s\\\\S]*?)' + `<\\\\/${escapedTag}>`,\n 'gi',\n )\n\n let match\n let depth = 0\n let lastIndex = 0\n const openingTag = new RegExp(`<${escapedTag}(?:\\\\s+[^>]*?)?>`, 'gi')\n const closingTag = new RegExp(`<\\\\/${escapedTag}>`, 'gi')\n\n while ((match = pattern.exec(html)) !== null) {\n const content = match[1]\n const beforeMatch = html.slice(lastIndex, match.index)\n\n depth = 0\n\n openingTag.lastIndex = 0\n while (openingTag.exec(beforeMatch) !== null) {\n depth++\n }\n\n closingTag.lastIndex = 0\n while (closingTag.exec(beforeMatch) !== null) {\n depth--\n }\n\n if (depth === 0 && content) {\n return content\n }\n\n lastIndex = match.index + match[0].length\n }\n\n return null\n}\n\nexport function isNotEmptyMessage(message: Message): boolean {\n if (message.type === 'progress') {\n return true\n }\n\n if (typeof message.message.content === 'string') {\n return message.message.content.trim().length > 0\n }\n\n if (message.message.content.length === 0) {\n return false\n }\n\n if (message.message.content.length > 1) {\n return true\n }\n\n if (message.message.content[0]!.type !== 'text') {\n return true\n }\n\n return (\n message.message.content[0]!.text.trim().length > 0 &&\n message.message.content[0]!.text !== NO_CONTENT_MESSAGE &&\n message.message.content[0]!.text !== INTERRUPT_MESSAGE_FOR_TOOL_USE\n )\n}\n\ntype NormalizedUserMessage = {\n message: {\n content: [\n | TextBlockParam\n | ImageBlockParam\n | ToolUseBlockParam\n | ToolResultBlockParam,\n ]\n role: 'user'\n }\n type: 'user'\n uuid: UUID\n}\n\nexport type NormalizedMessage =\n | NormalizedUserMessage\n | AssistantMessage\n | ProgressMessage\n\nexport function normalizeMessages(messages: Message[]): NormalizedMessage[] {\n return messages.flatMap(message => {\n if (message.type === 'progress') {\n return [message] as NormalizedMessage[]\n }\n if (typeof message.message.content === 'string') {\n return [message] as NormalizedMessage[]\n }\n const contentBlocks = message.message.content.filter(\n block =>\n !(\n block.type === 'thinking' &&\n (typeof (block as any).thinking !== 'string' ||\n (block as any).thinking.trim().length === 0)\n ),\n )\n\n return contentBlocks.map((block, blockIndex) => {\n switch (message.type) {\n case 'assistant':\n const baseSeed = String(\n (message as any).uuid ??\n (message as any).message?.id ??\n randomUUID(),\n )\n return {\n type: 'assistant',\n uuid: stableUuidFromSeed(`${baseSeed}:${blockIndex}`),\n message: {\n ...message.message,\n content: [block],\n },\n costUSD:\n (message as AssistantMessage).costUSD / contentBlocks.length,\n durationMs: (message as AssistantMessage).durationMs,\n } as NormalizedMessage\n case 'user':\n return message as NormalizedUserMessage\n }\n })\n })\n}\n\ntype ToolUseRequestMessage = AssistantMessage & {\n message: { content: any[] }\n}\n\ntype ToolUseLikeBlockParam = ToolUseBlockParam & {\n type: 'tool_use' | 'server_tool_use' | 'mcp_tool_use'\n}\n\nfunction isToolUseLikeBlockParam(block: any): block is ToolUseLikeBlockParam {\n return (\n block &&\n typeof block === 'object' &&\n (block.type === 'tool_use' ||\n block.type === 'server_tool_use' ||\n block.type === 'mcp_tool_use') &&\n typeof block.id === 'string'\n )\n}\n\nfunction isToolUseRequestMessage(\n message: Message,\n): message is ToolUseRequestMessage {\n return (\n message.type === 'assistant' &&\n 'costUSD' in message &&\n message.message.content.some(isToolUseLikeBlockParam)\n )\n}\n\nexport function reorderMessages(\n messages: NormalizedMessage[],\n): NormalizedMessage[] {\n const ms: NormalizedMessage[] = []\n const toolUseMessages: ToolUseRequestMessage[] = []\n\n for (const message of messages) {\n if (isToolUseRequestMessage(message)) {\n toolUseMessages.push(message)\n }\n\n if (message.type === 'progress') {\n const existingProgressMessage = ms.find(\n _ => _.type === 'progress' && _.toolUseID === message.toolUseID,\n )\n if (existingProgressMessage) {\n ms[ms.indexOf(existingProgressMessage)] = message\n continue\n }\n const toolUseMessage = toolUseMessages.find(\n _ => _.message.content[0]?.id === message.toolUseID,\n )\n if (toolUseMessage) {\n ms.splice(ms.indexOf(toolUseMessage) + 1, 0, message)\n continue\n }\n }\n\n if (\n message.type === 'user' &&\n Array.isArray(message.message.content) &&\n message.message.content[0]?.type === 'tool_result'\n ) {\n const toolUseID = (message.message.content[0] as ToolResultBlockParam)\n ?.tool_use_id\n\n const lastProgressMessage = ms.find(\n _ => _.type === 'progress' && _.toolUseID === toolUseID,\n )\n if (lastProgressMessage) {\n ms.splice(ms.indexOf(lastProgressMessage) + 1, 0, message)\n continue\n }\n\n const toolUseMessage = toolUseMessages.find(\n _ => _.message.content[0]?.id === toolUseID,\n )\n if (toolUseMessage) {\n ms.splice(ms.indexOf(toolUseMessage) + 1, 0, message)\n continue\n }\n }\n\n else {\n ms.push(message)\n }\n }\n\n return ms\n}\n\nconst getToolResultIDs = memoize(\n (normalizedMessages: NormalizedMessage[]): { [toolUseID: string]: boolean } =>\n Object.fromEntries(\n normalizedMessages.flatMap(_ =>\n _.type === 'user' && _.message.content[0]?.type === 'tool_result'\n ? [\n [\n _.message.content[0]!.tool_use_id,\n _.message.content[0]!.is_error ?? false,\n ],\n ]\n : ([] as [string, boolean][]),\n ),\n ),\n)\n\nexport function getUnresolvedToolUseIDs(\n normalizedMessages: NormalizedMessage[],\n): Set<string> {\n const toolResults = getToolResultIDs(normalizedMessages)\n return new Set(\n normalizedMessages\n .filter(\n (\n _,\n ): _ is AssistantMessage & {\n message: { content: [ToolUseLikeBlockParam] }\n } =>\n _.type === 'assistant' &&\n Array.isArray(_.message.content) &&\n isToolUseLikeBlockParam(_.message.content[0]) &&\n !(_.message.content[0].id in toolResults),\n )\n .map(_ => _.message.content[0].id),\n )\n}\n\nexport function getInProgressToolUseIDs(\n normalizedMessages: NormalizedMessage[],\n): Set<string> {\n const unresolvedToolUseIDs = getUnresolvedToolUseIDs(normalizedMessages)\n\n function isQueuedWaitingProgressMessage(message: NormalizedMessage): boolean {\n if (message.type !== 'progress') return false\n const firstBlock = message.content.message.content[0]\n if (!firstBlock || firstBlock.type !== 'text') return false\n const rawText = String(firstBlock.text ?? '')\n const text = rawText.startsWith('<tool-progress>')\n ? (extractTag(rawText, 'tool-progress') ?? rawText)\n : rawText\n return text.trim() === 'Waiting\u2026'\n }\n\n const toolUseIDsThatHaveProgressMessages = new Set(\n normalizedMessages\n .filter(\n (_): _ is ProgressMessage =>\n _.type === 'progress' && !isQueuedWaitingProgressMessage(_),\n )\n .map(_ => _.toolUseID),\n )\n return new Set(\n (\n normalizedMessages.filter(_ => {\n if (_.type !== 'assistant') {\n return false\n }\n const firstBlock = _.message.content[0]\n if (!isToolUseLikeBlockParam(firstBlock)) return false\n const toolUseID = firstBlock.id\n if (toolUseID === unresolvedToolUseIDs.values().next().value) {\n return true\n }\n\n if (\n toolUseIDsThatHaveProgressMessages.has(toolUseID) &&\n unresolvedToolUseIDs.has(toolUseID)\n ) {\n return true\n }\n\n return false\n }) as AssistantMessage[]\n ).map(_ => (_.message.content[0]! as ToolUseBlockParam).id),\n )\n}\n\nexport function getErroredToolUseMessages(\n normalizedMessages: NormalizedMessage[],\n): AssistantMessage[] {\n const toolResults = getToolResultIDs(normalizedMessages)\n return normalizedMessages.filter(\n _ =>\n _.type === 'assistant' &&\n Array.isArray(_.message.content) &&\n isToolUseLikeBlockParam(_.message.content[0]) &&\n _.message.content[0].id in toolResults &&\n toolResults[_.message.content[0].id],\n ) as AssistantMessage[]\n}\n\nexport function normalizeMessagesForAPI(\n messages: Message[],\n): (UserMessage | AssistantMessage)[] {\n function isSyntheticApiErrorMessage(message: Message): boolean {\n return (\n message.type === 'assistant' &&\n message.isApiErrorMessage === true &&\n message.message.model === '<synthetic>'\n )\n }\n\n function normalizeUserContent(\n content: UserMessage['message']['content'],\n ): ContentBlockParam[] {\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }]\n }\n return content\n }\n\n function toolResultsFirst(content: ContentBlockParam[]): ContentBlockParam[] {\n const toolResults: ContentBlockParam[] = []\n const rest: ContentBlockParam[] = []\n for (const block of content) {\n if (block.type === 'tool_result') {\n toolResults.push(block)\n } else {\n rest.push(block)\n }\n }\n return [...toolResults, ...rest]\n }\n\n function mergeUserMessages(\n base: UserMessage,\n next: UserMessage,\n ): UserMessage {\n const baseBlocks = normalizeUserContent(base.message.content)\n const nextBlocks = normalizeUserContent(next.message.content)\n return {\n ...base,\n message: {\n ...base.message,\n content: toolResultsFirst([...baseBlocks, ...nextBlocks]),\n },\n }\n }\n\n function isUserToolResultMessage(message: Message): message is UserMessage {\n if (message.type !== 'user') return false\n if (!Array.isArray(message.message.content)) return false\n return message.message.content.some(block => block.type === 'tool_result')\n }\n\n const result: (UserMessage | AssistantMessage)[] = []\n for (const message of messages) {\n if (message.type === 'progress') continue\n if (isSyntheticApiErrorMessage(message)) continue\n\n switch (message.type) {\n case 'user': {\n const prev = last(result)\n if (prev?.type === 'user') {\n result[result.indexOf(prev)] = mergeUserMessages(prev, message)\n } else {\n result.push(message)\n }\n break\n }\n case 'assistant': {\n let merged = false\n for (let i = result.length - 1; i >= 0; i--) {\n const prev = result[i]\n if (prev.type !== 'assistant' && !isUserToolResultMessage(prev)) {\n break\n }\n if (prev.type === 'assistant') {\n if (prev.message.id === message.message.id) {\n result[i] = {\n ...prev,\n message: {\n ...prev.message,\n content: [\n ...(Array.isArray(prev.message.content)\n ? prev.message.content\n : []),\n ...(Array.isArray(message.message.content)\n ? message.message.content\n : []),\n ],\n },\n }\n merged = true\n }\n break\n }\n }\n if (!merged) {\n result.push(message)\n }\n break\n }\n }\n }\n\n return result\n}\n\nexport function normalizeContentFromAPI(\n content: APIMessage['content'],\n): APIMessage['content'] {\n const filteredContent = content.filter(\n _ => _.type !== 'text' || _.text.trim().length > 0,\n )\n\n if (filteredContent.length === 0) {\n return [{ type: 'text', text: NO_CONTENT_MESSAGE, citations: [] }]\n }\n\n return filteredContent\n}\n\nexport function isEmptyMessageText(text: string): boolean {\n return (\n stripSystemMessages(text).trim() === '' ||\n text.trim() === NO_CONTENT_MESSAGE\n )\n}\nconst STRIPPED_TAGS = [\n 'commit_analysis',\n 'context',\n 'function_analysis',\n 'pr_analysis',\n]\n\nexport function stripSystemMessages(content: string): string {\n const regex = new RegExp(`<(${STRIPPED_TAGS.join('|')})>.*?</\\\\1>\\n?`, 'gs')\n return content.replace(regex, '').trim()\n}\n\nexport function getToolUseID(message: NormalizedMessage): string | null {\n switch (message.type) {\n case 'assistant':\n return isToolUseLikeBlockParam(message.message.content[0])\n ? message.message.content[0].id\n : null\n case 'user':\n if (message.message.content[0]?.type !== 'tool_result') {\n return null\n }\n return message.message.content[0].tool_use_id\n case 'progress':\n return message.toolUseID\n }\n}\n\nexport function getLastAssistantMessageId(\n messages: Message[],\n): string | undefined {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (message && message.type === 'assistant') {\n return message.message.id\n }\n }\n return undefined\n}\n", "export const API_ERROR_MESSAGE_PREFIX = 'API Error'\nexport const PROMPT_TOO_LONG_ERROR_MESSAGE = 'Prompt is too long'\nexport const CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE = 'Credit balance is too low'\nexport const INVALID_API_KEY_ERROR_MESSAGE =\n 'Invalid API key \u00B7 Please run /login'\nexport const NO_CONTENT_MESSAGE = '(no content)'\n\nexport const MAIN_QUERY_TEMPERATURE = 1\n", "export * from './core'\n\nimport type { SetToolJSXFn, ToolUseContext } from '@tool'\nimport type { Message } from '@query'\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 const impl = await import('./userInput')\n return impl.processUserInput(input, mode, setToolJSX, context, pastedImages)\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSessionProjectDir
5
- } from "./chunk-4NNDWUSZ.js";
5
+ } from "./chunk-UBX7JQR2.js";
6
6
  import {
7
7
  isUuid
8
8
  } from "./chunk-5P7HBXTD.js";
@@ -3,7 +3,7 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  SESSION_ID,
5
5
  resolveXdgCachePath
6
- } from "./chunk-UUS77RPP.js";
6
+ } from "./chunk-U265OPSO.js";
7
7
 
8
8
  // src/utils/log/debugLogger.ts
9
9
  import { existsSync, mkdirSync, appendFileSync } from "fs";
@@ -2,11 +2,11 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  listAllContentFiles
5
- } from "./chunk-37ZXN5M4.js";
5
+ } from "./chunk-VMWEFYQB.js";
6
6
  import {
7
7
  getCwd,
8
8
  logError
9
- } from "./chunk-UUS77RPP.js";
9
+ } from "./chunk-U265OPSO.js";
10
10
 
11
11
  // src/utils/fs/file.ts
12
12
  import {
@@ -0,0 +1,28 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ ensureSessionState,
5
+ getCurrentSessionId,
6
+ setCurrentSessionId
7
+ } from "./chunk-XKYHFZEC.js";
8
+
9
+ // src/utils/session/replSessionBridge.ts
10
+ function beginReplSessionScope(conversationKey) {
11
+ const previousSessionId = getCurrentSessionId();
12
+ ensureSessionState(conversationKey, {
13
+ sessionId: conversationKey,
14
+ modelErrors: {},
15
+ currentError: null
16
+ });
17
+ setCurrentSessionId(conversationKey);
18
+ let restored = false;
19
+ return () => {
20
+ if (restored) return;
21
+ restored = true;
22
+ setCurrentSessionId(previousSessionId);
23
+ };
24
+ }
25
+
26
+ export {
27
+ beginReplSessionScope
28
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/session/replSessionBridge.ts"],
4
+ "sourcesContent": ["import {\n ensureSessionState,\n getCurrentSessionId,\n setCurrentSessionId,\n} from './sessionState'\n\nexport function beginReplSessionScope(conversationKey: string): () => void {\n const previousSessionId = getCurrentSessionId()\n ensureSessionState(conversationKey, {\n sessionId: conversationKey,\n modelErrors: {},\n currentError: null,\n })\n setCurrentSessionId(conversationKey)\n let restored = false\n return () => {\n if (restored) return\n restored = true\n setCurrentSessionId(previousSessionId)\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;AAMO,SAAS,sBAAsB,iBAAqC;AACzE,QAAM,oBAAoB,oBAAoB;AAC9C,qBAAmB,iBAAiB;AAAA,IAClC,WAAW;AAAA,IACX,aAAa,CAAC;AAAA,IACd,cAAc;AAAA,EAChB,CAAC;AACD,sBAAoB,eAAe;AACnC,MAAI,WAAW;AACf,SAAO,MAAM;AACX,QAAI,SAAU;AACd,eAAW;AACX,wBAAoB,iBAAiB;AAAA,EACvC;AACF;",
6
+ "names": []
7
+ }
@@ -5,7 +5,7 @@ import {
5
5
  getCwd,
6
6
  resolveXdgCachePath,
7
7
  resolveXdgDataPath
8
- } from "./chunk-UUS77RPP.js";
8
+ } from "./chunk-U265OPSO.js";
9
9
 
10
10
  // src/services/plugins/skillMarketplace.ts
11
11
  import {
@@ -8,12 +8,12 @@ import {
8
8
  } from "./chunk-BJSWTHRM.js";
9
9
  import {
10
10
  debug
11
- } from "./chunk-6XINCIUI.js";
11
+ } from "./chunk-DYJD66YF.js";
12
12
  import {
13
13
  getCwd,
14
14
  getXdgConfigDir,
15
15
  logError
16
- } from "./chunk-UUS77RPP.js";
16
+ } from "./chunk-U265OPSO.js";
17
17
 
18
18
  // src/utils/agent/loader.ts
19
19
  import {
@@ -437,6 +437,23 @@ NOTE: You are meant to be a fast agent that returns output as quickly as possibl
437
437
  - Make efficient use of the tools that you have at your disposal: be smart about how you search for files and implementations
438
438
  - Wherever possible you should try to spawn multiple parallel tool calls for grepping and reading files
439
439
 
440
+ # Cognitive Search Strategy
441
+ 1. **Concept Search**: WHEN searching for high-level concepts (e.g., "Auth Logic", "Payment Flow") OR when uncertain about exact naming, you MUST use \`semantic: true\` in Grep/Glob tools. This activates the LSP Workspace Symbol search which is resilient to typos and fuzzy matches.
442
+ - Example: \`GrepTool(pattern: "AuthFeatr", semantic: true)\` will find "AuthFeature"
443
+ - Example: \`GlobTool(pattern: "tests", semantic: true)\` will find test files based on project structure
444
+ 2. **Exact Identifier**: WHEN you know the precise class/function name (e.g., "UserProfile", "initDatabase"), use standard Grep/Glob without \`semantic\` flag.
445
+ 3. **Exploration**: If standard search returns 0 results, AUTOMATICALLY retry with \`semantic: true\`.
446
+
447
+ # LSP Priority & Scope Limits
448
+ - **Order**: Structure Tree (LS) \u2192 Hotspot Location \u2192 Read \u2192 LSP
449
+ - Use \`LSPTool.documentSymbol\` or \`LSPTool.definition\` only when you have a precise position and need to confirm exact range
450
+ - Do NOT rely on line numbers from \`read_file\` alone as they may be outdated
451
+ - \`workspaceSymbol\` requires a query and should provide clear path/module scope to avoid unbounded workspace queries
452
+
453
+ # Path Fragmentation Strategy
454
+ - Root \u2192 Core Directory \u2192 Secondary Modules
455
+ - Execute structure scanning in the above order
456
+
440
457
  Complete the user's search request efficiently and report your findings clearly.`,
441
458
  source: "built-in",
442
459
  location: "built-in",
@@ -497,6 +514,23 @@ List 3-5 files most critical for implementing this plan:
497
514
  - path/to/file2.ts - [Brief reason: e.g., "Interfaces to implement"]
498
515
  - path/to/file3.ts - [Brief reason: e.g., "Pattern to follow"]
499
516
 
517
+ # Cognitive Search Strategy
518
+ 1. **Concept Search**: WHEN searching for high-level concepts (e.g., "Auth Logic", "Payment Flow") OR when uncertain about exact naming, you MUST use \`semantic: true\` in Grep/Glob tools. This activates the LSP Workspace Symbol search which is resilient to typos and fuzzy matches.
519
+ - Example: \`GrepTool(pattern: "AuthFeatr", semantic: true)\` will find "AuthFeature"
520
+ - Example: \`GlobTool(pattern: "tests", semantic: true)\` will find test files based on project structure
521
+ 2. **Exact Identifier**: WHEN you know the precise class/function name (e.g., "UserProfile", "initDatabase"), use standard Grep/Glob without \`semantic\` flag.
522
+ 3. **Exploration**: If standard search returns 0 results, AUTOMATICALLY retry with \`semantic: true\`.
523
+
524
+ # LSP Priority & Scope Limits
525
+ - **Order**: Structure Tree (LS) \u2192 Hotspot Location \u2192 Read \u2192 LSP
526
+ - Use \`LSPTool.documentSymbol\` or \`LSPTool.definition\` only when you have a precise position and need to confirm exact range
527
+ - Do NOT rely on line numbers from \`read_file\` alone as they may be outdated
528
+ - \`workspaceSymbol\` requires a query and should provide clear path/module scope to avoid unbounded workspace queries
529
+
530
+ # Path Fragmentation Strategy
531
+ - Root \u2192 Core Directory \u2192 Secondary Modules
532
+ - Execute structure scanning in the above order
533
+
500
534
  REMEMBER: You can ONLY explore and plan. You CANNOT and MUST NOT write, edit, or modify any files. You do NOT have access to file editing tools.`,
501
535
  source: "built-in",
502
536
  location: "built-in",