pybao-cli 1.5.50 → 1.5.51
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.
- package/dist/REPL-VQEZ7GBU.js +53 -0
- package/dist/{acp-VXAHCMQ4.js → acp-OGXPDTPB.js} +30 -30
- package/dist/{agentsValidate-PFVCK6ZC.js → agentsValidate-7USQLEWU.js} +7 -7
- package/dist/{ask-7RQ2G5S3.js → ask-KTRDNR5F.js} +30 -30
- package/dist/{autoUpdater-TDN3ABMG.js → autoUpdater-YTVTFZKD.js} +3 -3
- package/dist/{chunk-LE5VGGP6.js → chunk-276WD5RN.js} +4 -4
- package/dist/{chunk-YFVKGHW2.js → chunk-56FKUXNO.js} +2 -2
- package/dist/{chunk-KKNO6B2K.js → chunk-5C3V4WBH.js} +751 -739
- package/dist/chunk-5C3V4WBH.js.map +7 -0
- package/dist/{chunk-XHAEEYYH.js → chunk-726GW5OD.js} +1 -1
- package/dist/{chunk-FNDIHEBT.js → chunk-A2QSQWOQ.js} +4 -4
- package/dist/{chunk-5P4A6TN2.js → chunk-CLYWO4WT.js} +2 -2
- package/dist/{chunk-ZDDVFBS4.js → chunk-CXWYHX64.js} +4 -4
- package/dist/{chunk-L4CGYTJQ.js → chunk-D2MHLZDN.js} +1 -1
- package/dist/{chunk-K3QEELFX.js → chunk-EEOIMMFC.js} +3 -3
- package/dist/{chunk-3IPEAISZ.js → chunk-ESKGSE6G.js} +3 -3
- package/dist/{chunk-CNW45NOZ.js → chunk-FTPQJIPL.js} +3 -3
- package/dist/{chunk-PXRUNRK7.js → chunk-GUNRUYLP.js} +1 -1
- package/dist/{chunk-NRORTICH.js → chunk-GZOD5652.js} +2 -2
- package/dist/{chunk-Y7I4XTJJ.js → chunk-HM2PO36Q.js} +3 -3
- package/dist/{chunk-IXFDCJ25.js → chunk-I6GA6HKT.js} +3 -3
- package/dist/{chunk-UJRT7VK2.js → chunk-LG4DZXZE.js} +1 -1
- package/dist/{chunk-J6HKEIL2.js → chunk-NXWVCWZU.js} +1 -1
- package/dist/{chunk-CHH6TEXB.js → chunk-OLQLK3UC.js} +1 -1
- package/dist/{chunk-A45A3UUU.js → chunk-PGRCNKEQ.js} +1 -1
- package/dist/{chunk-7MR3XX5X.js → chunk-PWHPXHNR.js} +2 -2
- package/dist/{chunk-NBDDIZNJ.js → chunk-QHRHQ4TE.js} +2 -2
- package/dist/{chunk-ZKW5V7MR.js → chunk-RDDHG7KT.js} +1 -1
- package/dist/{chunk-EY3ZOE75.js → chunk-TGGCRPZR.js} +1 -1
- package/dist/{chunk-VAZ4VRTA.js → chunk-TKU3UJXS.js} +3 -3
- package/dist/{chunk-BQCQ3DEN.js → chunk-TZGJRTAC.js} +2 -2
- package/dist/{chunk-NQGIALRP.js → chunk-UIKYSSZX.js} +4 -4
- package/dist/{chunk-CNBKKQSV.js → chunk-UMOI4SIG.js} +1 -1
- package/dist/{chunk-DBMDQEQO.js → chunk-WZDDUIIK.js} +3 -3
- package/dist/{chunk-5ITEAEJC.js → chunk-X6MCOKYP.js} +1 -1
- package/dist/{chunk-5ITEAEJC.js.map → chunk-X6MCOKYP.js.map} +1 -1
- package/dist/{chunk-C7BUAPKP.js → chunk-XTFXKDRC.js} +3 -3
- package/dist/{chunk-NSFU6Y4R.js → chunk-YEUUN3PW.js} +1 -1
- package/dist/{cli-PMOATR2H.js → cli-KFO36PW7.js} +90 -90
- package/dist/commands-DKTG7VIQ.js +57 -0
- package/dist/{config-PQYZDDGW.js → config-UGXKX5W7.js} +4 -4
- package/dist/{context-BWXP2WB4.js → context-TDXVLXJZ.js} +6 -6
- package/dist/{conversationPersistence-CS2SQ6Z6.js → conversationPersistence-ATHSGPCA.js} +3 -3
- package/dist/{conversationTracker-3OLKEYWM.js → conversationTracker-IGKMS7I2.js} +4 -4
- package/dist/{customCommands-VPTXXYYR.js → customCommands-5MIZHJIB.js} +4 -4
- package/dist/{env-G5ZYCG5S.js → env-3KNLQRPA.js} +2 -2
- package/dist/{file-2I2KXCVN.js → file-DFXDFI6W.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-KXF74SNS.js → llm-MRDYTVAB.js} +31 -31
- package/dist/{llmLazy-L3IJUBN2.js → llmLazy-2O7VC463.js} +1 -1
- package/dist/{loader-CJOJNOV7.js → loader-FZWD5WHH.js} +4 -4
- package/dist/{lsp-OKPL75YW.js → lsp-2TM75CW4.js} +6 -6
- package/dist/{lspAnchor-7Z5YNXX3.js → lspAnchor-XGTUMZDM.js} +6 -6
- package/dist/{mcp-C65V4JYM.js → mcp-FITQROXI.js} +7 -7
- package/dist/{mentionProcessor-EDZBHP7Y.js → mentionProcessor-L5WCXBIE.js} +5 -5
- package/dist/{messages-YBAYUMKL.js → messages-4S23AYLZ.js} +1 -1
- package/dist/{model-7WMFC6F7.js → model-ECABFXED.js} +5 -5
- package/dist/{openai-YWEX6G4I.js → openai-AAHVW6AQ.js} +5 -5
- package/dist/{outputStyles-N6S27KGD.js → outputStyles-2QWBQSS4.js} +4 -4
- package/dist/{pluginRuntime-3XWIAPQ7.js → pluginRuntime-TDH3JKLN.js} +6 -6
- package/dist/{pluginValidation-2JLTTMJL.js → pluginValidation-FBGQ4JDV.js} +6 -6
- package/dist/prompts-PLA42YDC.js +59 -0
- package/dist/{pybAgentSessionLoad-XJ6XWCK5.js → pybAgentSessionLoad-WEEMBEOX.js} +4 -4
- package/dist/{pybAgentSessionResume-SMNXFGFB.js → pybAgentSessionResume-FXJA5YEY.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-33YU7WNJ.js → pybAgentStreamJsonSession-I3QVTPS4.js} +1 -1
- package/dist/{pybHooks-6JRPW3VW.js → pybHooks-QVFTX2NF.js} +4 -4
- package/dist/query-GEX7UFS4.js +57 -0
- package/dist/{registry-67P26WKJ.js → registry-R642XWSX.js} +5 -5
- package/dist/{ripgrep-DPLWHL7O.js → ripgrep-ZCE3BIKN.js} +3 -3
- package/dist/{skillMarketplace-MGU4KRUF.js → skillMarketplace-O2RFNXT4.js} +3 -3
- package/dist/{state-NZVNNCHH.js → state-GMP5BAO3.js} +2 -2
- package/dist/{theme-XV4CTBG6.js → theme-BXH5IJVI.js} +5 -5
- package/dist/{toolPermissionSettings-NEXN25B3.js → toolPermissionSettings-SLI774QB.js} +6 -6
- package/dist/tools-GEQDCFN6.js +57 -0
- package/dist/{userInput-PHXM4ITY.js → userInput-73ASWIUB.js} +32 -32
- package/package.json +1 -1
- package/dist/REPL-5XUDCAF4.js +0 -53
- package/dist/chunk-KKNO6B2K.js.map +0 -7
- package/dist/commands-HA2TW7NU.js +0 -57
- package/dist/prompts-HCGQPTDJ.js +0 -59
- package/dist/query-GGJC3XT2.js +0 -57
- package/dist/tools-R7EDLOFS.js +0 -57
- /package/dist/{REPL-5XUDCAF4.js.map → REPL-VQEZ7GBU.js.map} +0 -0
- /package/dist/{acp-VXAHCMQ4.js.map → acp-OGXPDTPB.js.map} +0 -0
- /package/dist/{agentsValidate-PFVCK6ZC.js.map → agentsValidate-7USQLEWU.js.map} +0 -0
- /package/dist/{ask-7RQ2G5S3.js.map → ask-KTRDNR5F.js.map} +0 -0
- /package/dist/{autoUpdater-TDN3ABMG.js.map → autoUpdater-YTVTFZKD.js.map} +0 -0
- /package/dist/{chunk-LE5VGGP6.js.map → chunk-276WD5RN.js.map} +0 -0
- /package/dist/{chunk-YFVKGHW2.js.map → chunk-56FKUXNO.js.map} +0 -0
- /package/dist/{chunk-XHAEEYYH.js.map → chunk-726GW5OD.js.map} +0 -0
- /package/dist/{chunk-FNDIHEBT.js.map → chunk-A2QSQWOQ.js.map} +0 -0
- /package/dist/{chunk-5P4A6TN2.js.map → chunk-CLYWO4WT.js.map} +0 -0
- /package/dist/{chunk-ZDDVFBS4.js.map → chunk-CXWYHX64.js.map} +0 -0
- /package/dist/{chunk-L4CGYTJQ.js.map → chunk-D2MHLZDN.js.map} +0 -0
- /package/dist/{chunk-K3QEELFX.js.map → chunk-EEOIMMFC.js.map} +0 -0
- /package/dist/{chunk-3IPEAISZ.js.map → chunk-ESKGSE6G.js.map} +0 -0
- /package/dist/{chunk-CNW45NOZ.js.map → chunk-FTPQJIPL.js.map} +0 -0
- /package/dist/{chunk-PXRUNRK7.js.map → chunk-GUNRUYLP.js.map} +0 -0
- /package/dist/{chunk-NRORTICH.js.map → chunk-GZOD5652.js.map} +0 -0
- /package/dist/{chunk-Y7I4XTJJ.js.map → chunk-HM2PO36Q.js.map} +0 -0
- /package/dist/{chunk-IXFDCJ25.js.map → chunk-I6GA6HKT.js.map} +0 -0
- /package/dist/{chunk-UJRT7VK2.js.map → chunk-LG4DZXZE.js.map} +0 -0
- /package/dist/{chunk-J6HKEIL2.js.map → chunk-NXWVCWZU.js.map} +0 -0
- /package/dist/{chunk-CHH6TEXB.js.map → chunk-OLQLK3UC.js.map} +0 -0
- /package/dist/{chunk-A45A3UUU.js.map → chunk-PGRCNKEQ.js.map} +0 -0
- /package/dist/{chunk-7MR3XX5X.js.map → chunk-PWHPXHNR.js.map} +0 -0
- /package/dist/{chunk-NBDDIZNJ.js.map → chunk-QHRHQ4TE.js.map} +0 -0
- /package/dist/{chunk-ZKW5V7MR.js.map → chunk-RDDHG7KT.js.map} +0 -0
- /package/dist/{chunk-EY3ZOE75.js.map → chunk-TGGCRPZR.js.map} +0 -0
- /package/dist/{chunk-VAZ4VRTA.js.map → chunk-TKU3UJXS.js.map} +0 -0
- /package/dist/{chunk-BQCQ3DEN.js.map → chunk-TZGJRTAC.js.map} +0 -0
- /package/dist/{chunk-NQGIALRP.js.map → chunk-UIKYSSZX.js.map} +0 -0
- /package/dist/{chunk-CNBKKQSV.js.map → chunk-UMOI4SIG.js.map} +0 -0
- /package/dist/{chunk-DBMDQEQO.js.map → chunk-WZDDUIIK.js.map} +0 -0
- /package/dist/{chunk-C7BUAPKP.js.map → chunk-XTFXKDRC.js.map} +0 -0
- /package/dist/{chunk-NSFU6Y4R.js.map → chunk-YEUUN3PW.js.map} +0 -0
- /package/dist/{cli-PMOATR2H.js.map → cli-KFO36PW7.js.map} +0 -0
- /package/dist/{commands-HA2TW7NU.js.map → commands-DKTG7VIQ.js.map} +0 -0
- /package/dist/{config-PQYZDDGW.js.map → config-UGXKX5W7.js.map} +0 -0
- /package/dist/{context-BWXP2WB4.js.map → context-TDXVLXJZ.js.map} +0 -0
- /package/dist/{conversationPersistence-CS2SQ6Z6.js.map → conversationPersistence-ATHSGPCA.js.map} +0 -0
- /package/dist/{conversationTracker-3OLKEYWM.js.map → conversationTracker-IGKMS7I2.js.map} +0 -0
- /package/dist/{customCommands-VPTXXYYR.js.map → customCommands-5MIZHJIB.js.map} +0 -0
- /package/dist/{env-G5ZYCG5S.js.map → env-3KNLQRPA.js.map} +0 -0
- /package/dist/{file-2I2KXCVN.js.map → file-DFXDFI6W.js.map} +0 -0
- /package/dist/{llm-KXF74SNS.js.map → llm-MRDYTVAB.js.map} +0 -0
- /package/dist/{llmLazy-L3IJUBN2.js.map → llmLazy-2O7VC463.js.map} +0 -0
- /package/dist/{loader-CJOJNOV7.js.map → loader-FZWD5WHH.js.map} +0 -0
- /package/dist/{lsp-OKPL75YW.js.map → lsp-2TM75CW4.js.map} +0 -0
- /package/dist/{lspAnchor-7Z5YNXX3.js.map → lspAnchor-XGTUMZDM.js.map} +0 -0
- /package/dist/{mcp-C65V4JYM.js.map → mcp-FITQROXI.js.map} +0 -0
- /package/dist/{mentionProcessor-EDZBHP7Y.js.map → mentionProcessor-L5WCXBIE.js.map} +0 -0
- /package/dist/{messages-YBAYUMKL.js.map → messages-4S23AYLZ.js.map} +0 -0
- /package/dist/{model-7WMFC6F7.js.map → model-ECABFXED.js.map} +0 -0
- /package/dist/{openai-YWEX6G4I.js.map → openai-AAHVW6AQ.js.map} +0 -0
- /package/dist/{outputStyles-N6S27KGD.js.map → outputStyles-2QWBQSS4.js.map} +0 -0
- /package/dist/{pluginRuntime-3XWIAPQ7.js.map → pluginRuntime-TDH3JKLN.js.map} +0 -0
- /package/dist/{pluginValidation-2JLTTMJL.js.map → pluginValidation-FBGQ4JDV.js.map} +0 -0
- /package/dist/{prompts-HCGQPTDJ.js.map → prompts-PLA42YDC.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-XJ6XWCK5.js.map → pybAgentSessionLoad-WEEMBEOX.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-SMNXFGFB.js.map → pybAgentSessionResume-FXJA5YEY.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-33YU7WNJ.js.map → pybAgentStreamJsonSession-I3QVTPS4.js.map} +0 -0
- /package/dist/{pybHooks-6JRPW3VW.js.map → pybHooks-QVFTX2NF.js.map} +0 -0
- /package/dist/{query-GGJC3XT2.js.map → query-GEX7UFS4.js.map} +0 -0
- /package/dist/{registry-67P26WKJ.js.map → registry-R642XWSX.js.map} +0 -0
- /package/dist/{ripgrep-DPLWHL7O.js.map → ripgrep-ZCE3BIKN.js.map} +0 -0
- /package/dist/{skillMarketplace-MGU4KRUF.js.map → skillMarketplace-O2RFNXT4.js.map} +0 -0
- /package/dist/{state-NZVNNCHH.js.map → state-GMP5BAO3.js.map} +0 -0
- /package/dist/{theme-XV4CTBG6.js.map → theme-BXH5IJVI.js.map} +0 -0
- /package/dist/{toolPermissionSettings-NEXN25B3.js.map → toolPermissionSettings-SLI774QB.js.map} +0 -0
- /package/dist/{tools-R7EDLOFS.js.map → tools-GEQDCFN6.js.map} +0 -0
- /package/dist/{userInput-PHXM4ITY.js.map → userInput-73ASWIUB.js.map} +0 -0
|
@@ -2,17 +2,17 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
loadPybAgentSessionMessages
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-YEUUN3PW.js";
|
|
6
6
|
import {
|
|
7
7
|
appendSessionCustomTitleRecord,
|
|
8
8
|
appendSessionJsonlFromMessage,
|
|
9
9
|
appendSessionTagRecord,
|
|
10
10
|
listPybAgentSessions
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-I6GA6HKT.js";
|
|
12
12
|
import {
|
|
13
13
|
formatValidationResult,
|
|
14
14
|
validatePluginOrMarketplacePath
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-EEOIMMFC.js";
|
|
16
16
|
import {
|
|
17
17
|
ConversationTracker,
|
|
18
18
|
appendFinishState,
|
|
@@ -20,10 +20,10 @@ import {
|
|
|
20
20
|
getConversationTrackerForContext,
|
|
21
21
|
isFinishComplete,
|
|
22
22
|
mapFinishReason
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-D2MHLZDN.js";
|
|
24
24
|
import {
|
|
25
25
|
FileSystemConversationPersistence
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-NXWVCWZU.js";
|
|
27
27
|
import {
|
|
28
28
|
beginReplSessionScope
|
|
29
29
|
} from "./chunk-F4AXICO7.js";
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
runStopHooks,
|
|
39
39
|
runUserPromptSubmitHooks,
|
|
40
40
|
updateHookTranscriptForMessages
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-WZDDUIIK.js";
|
|
42
42
|
import {
|
|
43
43
|
DEFAULT_OUTPUT_STYLE,
|
|
44
44
|
getAvailableOutputStyles,
|
|
@@ -47,11 +47,11 @@ import {
|
|
|
47
47
|
getOutputStyleSystemPromptAdditions,
|
|
48
48
|
resolveOutputStyleName,
|
|
49
49
|
setCurrentOutputStyle
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-TZGJRTAC.js";
|
|
51
51
|
import {
|
|
52
52
|
fetchCustomModels,
|
|
53
53
|
getModelFeatures
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-CLYWO4WT.js";
|
|
55
55
|
import {
|
|
56
56
|
getCurrentSessionId,
|
|
57
57
|
getSessionState
|
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
queryLLM,
|
|
61
61
|
queryQuick,
|
|
62
62
|
verifyApiKey
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-CXWYHX64.js";
|
|
64
64
|
import {
|
|
65
65
|
DEFAULT_TIMEOUT_MS,
|
|
66
66
|
DESCRIPTION,
|
|
@@ -92,7 +92,7 @@ import {
|
|
|
92
92
|
listMCPServers,
|
|
93
93
|
loadMergedSettings,
|
|
94
94
|
normalizeSandboxRuntimeConfigFromSettings
|
|
95
|
-
} from "./chunk-
|
|
95
|
+
} from "./chunk-A2QSQWOQ.js";
|
|
96
96
|
import {
|
|
97
97
|
addMarketplace,
|
|
98
98
|
disableSkillPlugin,
|
|
@@ -105,11 +105,11 @@ import {
|
|
|
105
105
|
refreshMarketplaceAsync,
|
|
106
106
|
removeMarketplace,
|
|
107
107
|
uninstallSkillPlugin
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-OLQLK3UC.js";
|
|
109
109
|
import {
|
|
110
110
|
loadToolPermissionContextFromDisk,
|
|
111
111
|
persistToolPermissionUpdateToDisk
|
|
112
|
-
} from "./chunk-
|
|
112
|
+
} from "./chunk-HM2PO36Q.js";
|
|
113
113
|
import {
|
|
114
114
|
applyToolPermissionContextUpdate,
|
|
115
115
|
applyToolPermissionContextUpdates,
|
|
@@ -120,14 +120,14 @@ import {
|
|
|
120
120
|
generateSystemReminders,
|
|
121
121
|
resetReminderSession,
|
|
122
122
|
systemReminderService
|
|
123
|
-
} from "./chunk-
|
|
123
|
+
} from "./chunk-GZOD5652.js";
|
|
124
124
|
import {
|
|
125
125
|
clearAgentCache,
|
|
126
126
|
getActiveAgents,
|
|
127
127
|
getAgentByType,
|
|
128
128
|
getAllAgents,
|
|
129
129
|
getAvailableAgentTypes
|
|
130
|
-
} from "./chunk-
|
|
130
|
+
} from "./chunk-56FKUXNO.js";
|
|
131
131
|
import {
|
|
132
132
|
API_ERROR_MESSAGE_PREFIX,
|
|
133
133
|
CANCEL_MESSAGE,
|
|
@@ -162,7 +162,7 @@ import {
|
|
|
162
162
|
reorderMessages,
|
|
163
163
|
resetAutoCompactTelemetry,
|
|
164
164
|
stripSystemMessages
|
|
165
|
-
} from "./chunk-
|
|
165
|
+
} from "./chunk-GUNRUYLP.js";
|
|
166
166
|
import {
|
|
167
167
|
getRequestStatus,
|
|
168
168
|
setRequestStatus,
|
|
@@ -194,7 +194,7 @@ import {
|
|
|
194
194
|
normalizeFilePath,
|
|
195
195
|
readTextContent,
|
|
196
196
|
writeTextContent
|
|
197
|
-
} from "./chunk-
|
|
197
|
+
} from "./chunk-QHRHQ4TE.js";
|
|
198
198
|
import {
|
|
199
199
|
parseBlockEdits
|
|
200
200
|
} from "./chunk-QWIBSCDN.js";
|
|
@@ -208,7 +208,7 @@ import {
|
|
|
208
208
|
formatDiagnosticsPretty,
|
|
209
209
|
initParser,
|
|
210
210
|
loadLanguage
|
|
211
|
-
} from "./chunk-
|
|
211
|
+
} from "./chunk-UIKYSSZX.js";
|
|
212
212
|
import {
|
|
213
213
|
emitTelemetryEvent,
|
|
214
214
|
registerTelemetryListener
|
|
@@ -217,13 +217,13 @@ import {
|
|
|
217
217
|
getSettingsFileCandidates,
|
|
218
218
|
loadSettingsWithLegacyFallback,
|
|
219
219
|
readSettingsFile
|
|
220
|
-
} from "./chunk-
|
|
220
|
+
} from "./chunk-UMOI4SIG.js";
|
|
221
221
|
import {
|
|
222
222
|
getCustomCommandDirectories,
|
|
223
223
|
hasCustomCommands,
|
|
224
224
|
loadCustomCommands,
|
|
225
225
|
reloadCustomCommands
|
|
226
|
-
} from "./chunk-
|
|
226
|
+
} from "./chunk-PWHPXHNR.js";
|
|
227
227
|
import {
|
|
228
228
|
getSessionPlugins
|
|
229
229
|
} from "./chunk-BJSWTHRM.js";
|
|
@@ -232,7 +232,7 @@ import {
|
|
|
232
232
|
buildModelProfileKey,
|
|
233
233
|
getModelManager,
|
|
234
234
|
isDefaultSlowAndCapableModel
|
|
235
|
-
} from "./chunk-
|
|
235
|
+
} from "./chunk-TKU3UJXS.js";
|
|
236
236
|
import {
|
|
237
237
|
getCodeStyle,
|
|
238
238
|
getContext,
|
|
@@ -240,16 +240,16 @@ import {
|
|
|
240
240
|
getIsGit,
|
|
241
241
|
getProjectDocs,
|
|
242
242
|
getProjectStructureStatisticsBlock
|
|
243
|
-
} from "./chunk-
|
|
243
|
+
} from "./chunk-276WD5RN.js";
|
|
244
244
|
import {
|
|
245
245
|
getRipgrepPath,
|
|
246
246
|
getRipgrepPolicyMode,
|
|
247
247
|
resolveRipgrepPolicy,
|
|
248
248
|
ripGrep
|
|
249
|
-
} from "./chunk-
|
|
249
|
+
} from "./chunk-RDDHG7KT.js";
|
|
250
250
|
import {
|
|
251
251
|
getTheme
|
|
252
|
-
} from "./chunk-
|
|
252
|
+
} from "./chunk-TGGCRPZR.js";
|
|
253
253
|
import {
|
|
254
254
|
DEFAULT_GLOBAL_CONFIG,
|
|
255
255
|
enableConfigs,
|
|
@@ -262,7 +262,7 @@ import {
|
|
|
262
262
|
saveGlobalConfig,
|
|
263
263
|
setAllPointersToModel,
|
|
264
264
|
setModelPointer
|
|
265
|
-
} from "./chunk-
|
|
265
|
+
} from "./chunk-FTPQJIPL.js";
|
|
266
266
|
import {
|
|
267
267
|
AbortError
|
|
268
268
|
} from "./chunk-RQVLBMP7.js";
|
|
@@ -271,7 +271,7 @@ import {
|
|
|
271
271
|
getCurrentRequest,
|
|
272
272
|
logUserFriendly,
|
|
273
273
|
markPhase
|
|
274
|
-
} from "./chunk-
|
|
274
|
+
} from "./chunk-PGRCNKEQ.js";
|
|
275
275
|
import {
|
|
276
276
|
ASCII_LOGO,
|
|
277
277
|
BunShell,
|
|
@@ -315,10 +315,10 @@ import {
|
|
|
315
315
|
setCwd,
|
|
316
316
|
shouldApplyToolOutputTruncation,
|
|
317
317
|
truncateToolOutput
|
|
318
|
-
} from "./chunk-
|
|
318
|
+
} from "./chunk-LG4DZXZE.js";
|
|
319
319
|
import {
|
|
320
320
|
MACRO
|
|
321
|
-
} from "./chunk-
|
|
321
|
+
} from "./chunk-X6MCOKYP.js";
|
|
322
322
|
import {
|
|
323
323
|
__export
|
|
324
324
|
} from "./chunk-I3J4JYES.js";
|
|
@@ -499,7 +499,7 @@ var getCommandSubcommandPrefix = memoize(
|
|
|
499
499
|
var getCommandPrefix = memoize(
|
|
500
500
|
async (command4, abortSignal) => {
|
|
501
501
|
const { systemPrompt, userPrompt } = buildBashCommandPrefixDetectionPrompt(command4);
|
|
502
|
-
const { API_ERROR_MESSAGE_PREFIX: API_ERROR_MESSAGE_PREFIX2, queryQuick: queryQuick2 } = await import("./llm-
|
|
502
|
+
const { API_ERROR_MESSAGE_PREFIX: API_ERROR_MESSAGE_PREFIX2, queryQuick: queryQuick2 } = await import("./llm-MRDYTVAB.js");
|
|
503
503
|
const response = await queryQuick2({
|
|
504
504
|
systemPrompt,
|
|
505
505
|
userPrompt,
|
|
@@ -4301,7 +4301,7 @@ function formatParseError(error) {
|
|
|
4301
4301
|
return error instanceof Error ? error.message : String(error);
|
|
4302
4302
|
}
|
|
4303
4303
|
async function defaultGateQuery(args) {
|
|
4304
|
-
const { API_ERROR_MESSAGE_PREFIX: API_ERROR_MESSAGE_PREFIX2, queryLLM: queryLLM2 } = await import("./llm-
|
|
4304
|
+
const { API_ERROR_MESSAGE_PREFIX: API_ERROR_MESSAGE_PREFIX2, queryLLM: queryLLM2 } = await import("./llm-MRDYTVAB.js");
|
|
4305
4305
|
const queryLLMFn = args.queryLLMOverride ?? queryLLM2;
|
|
4306
4306
|
const messages = [
|
|
4307
4307
|
{
|
|
@@ -6800,7 +6800,7 @@ var FileEditTool = {
|
|
|
6800
6800
|
const originalFileContent = currentFileContent;
|
|
6801
6801
|
let totalPatch = [];
|
|
6802
6802
|
const { SmartEdit } = await import("./smart-edit-AWHJDSU6.js");
|
|
6803
|
-
const { findLspAnchor } = await import("./lspAnchor-
|
|
6803
|
+
const { findLspAnchor } = await import("./lspAnchor-XGTUMZDM.js");
|
|
6804
6804
|
for (const op of editOperations) {
|
|
6805
6805
|
const normalizedSearch = normalizeLineEndings(op.search);
|
|
6806
6806
|
const normalizedReplace = normalizeLineEndings(op.replace);
|
|
@@ -8756,6 +8756,7 @@ var inputSchema7 = z7.strictObject({
|
|
|
8756
8756
|
});
|
|
8757
8757
|
var MAX_RESULT_CHARS = 2e4;
|
|
8758
8758
|
var EXCLUDED_DIRS = [".git", ".svn", ".hg", ".bzr"];
|
|
8759
|
+
var DEFAULT_FILES_WITH_MATCHES_LIMIT = 1500;
|
|
8759
8760
|
function paginate(items, limit, offset) {
|
|
8760
8761
|
if (offset > 0) {
|
|
8761
8762
|
items = items.slice(offset);
|
|
@@ -8884,7 +8885,9 @@ Found ${numMatches} total ${numMatches === 1 ? "occurrence" : "occurrences"} acr
|
|
|
8884
8885
|
"No files found\nSuggestion: Read the target directory path to confirm one-level structure and search scope, then broaden matching conditions (case/regex/keyword variants, semantic=true), and if needed switch to content mode or expand the file set before searching again."
|
|
8885
8886
|
);
|
|
8886
8887
|
}
|
|
8887
|
-
const
|
|
8888
|
+
const totalFiles = result.totalFiles ?? result.numFiles;
|
|
8889
|
+
const truncatedLabel = result.truncated && result.appliedLimit !== void 0 ? ` (showing first ${result.appliedLimit}; use head_limit/offset to paginate)` : "";
|
|
8890
|
+
const header = `Found ${totalFiles} file${totalFiles === 1 ? "" : "s"}${truncatedLabel}${pagination && !result.truncated ? ` ${pagination}` : ""}
|
|
8888
8891
|
${result.filenames.join("\n")}`;
|
|
8889
8892
|
return appendNotice(truncateToCharBudget(header));
|
|
8890
8893
|
},
|
|
@@ -8942,7 +8945,7 @@ ${result.filenames.join("\n")}`;
|
|
|
8942
8945
|
if (type3) {
|
|
8943
8946
|
baseArgs.push("--type", type3);
|
|
8944
8947
|
}
|
|
8945
|
-
const appliedLimit = head_limit !== void 0 ? head_limit : void 0;
|
|
8948
|
+
const appliedLimit = head_limit !== void 0 ? head_limit : output_mode === "files_with_matches" ? DEFAULT_FILES_WITH_MATCHES_LIMIT : void 0;
|
|
8946
8949
|
const appliedOffset = offset || 0;
|
|
8947
8950
|
if (glob) {
|
|
8948
8951
|
for (const g of parseGlobString(glob)) {
|
|
@@ -9195,10 +9198,13 @@ ${result.filenames.join("\n")}`;
|
|
|
9195
9198
|
const window = paginate(sorted, appliedLimit, appliedOffset).map(
|
|
9196
9199
|
toProjectRelativeIfPossible
|
|
9197
9200
|
);
|
|
9201
|
+
const totalFiles = sorted.length;
|
|
9198
9202
|
const output = {
|
|
9199
9203
|
mode: "files_with_matches",
|
|
9200
9204
|
filenames: window,
|
|
9201
9205
|
numFiles: window.length,
|
|
9206
|
+
totalFiles,
|
|
9207
|
+
truncated: window.length < totalFiles,
|
|
9202
9208
|
...appliedLimit !== void 0 ? { appliedLimit } : {},
|
|
9203
9209
|
...appliedOffset > 0 ? { appliedOffset } : {},
|
|
9204
9210
|
durationMs: Date.now() - start,
|
|
@@ -12402,7 +12408,7 @@ async function createAndStoreApiKey(accessToken) {
|
|
|
12402
12408
|
}
|
|
12403
12409
|
saveGlobalConfig(config2);
|
|
12404
12410
|
try {
|
|
12405
|
-
const { resetAnthropicClient } = await import("./llm-
|
|
12411
|
+
const { resetAnthropicClient } = await import("./llm-MRDYTVAB.js");
|
|
12406
12412
|
resetAnthropicClient();
|
|
12407
12413
|
} catch {
|
|
12408
12414
|
}
|
|
@@ -16826,7 +16832,7 @@ async function refreshPluginRuntimeFromInstalls() {
|
|
|
16826
16832
|
const existingRoots = getSessionPlugins().map((p) => p.rootDir);
|
|
16827
16833
|
const dirs = Array.from(/* @__PURE__ */ new Set([...existingRoots, ...installedRoots]));
|
|
16828
16834
|
if (dirs.length === 0) return [];
|
|
16829
|
-
const { configureSessionPlugins } = await import("./pluginRuntime-
|
|
16835
|
+
const { configureSessionPlugins } = await import("./pluginRuntime-TDH3JKLN.js");
|
|
16830
16836
|
const { errors } = await configureSessionPlugins({ pluginDirs: dirs });
|
|
16831
16837
|
return errors;
|
|
16832
16838
|
}
|
|
@@ -17501,7 +17507,7 @@ async function call(onDone, context) {
|
|
|
17501
17507
|
ModelConfig,
|
|
17502
17508
|
{
|
|
17503
17509
|
onClose: () => {
|
|
17504
|
-
import("./model-
|
|
17510
|
+
import("./model-ECABFXED.js").then(({ reloadModelManager: reloadModelManager2 }) => {
|
|
17505
17511
|
reloadModelManager2();
|
|
17506
17512
|
triggerModelConfigChange();
|
|
17507
17513
|
onDone();
|
|
@@ -21043,7 +21049,7 @@ function buildAutoCompactAggregationFields(params) {
|
|
|
21043
21049
|
}
|
|
21044
21050
|
|
|
21045
21051
|
// src/utils/session/compactionBudget.ts
|
|
21046
|
-
var DEFAULT_TOTAL_BUDGET_TOKENS =
|
|
21052
|
+
var DEFAULT_TOTAL_BUDGET_TOKENS = 5e4;
|
|
21047
21053
|
var DEFAULT_SUMMARY_RATIO = 0.45;
|
|
21048
21054
|
var DEFAULT_CONVERSATION_RATIO = 0.2;
|
|
21049
21055
|
var DEFAULT_RECOVERED_RATIO = 0.35;
|
|
@@ -25990,605 +25996,13 @@ async function* runToolUse(toolUse, siblingToolUseIDs, assistantMessage, canUseT
|
|
|
25990
25996
|
}
|
|
25991
25997
|
}
|
|
25992
25998
|
|
|
25993
|
-
// src/server/bus/index.ts
|
|
25994
|
-
var BusEvent;
|
|
25995
|
-
((BusEvent2) => {
|
|
25996
|
-
const registry = /* @__PURE__ */ new Map();
|
|
25997
|
-
function define(type3, properties) {
|
|
25998
|
-
const result = { type: type3, properties };
|
|
25999
|
-
registry.set(type3, result);
|
|
26000
|
-
return result;
|
|
26001
|
-
}
|
|
26002
|
-
BusEvent2.define = define;
|
|
26003
|
-
function getSchema(type3) {
|
|
26004
|
-
return registry.get(type3);
|
|
26005
|
-
}
|
|
26006
|
-
BusEvent2.getSchema = getSchema;
|
|
26007
|
-
})(BusEvent || (BusEvent = {}));
|
|
26008
|
-
var Bus;
|
|
26009
|
-
((Bus2) => {
|
|
26010
|
-
const state = {
|
|
26011
|
-
subscriptions: /* @__PURE__ */ new Map()
|
|
26012
|
-
};
|
|
26013
|
-
async function publish(def, properties) {
|
|
26014
|
-
const payload = {
|
|
26015
|
-
type: def.type,
|
|
26016
|
-
properties
|
|
26017
|
-
};
|
|
26018
|
-
const pending = [];
|
|
26019
|
-
for (const key of [def.type, "*"]) {
|
|
26020
|
-
const match = state.subscriptions.get(key);
|
|
26021
|
-
if (match) {
|
|
26022
|
-
for (const sub of match) {
|
|
26023
|
-
const result = sub(payload);
|
|
26024
|
-
if (result instanceof Promise) {
|
|
26025
|
-
pending.push(result);
|
|
26026
|
-
}
|
|
26027
|
-
}
|
|
26028
|
-
}
|
|
26029
|
-
}
|
|
26030
|
-
await Promise.all(pending);
|
|
26031
|
-
}
|
|
26032
|
-
Bus2.publish = publish;
|
|
26033
|
-
function subscribe(def, callback) {
|
|
26034
|
-
return raw(def.type, callback);
|
|
26035
|
-
}
|
|
26036
|
-
Bus2.subscribe = subscribe;
|
|
26037
|
-
function subscribeAll(callback) {
|
|
26038
|
-
return raw("*", callback);
|
|
26039
|
-
}
|
|
26040
|
-
Bus2.subscribeAll = subscribeAll;
|
|
26041
|
-
function raw(type3, callback) {
|
|
26042
|
-
const match = state.subscriptions.get(type3) ?? [];
|
|
26043
|
-
match.push(callback);
|
|
26044
|
-
state.subscriptions.set(type3, match);
|
|
26045
|
-
return () => {
|
|
26046
|
-
const subscriptions = state.subscriptions.get(type3);
|
|
26047
|
-
if (!subscriptions) return;
|
|
26048
|
-
const index = subscriptions.indexOf(callback);
|
|
26049
|
-
if (index !== -1) {
|
|
26050
|
-
subscriptions.splice(index, 1);
|
|
26051
|
-
}
|
|
26052
|
-
};
|
|
26053
|
-
}
|
|
26054
|
-
})(Bus || (Bus = {}));
|
|
26055
|
-
|
|
26056
|
-
// src/server/events/definitions.ts
|
|
26057
|
-
import { z as z10 } from "zod";
|
|
26058
|
-
var ServerEvents = {
|
|
26059
|
-
Connected: BusEvent.define("server.connected", z10.object({
|
|
26060
|
-
serverVersion: z10.string(),
|
|
26061
|
-
protocolVersion: z10.string(),
|
|
26062
|
-
features: z10.array(z10.string())
|
|
26063
|
-
})),
|
|
26064
|
-
Heartbeat: BusEvent.define("server.heartbeat", z10.object({
|
|
26065
|
-
timestamp: z10.number()
|
|
26066
|
-
})),
|
|
26067
|
-
Status: BusEvent.define("server.status", z10.object({
|
|
26068
|
-
status: z10.enum(["healthy", "degraded", "unhealthy"]),
|
|
26069
|
-
components: z10.object({
|
|
26070
|
-
llm: z10.enum(["connected", "disconnected"]),
|
|
26071
|
-
mcp: z10.enum(["connected", "disconnected"]),
|
|
26072
|
-
tools: z10.enum(["ready", "initializing"])
|
|
26073
|
-
})
|
|
26074
|
-
}))
|
|
26075
|
-
};
|
|
26076
|
-
var SessionEvents = {
|
|
26077
|
-
Created: BusEvent.define("session.created", z10.object({
|
|
26078
|
-
sessionId: z10.string(),
|
|
26079
|
-
config: z10.object({
|
|
26080
|
-
model: z10.string(),
|
|
26081
|
-
agent: z10.string(),
|
|
26082
|
-
outputStyle: z10.string()
|
|
26083
|
-
}),
|
|
26084
|
-
resumedFrom: z10.string().optional()
|
|
26085
|
-
})),
|
|
26086
|
-
Updated: BusEvent.define("session.updated", z10.object({
|
|
26087
|
-
sessionId: z10.string(),
|
|
26088
|
-
title: z10.string().optional(),
|
|
26089
|
-
config: z10.object({
|
|
26090
|
-
model: z10.string().optional(),
|
|
26091
|
-
agent: z10.string().optional(),
|
|
26092
|
-
outputStyle: z10.string().optional()
|
|
26093
|
-
}).optional()
|
|
26094
|
-
})),
|
|
26095
|
-
Deleted: BusEvent.define("session.deleted", z10.object({
|
|
26096
|
-
sessionId: z10.string()
|
|
26097
|
-
})),
|
|
26098
|
-
Status: BusEvent.define("session.status", z10.object({
|
|
26099
|
-
sessionId: z10.string(),
|
|
26100
|
-
status: z10.enum(["active", "idle", "waiting_input", "processing"]),
|
|
26101
|
-
currentRequestId: z10.string().optional()
|
|
26102
|
-
}))
|
|
26103
|
-
};
|
|
26104
|
-
var MessageEvents = {
|
|
26105
|
-
Created: BusEvent.define("message.created", z10.object({
|
|
26106
|
-
sessionId: z10.string(),
|
|
26107
|
-
message: z10.any()
|
|
26108
|
-
})),
|
|
26109
|
-
Updated: BusEvent.define("message.updated", z10.object({
|
|
26110
|
-
sessionId: z10.string(),
|
|
26111
|
-
message: z10.any(),
|
|
26112
|
-
delta: z10.object({
|
|
26113
|
-
type: z10.enum(["text", "tool_use"]),
|
|
26114
|
-
content: z10.string(),
|
|
26115
|
-
index: z10.number().optional()
|
|
26116
|
-
}).optional()
|
|
26117
|
-
})),
|
|
26118
|
-
Completed: BusEvent.define("message.completed", z10.object({
|
|
26119
|
-
sessionId: z10.string(),
|
|
26120
|
-
messageId: z10.string(),
|
|
26121
|
-
finishReason: z10.enum(["end_turn", "tool_calls", "max_tokens", "aborted"]),
|
|
26122
|
-
usage: z10.object({
|
|
26123
|
-
inputTokens: z10.number(),
|
|
26124
|
-
outputTokens: z10.number(),
|
|
26125
|
-
totalTokens: z10.number()
|
|
26126
|
-
}),
|
|
26127
|
-
cost: z10.object({
|
|
26128
|
-
costUSD: z10.number()
|
|
26129
|
-
})
|
|
26130
|
-
})),
|
|
26131
|
-
RequestStarted: BusEvent.define("request.started", z10.object({
|
|
26132
|
-
sessionId: z10.string(),
|
|
26133
|
-
requestId: z10.string(),
|
|
26134
|
-
userMessage: z10.string()
|
|
26135
|
-
})),
|
|
26136
|
-
RequestCompleted: BusEvent.define("request.completed", z10.object({
|
|
26137
|
-
sessionId: z10.string(),
|
|
26138
|
-
requestId: z10.string(),
|
|
26139
|
-
finishReason: z10.enum(["end_turn", "tool_calls", "max_tokens", "aborted"]),
|
|
26140
|
-
duration: z10.number(),
|
|
26141
|
-
totalTokens: z10.number(),
|
|
26142
|
-
costUSD: z10.number()
|
|
26143
|
-
}))
|
|
26144
|
-
};
|
|
26145
|
-
var ToolEvents = {
|
|
26146
|
-
Started: BusEvent.define("tool.started", z10.object({
|
|
26147
|
-
sessionId: z10.string(),
|
|
26148
|
-
toolUseId: z10.string(),
|
|
26149
|
-
toolName: z10.string(),
|
|
26150
|
-
input: z10.record(z10.unknown()),
|
|
26151
|
-
dangerousLevel: z10.enum(["safe", "moderate", "dangerous"]),
|
|
26152
|
-
requiresPermission: z10.boolean()
|
|
26153
|
-
})),
|
|
26154
|
-
Progress: BusEvent.define("tool.progress", z10.object({
|
|
26155
|
-
sessionId: z10.string(),
|
|
26156
|
-
toolUseId: z10.string(),
|
|
26157
|
-
toolName: z10.string(),
|
|
26158
|
-
progress: z10.number(),
|
|
26159
|
-
message: z10.string().optional(),
|
|
26160
|
-
output: z10.string().optional()
|
|
26161
|
-
})),
|
|
26162
|
-
Completed: BusEvent.define("tool.completed", z10.object({
|
|
26163
|
-
sessionId: z10.string(),
|
|
26164
|
-
toolUseId: z10.string(),
|
|
26165
|
-
toolName: z10.string(),
|
|
26166
|
-
result: z10.string(),
|
|
26167
|
-
isError: z10.boolean(),
|
|
26168
|
-
duration: z10.number()
|
|
26169
|
-
})),
|
|
26170
|
-
Error: BusEvent.define("tool.error", z10.object({
|
|
26171
|
-
sessionId: z10.string(),
|
|
26172
|
-
toolUseId: z10.string(),
|
|
26173
|
-
toolName: z10.string(),
|
|
26174
|
-
error: z10.object({
|
|
26175
|
-
code: z10.string(),
|
|
26176
|
-
message: z10.string(),
|
|
26177
|
-
details: z10.unknown().optional()
|
|
26178
|
-
})
|
|
26179
|
-
}))
|
|
26180
|
-
};
|
|
26181
|
-
var PermissionEvents = {
|
|
26182
|
-
Requested: BusEvent.define("permission.requested", z10.object({
|
|
26183
|
-
sessionId: z10.string(),
|
|
26184
|
-
permissionId: z10.string(),
|
|
26185
|
-
toolName: z10.string(),
|
|
26186
|
-
toolUseId: z10.string(),
|
|
26187
|
-
input: z10.record(z10.unknown()),
|
|
26188
|
-
risk: z10.enum(["safe", "moderate", "dangerous"]),
|
|
26189
|
-
message: z10.string(),
|
|
26190
|
-
suggestedAction: z10.enum(["allow", "deny"]).optional(),
|
|
26191
|
-
timeout: z10.number().optional()
|
|
26192
|
-
})),
|
|
26193
|
-
Responded: BusEvent.define("permission.responded", z10.object({
|
|
26194
|
-
sessionId: z10.string(),
|
|
26195
|
-
permissionId: z10.string(),
|
|
26196
|
-
decision: z10.enum(["allow", "deny", "allowAll"]),
|
|
26197
|
-
remember: z10.boolean(),
|
|
26198
|
-
scope: z10.enum(["session", "project", "global"]).optional()
|
|
26199
|
-
})),
|
|
26200
|
-
Timeout: BusEvent.define("permission.timeout", z10.object({
|
|
26201
|
-
sessionId: z10.string(),
|
|
26202
|
-
permissionId: z10.string(),
|
|
26203
|
-
toolName: z10.string(),
|
|
26204
|
-
defaultAction: z10.enum(["allow", "deny"])
|
|
26205
|
-
}))
|
|
26206
|
-
};
|
|
26207
|
-
var ErrorEvents = {
|
|
26208
|
-
General: BusEvent.define("error", z10.object({
|
|
26209
|
-
sessionId: z10.string().optional(),
|
|
26210
|
-
code: z10.string(),
|
|
26211
|
-
message: z10.string(),
|
|
26212
|
-
details: z10.unknown().optional(),
|
|
26213
|
-
recoverable: z10.boolean(),
|
|
26214
|
-
suggestedAction: z10.string().optional()
|
|
26215
|
-
})),
|
|
26216
|
-
Stream: BusEvent.define("error.stream", z10.object({
|
|
26217
|
-
reason: z10.enum(["timeout", "aborted", "network", "server"]),
|
|
26218
|
-
message: z10.string(),
|
|
26219
|
-
retryable: z10.boolean(),
|
|
26220
|
-
retryAfter: z10.number().optional()
|
|
26221
|
-
}))
|
|
26222
|
-
};
|
|
26223
|
-
|
|
26224
|
-
// src/server/adapters/queryRunner.ts
|
|
26225
|
-
var QueryRunner = class {
|
|
26226
|
-
constructor(config2, sessionState) {
|
|
26227
|
-
this.config = config2;
|
|
26228
|
-
this.sessionState = sessionState;
|
|
26229
|
-
this.requestId = uuidv4();
|
|
26230
|
-
this.abortController = new AbortController();
|
|
26231
|
-
}
|
|
26232
|
-
requestId;
|
|
26233
|
-
abortController;
|
|
26234
|
-
isRunning = false;
|
|
26235
|
-
messages = [];
|
|
26236
|
-
startTime = 0;
|
|
26237
|
-
totalCost = 0;
|
|
26238
|
-
totalInputTokens = 0;
|
|
26239
|
-
totalOutputTokens = 0;
|
|
26240
|
-
async run(userMessage) {
|
|
26241
|
-
if (this.isRunning) {
|
|
26242
|
-
throw new Error("QueryRunner is already running");
|
|
26243
|
-
}
|
|
26244
|
-
this.isRunning = true;
|
|
26245
|
-
this.startTime = Date.now();
|
|
26246
|
-
this.messages = [];
|
|
26247
|
-
await Bus.publish(MessageEvents.RequestStarted, {
|
|
26248
|
-
sessionId: this.config.sessionId,
|
|
26249
|
-
requestId: this.requestId,
|
|
26250
|
-
userMessage
|
|
26251
|
-
});
|
|
26252
|
-
this.config.onRequestStart?.(this.requestId);
|
|
26253
|
-
try {
|
|
26254
|
-
const messages = this.buildMessages(userMessage);
|
|
26255
|
-
const systemPrompt = this.buildSystemPrompt();
|
|
26256
|
-
const context = this.buildContext();
|
|
26257
|
-
const canUseTool = this.createCanUseToolFn();
|
|
26258
|
-
const toolUseContext = this.createToolUseContext();
|
|
26259
|
-
const generator = query(
|
|
26260
|
-
messages,
|
|
26261
|
-
systemPrompt,
|
|
26262
|
-
context,
|
|
26263
|
-
canUseTool,
|
|
26264
|
-
toolUseContext
|
|
26265
|
-
);
|
|
26266
|
-
let finishReason = "end_turn";
|
|
26267
|
-
for await (const message of generator) {
|
|
26268
|
-
if (this.abortController.signal.aborted) {
|
|
26269
|
-
finishReason = "aborted";
|
|
26270
|
-
break;
|
|
26271
|
-
}
|
|
26272
|
-
await this.handleMessage(message);
|
|
26273
|
-
if (message.type === "assistant") {
|
|
26274
|
-
const candidate = message.finish;
|
|
26275
|
-
if (candidate === "end_turn" || candidate === "tool_calls" || candidate === "max_tokens") {
|
|
26276
|
-
finishReason = candidate;
|
|
26277
|
-
}
|
|
26278
|
-
}
|
|
26279
|
-
}
|
|
26280
|
-
const result = {
|
|
26281
|
-
requestId: this.requestId,
|
|
26282
|
-
finishReason,
|
|
26283
|
-
messages: this.messages,
|
|
26284
|
-
usage: {
|
|
26285
|
-
inputTokens: this.totalInputTokens,
|
|
26286
|
-
outputTokens: this.totalOutputTokens,
|
|
26287
|
-
totalTokens: this.totalInputTokens + this.totalOutputTokens
|
|
26288
|
-
},
|
|
26289
|
-
cost: {
|
|
26290
|
-
costUSD: this.totalCost
|
|
26291
|
-
},
|
|
26292
|
-
duration: Date.now() - this.startTime
|
|
26293
|
-
};
|
|
26294
|
-
await Bus.publish(MessageEvents.RequestCompleted, {
|
|
26295
|
-
sessionId: this.config.sessionId,
|
|
26296
|
-
requestId: this.requestId,
|
|
26297
|
-
finishReason: result.finishReason,
|
|
26298
|
-
duration: result.duration,
|
|
26299
|
-
totalTokens: result.usage.totalTokens,
|
|
26300
|
-
costUSD: result.cost.costUSD
|
|
26301
|
-
});
|
|
26302
|
-
this.config.onRequestComplete?.(this.requestId, result);
|
|
26303
|
-
return result;
|
|
26304
|
-
} catch (error) {
|
|
26305
|
-
this.config.onError?.(error instanceof Error ? error : new Error(String(error)));
|
|
26306
|
-
throw error;
|
|
26307
|
-
} finally {
|
|
26308
|
-
this.isRunning = false;
|
|
26309
|
-
}
|
|
26310
|
-
}
|
|
26311
|
-
abort() {
|
|
26312
|
-
this.abortController.abort();
|
|
26313
|
-
}
|
|
26314
|
-
getStatus() {
|
|
26315
|
-
return {
|
|
26316
|
-
isRunning: this.isRunning,
|
|
26317
|
-
requestId: this.isRunning ? this.requestId : null,
|
|
26318
|
-
messageCount: this.messages.length
|
|
26319
|
-
};
|
|
26320
|
-
}
|
|
26321
|
-
async handleMessage(message) {
|
|
26322
|
-
this.messages.push(message);
|
|
26323
|
-
await Bus.publish(MessageEvents.Created, {
|
|
26324
|
-
sessionId: this.config.sessionId,
|
|
26325
|
-
message
|
|
26326
|
-
});
|
|
26327
|
-
this.config.onMessageYield?.(message);
|
|
26328
|
-
if (message.type === "assistant") {
|
|
26329
|
-
const assistantMsg = message;
|
|
26330
|
-
if (assistantMsg.message?.usage) {
|
|
26331
|
-
this.totalInputTokens += assistantMsg.message.usage.input_tokens ?? 0;
|
|
26332
|
-
this.totalOutputTokens += assistantMsg.message.usage.output_tokens ?? 0;
|
|
26333
|
-
}
|
|
26334
|
-
}
|
|
26335
|
-
}
|
|
26336
|
-
buildMessages(userMessage) {
|
|
26337
|
-
const history = this.sessionState.messages.filter((message) => message.type !== "progress");
|
|
26338
|
-
const nextMessage = createUserMessageFromText(userMessage);
|
|
26339
|
-
return [...history, nextMessage];
|
|
26340
|
-
}
|
|
26341
|
-
buildSystemPrompt() {
|
|
26342
|
-
return this.sessionState.config.systemPrompt ?? [];
|
|
26343
|
-
}
|
|
26344
|
-
buildContext() {
|
|
26345
|
-
return {
|
|
26346
|
-
cwd: this.sessionState.cwd
|
|
26347
|
-
};
|
|
26348
|
-
}
|
|
26349
|
-
createCanUseToolFn() {
|
|
26350
|
-
return async () => ({ result: true });
|
|
26351
|
-
}
|
|
26352
|
-
createToolUseContext() {
|
|
26353
|
-
return {
|
|
26354
|
-
abortController: this.abortController,
|
|
26355
|
-
onQueryLifecycleEvent: (event) => {
|
|
26356
|
-
},
|
|
26357
|
-
sessionContext: new SessionContext(),
|
|
26358
|
-
options: {
|
|
26359
|
-
commands: [],
|
|
26360
|
-
forkNumber: 0,
|
|
26361
|
-
messageLogName: this.requestId,
|
|
26362
|
-
tools: [],
|
|
26363
|
-
verbose: false,
|
|
26364
|
-
safeMode: false,
|
|
26365
|
-
maxThinkingTokens: 16e3
|
|
26366
|
-
},
|
|
26367
|
-
readFileTimestamps: {},
|
|
26368
|
-
setToolJSX: () => {
|
|
26369
|
-
},
|
|
26370
|
-
requestId: this.requestId,
|
|
26371
|
-
messageId: void 0
|
|
26372
|
-
};
|
|
26373
|
-
}
|
|
26374
|
-
};
|
|
26375
|
-
|
|
26376
|
-
// src/server/routes/session.ts
|
|
26377
|
-
function createSessionRoutes() {
|
|
26378
|
-
const router = new Hono();
|
|
26379
|
-
router.post("/", async (c) => {
|
|
26380
|
-
const body = await c.req.json();
|
|
26381
|
-
const { resumeFrom, config: config2 } = body;
|
|
26382
|
-
if (resumeFrom !== void 0 && resumeFrom !== null) {
|
|
26383
|
-
return c.json(
|
|
26384
|
-
{
|
|
26385
|
-
success: false,
|
|
26386
|
-
error: {
|
|
26387
|
-
code: "RESUME_NOT_SUPPORTED",
|
|
26388
|
-
message: "resumeFrom is not supported in current session backend"
|
|
26389
|
-
}
|
|
26390
|
-
},
|
|
26391
|
-
400
|
|
26392
|
-
);
|
|
26393
|
-
}
|
|
26394
|
-
const session = await sessionStateManager.create(
|
|
26395
|
-
process.cwd(),
|
|
26396
|
-
config2
|
|
26397
|
-
);
|
|
26398
|
-
return c.json({
|
|
26399
|
-
success: true,
|
|
26400
|
-
data: {
|
|
26401
|
-
sessionId: session.id,
|
|
26402
|
-
createdAt: session.createdAt,
|
|
26403
|
-
config: session.config
|
|
26404
|
-
}
|
|
26405
|
-
}, 201);
|
|
26406
|
-
});
|
|
26407
|
-
router.get("/", (c) => {
|
|
26408
|
-
const sessions = sessionStateManager.list();
|
|
26409
|
-
const page = parseInt(c.req.query("page") ?? "1");
|
|
26410
|
-
const limit = parseInt(c.req.query("limit") ?? "20");
|
|
26411
|
-
const status = c.req.query("status");
|
|
26412
|
-
let filtered = sessions;
|
|
26413
|
-
if (status) {
|
|
26414
|
-
filtered = filtered.filter((s) => s.status === status);
|
|
26415
|
-
}
|
|
26416
|
-
const start = (page - 1) * limit;
|
|
26417
|
-
const items = filtered.slice(start, start + limit);
|
|
26418
|
-
return c.json({
|
|
26419
|
-
success: true,
|
|
26420
|
-
data: {
|
|
26421
|
-
items: items.map((s) => ({
|
|
26422
|
-
id: s.id,
|
|
26423
|
-
title: s.title,
|
|
26424
|
-
status: s.status,
|
|
26425
|
-
messageCount: s.messages.length,
|
|
26426
|
-
createdAt: s.createdAt,
|
|
26427
|
-
updatedAt: s.updatedAt,
|
|
26428
|
-
config: s.config
|
|
26429
|
-
})),
|
|
26430
|
-
pagination: {
|
|
26431
|
-
page,
|
|
26432
|
-
limit,
|
|
26433
|
-
total: filtered.length,
|
|
26434
|
-
hasMore: start + limit < filtered.length
|
|
26435
|
-
}
|
|
26436
|
-
}
|
|
26437
|
-
});
|
|
26438
|
-
});
|
|
26439
|
-
router.get("/:sessionId", (c) => {
|
|
26440
|
-
const sessionId = c.req.param("sessionId");
|
|
26441
|
-
const session = sessionStateManager.get(sessionId);
|
|
26442
|
-
if (!session) {
|
|
26443
|
-
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
26444
|
-
}
|
|
26445
|
-
return c.json({
|
|
26446
|
-
success: true,
|
|
26447
|
-
data: {
|
|
26448
|
-
id: session.id,
|
|
26449
|
-
title: session.title,
|
|
26450
|
-
status: session.status,
|
|
26451
|
-
messages: session.messages,
|
|
26452
|
-
createdAt: session.createdAt,
|
|
26453
|
-
updatedAt: session.updatedAt,
|
|
26454
|
-
config: session.config
|
|
26455
|
-
}
|
|
26456
|
-
});
|
|
26457
|
-
});
|
|
26458
|
-
router.get("/:sessionId/messages", (c) => {
|
|
26459
|
-
const sessionId = c.req.param("sessionId");
|
|
26460
|
-
const session = sessionStateManager.get(sessionId);
|
|
26461
|
-
if (!session) {
|
|
26462
|
-
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
26463
|
-
}
|
|
26464
|
-
const after = c.req.query("after");
|
|
26465
|
-
const before = c.req.query("before");
|
|
26466
|
-
const limit = Math.max(1, parseInt(c.req.query("limit") ?? "50", 10));
|
|
26467
|
-
let items = [...session.messages];
|
|
26468
|
-
if (after) {
|
|
26469
|
-
const index = items.findIndex((item) => item.uuid === after);
|
|
26470
|
-
if (index >= 0) {
|
|
26471
|
-
items = items.slice(index + 1);
|
|
26472
|
-
}
|
|
26473
|
-
}
|
|
26474
|
-
if (before) {
|
|
26475
|
-
const index = items.findIndex((item) => item.uuid === before);
|
|
26476
|
-
if (index >= 0) {
|
|
26477
|
-
items = items.slice(0, index);
|
|
26478
|
-
}
|
|
26479
|
-
}
|
|
26480
|
-
items = items.slice(0, limit);
|
|
26481
|
-
return c.json({
|
|
26482
|
-
success: true,
|
|
26483
|
-
data: { items }
|
|
26484
|
-
});
|
|
26485
|
-
});
|
|
26486
|
-
router.patch("/:sessionId", async (c) => {
|
|
26487
|
-
const sessionId = c.req.param("sessionId");
|
|
26488
|
-
const body = await c.req.json();
|
|
26489
|
-
const updated = await sessionStateManager.update(sessionId, body);
|
|
26490
|
-
if (!updated) {
|
|
26491
|
-
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
26492
|
-
}
|
|
26493
|
-
const session = sessionStateManager.get(sessionId);
|
|
26494
|
-
return c.json({ success: true, data: session });
|
|
26495
|
-
});
|
|
26496
|
-
router.delete("/:sessionId", async (c) => {
|
|
26497
|
-
const sessionId = c.req.param("sessionId");
|
|
26498
|
-
const deleted = await sessionStateManager.delete(sessionId);
|
|
26499
|
-
return c.json({
|
|
26500
|
-
success: true,
|
|
26501
|
-
data: { deleted, sessionId }
|
|
26502
|
-
});
|
|
26503
|
-
});
|
|
26504
|
-
router.post("/:sessionId/prompt", async (c) => {
|
|
26505
|
-
const sessionId = c.req.param("sessionId");
|
|
26506
|
-
const body = await c.req.json();
|
|
26507
|
-
const { message, attachments, options } = body;
|
|
26508
|
-
const session = sessionStateManager.get(sessionId);
|
|
26509
|
-
if (!session) {
|
|
26510
|
-
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
26511
|
-
}
|
|
26512
|
-
const acceptHeader = c.req.header("Accept") ?? "";
|
|
26513
|
-
const wantsSSE = acceptHeader.includes("text/event-stream") || options?.stream !== false;
|
|
26514
|
-
if (wantsSSE) {
|
|
26515
|
-
return streamSSE(c, async (stream) => {
|
|
26516
|
-
const runner = new QueryRunner(
|
|
26517
|
-
{ sessionId },
|
|
26518
|
-
session
|
|
26519
|
-
);
|
|
26520
|
-
sessionStateManager.setCurrentRunner(sessionId, runner);
|
|
26521
|
-
try {
|
|
26522
|
-
const result = await runner.run(message);
|
|
26523
|
-
await stream.writeSSE({
|
|
26524
|
-
event: "request.completed",
|
|
26525
|
-
data: JSON.stringify({
|
|
26526
|
-
type: "request.completed",
|
|
26527
|
-
sessionId,
|
|
26528
|
-
timestamp: Date.now(),
|
|
26529
|
-
data: {
|
|
26530
|
-
finishReason: result.finishReason,
|
|
26531
|
-
usage: result.usage,
|
|
26532
|
-
cost: result.cost,
|
|
26533
|
-
duration: result.duration
|
|
26534
|
-
}
|
|
26535
|
-
})
|
|
26536
|
-
});
|
|
26537
|
-
} catch (error) {
|
|
26538
|
-
await stream.writeSSE({
|
|
26539
|
-
event: "error",
|
|
26540
|
-
data: JSON.stringify({
|
|
26541
|
-
type: "error",
|
|
26542
|
-
sessionId,
|
|
26543
|
-
timestamp: Date.now(),
|
|
26544
|
-
data: {
|
|
26545
|
-
code: "QUERY_ERROR",
|
|
26546
|
-
message: error instanceof Error ? error.message : String(error),
|
|
26547
|
-
recoverable: false
|
|
26548
|
-
}
|
|
26549
|
-
})
|
|
26550
|
-
});
|
|
26551
|
-
} finally {
|
|
26552
|
-
sessionStateManager.clearCurrentRunner(sessionId);
|
|
26553
|
-
}
|
|
26554
|
-
});
|
|
26555
|
-
} else {
|
|
26556
|
-
const runner = new QueryRunner({ sessionId }, session);
|
|
26557
|
-
sessionStateManager.setCurrentRunner(sessionId, runner);
|
|
26558
|
-
try {
|
|
26559
|
-
const result = await runner.run(message);
|
|
26560
|
-
return c.json({ success: true, data: result });
|
|
26561
|
-
} finally {
|
|
26562
|
-
sessionStateManager.clearCurrentRunner(sessionId);
|
|
26563
|
-
}
|
|
26564
|
-
}
|
|
26565
|
-
});
|
|
26566
|
-
router.post("/:sessionId/abort", (c) => {
|
|
26567
|
-
const sessionId = c.req.param("sessionId");
|
|
26568
|
-
const session = sessionStateManager.get(sessionId);
|
|
26569
|
-
if (!session) {
|
|
26570
|
-
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
26571
|
-
}
|
|
26572
|
-
const runner = sessionStateManager.getCurrentRunner(sessionId);
|
|
26573
|
-
if (runner) {
|
|
26574
|
-
runner.abort();
|
|
26575
|
-
return c.json({ success: true, data: { aborted: true } });
|
|
26576
|
-
}
|
|
26577
|
-
return c.json({ success: true, data: { aborted: false, reason: "No running query" } });
|
|
26578
|
-
});
|
|
26579
|
-
return router;
|
|
26580
|
-
}
|
|
26581
|
-
|
|
26582
|
-
// src/server/routes/tool.ts
|
|
26583
|
-
import { Hono as Hono2 } from "hono";
|
|
26584
|
-
|
|
26585
25999
|
// src/tools/index.ts
|
|
26586
26000
|
import { memoize as memoize4 } from "lodash-es";
|
|
26587
26001
|
|
|
26588
26002
|
// src/tools/ai/AskExpertModelTool/AskExpertModelTool.tsx
|
|
26589
26003
|
import * as React47 from "react";
|
|
26590
26004
|
import { Box as Box36, Text as Text40 } from "ink";
|
|
26591
|
-
import { z as
|
|
26005
|
+
import { z as z10 } from "zod";
|
|
26592
26006
|
|
|
26593
26007
|
// src/utils/session/expertChatStorage.ts
|
|
26594
26008
|
import { existsSync as existsSync17, readFileSync as readFileSync9, writeFileSync as writeFileSync4, mkdirSync as mkdirSync10 } from "fs";
|
|
@@ -26879,14 +26293,14 @@ Current situation: Users report 3-5 second delays when scrolling through the lis
|
|
|
26879
26293
|
Question: What are the most effective React optimization techniques for handling large lists, and how should I prioritize implementing virtualization vs memoization vs other approaches?"`;
|
|
26880
26294
|
|
|
26881
26295
|
// src/tools/ai/AskExpertModelTool/AskExpertModelTool.tsx
|
|
26882
|
-
var inputSchema9 =
|
|
26883
|
-
question:
|
|
26296
|
+
var inputSchema9 = z10.strictObject({
|
|
26297
|
+
question: z10.string().describe(
|
|
26884
26298
|
"COMPLETE SELF-CONTAINED QUESTION: Must include full background context, relevant details, and a clear independent question. The expert model will receive ONLY this content with no access to previous conversation or external context. Structure as: 1) Background/Context 2) Specific situation/problem 3) Clear question. Ensure the expert can fully understand and respond without needing additional information."
|
|
26885
26299
|
),
|
|
26886
|
-
expert_model:
|
|
26300
|
+
expert_model: z10.string().describe(
|
|
26887
26301
|
"The expert model to use (e.g., gpt-5, claude-3-5-sonnet-20241022)"
|
|
26888
26302
|
),
|
|
26889
|
-
chat_session_id:
|
|
26303
|
+
chat_session_id: z10.string().describe(
|
|
26890
26304
|
'Chat session ID: use "new" for new session or existing session ID'
|
|
26891
26305
|
)
|
|
26892
26306
|
});
|
|
@@ -27238,7 +26652,7 @@ Please check your model configuration with /model command.`
|
|
|
27238
26652
|
// src/tools/interaction/AskUserQuestionTool/AskUserQuestionTool.tsx
|
|
27239
26653
|
import { Box as Box37, Text as Text41 } from "ink";
|
|
27240
26654
|
import React48 from "react";
|
|
27241
|
-
import { z as
|
|
26655
|
+
import { z as z11 } from "zod";
|
|
27242
26656
|
|
|
27243
26657
|
// src/constants/figures.ts
|
|
27244
26658
|
var BLACK_CIRCLE = env.platform === "macos" ? "\u23FA" : "\u25CF";
|
|
@@ -27258,19 +26672,19 @@ Usage notes:
|
|
|
27258
26672
|
- If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label`;
|
|
27259
26673
|
|
|
27260
26674
|
// src/tools/interaction/AskUserQuestionTool/AskUserQuestionTool.tsx
|
|
27261
|
-
var optionSchema =
|
|
27262
|
-
label:
|
|
27263
|
-
description:
|
|
26675
|
+
var optionSchema = z11.object({
|
|
26676
|
+
label: z11.string(),
|
|
26677
|
+
description: z11.string()
|
|
27264
26678
|
});
|
|
27265
|
-
var questionSchema =
|
|
27266
|
-
question:
|
|
27267
|
-
header:
|
|
27268
|
-
options:
|
|
27269
|
-
multiSelect:
|
|
26679
|
+
var questionSchema = z11.object({
|
|
26680
|
+
question: z11.string(),
|
|
26681
|
+
header: z11.string(),
|
|
26682
|
+
options: z11.array(optionSchema).min(2).max(4),
|
|
26683
|
+
multiSelect: z11.boolean()
|
|
27270
26684
|
});
|
|
27271
|
-
var inputSchema10 =
|
|
27272
|
-
questions:
|
|
27273
|
-
answers:
|
|
26685
|
+
var inputSchema10 = z11.strictObject({
|
|
26686
|
+
questions: z11.array(questionSchema).min(1).max(4),
|
|
26687
|
+
answers: z11.record(z11.string(), z11.string()).optional()
|
|
27274
26688
|
}).refine(
|
|
27275
26689
|
(input) => {
|
|
27276
26690
|
const questionTexts = input.questions.map((q) => q.question);
|
|
@@ -27340,7 +26754,7 @@ var AskUserQuestionTool = {
|
|
|
27340
26754
|
// src/tools/system/TaskOutputTool/TaskOutputTool.tsx
|
|
27341
26755
|
import { Box as Box38, Text as Text42 } from "ink";
|
|
27342
26756
|
import React49 from "react";
|
|
27343
|
-
import { z as
|
|
26757
|
+
import { z as z12 } from "zod";
|
|
27344
26758
|
|
|
27345
26759
|
// src/utils/session/backgroundTasks.ts
|
|
27346
26760
|
var backgroundTasks = /* @__PURE__ */ new Map();
|
|
@@ -27502,11 +26916,11 @@ The assistant defers analysis because:
|
|
|
27502
26916
|
// src/tools/system/TaskOutputTool/TaskOutputTool.tsx
|
|
27503
26917
|
var TOOL_PROGRESS_OPEN_TAG2 = ["<tool", "-progress>"].join("");
|
|
27504
26918
|
var TOOL_PROGRESS_CLOSE_TAG2 = ["</tool", "-progress>"].join("");
|
|
27505
|
-
var inputSchema11 =
|
|
27506
|
-
task_id:
|
|
27507
|
-
block:
|
|
27508
|
-
timeout:
|
|
27509
|
-
analyze:
|
|
26919
|
+
var inputSchema11 = z12.strictObject({
|
|
26920
|
+
task_id: z12.string().describe("The task ID to get output from"),
|
|
26921
|
+
block: z12.boolean().optional().default(true).describe("Whether to wait for completion"),
|
|
26922
|
+
timeout: z12.number().min(0).max(6e5).optional().default(3e4).describe("Max wait time in ms"),
|
|
26923
|
+
analyze: z12.boolean().optional().describe("Analyze the output for errors and warnings")
|
|
27510
26924
|
});
|
|
27511
26925
|
function isTaskOutputLspAnalysisEnabled() {
|
|
27512
26926
|
const raw = String(process.env.PYB_TASKOUTPUT_LSP_ANALYSIS ?? "").trim().toLowerCase();
|
|
@@ -27583,7 +26997,7 @@ async function analyzeOutputWithLsp(output, exitCode) {
|
|
|
27583
26997
|
if (exitCode !== 0 || errorCount > 0 || warningCount > 0) {
|
|
27584
26998
|
try {
|
|
27585
26999
|
const { isAbsolute: isAbsolute11, resolve: resolve16 } = await import("path");
|
|
27586
|
-
const { getSessionRoot: getSessionRoot2 } = await import("./state-
|
|
27000
|
+
const { getSessionRoot: getSessionRoot2 } = await import("./state-GMP5BAO3.js");
|
|
27587
27001
|
const lines = output.split("\n");
|
|
27588
27002
|
const uniqueFiles = /* @__PURE__ */ new Set();
|
|
27589
27003
|
const lspSuggestions = [];
|
|
@@ -27854,7 +27268,7 @@ ${output.task.output.trimEnd()}
|
|
|
27854
27268
|
import { rmSync as rmSync2, existsSync as existsSync18, statSync as statSync12 } from "fs";
|
|
27855
27269
|
import { Box as Box39, Text as Text43 } from "ink";
|
|
27856
27270
|
import * as React50 from "react";
|
|
27857
|
-
import { z as
|
|
27271
|
+
import { z as z13 } from "zod";
|
|
27858
27272
|
import { isAbsolute as isAbsolute9, relative as relative11, resolve as resolve10 } from "path";
|
|
27859
27273
|
|
|
27860
27274
|
// src/tools/filesystem/DeleteTool/prompt.ts
|
|
@@ -27921,11 +27335,11 @@ Delete({
|
|
|
27921
27335
|
`.trim();
|
|
27922
27336
|
|
|
27923
27337
|
// src/tools/filesystem/DeleteTool/DeleteTool.tsx
|
|
27924
|
-
var inputSchema12 =
|
|
27925
|
-
file_paths:
|
|
27338
|
+
var inputSchema12 = z13.strictObject({
|
|
27339
|
+
file_paths: z13.array(z13.string()).describe(
|
|
27926
27340
|
"The list of file paths you want to delete, you MUST set file path to absolute path."
|
|
27927
27341
|
),
|
|
27928
|
-
force:
|
|
27342
|
+
force: z13.boolean().optional().describe(
|
|
27929
27343
|
"Force deletion even if the file is referenced by other files (LSP check)."
|
|
27930
27344
|
)
|
|
27931
27345
|
});
|
|
@@ -27985,7 +27399,7 @@ var DeleteTool = {
|
|
|
27985
27399
|
}
|
|
27986
27400
|
if (!force) {
|
|
27987
27401
|
try {
|
|
27988
|
-
const { LspFacade: LspFacade2 } = await import("./lsp-
|
|
27402
|
+
const { LspFacade: LspFacade2 } = await import("./lsp-2TM75CW4.js");
|
|
27989
27403
|
const referenceDetail = await LspFacade2.checkFileReferences(fullPath);
|
|
27990
27404
|
if (referenceDetail) {
|
|
27991
27405
|
failedItems.push(
|
|
@@ -28045,7 +27459,7 @@ var DeleteTool = {
|
|
|
28045
27459
|
// src/tools/system/KillShellTool/KillShellTool.tsx
|
|
28046
27460
|
import { Box as Box40, Text as Text44 } from "ink";
|
|
28047
27461
|
import React51 from "react";
|
|
28048
|
-
import { z as
|
|
27462
|
+
import { z as z14 } from "zod";
|
|
28049
27463
|
|
|
28050
27464
|
// src/tools/system/KillShellTool/prompt.ts
|
|
28051
27465
|
var TOOL_NAME16 = "KillShell";
|
|
@@ -28059,8 +27473,8 @@ var PROMPT11 = `
|
|
|
28059
27473
|
`;
|
|
28060
27474
|
|
|
28061
27475
|
// src/tools/system/KillShellTool/KillShellTool.tsx
|
|
28062
|
-
var inputSchema13 =
|
|
28063
|
-
shell_id:
|
|
27476
|
+
var inputSchema13 = z14.strictObject({
|
|
27477
|
+
shell_id: z14.string().describe("The ID of the background shell to kill")
|
|
28064
27478
|
});
|
|
28065
27479
|
var KillShellTool = {
|
|
28066
27480
|
name: TOOL_NAME16,
|
|
@@ -28136,7 +27550,7 @@ var KillShellTool = {
|
|
|
28136
27550
|
// src/tools/mcp/ListMcpResourcesTool/ListMcpResourcesTool.tsx
|
|
28137
27551
|
import { Box as Box41, Text as Text45 } from "ink";
|
|
28138
27552
|
import React52 from "react";
|
|
28139
|
-
import { z as
|
|
27553
|
+
import { z as z15 } from "zod";
|
|
28140
27554
|
import { ListResourcesResultSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
28141
27555
|
|
|
28142
27556
|
// src/tools/mcp/ListMcpResourcesTool/prompt.ts
|
|
@@ -28156,8 +27570,8 @@ Parameters:
|
|
|
28156
27570
|
resources from all servers will be returned.`;
|
|
28157
27571
|
|
|
28158
27572
|
// src/tools/mcp/ListMcpResourcesTool/ListMcpResourcesTool.tsx
|
|
28159
|
-
var inputSchema14 =
|
|
28160
|
-
server:
|
|
27573
|
+
var inputSchema14 = z15.strictObject({
|
|
27574
|
+
server: z15.string().optional().describe("Optional server name to filter resources by")
|
|
28161
27575
|
});
|
|
28162
27576
|
var ListMcpResourcesTool = {
|
|
28163
27577
|
name: TOOL_NAME17,
|
|
@@ -28256,9 +27670,9 @@ import { existsSync as existsSync19, readFileSync as readFileSync10, statSync as
|
|
|
28256
27670
|
import { Box as Box42, Text as Text46 } from "ink";
|
|
28257
27671
|
import { relative as relative12, resolve as resolve11 } from "path";
|
|
28258
27672
|
import React53 from "react";
|
|
28259
|
-
import { z as
|
|
28260
|
-
var inputSchema15 =
|
|
28261
|
-
operation:
|
|
27673
|
+
import { z as z16 } from "zod";
|
|
27674
|
+
var inputSchema15 = z16.strictObject({
|
|
27675
|
+
operation: z16.enum([
|
|
28262
27676
|
"goToDefinition",
|
|
28263
27677
|
"findReferences",
|
|
28264
27678
|
"hover",
|
|
@@ -28271,15 +27685,15 @@ var inputSchema15 = z17.strictObject({
|
|
|
28271
27685
|
"getScope",
|
|
28272
27686
|
"diagnostics"
|
|
28273
27687
|
]).describe("The LSP operation to perform"),
|
|
28274
|
-
filePath:
|
|
28275
|
-
line:
|
|
28276
|
-
character:
|
|
28277
|
-
query:
|
|
28278
|
-
waitForDiagnostics:
|
|
28279
|
-
timeout:
|
|
27688
|
+
filePath: z16.string().describe("The absolute or relative path to the file"),
|
|
27689
|
+
line: z16.number().int().positive().optional().describe("The line number (1-based, as shown in editors). Required for location-based operations."),
|
|
27690
|
+
character: z16.number().int().positive().optional().describe("The character offset (1-based, as shown in editors). Required for location-based operations."),
|
|
27691
|
+
query: z16.string().optional().describe('The query string for workspaceSymbol. Required when operation is "workspaceSymbol".'),
|
|
27692
|
+
waitForDiagnostics: z16.boolean().optional().describe('If true, wait for fresh diagnostics from the server (used with "diagnostics" operation)'),
|
|
27693
|
+
timeout: z16.number().optional().describe("Timeout in milliseconds for waiting operations (default: 5000)")
|
|
28280
27694
|
});
|
|
28281
|
-
var outputSchema =
|
|
28282
|
-
operation:
|
|
27695
|
+
var outputSchema = z16.object({
|
|
27696
|
+
operation: z16.enum([
|
|
28283
27697
|
"goToDefinition",
|
|
28284
27698
|
"findReferences",
|
|
28285
27699
|
"hover",
|
|
@@ -28292,10 +27706,10 @@ var outputSchema = z17.object({
|
|
|
28292
27706
|
"getScope",
|
|
28293
27707
|
"diagnostics"
|
|
28294
27708
|
]).describe("The LSP operation that was performed"),
|
|
28295
|
-
result:
|
|
28296
|
-
filePath:
|
|
28297
|
-
resultCount:
|
|
28298
|
-
fileCount:
|
|
27709
|
+
result: z16.string().describe("The formatted result of the LSP operation"),
|
|
27710
|
+
filePath: z16.string().describe("The file path the operation was performed on"),
|
|
27711
|
+
resultCount: z16.number().int().nonnegative().optional().describe("Number of results (definitions, references, symbols)"),
|
|
27712
|
+
fileCount: z16.number().int().nonnegative().optional().describe("Number of files containing results")
|
|
28299
27713
|
});
|
|
28300
27714
|
var OPERATION_LABELS = {
|
|
28301
27715
|
goToDefinition: { singular: "definition", plural: "definitions" },
|
|
@@ -28718,7 +28132,7 @@ var LspTool = {
|
|
|
28718
28132
|
// src/tools/mcp/ReadMcpResourceTool/ReadMcpResourceTool.tsx
|
|
28719
28133
|
import { Box as Box43, Text as Text47 } from "ink";
|
|
28720
28134
|
import React54 from "react";
|
|
28721
|
-
import { z as
|
|
28135
|
+
import { z as z17 } from "zod";
|
|
28722
28136
|
import { ReadResourceResultSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
28723
28137
|
|
|
28724
28138
|
// src/tools/mcp/ReadMcpResourceTool/prompt.ts
|
|
@@ -28736,9 +28150,9 @@ Parameters:
|
|
|
28736
28150
|
- uri (required): The URI of the resource to read`;
|
|
28737
28151
|
|
|
28738
28152
|
// src/tools/mcp/ReadMcpResourceTool/ReadMcpResourceTool.tsx
|
|
28739
|
-
var inputSchema16 =
|
|
28740
|
-
server:
|
|
28741
|
-
uri:
|
|
28153
|
+
var inputSchema16 = z17.strictObject({
|
|
28154
|
+
server: z17.string().describe("The MCP server name"),
|
|
28155
|
+
uri: z17.string().describe("The resource URI to read")
|
|
28742
28156
|
});
|
|
28743
28157
|
var ReadMcpResourceTool = {
|
|
28744
28158
|
name: TOOL_NAME18,
|
|
@@ -28847,18 +28261,18 @@ var ReadMcpResourceTool = {
|
|
|
28847
28261
|
};
|
|
28848
28262
|
|
|
28849
28263
|
// src/tools/ai/SkillTool/SkillTool.tsx
|
|
28850
|
-
import { z as
|
|
28264
|
+
import { z as z18 } from "zod";
|
|
28851
28265
|
import * as React55 from "react";
|
|
28852
28266
|
|
|
28853
28267
|
// src/tools/ai/SkillTool/prompt.ts
|
|
28854
28268
|
var TOOL_NAME19 = "Skill";
|
|
28855
28269
|
|
|
28856
28270
|
// src/tools/ai/SkillTool/SkillTool.tsx
|
|
28857
|
-
var inputSchema17 =
|
|
28858
|
-
skill:
|
|
28271
|
+
var inputSchema17 = z18.strictObject({
|
|
28272
|
+
skill: z18.string().describe(
|
|
28859
28273
|
"The skill name (no arguments). Use a value from <available_skills>."
|
|
28860
28274
|
),
|
|
28861
|
-
args:
|
|
28275
|
+
args: z18.string().optional().describe("Optional arguments for the skill (freeform text)")
|
|
28862
28276
|
});
|
|
28863
28277
|
function normalizeCommandModelName(model) {
|
|
28864
28278
|
if (typeof model !== "string") return void 0;
|
|
@@ -29083,7 +28497,7 @@ function findCommand(commandName, commands) {
|
|
|
29083
28497
|
import { last as last2, memoize as memoize3 } from "lodash-es";
|
|
29084
28498
|
import React56 from "react";
|
|
29085
28499
|
import { Box as Box44, Text as Text48 } from "ink";
|
|
29086
|
-
import { z as
|
|
28500
|
+
import { z as z19 } from "zod";
|
|
29087
28501
|
import { randomUUID as randomUUID6 } from "crypto";
|
|
29088
28502
|
import { existsSync as existsSync20, readFileSync as readFileSync11 } from "fs";
|
|
29089
28503
|
|
|
@@ -29243,17 +28657,17 @@ assistant: "I'm going to use the Task tool to launch the with the greeting-respo
|
|
|
29243
28657
|
}
|
|
29244
28658
|
|
|
29245
28659
|
// src/tools/agent/TaskTool/TaskTool.tsx
|
|
29246
|
-
var inputSchema18 =
|
|
29247
|
-
description:
|
|
29248
|
-
prompt:
|
|
29249
|
-
subagent_type:
|
|
29250
|
-
model:
|
|
28660
|
+
var inputSchema18 = z19.object({
|
|
28661
|
+
description: z19.string().describe("A short (3-5 word) description of the task"),
|
|
28662
|
+
prompt: z19.string().describe("The task for the agent to perform"),
|
|
28663
|
+
subagent_type: z19.string().describe("The type of specialized agent to use for this task"),
|
|
28664
|
+
model: z19.enum(["sonnet", "opus", "haiku"]).optional().describe(
|
|
29251
28665
|
"Optional model to use for this agent. If not specified, inherits from parent. Prefer haiku for quick, straightforward tasks to minimize cost and latency."
|
|
29252
28666
|
),
|
|
29253
|
-
resume:
|
|
28667
|
+
resume: z19.string().optional().describe(
|
|
29254
28668
|
"Optional agent ID to resume from. If provided, the agent will continue from the previous execution transcript."
|
|
29255
28669
|
),
|
|
29256
|
-
run_in_background:
|
|
28670
|
+
run_in_background: z19.boolean().optional().describe(
|
|
29257
28671
|
"Set to true to run this agent in the background. Use TaskOutput to read the output later."
|
|
29258
28672
|
)
|
|
29259
28673
|
});
|
|
@@ -29779,21 +29193,21 @@ var TaskTool = {
|
|
|
29779
29193
|
};
|
|
29780
29194
|
|
|
29781
29195
|
// src/tools/interaction/TaskCreateTool/TaskCreateTool.tsx
|
|
29782
|
-
import { z as
|
|
29196
|
+
import { z as z21 } from "zod";
|
|
29783
29197
|
|
|
29784
29198
|
// src/utils/session/taskToolUtils.ts
|
|
29785
|
-
import { z as
|
|
29786
|
-
var jsonValueSchema =
|
|
29787
|
-
() =>
|
|
29788
|
-
|
|
29789
|
-
|
|
29790
|
-
|
|
29791
|
-
|
|
29792
|
-
|
|
29793
|
-
|
|
29199
|
+
import { z as z20 } from "zod";
|
|
29200
|
+
var jsonValueSchema = z20.lazy(
|
|
29201
|
+
() => z20.union([
|
|
29202
|
+
z20.string(),
|
|
29203
|
+
z20.number(),
|
|
29204
|
+
z20.boolean(),
|
|
29205
|
+
z20.null(),
|
|
29206
|
+
z20.array(jsonValueSchema),
|
|
29207
|
+
z20.record(jsonValueSchema)
|
|
29794
29208
|
])
|
|
29795
29209
|
);
|
|
29796
|
-
var metadataSchema =
|
|
29210
|
+
var metadataSchema = z20.record(jsonValueSchema);
|
|
29797
29211
|
function mapStatusToOutput(status) {
|
|
29798
29212
|
if (status === "done") return "completed";
|
|
29799
29213
|
if (status === "deleted") return "deleted";
|
|
@@ -30223,11 +29637,11 @@ The assistant used TaskCreate because:
|
|
|
30223
29637
|
`.trim();
|
|
30224
29638
|
|
|
30225
29639
|
// src/tools/interaction/TaskCreateTool/TaskCreateTool.tsx
|
|
30226
|
-
var inputSchema19 =
|
|
30227
|
-
listId:
|
|
30228
|
-
subject:
|
|
30229
|
-
description:
|
|
30230
|
-
activeForm:
|
|
29640
|
+
var inputSchema19 = z21.strictObject({
|
|
29641
|
+
listId: z21.string().min(1).optional(),
|
|
29642
|
+
subject: z21.string().min(1),
|
|
29643
|
+
description: z21.string().min(1),
|
|
29644
|
+
activeForm: z21.string().min(1),
|
|
30231
29645
|
metadata: metadataSchema.optional()
|
|
30232
29646
|
});
|
|
30233
29647
|
var TaskCreateTool = {
|
|
@@ -30304,7 +29718,7 @@ var TaskCreateTool = {
|
|
|
30304
29718
|
};
|
|
30305
29719
|
|
|
30306
29720
|
// src/tools/interaction/TaskGetTool/TaskGetTool.tsx
|
|
30307
|
-
import { z as
|
|
29721
|
+
import { z as z22 } from "zod";
|
|
30308
29722
|
|
|
30309
29723
|
// src/tools/interaction/TaskGetTool/prompt.ts
|
|
30310
29724
|
var TOOL_NAME21 = "TaskGet";
|
|
@@ -30340,9 +29754,9 @@ Assistant: I'll fetch the task details first.
|
|
|
30340
29754
|
`.trim();
|
|
30341
29755
|
|
|
30342
29756
|
// src/tools/interaction/TaskGetTool/TaskGetTool.tsx
|
|
30343
|
-
var inputSchema20 =
|
|
30344
|
-
listId:
|
|
30345
|
-
taskId:
|
|
29757
|
+
var inputSchema20 = z22.strictObject({
|
|
29758
|
+
listId: z22.string().min(1).optional(),
|
|
29759
|
+
taskId: z22.string().min(1)
|
|
30346
29760
|
});
|
|
30347
29761
|
var TaskGetTool = {
|
|
30348
29762
|
name: TOOL_NAME21,
|
|
@@ -30404,7 +29818,7 @@ var TaskGetTool = {
|
|
|
30404
29818
|
};
|
|
30405
29819
|
|
|
30406
29820
|
// src/tools/interaction/TaskListTool/TaskListTool.tsx
|
|
30407
|
-
import { z as
|
|
29821
|
+
import { z as z23 } from "zod";
|
|
30408
29822
|
|
|
30409
29823
|
// src/tools/interaction/TaskListTool/prompt.ts
|
|
30410
29824
|
var TOOL_NAME22 = "TaskList";
|
|
@@ -30455,9 +29869,9 @@ Assistant: I'll list tasks to show the updated ready/blocked breakdown.
|
|
|
30455
29869
|
`.trim();
|
|
30456
29870
|
|
|
30457
29871
|
// src/tools/interaction/TaskListTool/TaskListTool.tsx
|
|
30458
|
-
var inputSchema21 =
|
|
30459
|
-
listId:
|
|
30460
|
-
status:
|
|
29872
|
+
var inputSchema21 = z23.strictObject({
|
|
29873
|
+
listId: z23.string().min(1).optional(),
|
|
29874
|
+
status: z23.enum(["pending", "in_progress", "completed", "deleted"]).optional()
|
|
30461
29875
|
});
|
|
30462
29876
|
var filterByStatus = (tasks, statuses) => {
|
|
30463
29877
|
if (!statuses || statuses.length === 0) {
|
|
@@ -30558,7 +29972,7 @@ var TaskListTool = {
|
|
|
30558
29972
|
};
|
|
30559
29973
|
|
|
30560
29974
|
// src/tools/interaction/TaskUpdateTool/TaskUpdateTool.tsx
|
|
30561
|
-
import { z as
|
|
29975
|
+
import { z as z24 } from "zod";
|
|
30562
29976
|
|
|
30563
29977
|
// src/tools/interaction/TaskUpdateTool/prompt.ts
|
|
30564
29978
|
var TOOL_NAME23 = "TaskUpdate";
|
|
@@ -31002,16 +30416,16 @@ var compareTaskId = (left, right) => {
|
|
|
31002
30416
|
if (rightIsNumber) return 1;
|
|
31003
30417
|
return left.id.localeCompare(right.id);
|
|
31004
30418
|
};
|
|
31005
|
-
var inputSchema22 =
|
|
31006
|
-
listId:
|
|
31007
|
-
taskId:
|
|
31008
|
-
subject:
|
|
31009
|
-
description:
|
|
31010
|
-
activeForm:
|
|
31011
|
-
status:
|
|
30419
|
+
var inputSchema22 = z24.strictObject({
|
|
30420
|
+
listId: z24.string().min(1).optional(),
|
|
30421
|
+
taskId: z24.string().min(1),
|
|
30422
|
+
subject: z24.string().optional(),
|
|
30423
|
+
description: z24.string().optional(),
|
|
30424
|
+
activeForm: z24.string().optional(),
|
|
30425
|
+
status: z24.enum(["pending", "in_progress", "completed", "deleted"]).optional(),
|
|
31012
30426
|
metadata: metadataSchema.optional(),
|
|
31013
|
-
addBlockedBy:
|
|
31014
|
-
addBlocks:
|
|
30427
|
+
addBlockedBy: z24.array(z24.string()).optional(),
|
|
30428
|
+
addBlocks: z24.array(z24.string()).optional()
|
|
31015
30429
|
});
|
|
31016
30430
|
var TaskUpdateTool = {
|
|
31017
30431
|
name: TOOL_NAME23,
|
|
@@ -31286,7 +30700,7 @@ import { existsSync as existsSync21, lstatSync, mkdirSync as mkdirSync11, readdi
|
|
|
31286
30700
|
import { Box as Box45, Text as Text49 } from "ink";
|
|
31287
30701
|
import { join as join12 } from "path";
|
|
31288
30702
|
import * as React57 from "react";
|
|
31289
|
-
import { z as
|
|
30703
|
+
import { z as z25 } from "zod";
|
|
31290
30704
|
|
|
31291
30705
|
// src/tools/memory/MemoryReadTool/prompt.ts
|
|
31292
30706
|
var TOOL_NAME24 = "MemoryRead";
|
|
@@ -31310,8 +30724,8 @@ Security:
|
|
|
31310
30724
|
`;
|
|
31311
30725
|
|
|
31312
30726
|
// src/tools/memory/MemoryReadTool/MemoryReadTool.tsx
|
|
31313
|
-
var inputSchema23 =
|
|
31314
|
-
file_path:
|
|
30727
|
+
var inputSchema23 = z25.strictObject({
|
|
30728
|
+
file_path: z25.string().optional().describe("Optional path to a specific memory file to read")
|
|
31315
30729
|
});
|
|
31316
30730
|
var MemoryReadTool = {
|
|
31317
30731
|
name: TOOL_NAME24,
|
|
@@ -31420,7 +30834,7 @@ ${files}`;
|
|
|
31420
30834
|
// src/tools/memory/MemoryWriteTool/MemoryWriteTool.tsx
|
|
31421
30835
|
import { Box as Box46, Text as Text50 } from "ink";
|
|
31422
30836
|
import * as React58 from "react";
|
|
31423
|
-
import { z as
|
|
30837
|
+
import { z as z26 } from "zod";
|
|
31424
30838
|
|
|
31425
30839
|
// src/services/memory/write.ts
|
|
31426
30840
|
import {
|
|
@@ -31496,10 +30910,10 @@ This is the summary of the task execution...",
|
|
|
31496
30910
|
`;
|
|
31497
30911
|
|
|
31498
30912
|
// src/tools/memory/MemoryWriteTool/MemoryWriteTool.tsx
|
|
31499
|
-
var inputSchema24 =
|
|
31500
|
-
file_path:
|
|
31501
|
-
content:
|
|
31502
|
-
mode:
|
|
30913
|
+
var inputSchema24 = z26.strictObject({
|
|
30914
|
+
file_path: z26.string().describe("Path to the memory file to write"),
|
|
30915
|
+
content: z26.string().describe("Content to write to the file"),
|
|
30916
|
+
mode: z26.enum(["append", "replace"]).optional().describe("Write mode: append adds to existing content, replace overwrites")
|
|
31503
30917
|
});
|
|
31504
30918
|
var MemoryWriteTool = {
|
|
31505
30919
|
name: TOOL_NAME25,
|
|
@@ -31619,7 +31033,605 @@ var getReadOnlyTools = memoize4(async () => {
|
|
|
31619
31033
|
return tools.filter((_, index) => isEnabled5[index]);
|
|
31620
31034
|
});
|
|
31621
31035
|
|
|
31036
|
+
// src/server/bus/index.ts
|
|
31037
|
+
var BusEvent;
|
|
31038
|
+
((BusEvent2) => {
|
|
31039
|
+
const registry = /* @__PURE__ */ new Map();
|
|
31040
|
+
function define(type3, properties) {
|
|
31041
|
+
const result = { type: type3, properties };
|
|
31042
|
+
registry.set(type3, result);
|
|
31043
|
+
return result;
|
|
31044
|
+
}
|
|
31045
|
+
BusEvent2.define = define;
|
|
31046
|
+
function getSchema(type3) {
|
|
31047
|
+
return registry.get(type3);
|
|
31048
|
+
}
|
|
31049
|
+
BusEvent2.getSchema = getSchema;
|
|
31050
|
+
})(BusEvent || (BusEvent = {}));
|
|
31051
|
+
var Bus;
|
|
31052
|
+
((Bus2) => {
|
|
31053
|
+
const state = {
|
|
31054
|
+
subscriptions: /* @__PURE__ */ new Map()
|
|
31055
|
+
};
|
|
31056
|
+
async function publish(def, properties) {
|
|
31057
|
+
const payload = {
|
|
31058
|
+
type: def.type,
|
|
31059
|
+
properties
|
|
31060
|
+
};
|
|
31061
|
+
const pending = [];
|
|
31062
|
+
for (const key of [def.type, "*"]) {
|
|
31063
|
+
const match = state.subscriptions.get(key);
|
|
31064
|
+
if (match) {
|
|
31065
|
+
for (const sub of match) {
|
|
31066
|
+
const result = sub(payload);
|
|
31067
|
+
if (result instanceof Promise) {
|
|
31068
|
+
pending.push(result);
|
|
31069
|
+
}
|
|
31070
|
+
}
|
|
31071
|
+
}
|
|
31072
|
+
}
|
|
31073
|
+
await Promise.all(pending);
|
|
31074
|
+
}
|
|
31075
|
+
Bus2.publish = publish;
|
|
31076
|
+
function subscribe(def, callback) {
|
|
31077
|
+
return raw(def.type, callback);
|
|
31078
|
+
}
|
|
31079
|
+
Bus2.subscribe = subscribe;
|
|
31080
|
+
function subscribeAll(callback) {
|
|
31081
|
+
return raw("*", callback);
|
|
31082
|
+
}
|
|
31083
|
+
Bus2.subscribeAll = subscribeAll;
|
|
31084
|
+
function raw(type3, callback) {
|
|
31085
|
+
const match = state.subscriptions.get(type3) ?? [];
|
|
31086
|
+
match.push(callback);
|
|
31087
|
+
state.subscriptions.set(type3, match);
|
|
31088
|
+
return () => {
|
|
31089
|
+
const subscriptions = state.subscriptions.get(type3);
|
|
31090
|
+
if (!subscriptions) return;
|
|
31091
|
+
const index = subscriptions.indexOf(callback);
|
|
31092
|
+
if (index !== -1) {
|
|
31093
|
+
subscriptions.splice(index, 1);
|
|
31094
|
+
}
|
|
31095
|
+
};
|
|
31096
|
+
}
|
|
31097
|
+
})(Bus || (Bus = {}));
|
|
31098
|
+
|
|
31099
|
+
// src/server/events/definitions.ts
|
|
31100
|
+
import { z as z27 } from "zod";
|
|
31101
|
+
var ServerEvents = {
|
|
31102
|
+
Connected: BusEvent.define("server.connected", z27.object({
|
|
31103
|
+
serverVersion: z27.string(),
|
|
31104
|
+
protocolVersion: z27.string(),
|
|
31105
|
+
features: z27.array(z27.string())
|
|
31106
|
+
})),
|
|
31107
|
+
Heartbeat: BusEvent.define("server.heartbeat", z27.object({
|
|
31108
|
+
timestamp: z27.number()
|
|
31109
|
+
})),
|
|
31110
|
+
Status: BusEvent.define("server.status", z27.object({
|
|
31111
|
+
status: z27.enum(["healthy", "degraded", "unhealthy"]),
|
|
31112
|
+
components: z27.object({
|
|
31113
|
+
llm: z27.enum(["connected", "disconnected"]),
|
|
31114
|
+
mcp: z27.enum(["connected", "disconnected"]),
|
|
31115
|
+
tools: z27.enum(["ready", "initializing"])
|
|
31116
|
+
})
|
|
31117
|
+
}))
|
|
31118
|
+
};
|
|
31119
|
+
var SessionEvents = {
|
|
31120
|
+
Created: BusEvent.define("session.created", z27.object({
|
|
31121
|
+
sessionId: z27.string(),
|
|
31122
|
+
config: z27.object({
|
|
31123
|
+
model: z27.string(),
|
|
31124
|
+
agent: z27.string(),
|
|
31125
|
+
outputStyle: z27.string()
|
|
31126
|
+
}),
|
|
31127
|
+
resumedFrom: z27.string().optional()
|
|
31128
|
+
})),
|
|
31129
|
+
Updated: BusEvent.define("session.updated", z27.object({
|
|
31130
|
+
sessionId: z27.string(),
|
|
31131
|
+
title: z27.string().optional(),
|
|
31132
|
+
config: z27.object({
|
|
31133
|
+
model: z27.string().optional(),
|
|
31134
|
+
agent: z27.string().optional(),
|
|
31135
|
+
outputStyle: z27.string().optional()
|
|
31136
|
+
}).optional()
|
|
31137
|
+
})),
|
|
31138
|
+
Deleted: BusEvent.define("session.deleted", z27.object({
|
|
31139
|
+
sessionId: z27.string()
|
|
31140
|
+
})),
|
|
31141
|
+
Status: BusEvent.define("session.status", z27.object({
|
|
31142
|
+
sessionId: z27.string(),
|
|
31143
|
+
status: z27.enum(["active", "idle", "waiting_input", "processing"]),
|
|
31144
|
+
currentRequestId: z27.string().optional()
|
|
31145
|
+
}))
|
|
31146
|
+
};
|
|
31147
|
+
var MessageEvents = {
|
|
31148
|
+
Created: BusEvent.define("message.created", z27.object({
|
|
31149
|
+
sessionId: z27.string(),
|
|
31150
|
+
message: z27.any()
|
|
31151
|
+
})),
|
|
31152
|
+
Updated: BusEvent.define("message.updated", z27.object({
|
|
31153
|
+
sessionId: z27.string(),
|
|
31154
|
+
message: z27.any(),
|
|
31155
|
+
delta: z27.object({
|
|
31156
|
+
type: z27.enum(["text", "tool_use"]),
|
|
31157
|
+
content: z27.string(),
|
|
31158
|
+
index: z27.number().optional()
|
|
31159
|
+
}).optional()
|
|
31160
|
+
})),
|
|
31161
|
+
Completed: BusEvent.define("message.completed", z27.object({
|
|
31162
|
+
sessionId: z27.string(),
|
|
31163
|
+
messageId: z27.string(),
|
|
31164
|
+
finishReason: z27.enum(["end_turn", "tool_calls", "max_tokens", "aborted"]),
|
|
31165
|
+
usage: z27.object({
|
|
31166
|
+
inputTokens: z27.number(),
|
|
31167
|
+
outputTokens: z27.number(),
|
|
31168
|
+
totalTokens: z27.number()
|
|
31169
|
+
}),
|
|
31170
|
+
cost: z27.object({
|
|
31171
|
+
costUSD: z27.number()
|
|
31172
|
+
})
|
|
31173
|
+
})),
|
|
31174
|
+
RequestStarted: BusEvent.define("request.started", z27.object({
|
|
31175
|
+
sessionId: z27.string(),
|
|
31176
|
+
requestId: z27.string(),
|
|
31177
|
+
userMessage: z27.string()
|
|
31178
|
+
})),
|
|
31179
|
+
RequestCompleted: BusEvent.define("request.completed", z27.object({
|
|
31180
|
+
sessionId: z27.string(),
|
|
31181
|
+
requestId: z27.string(),
|
|
31182
|
+
finishReason: z27.enum(["end_turn", "tool_calls", "max_tokens", "aborted"]),
|
|
31183
|
+
duration: z27.number(),
|
|
31184
|
+
totalTokens: z27.number(),
|
|
31185
|
+
costUSD: z27.number()
|
|
31186
|
+
}))
|
|
31187
|
+
};
|
|
31188
|
+
var ToolEvents = {
|
|
31189
|
+
Started: BusEvent.define("tool.started", z27.object({
|
|
31190
|
+
sessionId: z27.string(),
|
|
31191
|
+
toolUseId: z27.string(),
|
|
31192
|
+
toolName: z27.string(),
|
|
31193
|
+
input: z27.record(z27.unknown()),
|
|
31194
|
+
dangerousLevel: z27.enum(["safe", "moderate", "dangerous"]),
|
|
31195
|
+
requiresPermission: z27.boolean()
|
|
31196
|
+
})),
|
|
31197
|
+
Progress: BusEvent.define("tool.progress", z27.object({
|
|
31198
|
+
sessionId: z27.string(),
|
|
31199
|
+
toolUseId: z27.string(),
|
|
31200
|
+
toolName: z27.string(),
|
|
31201
|
+
progress: z27.number(),
|
|
31202
|
+
message: z27.string().optional(),
|
|
31203
|
+
output: z27.string().optional()
|
|
31204
|
+
})),
|
|
31205
|
+
Completed: BusEvent.define("tool.completed", z27.object({
|
|
31206
|
+
sessionId: z27.string(),
|
|
31207
|
+
toolUseId: z27.string(),
|
|
31208
|
+
toolName: z27.string(),
|
|
31209
|
+
result: z27.string(),
|
|
31210
|
+
isError: z27.boolean(),
|
|
31211
|
+
duration: z27.number()
|
|
31212
|
+
})),
|
|
31213
|
+
Error: BusEvent.define("tool.error", z27.object({
|
|
31214
|
+
sessionId: z27.string(),
|
|
31215
|
+
toolUseId: z27.string(),
|
|
31216
|
+
toolName: z27.string(),
|
|
31217
|
+
error: z27.object({
|
|
31218
|
+
code: z27.string(),
|
|
31219
|
+
message: z27.string(),
|
|
31220
|
+
details: z27.unknown().optional()
|
|
31221
|
+
})
|
|
31222
|
+
}))
|
|
31223
|
+
};
|
|
31224
|
+
var PermissionEvents = {
|
|
31225
|
+
Requested: BusEvent.define("permission.requested", z27.object({
|
|
31226
|
+
sessionId: z27.string(),
|
|
31227
|
+
permissionId: z27.string(),
|
|
31228
|
+
toolName: z27.string(),
|
|
31229
|
+
toolUseId: z27.string(),
|
|
31230
|
+
input: z27.record(z27.unknown()),
|
|
31231
|
+
risk: z27.enum(["safe", "moderate", "dangerous"]),
|
|
31232
|
+
message: z27.string(),
|
|
31233
|
+
suggestedAction: z27.enum(["allow", "deny"]).optional(),
|
|
31234
|
+
timeout: z27.number().optional()
|
|
31235
|
+
})),
|
|
31236
|
+
Responded: BusEvent.define("permission.responded", z27.object({
|
|
31237
|
+
sessionId: z27.string(),
|
|
31238
|
+
permissionId: z27.string(),
|
|
31239
|
+
decision: z27.enum(["allow", "deny", "allowAll"]),
|
|
31240
|
+
remember: z27.boolean(),
|
|
31241
|
+
scope: z27.enum(["session", "project", "global"]).optional()
|
|
31242
|
+
})),
|
|
31243
|
+
Timeout: BusEvent.define("permission.timeout", z27.object({
|
|
31244
|
+
sessionId: z27.string(),
|
|
31245
|
+
permissionId: z27.string(),
|
|
31246
|
+
toolName: z27.string(),
|
|
31247
|
+
defaultAction: z27.enum(["allow", "deny"])
|
|
31248
|
+
}))
|
|
31249
|
+
};
|
|
31250
|
+
var ErrorEvents = {
|
|
31251
|
+
General: BusEvent.define("error", z27.object({
|
|
31252
|
+
sessionId: z27.string().optional(),
|
|
31253
|
+
code: z27.string(),
|
|
31254
|
+
message: z27.string(),
|
|
31255
|
+
details: z27.unknown().optional(),
|
|
31256
|
+
recoverable: z27.boolean(),
|
|
31257
|
+
suggestedAction: z27.string().optional()
|
|
31258
|
+
})),
|
|
31259
|
+
Stream: BusEvent.define("error.stream", z27.object({
|
|
31260
|
+
reason: z27.enum(["timeout", "aborted", "network", "server"]),
|
|
31261
|
+
message: z27.string(),
|
|
31262
|
+
retryable: z27.boolean(),
|
|
31263
|
+
retryAfter: z27.number().optional()
|
|
31264
|
+
}))
|
|
31265
|
+
};
|
|
31266
|
+
|
|
31267
|
+
// src/server/adapters/queryRunner.ts
|
|
31268
|
+
var QueryRunner = class {
|
|
31269
|
+
constructor(config2, sessionState) {
|
|
31270
|
+
this.config = config2;
|
|
31271
|
+
this.sessionState = sessionState;
|
|
31272
|
+
this.requestId = uuidv4();
|
|
31273
|
+
this.abortController = new AbortController();
|
|
31274
|
+
}
|
|
31275
|
+
requestId;
|
|
31276
|
+
abortController;
|
|
31277
|
+
isRunning = false;
|
|
31278
|
+
messages = [];
|
|
31279
|
+
startTime = 0;
|
|
31280
|
+
totalCost = 0;
|
|
31281
|
+
totalInputTokens = 0;
|
|
31282
|
+
totalOutputTokens = 0;
|
|
31283
|
+
async run(userMessage) {
|
|
31284
|
+
if (this.isRunning) {
|
|
31285
|
+
throw new Error("QueryRunner is already running");
|
|
31286
|
+
}
|
|
31287
|
+
this.isRunning = true;
|
|
31288
|
+
this.startTime = Date.now();
|
|
31289
|
+
this.messages = [];
|
|
31290
|
+
await Bus.publish(MessageEvents.RequestStarted, {
|
|
31291
|
+
sessionId: this.config.sessionId,
|
|
31292
|
+
requestId: this.requestId,
|
|
31293
|
+
userMessage
|
|
31294
|
+
});
|
|
31295
|
+
this.config.onRequestStart?.(this.requestId);
|
|
31296
|
+
try {
|
|
31297
|
+
const messages = this.buildMessages(userMessage);
|
|
31298
|
+
const [systemPrompt, context, toolUseContext] = await Promise.all([
|
|
31299
|
+
this.buildSystemPrompt(),
|
|
31300
|
+
this.buildContext(),
|
|
31301
|
+
this.createToolUseContext()
|
|
31302
|
+
]);
|
|
31303
|
+
const canUseTool = this.createCanUseToolFn();
|
|
31304
|
+
const generator = query(
|
|
31305
|
+
messages,
|
|
31306
|
+
systemPrompt,
|
|
31307
|
+
context,
|
|
31308
|
+
canUseTool,
|
|
31309
|
+
toolUseContext
|
|
31310
|
+
);
|
|
31311
|
+
let finishReason = "end_turn";
|
|
31312
|
+
for await (const message of generator) {
|
|
31313
|
+
if (this.abortController.signal.aborted) {
|
|
31314
|
+
finishReason = "aborted";
|
|
31315
|
+
break;
|
|
31316
|
+
}
|
|
31317
|
+
await this.handleMessage(message);
|
|
31318
|
+
if (message.type === "assistant") {
|
|
31319
|
+
const candidate = message.finish;
|
|
31320
|
+
if (candidate === "end_turn" || candidate === "tool_calls" || candidate === "max_tokens") {
|
|
31321
|
+
finishReason = candidate;
|
|
31322
|
+
}
|
|
31323
|
+
}
|
|
31324
|
+
}
|
|
31325
|
+
const result = {
|
|
31326
|
+
requestId: this.requestId,
|
|
31327
|
+
finishReason,
|
|
31328
|
+
messages: this.messages,
|
|
31329
|
+
usage: {
|
|
31330
|
+
inputTokens: this.totalInputTokens,
|
|
31331
|
+
outputTokens: this.totalOutputTokens,
|
|
31332
|
+
totalTokens: this.totalInputTokens + this.totalOutputTokens
|
|
31333
|
+
},
|
|
31334
|
+
cost: {
|
|
31335
|
+
costUSD: this.totalCost
|
|
31336
|
+
},
|
|
31337
|
+
duration: Date.now() - this.startTime
|
|
31338
|
+
};
|
|
31339
|
+
await Bus.publish(MessageEvents.RequestCompleted, {
|
|
31340
|
+
sessionId: this.config.sessionId,
|
|
31341
|
+
requestId: this.requestId,
|
|
31342
|
+
finishReason: result.finishReason,
|
|
31343
|
+
duration: result.duration,
|
|
31344
|
+
totalTokens: result.usage.totalTokens,
|
|
31345
|
+
costUSD: result.cost.costUSD
|
|
31346
|
+
});
|
|
31347
|
+
this.config.onRequestComplete?.(this.requestId, result);
|
|
31348
|
+
return result;
|
|
31349
|
+
} catch (error) {
|
|
31350
|
+
this.config.onError?.(error instanceof Error ? error : new Error(String(error)));
|
|
31351
|
+
throw error;
|
|
31352
|
+
} finally {
|
|
31353
|
+
this.isRunning = false;
|
|
31354
|
+
}
|
|
31355
|
+
}
|
|
31356
|
+
abort() {
|
|
31357
|
+
this.abortController.abort();
|
|
31358
|
+
}
|
|
31359
|
+
getStatus() {
|
|
31360
|
+
return {
|
|
31361
|
+
isRunning: this.isRunning,
|
|
31362
|
+
requestId: this.isRunning ? this.requestId : null,
|
|
31363
|
+
messageCount: this.messages.length
|
|
31364
|
+
};
|
|
31365
|
+
}
|
|
31366
|
+
async handleMessage(message) {
|
|
31367
|
+
this.messages.push(message);
|
|
31368
|
+
await Bus.publish(MessageEvents.Created, {
|
|
31369
|
+
sessionId: this.config.sessionId,
|
|
31370
|
+
message
|
|
31371
|
+
});
|
|
31372
|
+
this.config.onMessageYield?.(message);
|
|
31373
|
+
if (message.type === "assistant") {
|
|
31374
|
+
const assistantMsg = message;
|
|
31375
|
+
if (assistantMsg.message?.usage) {
|
|
31376
|
+
this.totalInputTokens += assistantMsg.message.usage.input_tokens ?? 0;
|
|
31377
|
+
this.totalOutputTokens += assistantMsg.message.usage.output_tokens ?? 0;
|
|
31378
|
+
}
|
|
31379
|
+
}
|
|
31380
|
+
}
|
|
31381
|
+
buildMessages(userMessage) {
|
|
31382
|
+
const history = this.sessionState.messages.filter((message) => message.type !== "progress");
|
|
31383
|
+
const nextMessage = createUserMessageFromText(userMessage);
|
|
31384
|
+
return [...history, nextMessage];
|
|
31385
|
+
}
|
|
31386
|
+
async buildSystemPrompt() {
|
|
31387
|
+
const basePrompt = await getSystemPrompt();
|
|
31388
|
+
const sessionPrompt = this.sessionState.config.systemPrompt ?? [];
|
|
31389
|
+
if (sessionPrompt.length === 0) return basePrompt;
|
|
31390
|
+
return [...basePrompt, ...sessionPrompt];
|
|
31391
|
+
}
|
|
31392
|
+
async buildContext() {
|
|
31393
|
+
const baseContext = await getContext();
|
|
31394
|
+
return {
|
|
31395
|
+
...baseContext,
|
|
31396
|
+
cwd: this.sessionState.cwd
|
|
31397
|
+
};
|
|
31398
|
+
}
|
|
31399
|
+
createCanUseToolFn() {
|
|
31400
|
+
return async (tool, input, toolUseContext, assistantMessage) => hasPermissionsToUseTool(tool, input, toolUseContext, assistantMessage);
|
|
31401
|
+
}
|
|
31402
|
+
async createToolUseContext() {
|
|
31403
|
+
const tools = await getTools();
|
|
31404
|
+
return {
|
|
31405
|
+
abortController: this.abortController,
|
|
31406
|
+
onQueryLifecycleEvent: (event) => {
|
|
31407
|
+
},
|
|
31408
|
+
sessionContext: new SessionContext(),
|
|
31409
|
+
options: {
|
|
31410
|
+
commands: [],
|
|
31411
|
+
forkNumber: 0,
|
|
31412
|
+
messageLogName: this.requestId,
|
|
31413
|
+
tools,
|
|
31414
|
+
verbose: false,
|
|
31415
|
+
safeMode: false,
|
|
31416
|
+
maxThinkingTokens: 16e3
|
|
31417
|
+
},
|
|
31418
|
+
readFileTimestamps: {},
|
|
31419
|
+
setToolJSX: () => {
|
|
31420
|
+
},
|
|
31421
|
+
requestId: this.requestId,
|
|
31422
|
+
messageId: void 0
|
|
31423
|
+
};
|
|
31424
|
+
}
|
|
31425
|
+
};
|
|
31426
|
+
|
|
31427
|
+
// src/server/routes/session.ts
|
|
31428
|
+
function createSessionRoutes() {
|
|
31429
|
+
const router = new Hono();
|
|
31430
|
+
router.post("/", async (c) => {
|
|
31431
|
+
const body = await c.req.json();
|
|
31432
|
+
const { resumeFrom, config: config2 } = body;
|
|
31433
|
+
if (resumeFrom !== void 0 && resumeFrom !== null) {
|
|
31434
|
+
return c.json(
|
|
31435
|
+
{
|
|
31436
|
+
success: false,
|
|
31437
|
+
error: {
|
|
31438
|
+
code: "RESUME_NOT_SUPPORTED",
|
|
31439
|
+
message: "resumeFrom is not supported in current session backend"
|
|
31440
|
+
}
|
|
31441
|
+
},
|
|
31442
|
+
400
|
|
31443
|
+
);
|
|
31444
|
+
}
|
|
31445
|
+
const session = await sessionStateManager.create(
|
|
31446
|
+
process.cwd(),
|
|
31447
|
+
config2
|
|
31448
|
+
);
|
|
31449
|
+
return c.json({
|
|
31450
|
+
success: true,
|
|
31451
|
+
data: {
|
|
31452
|
+
sessionId: session.id,
|
|
31453
|
+
createdAt: session.createdAt,
|
|
31454
|
+
config: session.config
|
|
31455
|
+
}
|
|
31456
|
+
}, 201);
|
|
31457
|
+
});
|
|
31458
|
+
router.get("/", (c) => {
|
|
31459
|
+
const sessions = sessionStateManager.list();
|
|
31460
|
+
const page = parseInt(c.req.query("page") ?? "1");
|
|
31461
|
+
const limit = parseInt(c.req.query("limit") ?? "20");
|
|
31462
|
+
const status = c.req.query("status");
|
|
31463
|
+
let filtered = sessions;
|
|
31464
|
+
if (status) {
|
|
31465
|
+
filtered = filtered.filter((s) => s.status === status);
|
|
31466
|
+
}
|
|
31467
|
+
const start = (page - 1) * limit;
|
|
31468
|
+
const items = filtered.slice(start, start + limit);
|
|
31469
|
+
return c.json({
|
|
31470
|
+
success: true,
|
|
31471
|
+
data: {
|
|
31472
|
+
items: items.map((s) => ({
|
|
31473
|
+
id: s.id,
|
|
31474
|
+
title: s.title,
|
|
31475
|
+
status: s.status,
|
|
31476
|
+
messageCount: s.messages.length,
|
|
31477
|
+
createdAt: s.createdAt,
|
|
31478
|
+
updatedAt: s.updatedAt,
|
|
31479
|
+
config: s.config
|
|
31480
|
+
})),
|
|
31481
|
+
pagination: {
|
|
31482
|
+
page,
|
|
31483
|
+
limit,
|
|
31484
|
+
total: filtered.length,
|
|
31485
|
+
hasMore: start + limit < filtered.length
|
|
31486
|
+
}
|
|
31487
|
+
}
|
|
31488
|
+
});
|
|
31489
|
+
});
|
|
31490
|
+
router.get("/:sessionId", (c) => {
|
|
31491
|
+
const sessionId = c.req.param("sessionId");
|
|
31492
|
+
const session = sessionStateManager.get(sessionId);
|
|
31493
|
+
if (!session) {
|
|
31494
|
+
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
31495
|
+
}
|
|
31496
|
+
return c.json({
|
|
31497
|
+
success: true,
|
|
31498
|
+
data: {
|
|
31499
|
+
id: session.id,
|
|
31500
|
+
title: session.title,
|
|
31501
|
+
status: session.status,
|
|
31502
|
+
messages: session.messages,
|
|
31503
|
+
createdAt: session.createdAt,
|
|
31504
|
+
updatedAt: session.updatedAt,
|
|
31505
|
+
config: session.config
|
|
31506
|
+
}
|
|
31507
|
+
});
|
|
31508
|
+
});
|
|
31509
|
+
router.get("/:sessionId/messages", (c) => {
|
|
31510
|
+
const sessionId = c.req.param("sessionId");
|
|
31511
|
+
const session = sessionStateManager.get(sessionId);
|
|
31512
|
+
if (!session) {
|
|
31513
|
+
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
31514
|
+
}
|
|
31515
|
+
const after = c.req.query("after");
|
|
31516
|
+
const before = c.req.query("before");
|
|
31517
|
+
const limit = Math.max(1, parseInt(c.req.query("limit") ?? "50", 10));
|
|
31518
|
+
let items = [...session.messages];
|
|
31519
|
+
if (after) {
|
|
31520
|
+
const index = items.findIndex((item) => item.uuid === after);
|
|
31521
|
+
if (index >= 0) {
|
|
31522
|
+
items = items.slice(index + 1);
|
|
31523
|
+
}
|
|
31524
|
+
}
|
|
31525
|
+
if (before) {
|
|
31526
|
+
const index = items.findIndex((item) => item.uuid === before);
|
|
31527
|
+
if (index >= 0) {
|
|
31528
|
+
items = items.slice(0, index);
|
|
31529
|
+
}
|
|
31530
|
+
}
|
|
31531
|
+
items = items.slice(0, limit);
|
|
31532
|
+
return c.json({
|
|
31533
|
+
success: true,
|
|
31534
|
+
data: { items }
|
|
31535
|
+
});
|
|
31536
|
+
});
|
|
31537
|
+
router.patch("/:sessionId", async (c) => {
|
|
31538
|
+
const sessionId = c.req.param("sessionId");
|
|
31539
|
+
const body = await c.req.json();
|
|
31540
|
+
const updated = await sessionStateManager.update(sessionId, body);
|
|
31541
|
+
if (!updated) {
|
|
31542
|
+
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
31543
|
+
}
|
|
31544
|
+
const session = sessionStateManager.get(sessionId);
|
|
31545
|
+
return c.json({ success: true, data: session });
|
|
31546
|
+
});
|
|
31547
|
+
router.delete("/:sessionId", async (c) => {
|
|
31548
|
+
const sessionId = c.req.param("sessionId");
|
|
31549
|
+
const deleted = await sessionStateManager.delete(sessionId);
|
|
31550
|
+
return c.json({
|
|
31551
|
+
success: true,
|
|
31552
|
+
data: { deleted, sessionId }
|
|
31553
|
+
});
|
|
31554
|
+
});
|
|
31555
|
+
router.post("/:sessionId/prompt", async (c) => {
|
|
31556
|
+
const sessionId = c.req.param("sessionId");
|
|
31557
|
+
const body = await c.req.json();
|
|
31558
|
+
const { message, attachments, options } = body;
|
|
31559
|
+
const session = sessionStateManager.get(sessionId);
|
|
31560
|
+
if (!session) {
|
|
31561
|
+
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
31562
|
+
}
|
|
31563
|
+
const acceptHeader = c.req.header("Accept") ?? "";
|
|
31564
|
+
const wantsSSE = acceptHeader.includes("text/event-stream") || options?.stream !== false;
|
|
31565
|
+
if (wantsSSE) {
|
|
31566
|
+
return streamSSE(c, async (stream) => {
|
|
31567
|
+
const runner = new QueryRunner(
|
|
31568
|
+
{ sessionId },
|
|
31569
|
+
session
|
|
31570
|
+
);
|
|
31571
|
+
sessionStateManager.setCurrentRunner(sessionId, runner);
|
|
31572
|
+
try {
|
|
31573
|
+
const result = await runner.run(message);
|
|
31574
|
+
await stream.writeSSE({
|
|
31575
|
+
event: "request.completed",
|
|
31576
|
+
data: JSON.stringify({
|
|
31577
|
+
type: "request.completed",
|
|
31578
|
+
sessionId,
|
|
31579
|
+
timestamp: Date.now(),
|
|
31580
|
+
data: {
|
|
31581
|
+
finishReason: result.finishReason,
|
|
31582
|
+
usage: result.usage,
|
|
31583
|
+
cost: result.cost,
|
|
31584
|
+
duration: result.duration
|
|
31585
|
+
}
|
|
31586
|
+
})
|
|
31587
|
+
});
|
|
31588
|
+
} catch (error) {
|
|
31589
|
+
await stream.writeSSE({
|
|
31590
|
+
event: "error",
|
|
31591
|
+
data: JSON.stringify({
|
|
31592
|
+
type: "error",
|
|
31593
|
+
sessionId,
|
|
31594
|
+
timestamp: Date.now(),
|
|
31595
|
+
data: {
|
|
31596
|
+
code: "QUERY_ERROR",
|
|
31597
|
+
message: error instanceof Error ? error.message : String(error),
|
|
31598
|
+
recoverable: false
|
|
31599
|
+
}
|
|
31600
|
+
})
|
|
31601
|
+
});
|
|
31602
|
+
} finally {
|
|
31603
|
+
sessionStateManager.clearCurrentRunner(sessionId);
|
|
31604
|
+
}
|
|
31605
|
+
});
|
|
31606
|
+
} else {
|
|
31607
|
+
const runner = new QueryRunner({ sessionId }, session);
|
|
31608
|
+
sessionStateManager.setCurrentRunner(sessionId, runner);
|
|
31609
|
+
try {
|
|
31610
|
+
const result = await runner.run(message);
|
|
31611
|
+
return c.json({ success: true, data: result });
|
|
31612
|
+
} finally {
|
|
31613
|
+
sessionStateManager.clearCurrentRunner(sessionId);
|
|
31614
|
+
}
|
|
31615
|
+
}
|
|
31616
|
+
});
|
|
31617
|
+
router.post("/:sessionId/abort", (c) => {
|
|
31618
|
+
const sessionId = c.req.param("sessionId");
|
|
31619
|
+
const session = sessionStateManager.get(sessionId);
|
|
31620
|
+
if (!session) {
|
|
31621
|
+
return c.json({ success: false, error: { code: "SESSION_NOT_FOUND", message: "Session not found" } }, 404);
|
|
31622
|
+
}
|
|
31623
|
+
const runner = sessionStateManager.getCurrentRunner(sessionId);
|
|
31624
|
+
if (runner) {
|
|
31625
|
+
runner.abort();
|
|
31626
|
+
return c.json({ success: true, data: { aborted: true } });
|
|
31627
|
+
}
|
|
31628
|
+
return c.json({ success: true, data: { aborted: false, reason: "No running query" } });
|
|
31629
|
+
});
|
|
31630
|
+
return router;
|
|
31631
|
+
}
|
|
31632
|
+
|
|
31622
31633
|
// src/server/routes/tool.ts
|
|
31634
|
+
import { Hono as Hono2 } from "hono";
|
|
31623
31635
|
function createToolRoutes() {
|
|
31624
31636
|
const router = new Hono2();
|
|
31625
31637
|
router.get("/", async (c) => {
|
|
@@ -38297,7 +38309,7 @@ function useStatusLine() {
|
|
|
38297
38309
|
// src/ui/components/PromptInput.tsx
|
|
38298
38310
|
async function interpretHashCommand(input) {
|
|
38299
38311
|
try {
|
|
38300
|
-
const { queryQuick: queryQuick2 } = await import("./llm-
|
|
38312
|
+
const { queryQuick: queryQuick2 } = await import("./llm-MRDYTVAB.js");
|
|
38301
38313
|
const systemPrompt = [
|
|
38302
38314
|
"You're helping the user structure notes that will be added to their PYB.md file.",
|
|
38303
38315
|
"Format the user's input into a well-structured note that will be useful for later reference.",
|
|
@@ -38610,7 +38622,7 @@ function PromptInput({
|
|
|
38610
38622
|
if (messages2.length) {
|
|
38611
38623
|
if (mode === "bash") {
|
|
38612
38624
|
onQuery(messages2, newAbortController).then(async () => {
|
|
38613
|
-
const { getCwd: getCwd2 } = await import("./state-
|
|
38625
|
+
const { getCwd: getCwd2 } = await import("./state-GMP5BAO3.js");
|
|
38614
38626
|
setCurrentPwd(getCwd2());
|
|
38615
38627
|
});
|
|
38616
38628
|
} else {
|
|
@@ -40240,7 +40252,7 @@ import { homedir as homedir8 } from "os";
|
|
|
40240
40252
|
// src/commands/agents/generation.ts
|
|
40241
40253
|
import { randomUUID as randomUUID9 } from "crypto";
|
|
40242
40254
|
async function generateAgentWithClaude(prompt) {
|
|
40243
|
-
const { queryModel } = await import("./llm-
|
|
40255
|
+
const { queryModel } = await import("./llm-MRDYTVAB.js");
|
|
40244
40256
|
const systemPrompt = `You are an expert at creating AI agent configurations. Based on the user's description, generate a specialized agent configuration.
|
|
40245
40257
|
|
|
40246
40258
|
Return your response as a JSON object with exactly these fields:
|