pybao-cli 1.4.80 → 1.4.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/REPL-VOJCD6X6.js +49 -0
- package/dist/{acp-PA6S5MGT.js → acp-ASRH57AF.js} +79 -32
- package/dist/acp-ASRH57AF.js.map +7 -0
- package/dist/{agentsValidate-YM6XVDQL.js → agentsValidate-35AHZXNB.js} +7 -9
- package/dist/agentsValidate-35AHZXNB.js.map +7 -0
- package/dist/ask-TI3ITWN7.js +143 -0
- package/dist/ask-TI3ITWN7.js.map +7 -0
- package/dist/{autoUpdater-AKRMM25L.js → autoUpdater-MRK5BD2L.js} +3 -3
- package/dist/{chunk-CP3HV6YN.js → chunk-2AG4BTRV.js} +1 -1
- package/dist/{chunk-OQA7RUJA.js → chunk-2S2V2ZI7.js} +16 -22
- package/dist/chunk-2S2V2ZI7.js.map +7 -0
- package/dist/{chunk-LLSY2GBI.js → chunk-2WIUQUTU.js} +3 -3
- package/dist/{chunk-MIUJHRUY.js → chunk-2YM35XWE.js} +3 -3
- package/dist/{chunk-AERD7AWQ.js → chunk-AUGXOUTX.js} +11 -1
- package/dist/chunk-AUGXOUTX.js.map +7 -0
- package/dist/{chunk-TG7JXSXM.js → chunk-AYVB6VUF.js} +1 -1
- package/dist/{chunk-PXEQDOU3.js → chunk-DYJD66YF.js} +1 -1
- package/dist/{chunk-744K4I7E.js → chunk-DZTZPEPA.js} +2 -2
- package/dist/chunk-F4AXICO7.js +28 -0
- package/dist/chunk-F4AXICO7.js.map +7 -0
- package/dist/{chunk-BWTCQG4X.js → chunk-GSAG6WNQ.js} +1 -1
- package/dist/{chunk-CWZPDQJA.js → chunk-GUTLXPN6.js} +38 -4
- package/dist/{chunk-CWZPDQJA.js.map → chunk-GUTLXPN6.js.map} +2 -2
- package/dist/{chunk-3WG3WTUV.js → chunk-GZT2DWED.js} +1 -1
- package/dist/{chunk-3SFRVXA2.js → chunk-HJWUPFGF.js} +4 -4
- package/dist/{chunk-WTRPPL2M.js → chunk-IIVG2SHE.js} +3 -3
- package/dist/{chunk-JM762ZDE.js → chunk-JQVZNIKI.js} +4 -4
- package/dist/{chunk-KTATOOLL.js → chunk-JT3RE7UH.js} +6 -22
- package/dist/{chunk-KTATOOLL.js.map → chunk-JT3RE7UH.js.map} +3 -3
- package/dist/{chunk-3CW5FEOJ.js → chunk-KNWW4HGV.js} +2 -2
- package/dist/chunk-LM665HND.js +262 -0
- package/dist/chunk-LM665HND.js.map +7 -0
- package/dist/{chunk-42HW6S7R.js → chunk-NTL5PKCX.js} +3 -3
- package/dist/{chunk-7ZNKXJQ6.js → chunk-PXPTGNYH.js} +2 -2
- package/dist/{chunk-2QU7ZSUS.js → chunk-QUWUFGZF.js} +4 -4
- package/dist/{chunk-I37OY5QI.js → chunk-SZEYDC6A.js} +3 -3
- package/dist/{chunk-3PA2KVRH.js → chunk-TWWQYBVK.js} +3 -3
- package/dist/{chunk-LMS74RIF.js → chunk-U265OPSO.js} +5 -25
- package/dist/chunk-U265OPSO.js.map +7 -0
- package/dist/{chunk-F5LYIQAC.js → chunk-UBX7JQR2.js} +2 -2
- package/dist/{chunk-VHWL7AZC.js → chunk-UXVOYFKL.js} +2 -2
- package/dist/{chunk-FTXFHBBF.js → chunk-VMWEFYQB.js} +1 -1
- package/dist/{chunk-QOJN4AXT.js → chunk-WBBMOYXK.js} +1 -1
- package/dist/{chunk-QOJN4AXT.js.map → chunk-WBBMOYXK.js.map} +1 -1
- package/dist/{chunk-EZ5OXAWM.js → chunk-WVYIFMLG.js} +4 -4
- package/dist/chunk-XKYHFZEC.js +68 -0
- package/dist/chunk-XKYHFZEC.js.map +7 -0
- package/dist/{chunk-XNEBNYWQ.js → chunk-XOOHCC63.js} +996 -1479
- package/dist/chunk-XOOHCC63.js.map +7 -0
- package/dist/{chunk-455FF5IG.js → chunk-Y5JPSTQ4.js} +1 -1
- package/dist/{chunk-JD2LVXSN.js → chunk-ZW25QNXS.js} +3 -3
- package/dist/{cli-6XU5K75R.js → cli-ECB4WYUZ.js} +399 -379
- package/dist/cli-ECB4WYUZ.js.map +7 -0
- package/dist/commands-3B77L2SI.js +53 -0
- package/dist/{config-REKPGWPW.js → config-KZHPV37P.js} +4 -4
- package/dist/{context-7V2M3ID6.js → context-ZZI53BPM.js} +6 -6
- package/dist/conversationTracker-SC6NCQHL.js +17 -0
- package/dist/{customCommands-WLOMXCCK.js → customCommands-MX6OENKO.js} +4 -4
- package/dist/{env-35CB7KWZ.js → env-76WAAGI6.js} +2 -2
- package/dist/{file-TCC75FSO.js → file-LCS77XWE.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-C6QFJQ42.js → llm-AR66BS2U.js} +32 -29
- package/dist/{llm-C6QFJQ42.js.map → llm-AR66BS2U.js.map} +1 -1
- package/dist/{llmLazy-7GZ6NMOQ.js → llmLazy-5W6E5BCB.js} +1 -1
- package/dist/{loader-X6LBDHGF.js → loader-OWZ3WD2X.js} +4 -4
- package/dist/{lsp-SWPSA5Q7.js → lsp-NLPSJYH4.js} +6 -6
- package/dist/{lspAnchor-7DFVRBS2.js → lspAnchor-MWASWGQD.js} +6 -6
- package/dist/{mcp-PHB7FETI.js → mcp-T2UB74Y2.js} +7 -7
- package/dist/{mentionProcessor-V26NXWYI.js → mentionProcessor-KIBWOHEC.js} +5 -5
- package/dist/{messages-WHTP6PI3.js → messages-6BHCXDWR.js} +5 -1
- package/dist/{model-5DT4TF4B.js → model-5NDSZPIL.js} +5 -5
- package/dist/{openai-737OOCXA.js → openai-7XPWH2G7.js} +6 -5
- package/dist/{outputStyles-EPSYXOCH.js → outputStyles-QUE4ALJQ.js} +4 -4
- package/dist/{pluginRuntime-NUMYY7SH.js → pluginRuntime-PQ3VZRX7.js} +6 -6
- package/dist/{pluginValidation-27NUUYNZ.js → pluginValidation-RQ34XQY3.js} +6 -6
- package/dist/prompts-5576MRUX.js +55 -0
- package/dist/{pybAgentSessionLoad-QMQTSGQ7.js → pybAgentSessionLoad-5MWAY2A4.js} +4 -4
- package/dist/{pybAgentSessionResume-RX3URXYK.js → pybAgentSessionResume-NZGSUGGS.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-V2QVHE7Y.js → pybAgentStreamJsonSession-UP4WOINX.js} +3 -3
- package/dist/pybAgentStreamJsonSession-UP4WOINX.js.map +7 -0
- package/dist/{pybHooks-WR66ZII4.js → pybHooks-HILU7ZB4.js} +4 -4
- package/dist/query-LMPE4HBF.js +57 -0
- package/dist/{registry-3Z3F4SUL.js → registry-4MWYBUFA.js} +5 -5
- package/dist/replSessionBridge-EBXNFUAD.js +10 -0
- package/dist/{ripgrep-5FHFS5OM.js → ripgrep-J74GL455.js} +3 -3
- package/dist/{skillMarketplace-HC5HJ4MG.js → skillMarketplace-ATLDIEEX.js} +3 -3
- package/dist/{state-LXTRD5P4.js → state-Y2Q4MPY5.js} +2 -2
- package/dist/{theme-XFUQOISY.js → theme-3L66ZU5Z.js} +5 -5
- package/dist/{toolPermissionSettings-Z2IVN6T2.js → toolPermissionSettings-PDGMFGN2.js} +6 -6
- package/dist/toolPermissionSettings-PDGMFGN2.js.map +7 -0
- package/dist/tools-45UHHM5S.js +54 -0
- package/dist/tools-45UHHM5S.js.map +7 -0
- package/dist/{userInput-CVQ4TYJZ.js → userInput-GBXOUS4W.js} +40 -36
- package/dist/userInput-GBXOUS4W.js.map +7 -0
- package/package.json +1 -1
- package/dist/REPL-4JXH3XRO.js +0 -46
- package/dist/acp-PA6S5MGT.js.map +0 -7
- package/dist/agentsValidate-YM6XVDQL.js.map +0 -7
- package/dist/ask-TKEZYYAI.js +0 -129
- package/dist/ask-TKEZYYAI.js.map +0 -7
- package/dist/chunk-AERD7AWQ.js.map +0 -7
- package/dist/chunk-LMS74RIF.js.map +0 -7
- package/dist/chunk-OQA7RUJA.js.map +0 -7
- package/dist/chunk-XNEBNYWQ.js.map +0 -7
- package/dist/cli-6XU5K75R.js.map +0 -7
- package/dist/commands-LBQTQ6YP.js +0 -50
- package/dist/prompts-HHTQ43AP.js +0 -52
- package/dist/pybAgentStreamJsonSession-V2QVHE7Y.js.map +0 -7
- package/dist/query-LQZ7XTT3.js +0 -54
- package/dist/tools-A3ZAFFOB.js +0 -51
- package/dist/userInput-CVQ4TYJZ.js.map +0 -7
- /package/dist/{REPL-4JXH3XRO.js.map → REPL-VOJCD6X6.js.map} +0 -0
- /package/dist/{autoUpdater-AKRMM25L.js.map → autoUpdater-MRK5BD2L.js.map} +0 -0
- /package/dist/{chunk-CP3HV6YN.js.map → chunk-2AG4BTRV.js.map} +0 -0
- /package/dist/{chunk-LLSY2GBI.js.map → chunk-2WIUQUTU.js.map} +0 -0
- /package/dist/{chunk-MIUJHRUY.js.map → chunk-2YM35XWE.js.map} +0 -0
- /package/dist/{chunk-TG7JXSXM.js.map → chunk-AYVB6VUF.js.map} +0 -0
- /package/dist/{chunk-PXEQDOU3.js.map → chunk-DYJD66YF.js.map} +0 -0
- /package/dist/{chunk-744K4I7E.js.map → chunk-DZTZPEPA.js.map} +0 -0
- /package/dist/{chunk-BWTCQG4X.js.map → chunk-GSAG6WNQ.js.map} +0 -0
- /package/dist/{chunk-3WG3WTUV.js.map → chunk-GZT2DWED.js.map} +0 -0
- /package/dist/{chunk-3SFRVXA2.js.map → chunk-HJWUPFGF.js.map} +0 -0
- /package/dist/{chunk-WTRPPL2M.js.map → chunk-IIVG2SHE.js.map} +0 -0
- /package/dist/{chunk-JM762ZDE.js.map → chunk-JQVZNIKI.js.map} +0 -0
- /package/dist/{chunk-3CW5FEOJ.js.map → chunk-KNWW4HGV.js.map} +0 -0
- /package/dist/{chunk-42HW6S7R.js.map → chunk-NTL5PKCX.js.map} +0 -0
- /package/dist/{chunk-7ZNKXJQ6.js.map → chunk-PXPTGNYH.js.map} +0 -0
- /package/dist/{chunk-2QU7ZSUS.js.map → chunk-QUWUFGZF.js.map} +0 -0
- /package/dist/{chunk-I37OY5QI.js.map → chunk-SZEYDC6A.js.map} +0 -0
- /package/dist/{chunk-3PA2KVRH.js.map → chunk-TWWQYBVK.js.map} +0 -0
- /package/dist/{chunk-F5LYIQAC.js.map → chunk-UBX7JQR2.js.map} +0 -0
- /package/dist/{chunk-VHWL7AZC.js.map → chunk-UXVOYFKL.js.map} +0 -0
- /package/dist/{chunk-FTXFHBBF.js.map → chunk-VMWEFYQB.js.map} +0 -0
- /package/dist/{chunk-EZ5OXAWM.js.map → chunk-WVYIFMLG.js.map} +0 -0
- /package/dist/{chunk-455FF5IG.js.map → chunk-Y5JPSTQ4.js.map} +0 -0
- /package/dist/{chunk-JD2LVXSN.js.map → chunk-ZW25QNXS.js.map} +0 -0
- /package/dist/{commands-LBQTQ6YP.js.map → commands-3B77L2SI.js.map} +0 -0
- /package/dist/{config-REKPGWPW.js.map → config-KZHPV37P.js.map} +0 -0
- /package/dist/{context-7V2M3ID6.js.map → context-ZZI53BPM.js.map} +0 -0
- /package/dist/{customCommands-WLOMXCCK.js.map → conversationTracker-SC6NCQHL.js.map} +0 -0
- /package/dist/{env-35CB7KWZ.js.map → customCommands-MX6OENKO.js.map} +0 -0
- /package/dist/{file-TCC75FSO.js.map → env-76WAAGI6.js.map} +0 -0
- /package/dist/{llmLazy-7GZ6NMOQ.js.map → file-LCS77XWE.js.map} +0 -0
- /package/dist/{loader-X6LBDHGF.js.map → llmLazy-5W6E5BCB.js.map} +0 -0
- /package/dist/{lsp-SWPSA5Q7.js.map → loader-OWZ3WD2X.js.map} +0 -0
- /package/dist/{mcp-PHB7FETI.js.map → lsp-NLPSJYH4.js.map} +0 -0
- /package/dist/{lspAnchor-7DFVRBS2.js.map → lspAnchor-MWASWGQD.js.map} +0 -0
- /package/dist/{messages-WHTP6PI3.js.map → mcp-T2UB74Y2.js.map} +0 -0
- /package/dist/{mentionProcessor-V26NXWYI.js.map → mentionProcessor-KIBWOHEC.js.map} +0 -0
- /package/dist/{model-5DT4TF4B.js.map → messages-6BHCXDWR.js.map} +0 -0
- /package/dist/{openai-737OOCXA.js.map → model-5NDSZPIL.js.map} +0 -0
- /package/dist/{outputStyles-EPSYXOCH.js.map → openai-7XPWH2G7.js.map} +0 -0
- /package/dist/{pluginValidation-27NUUYNZ.js.map → outputStyles-QUE4ALJQ.js.map} +0 -0
- /package/dist/{pluginRuntime-NUMYY7SH.js.map → pluginRuntime-PQ3VZRX7.js.map} +0 -0
- /package/dist/{prompts-HHTQ43AP.js.map → pluginValidation-RQ34XQY3.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-QMQTSGQ7.js.map → prompts-5576MRUX.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-RX3URXYK.js.map → pybAgentSessionLoad-5MWAY2A4.js.map} +0 -0
- /package/dist/{pybHooks-WR66ZII4.js.map → pybAgentSessionResume-NZGSUGGS.js.map} +0 -0
- /package/dist/{query-LQZ7XTT3.js.map → pybHooks-HILU7ZB4.js.map} +0 -0
- /package/dist/{registry-3Z3F4SUL.js.map → query-LMPE4HBF.js.map} +0 -0
- /package/dist/{ripgrep-5FHFS5OM.js.map → registry-4MWYBUFA.js.map} +0 -0
- /package/dist/{skillMarketplace-HC5HJ4MG.js.map → replSessionBridge-EBXNFUAD.js.map} +0 -0
- /package/dist/{state-LXTRD5P4.js.map → ripgrep-J74GL455.js.map} +0 -0
- /package/dist/{theme-XFUQOISY.js.map → skillMarketplace-ATLDIEEX.js.map} +0 -0
- /package/dist/{toolPermissionSettings-Z2IVN6T2.js.map → state-Y2Q4MPY5.js.map} +0 -0
- /package/dist/{tools-A3ZAFFOB.js.map → theme-3L66ZU5Z.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/session/conversationMessageState.ts", "../src/utils/session/conversationPersistence.ts", "../src/utils/session/conversationTracker.ts"],
|
|
4
|
+
"sourcesContent": ["import type { AssistantMessage, Message, UserMessage } from '@query'\n\nexport type ConversationFinishReason =\n | 'end_turn'\n | 'tool_calls'\n | 'max_tokens'\n | 'pause_turn'\n\nexport function mapFinishReason(rawReason?: string | null): ConversationFinishReason {\n const reason = String(rawReason ?? '')\n .trim()\n .toLowerCase()\n if (!reason) return 'end_turn'\n if (reason === 'tool_use' || reason === 'tool_calls') return 'tool_calls'\n if (reason === 'max_tokens' || reason === 'length') return 'max_tokens'\n if (reason === 'pause_turn') return 'pause_turn'\n if (reason === 'end_turn' || reason === 'stop' || reason === 'stop_sequence') {\n return 'end_turn'\n }\n return 'end_turn'\n}\n\nexport function isFinishComplete(finish: ConversationFinishReason): boolean {\n return finish === 'end_turn'\n}\n\nexport function isToolResultUserMessage(message: UserMessage): boolean {\n if (!Array.isArray(message.message.content)) return false\n return message.message.content.some(\n block => block && typeof block === 'object' && (block as any).type === 'tool_result',\n )\n}\n\nexport function findNaturalUserMessageForParent(\n messages: Message[],\n): UserMessage | undefined {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i]\n if (!msg || msg.type !== 'user') continue\n if (isToolResultUserMessage(msg)) continue\n return msg\n }\n return undefined\n}\n\nexport function appendFinishState(\n assistantMessage: AssistantMessage,\n state: {\n finish: ConversationFinishReason\n parentID: string\n completedAt?: number\n },\n): AssistantMessage {\n return {\n ...assistantMessage,\n finish: state.finish,\n parentID: state.parentID,\n ...(typeof state.completedAt === 'number'\n ? { completedAt: state.completedAt }\n : {}),\n }\n}\n\nexport function isCompactionMessage(message: Message): boolean {\n return (\n message.type === 'assistant' &&\n !!(message as AssistantMessage).compaction &&\n (message as AssistantMessage).compaction?.type === 'compaction'\n )\n}\n\nexport function getCompactedQueryIds(messages: Message[]): string[] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (!isCompactionMessage(message)) continue\n const ids = (message as AssistantMessage).compaction?.compactedQueryIds\n if (Array.isArray(ids)) return ids\n }\n return []\n}\n", "import {\n existsSync,\n mkdirSync,\n readFileSync,\n renameSync,\n unlinkSync,\n writeFileSync,\n} from 'fs'\nimport { join } from 'path'\nimport { logError } from '@utils/log'\n\nexport const PERSISTENCE_VERSION = 1\n\nexport type PersistedCompletedQuery = {\n queryId: string\n userMessageUUID: string\n userQuery: string\n summary: string\n completedAt: number\n finish: 'end_turn' | 'tool_calls' | 'max_tokens' | 'pause_turn'\n}\n\nexport type PersistedConversationState = {\n version: number\n sessionId: string\n completedQueries: PersistedCompletedQuery[]\n lastUpdatedAt: number\n}\n\nexport interface ConversationPersistence {\n saveSync(sessionId: string, state: PersistedConversationState): void\n loadSync(sessionId: string): PersistedConversationState | null\n clearSync(sessionId: string): void\n}\n\nfunction sanitizeSessionId(sessionId: string): string {\n return sessionId.replace(/[^a-zA-Z0-9_-]/g, '_')\n}\n\nfunction isValidPersistedCompletedQuery(value: unknown): value is PersistedCompletedQuery {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const item = value as PersistedCompletedQuery\n return (\n typeof item.queryId === 'string' &&\n typeof item.userMessageUUID === 'string' &&\n typeof item.userQuery === 'string' &&\n typeof item.summary === 'string' &&\n typeof item.completedAt === 'number' &&\n (item.finish === 'end_turn' ||\n item.finish === 'tool_calls' ||\n item.finish === 'max_tokens' ||\n item.finish === 'pause_turn')\n )\n}\n\nfunction isValidPersistedConversationState(\n value: unknown,\n): value is PersistedConversationState {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const state = value as PersistedConversationState\n return (\n typeof state.version === 'number' &&\n typeof state.sessionId === 'string' &&\n Array.isArray(state.completedQueries) &&\n state.completedQueries.every(isValidPersistedCompletedQuery) &&\n typeof state.lastUpdatedAt === 'number'\n )\n}\n\nexport class FileSystemConversationPersistence implements ConversationPersistence {\n constructor(private readonly baseDir: string) {}\n\n private getFilePath(sessionId: string): string {\n return join(this.baseDir, `${sanitizeSessionId(sessionId)}.json`)\n }\n\n saveSync(sessionId: string, state: PersistedConversationState): void {\n const filePath = this.getFilePath(sessionId)\n const tempPath = `${filePath}.tmp`\n try {\n mkdirSync(this.baseDir, { recursive: true })\n writeFileSync(tempPath, JSON.stringify(state, null, 2), 'utf8')\n renameSync(tempPath, filePath)\n } catch (error) {\n logError(error)\n try {\n if (existsSync(tempPath)) unlinkSync(tempPath)\n } catch {}\n }\n }\n\n loadSync(sessionId: string): PersistedConversationState | null {\n const filePath = this.getFilePath(sessionId)\n if (!existsSync(filePath)) return null\n try {\n const raw = readFileSync(filePath, 'utf8')\n const parsed = JSON.parse(raw) as unknown\n if (!isValidPersistedConversationState(parsed)) return null\n return parsed\n } catch {\n return null\n }\n }\n\n clearSync(sessionId: string): void {\n const filePath = this.getFilePath(sessionId)\n try {\n if (existsSync(filePath)) unlinkSync(filePath)\n } catch (error) {\n logError(error)\n }\n }\n}\n", "import type { AssistantMessage, UserMessage } from '@query'\nimport { isToolResultUserMessage } from './conversationMessageState'\nimport {\n type ConversationPersistence,\n type PersistedCompletedQuery,\n type PersistedConversationState,\n PERSISTENCE_VERSION,\n} from './conversationPersistence'\n\nexport type CompletedQuery = {\n queryId: string\n userMessageUUID: string\n userQuery: string\n summary: string\n completedAt: number\n finish: 'end_turn' | 'tool_calls' | 'max_tokens' | 'pause_turn'\n}\n\ntype SummaryOptions = {\n maxEntries?: number\n maxEntryChars?: number\n maxTotalChars?: number\n}\n\nfunction extractText(content: unknown): string {\n if (typeof content === 'string') return content.trim()\n if (!Array.isArray(content)) return ''\n return content\n .filter(block => block && typeof block === 'object' && (block as any).type === 'text')\n .map(block => String((block as any).text ?? '').trim())\n .filter(Boolean)\n .join('\\n')\n .trim()\n}\n\nfunction truncate(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text\n return `${text.slice(0, Math.max(0, maxChars - 3))}...`\n}\n\nexport class ConversationTracker {\n private completedQueries = new Map<string, CompletedQuery>()\n private currentQueryId: string | null = null\n private readonly persistence?: ConversationPersistence\n private readonly sessionId?: string\n\n constructor(options?: {\n persistence?: ConversationPersistence\n sessionId?: string\n }) {\n this.persistence = options?.persistence\n this.sessionId = options?.sessionId\n }\n\n startQuery(queryId: string, userMessage: UserMessage): boolean {\n if (!queryId) return false\n if (isToolResultUserMessage(userMessage)) return false\n if (this.completedQueries.has(queryId)) return false\n if (this.currentQueryId === queryId) return true\n this.currentQueryId = queryId\n return true\n }\n\n completeQuery(\n queryId: string,\n assistantMessage: AssistantMessage,\n userMessage: UserMessage,\n ): boolean {\n if (!queryId) return false\n if (this.completedQueries.has(queryId)) return false\n if (assistantMessage.finish !== 'end_turn') return false\n if (assistantMessage.parentID !== userMessage.uuid) return false\n\n const userQuery = extractText(userMessage.message.content)\n const summaryRaw = extractText(assistantMessage.message.content)\n const completedAt =\n typeof assistantMessage.completedAt === 'number'\n ? assistantMessage.completedAt\n : Date.now()\n\n this.completedQueries.set(queryId, {\n queryId,\n userMessageUUID: userMessage.uuid,\n userQuery,\n summary: summaryRaw,\n completedAt,\n finish: assistantMessage.finish,\n })\n if (this.currentQueryId === queryId) {\n this.currentQueryId = null\n }\n return true\n }\n\n isQueryCompleted(queryId: string): boolean {\n return this.completedQueries.has(queryId)\n }\n\n getCurrentQueryId(): string | null {\n return this.currentQueryId\n }\n\n getCompletedQueries(): CompletedQuery[] {\n return Array.from(this.completedQueries.values()).sort(\n (a, b) => a.completedAt - b.completedAt,\n )\n }\n\n generateConversationSummary(options?: SummaryOptions): string {\n const maxEntries = options?.maxEntries ?? 10\n const maxEntryChars = options?.maxEntryChars ?? 80\n const maxTotalChars = options?.maxTotalChars ?? 2000\n const completed = this.getCompletedQueries()\n if (completed.length === 0) return ''\n\n const recent = completed.slice(-maxEntries)\n const lines = recent.map(item => {\n const q = truncate(item.userQuery || '(\u7A7A\u95EE\u9898)', maxEntryChars)\n const a = truncate(item.summary || '(\u7A7A\u56DE\u7B54)', maxEntryChars)\n return `- Q: ${q}\\n A: ${a}`\n })\n const body = `## \u5DF2\u5B8C\u6210\u95EE\u9898\u6458\u8981\\n${lines.join('\\n')}`\n if (body.length <= maxTotalChars) return body\n return truncate(body, maxTotalChars)\n }\n\n persist(): boolean {\n if (!this.persistence || !this.sessionId) return false\n try {\n const state: PersistedConversationState = {\n version: PERSISTENCE_VERSION,\n sessionId: this.sessionId,\n completedQueries: this.getCompletedQueries().map(item => ({\n queryId: item.queryId,\n userMessageUUID: item.userMessageUUID,\n userQuery: item.userQuery,\n summary: item.summary,\n completedAt: item.completedAt,\n finish: item.finish,\n })),\n lastUpdatedAt: Date.now(),\n }\n this.persistence.saveSync(this.sessionId, state)\n return true\n } catch {\n return false\n }\n }\n\n restore(): boolean {\n if (!this.persistence || !this.sessionId) return false\n try {\n const state = this.persistence.loadSync(this.sessionId)\n if (!state || state.version !== PERSISTENCE_VERSION) {\n return false\n }\n this.completedQueries.clear()\n const list = Array.isArray(state.completedQueries)\n ? state.completedQueries\n : []\n for (const item of list) {\n const normalized: CompletedQuery = {\n queryId: String(item.queryId),\n userMessageUUID: String(item.userMessageUUID),\n userQuery: String(item.userQuery ?? ''),\n summary: String(item.summary ?? ''),\n completedAt: Number(item.completedAt ?? Date.now()),\n finish: item.finish as PersistedCompletedQuery['finish'],\n }\n this.completedQueries.set(normalized.queryId, normalized)\n }\n this.currentQueryId = null\n return true\n } catch {\n return false\n }\n }\n\n reset(): void {\n this.completedQueries.clear()\n this.currentQueryId = null\n }\n}\n\nexport const conversationTracker = new ConversationTracker()\n\nexport function getConversationTrackerForContext(context?: {\n conversationTracker?: ConversationTracker\n}): ConversationTracker {\n return context?.conversationTracker ?? new ConversationTracker()\n}\n\nexport function resetConversationTrackerForTests(): void {\n conversationTracker.reset()\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
|
|
|
3
3
|
import {
|
|
4
4
|
getGlobalConfig,
|
|
5
5
|
saveGlobalConfig
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2WIUQUTU.js";
|
|
7
7
|
import {
|
|
8
8
|
debug
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DYJD66YF.js";
|
|
10
10
|
import {
|
|
11
11
|
logError
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-U265OPSO.js";
|
|
13
13
|
|
|
14
14
|
// src/utils/model/index.ts
|
|
15
15
|
import { memoize } from "lodash-es";
|
|
@@ -2,10 +2,10 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
debug
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DYJD66YF.js";
|
|
6
6
|
import {
|
|
7
7
|
logError
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-U265OPSO.js";
|
|
9
9
|
|
|
10
10
|
// src/services/system/systemReminder.ts
|
|
11
11
|
var SystemReminderService = class {
|
|
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
|
|
|
3
3
|
import {
|
|
4
4
|
getSettingsFileCandidates,
|
|
5
5
|
loadSettingsWithLegacyFallback
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2AG4BTRV.js";
|
|
7
7
|
import {
|
|
8
8
|
getSessionPlugins
|
|
9
9
|
} from "./chunk-BJSWTHRM.js";
|
|
10
10
|
import {
|
|
11
11
|
getTheme
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-Y5JPSTQ4.js";
|
|
13
13
|
import {
|
|
14
14
|
addMcprcServerForTesting,
|
|
15
15
|
getCurrentProjectConfig,
|
|
@@ -19,13 +19,13 @@ import {
|
|
|
19
19
|
safeParseJSON,
|
|
20
20
|
saveCurrentProjectConfig,
|
|
21
21
|
saveGlobalConfig
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-2WIUQUTU.js";
|
|
23
23
|
import {
|
|
24
24
|
PRODUCT_COMMAND,
|
|
25
25
|
PRODUCT_NAME,
|
|
26
26
|
getCwd,
|
|
27
27
|
logMCPError
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-U265OPSO.js";
|
|
29
29
|
|
|
30
30
|
// src/services/mcp/client.ts
|
|
31
31
|
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
getSettingsFileCandidates,
|
|
9
9
|
loadSettingsWithLegacyFallback,
|
|
10
10
|
saveSettingsToPrimaryAndSyncLegacy
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-2AG4BTRV.js";
|
|
12
12
|
import {
|
|
13
13
|
getCurrentProjectConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2WIUQUTU.js";
|
|
15
15
|
import {
|
|
16
16
|
getCwd,
|
|
17
17
|
logError
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-U265OPSO.js";
|
|
19
19
|
|
|
20
20
|
// src/utils/permissions/toolPermissionSettings.ts
|
|
21
21
|
function uniqueStrings(value) {
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
PRODUCT_NAME,
|
|
5
5
|
execFileNoThrow,
|
|
6
6
|
logError
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-U265OPSO.js";
|
|
8
8
|
import {
|
|
9
9
|
MACRO
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-WBBMOYXK.js";
|
|
11
11
|
|
|
12
12
|
// src/utils/session/autoUpdater.ts
|
|
13
13
|
async function getSemver() {
|
|
@@ -82,7 +82,7 @@ async function checkAndNotifyUpdate() {
|
|
|
82
82
|
const [
|
|
83
83
|
{ isAutoUpdaterDisabled, getGlobalConfig, saveGlobalConfig },
|
|
84
84
|
{ env }
|
|
85
|
-
] = await Promise.all([import("./config-
|
|
85
|
+
] = await Promise.all([import("./config-KZHPV37P.js"), import("./env-76WAAGI6.js")]);
|
|
86
86
|
if (await isAutoUpdaterDisabled()) return;
|
|
87
87
|
if (await env.getIsDocker()) return;
|
|
88
88
|
if (!await env.hasInternetAccess()) return;
|
|
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
MACRO
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-WBBMOYXK.js";
|
|
6
6
|
|
|
7
7
|
// src/utils/state/index.ts
|
|
8
8
|
import { cwd } from "process";
|
|
@@ -1104,7 +1104,6 @@ function buildPlanModeMainReminder(args) {
|
|
|
1104
1104
|
const askUserToolName = "AskUserQuestion";
|
|
1105
1105
|
const exploreAgentType = "Explore";
|
|
1106
1106
|
const planAgentType = "Plan";
|
|
1107
|
-
const exitPlanModeToolName = "ExitPlanMode";
|
|
1108
1107
|
return `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supercedes any other instructions you have received.
|
|
1109
1108
|
|
|
1110
1109
|
## Plan File Info:
|
|
@@ -1166,9 +1165,9 @@ Goal: Write your final plan to the plan file (the only file you can edit).
|
|
|
1166
1165
|
- Ensure that the plan file is concise enough to scan quickly, but detailed enough to execute effectively
|
|
1167
1166
|
- Include the paths of critical files to be modified
|
|
1168
1167
|
|
|
1169
|
-
### Phase 5:
|
|
1170
|
-
|
|
1171
|
-
|
|
1168
|
+
### Phase 5: Wait for User
|
|
1169
|
+
When you have finished planning, inform the user that your plan is ready. The user will review your plan and decide when to exit plan mode (using the keyboard shortcut shift+tab or alt+m).
|
|
1170
|
+
Once plan mode is exited, you will be able to start implementing the plan.
|
|
1172
1171
|
|
|
1173
1172
|
NOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins.`;
|
|
1174
1173
|
}
|
|
@@ -1185,7 +1184,6 @@ You should build your plan incrementally by writing to or editing this file. NOT
|
|
|
1185
1184
|
Answer the user's query comprehensively, using the ${askUserToolName} tool if you need to ask the user clarifying questions. If you do use the ${askUserToolName}, make sure to ask all clarifying questions you need to fully understand the user's intent before proceeding.`;
|
|
1186
1185
|
}
|
|
1187
1186
|
function buildPlanModeReentryReminder(planFilePath) {
|
|
1188
|
-
const exitPlanModeToolName = "ExitPlanMode";
|
|
1189
1187
|
return `## Re-entering Plan Mode
|
|
1190
1188
|
|
|
1191
1189
|
You are returning to plan mode after having previously exited it. A plan file exists at ${planFilePath} from your previous planning session.
|
|
@@ -1196,7 +1194,7 @@ You are returning to plan mode after having previously exited it. A plan file ex
|
|
|
1196
1194
|
3. Decide how to proceed:
|
|
1197
1195
|
- **Different task**: If the user's request is for a different task\u2014even if it's similar or related\u2014start fresh by overwriting the existing plan
|
|
1198
1196
|
- **Same task, continuing**: If this is explicitly a continuation or refinement of the exact same task, modify the existing plan while cleaning up outdated or irrelevant sections
|
|
1199
|
-
4. Continue on with the plan process and most importantly you should always edit the plan file
|
|
1197
|
+
4. Continue on with the plan process and most importantly you should always edit the plan file to reflect your updated understanding
|
|
1200
1198
|
|
|
1201
1199
|
Treat this as a fresh planning session. Do not assume the existing plan is relevant without evaluating it first.`;
|
|
1202
1200
|
}
|
|
@@ -1262,11 +1260,6 @@ function isPlanModeEnabled(context) {
|
|
|
1262
1260
|
const key = getConversationKey(context);
|
|
1263
1261
|
return planModeEnabledByConversationKey.get(key) ?? false;
|
|
1264
1262
|
}
|
|
1265
|
-
function enterPlanMode(context) {
|
|
1266
|
-
const key = getConversationKey(context);
|
|
1267
|
-
planModeEnabledByConversationKey.set(key, true);
|
|
1268
|
-
return { planFilePath: getPlanFilePath(context?.agentId, key) };
|
|
1269
|
-
}
|
|
1270
1263
|
function enterPlanModeForConversationKey(conversationKey) {
|
|
1271
1264
|
planModeEnabledByConversationKey.set(conversationKey, true);
|
|
1272
1265
|
}
|
|
@@ -1329,17 +1322,6 @@ function isMainPlanFilePathForActiveConversation(path) {
|
|
|
1329
1322
|
const target = resolveExistingPath(path);
|
|
1330
1323
|
return target === expected;
|
|
1331
1324
|
}
|
|
1332
|
-
function readPlanFile(agentId, conversationKey) {
|
|
1333
|
-
const planFilePath = getPlanFilePath(agentId, conversationKey);
|
|
1334
|
-
if (!existsSync2(planFilePath)) {
|
|
1335
|
-
return { content: "", exists: false, planFilePath };
|
|
1336
|
-
}
|
|
1337
|
-
return {
|
|
1338
|
-
content: readFileSync(planFilePath, "utf8"),
|
|
1339
|
-
exists: true,
|
|
1340
|
-
planFilePath
|
|
1341
|
-
};
|
|
1342
|
-
}
|
|
1343
1325
|
|
|
1344
1326
|
// src/utils/log/index.ts
|
|
1345
1327
|
var IN_MEMORY_ERROR_LOG = [];
|
|
@@ -3267,13 +3249,11 @@ export {
|
|
|
3267
3249
|
getPlanConversationKey,
|
|
3268
3250
|
setActivePlanConversationKey,
|
|
3269
3251
|
getPlanModeSystemPromptAdditions,
|
|
3270
|
-
enterPlanMode,
|
|
3271
3252
|
enterPlanModeForConversationKey,
|
|
3272
3253
|
exitPlanModeForConversationKey,
|
|
3273
3254
|
hydratePlanSlugFromMessages,
|
|
3274
3255
|
getPlanFilePath,
|
|
3275
3256
|
isMainPlanFilePathForActiveConversation,
|
|
3276
|
-
readPlanFile,
|
|
3277
3257
|
SESSION_ID,
|
|
3278
3258
|
CACHE_PATHS,
|
|
3279
3259
|
dateToFilename,
|