pybao-cli 1.5.41 → 1.5.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/REPL-B5KZD7G5.js +51 -0
  2. package/dist/{acp-BYHN3C5Y.js → acp-TVN3WHDY.js} +30 -30
  3. package/dist/{agentsValidate-BHUYO2UO.js → agentsValidate-GHHBQ2V3.js} +7 -7
  4. package/dist/{ask-RYKEEAWK.js → ask-Q2KBAHNA.js} +30 -30
  5. package/dist/{autoUpdater-TERQML25.js → autoUpdater-65UHQALF.js} +3 -3
  6. package/dist/{chunk-T6SHIFVI.js → chunk-2ONDOJ32.js} +2 -2
  7. package/dist/{chunk-4ZPF4KPZ.js → chunk-2VA64CKU.js} +3 -3
  8. package/dist/{chunk-P7AQWPIC.js → chunk-3I5AJWST.js} +1 -1
  9. package/dist/{chunk-XUHOOFY3.js → chunk-3NASYKEW.js} +1 -1
  10. package/dist/{chunk-XUHOOFY3.js.map → chunk-3NASYKEW.js.map} +1 -1
  11. package/dist/{chunk-42NB6J75.js → chunk-5G4RB7MC.js} +1 -1
  12. package/dist/{chunk-MFEUJAJ6.js → chunk-6JEIJLDL.js} +4 -4
  13. package/dist/{chunk-P6TEUVAU.js → chunk-7ALGFH5X.js} +1 -1
  14. package/dist/{chunk-YDZM3SUX.js → chunk-DEZYDCUH.js} +24 -3
  15. package/dist/chunk-DEZYDCUH.js.map +7 -0
  16. package/dist/{chunk-ELG55TXD.js → chunk-EQBLVRTX.js} +2 -2
  17. package/dist/{chunk-J6KBWXSH.js → chunk-FINT4Z7B.js} +18 -3
  18. package/dist/chunk-FINT4Z7B.js.map +7 -0
  19. package/dist/{chunk-5BC6IN7X.js → chunk-FPJL5RXB.js} +4 -4
  20. package/dist/{chunk-ETFKDDHM.js → chunk-HMZHP623.js} +4 -4
  21. package/dist/{chunk-TINWFOBK.js → chunk-I5XULU7R.js} +3 -3
  22. package/dist/{chunk-E6G23ISX.js → chunk-LMXJDGUG.js} +1 -1
  23. package/dist/{chunk-2TJIZB3T.js → chunk-LW26RTGS.js} +1 -1
  24. package/dist/{chunk-25CGCIJ2.js → chunk-N4EHD2WQ.js} +1 -1
  25. package/dist/{chunk-ROO5DUAU.js → chunk-NVENXGF7.js} +3 -3
  26. package/dist/{chunk-OOZFZ4II.js → chunk-S2TCT35Y.js} +2 -2
  27. package/dist/{chunk-W6CMURAU.js → chunk-S3O3RCWN.js} +1 -1
  28. package/dist/{chunk-PESILDVN.js → chunk-SWH2U4BW.js} +3 -3
  29. package/dist/{chunk-5L7V2WZ2.js → chunk-SY5A3V3Q.js} +1 -1
  30. package/dist/{chunk-GJLENEC6.js → chunk-TNCM6TNK.js} +3 -3
  31. package/dist/{chunk-MDXX7D5E.js → chunk-UJHTJTTS.js} +3 -3
  32. package/dist/{chunk-64HBL64M.js → chunk-VG2Z446J.js} +4 -4
  33. package/dist/{chunk-CJYTQJWE.js → chunk-VWI4TG6L.js} +3 -3
  34. package/dist/{chunk-YOMCW22M.js → chunk-W2ZTYIRJ.js} +1 -1
  35. package/dist/{chunk-IJ6E6OZC.js → chunk-W57S56SZ.js} +2 -2
  36. package/dist/{chunk-YU7KF5XP.js → chunk-XGYRZA24.js} +3 -3
  37. package/dist/{chunk-DVNC553K.js → chunk-Y2Z256D7.js} +151 -40
  38. package/dist/{chunk-DVNC553K.js.map → chunk-Y2Z256D7.js.map} +3 -3
  39. package/dist/{chunk-CCP5INEO.js → chunk-YIQDKWRI.js} +2 -2
  40. package/dist/{chunk-R3GBNLW5.js → chunk-ZKDULVN5.js} +1 -1
  41. package/dist/{cli-BVHFXK3K.js → cli-R6FWX47L.js} +90 -90
  42. package/dist/commands-5BUFNWGW.js +55 -0
  43. package/dist/{config-ELAYWDG5.js → config-UOF22R5A.js} +4 -4
  44. package/dist/{context-ECLRI3WD.js → context-2XY2LAUJ.js} +6 -6
  45. package/dist/{conversationPersistence-4HRBBRTT.js → conversationPersistence-PWSEH5D2.js} +3 -3
  46. package/dist/{conversationTracker-NH2RUXI5.js → conversationTracker-R3PKN554.js} +4 -4
  47. package/dist/{customCommands-MDKSEI6M.js → customCommands-KRYZL5FH.js} +4 -4
  48. package/dist/{env-VHEZ3MTD.js → env-NFA6MDCD.js} +2 -2
  49. package/dist/{file-IM55NZJG.js → file-B7O6H4QE.js} +4 -4
  50. package/dist/index.js +3 -3
  51. package/dist/{llm-PBSE4RKC.js → llm-SPIGEJ2Z.js} +31 -31
  52. package/dist/{llmLazy-76CZJ77B.js → llmLazy-GPAEOXPV.js} +1 -1
  53. package/dist/{loader-ZRGJCM55.js → loader-32QKHUOK.js} +4 -4
  54. package/dist/{lsp-2AHSI2Y2.js → lsp-VMFAYCLW.js} +6 -6
  55. package/dist/{lspAnchor-QN3DVLH3.js → lspAnchor-MLXUGBLJ.js} +6 -6
  56. package/dist/{mcp-D2GC7PSF.js → mcp-PLCRLS5A.js} +7 -7
  57. package/dist/{mentionProcessor-IWJHDSEF.js → mentionProcessor-DFTGT52F.js} +5 -5
  58. package/dist/{messages-OJVP7RAX.js → messages-TKAHXVGJ.js} +1 -1
  59. package/dist/{model-EW2KADZ6.js → model-EWO655R3.js} +5 -5
  60. package/dist/{openai-ZLWBSZX7.js → openai-DM5CXIXZ.js} +5 -5
  61. package/dist/{outputStyles-L6BWMBZB.js → outputStyles-XJXX5ZXG.js} +4 -4
  62. package/dist/{pluginRuntime-6ELJ4DXC.js → pluginRuntime-WVEONLK3.js} +6 -6
  63. package/dist/{pluginValidation-52CI72QJ.js → pluginValidation-AQWVJ7FK.js} +6 -6
  64. package/dist/prompts-MYXXJHIA.js +57 -0
  65. package/dist/{pybAgentSessionLoad-PKHIH5HB.js → pybAgentSessionLoad-4PHU7OTN.js} +4 -4
  66. package/dist/{pybAgentSessionResume-TFFRN7D2.js → pybAgentSessionResume-CS3E6FIE.js} +4 -4
  67. package/dist/{pybAgentStreamJsonSession-SOIPUIHK.js → pybAgentStreamJsonSession-PYZMFK7D.js} +1 -1
  68. package/dist/{pybHooks-KAN6F4X6.js → pybHooks-JPX6L4HI.js} +4 -4
  69. package/dist/query-TFHNPQ35.js +55 -0
  70. package/dist/{registry-VGL5C5HH.js → registry-MBEH554P.js} +5 -5
  71. package/dist/{ripgrep-AOZSQEU2.js → ripgrep-XKTM64PS.js} +3 -3
  72. package/dist/{skillMarketplace-FMJO5HWV.js → skillMarketplace-APD57VBX.js} +3 -3
  73. package/dist/{state-TCUKXHFJ.js → state-2QEHOVTA.js} +2 -2
  74. package/dist/{theme-5FTOATYN.js → theme-NGDPNTUX.js} +5 -5
  75. package/dist/{toolPermissionSettings-AXTFD5X3.js → toolPermissionSettings-RLNPVOBI.js} +6 -6
  76. package/dist/tools-U345EBHA.js +55 -0
  77. package/dist/{userInput-US2VBO57.js → userInput-6ASB72OS.js} +32 -32
  78. package/package.json +1 -1
  79. package/dist/REPL-Q6TL36A6.js +0 -51
  80. package/dist/chunk-J6KBWXSH.js.map +0 -7
  81. package/dist/chunk-YDZM3SUX.js.map +0 -7
  82. package/dist/commands-D4GXROJJ.js +0 -55
  83. package/dist/prompts-6RORXE4W.js +0 -57
  84. package/dist/query-VVHK27CB.js +0 -55
  85. package/dist/tools-6MYVTXDI.js +0 -55
  86. /package/dist/{REPL-Q6TL36A6.js.map → REPL-B5KZD7G5.js.map} +0 -0
  87. /package/dist/{acp-BYHN3C5Y.js.map → acp-TVN3WHDY.js.map} +0 -0
  88. /package/dist/{agentsValidate-BHUYO2UO.js.map → agentsValidate-GHHBQ2V3.js.map} +0 -0
  89. /package/dist/{ask-RYKEEAWK.js.map → ask-Q2KBAHNA.js.map} +0 -0
  90. /package/dist/{autoUpdater-TERQML25.js.map → autoUpdater-65UHQALF.js.map} +0 -0
  91. /package/dist/{chunk-T6SHIFVI.js.map → chunk-2ONDOJ32.js.map} +0 -0
  92. /package/dist/{chunk-4ZPF4KPZ.js.map → chunk-2VA64CKU.js.map} +0 -0
  93. /package/dist/{chunk-P7AQWPIC.js.map → chunk-3I5AJWST.js.map} +0 -0
  94. /package/dist/{chunk-42NB6J75.js.map → chunk-5G4RB7MC.js.map} +0 -0
  95. /package/dist/{chunk-MFEUJAJ6.js.map → chunk-6JEIJLDL.js.map} +0 -0
  96. /package/dist/{chunk-P6TEUVAU.js.map → chunk-7ALGFH5X.js.map} +0 -0
  97. /package/dist/{chunk-ELG55TXD.js.map → chunk-EQBLVRTX.js.map} +0 -0
  98. /package/dist/{chunk-5BC6IN7X.js.map → chunk-FPJL5RXB.js.map} +0 -0
  99. /package/dist/{chunk-ETFKDDHM.js.map → chunk-HMZHP623.js.map} +0 -0
  100. /package/dist/{chunk-TINWFOBK.js.map → chunk-I5XULU7R.js.map} +0 -0
  101. /package/dist/{chunk-E6G23ISX.js.map → chunk-LMXJDGUG.js.map} +0 -0
  102. /package/dist/{chunk-2TJIZB3T.js.map → chunk-LW26RTGS.js.map} +0 -0
  103. /package/dist/{chunk-25CGCIJ2.js.map → chunk-N4EHD2WQ.js.map} +0 -0
  104. /package/dist/{chunk-ROO5DUAU.js.map → chunk-NVENXGF7.js.map} +0 -0
  105. /package/dist/{chunk-OOZFZ4II.js.map → chunk-S2TCT35Y.js.map} +0 -0
  106. /package/dist/{chunk-W6CMURAU.js.map → chunk-S3O3RCWN.js.map} +0 -0
  107. /package/dist/{chunk-PESILDVN.js.map → chunk-SWH2U4BW.js.map} +0 -0
  108. /package/dist/{chunk-5L7V2WZ2.js.map → chunk-SY5A3V3Q.js.map} +0 -0
  109. /package/dist/{chunk-GJLENEC6.js.map → chunk-TNCM6TNK.js.map} +0 -0
  110. /package/dist/{chunk-MDXX7D5E.js.map → chunk-UJHTJTTS.js.map} +0 -0
  111. /package/dist/{chunk-64HBL64M.js.map → chunk-VG2Z446J.js.map} +0 -0
  112. /package/dist/{chunk-CJYTQJWE.js.map → chunk-VWI4TG6L.js.map} +0 -0
  113. /package/dist/{chunk-YOMCW22M.js.map → chunk-W2ZTYIRJ.js.map} +0 -0
  114. /package/dist/{chunk-IJ6E6OZC.js.map → chunk-W57S56SZ.js.map} +0 -0
  115. /package/dist/{chunk-YU7KF5XP.js.map → chunk-XGYRZA24.js.map} +0 -0
  116. /package/dist/{chunk-CCP5INEO.js.map → chunk-YIQDKWRI.js.map} +0 -0
  117. /package/dist/{chunk-R3GBNLW5.js.map → chunk-ZKDULVN5.js.map} +0 -0
  118. /package/dist/{cli-BVHFXK3K.js.map → cli-R6FWX47L.js.map} +0 -0
  119. /package/dist/{commands-D4GXROJJ.js.map → commands-5BUFNWGW.js.map} +0 -0
  120. /package/dist/{config-ELAYWDG5.js.map → config-UOF22R5A.js.map} +0 -0
  121. /package/dist/{context-ECLRI3WD.js.map → context-2XY2LAUJ.js.map} +0 -0
  122. /package/dist/{conversationPersistence-4HRBBRTT.js.map → conversationPersistence-PWSEH5D2.js.map} +0 -0
  123. /package/dist/{conversationTracker-NH2RUXI5.js.map → conversationTracker-R3PKN554.js.map} +0 -0
  124. /package/dist/{customCommands-MDKSEI6M.js.map → customCommands-KRYZL5FH.js.map} +0 -0
  125. /package/dist/{env-VHEZ3MTD.js.map → env-NFA6MDCD.js.map} +0 -0
  126. /package/dist/{file-IM55NZJG.js.map → file-B7O6H4QE.js.map} +0 -0
  127. /package/dist/{llm-PBSE4RKC.js.map → llm-SPIGEJ2Z.js.map} +0 -0
  128. /package/dist/{llmLazy-76CZJ77B.js.map → llmLazy-GPAEOXPV.js.map} +0 -0
  129. /package/dist/{loader-ZRGJCM55.js.map → loader-32QKHUOK.js.map} +0 -0
  130. /package/dist/{lsp-2AHSI2Y2.js.map → lsp-VMFAYCLW.js.map} +0 -0
  131. /package/dist/{lspAnchor-QN3DVLH3.js.map → lspAnchor-MLXUGBLJ.js.map} +0 -0
  132. /package/dist/{mcp-D2GC7PSF.js.map → mcp-PLCRLS5A.js.map} +0 -0
  133. /package/dist/{mentionProcessor-IWJHDSEF.js.map → mentionProcessor-DFTGT52F.js.map} +0 -0
  134. /package/dist/{messages-OJVP7RAX.js.map → messages-TKAHXVGJ.js.map} +0 -0
  135. /package/dist/{model-EW2KADZ6.js.map → model-EWO655R3.js.map} +0 -0
  136. /package/dist/{openai-ZLWBSZX7.js.map → openai-DM5CXIXZ.js.map} +0 -0
  137. /package/dist/{outputStyles-L6BWMBZB.js.map → outputStyles-XJXX5ZXG.js.map} +0 -0
  138. /package/dist/{pluginRuntime-6ELJ4DXC.js.map → pluginRuntime-WVEONLK3.js.map} +0 -0
  139. /package/dist/{pluginValidation-52CI72QJ.js.map → pluginValidation-AQWVJ7FK.js.map} +0 -0
  140. /package/dist/{prompts-6RORXE4W.js.map → prompts-MYXXJHIA.js.map} +0 -0
  141. /package/dist/{pybAgentSessionLoad-PKHIH5HB.js.map → pybAgentSessionLoad-4PHU7OTN.js.map} +0 -0
  142. /package/dist/{pybAgentSessionResume-TFFRN7D2.js.map → pybAgentSessionResume-CS3E6FIE.js.map} +0 -0
  143. /package/dist/{pybAgentStreamJsonSession-SOIPUIHK.js.map → pybAgentStreamJsonSession-PYZMFK7D.js.map} +0 -0
  144. /package/dist/{pybHooks-KAN6F4X6.js.map → pybHooks-JPX6L4HI.js.map} +0 -0
  145. /package/dist/{query-VVHK27CB.js.map → query-TFHNPQ35.js.map} +0 -0
  146. /package/dist/{registry-VGL5C5HH.js.map → registry-MBEH554P.js.map} +0 -0
  147. /package/dist/{ripgrep-AOZSQEU2.js.map → ripgrep-XKTM64PS.js.map} +0 -0
  148. /package/dist/{skillMarketplace-FMJO5HWV.js.map → skillMarketplace-APD57VBX.js.map} +0 -0
  149. /package/dist/{state-TCUKXHFJ.js.map → state-2QEHOVTA.js.map} +0 -0
  150. /package/dist/{theme-5FTOATYN.js.map → theme-NGDPNTUX.js.map} +0 -0
  151. /package/dist/{toolPermissionSettings-AXTFD5X3.js.map → toolPermissionSettings-RLNPVOBI.js.map} +0 -0
  152. /package/dist/{tools-6MYVTXDI.js.map → tools-U345EBHA.js.map} +0 -0
  153. /package/dist/{userInput-US2VBO57.js.map → userInput-6ASB72OS.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/messages/core.ts", "../src/services/ai/llmConstants.ts", "../src/services/telemetry/eventBus.ts", "../src/utils/session/autoCompactMetrics.ts", "../src/utils/session/autoCompactMetricsSink.ts", "../src/services/telemetry/autoCompactTelemetry.ts", "../src/utils/messages/index.ts"],
4
+ "sourcesContent": ["import { createHash, randomUUID, UUID } from 'crypto'\nimport { AssistantMessage, Message, ProgressMessage, UserMessage } from '@query'\nimport { last, memoize } from 'lodash-es'\nimport type { Tool } from '@tool'\nimport { NO_CONTENT_MESSAGE } from '@services/llmConstants'\nimport {\n ImageBlockParam,\n TextBlockParam,\n ToolResultBlockParam,\n ToolUseBlockParam,\n Message as APIMessage,\n ContentBlockParam,\n ContentBlock,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { emitAutoCompactTelemetryEvent } from '@services/telemetry/autoCompactTelemetry'\n\nexport const INTERRUPT_MESSAGE = '[Request interrupted by user]'\nexport const INTERRUPT_MESSAGE_FOR_TOOL_USE =\n '[Request interrupted by user for tool use]'\nexport const CANCEL_MESSAGE =\n \"The user doesn't want to take this action right now. STOP what you are doing and wait for the user to tell you how to proceed.\"\nexport const REJECT_MESSAGE =\n \"The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.\"\nexport const REJECT_MESSAGE_WITH_FEEDBACK_PREFIX = `The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). To tell you how to proceed, the user said:\\n`\nexport const REJECTED_PLAN_PREFIX = `The agent proposed a plan that was rejected by the user. The user chose to stay in plan mode rather than proceed with implementation.\\n\\nRejected plan:\\n`\nexport const NO_RESPONSE_REQUESTED = 'No response requested.'\n\nexport const SYNTHETIC_ASSISTANT_MESSAGES = new Set([\n INTERRUPT_MESSAGE,\n INTERRUPT_MESSAGE_FOR_TOOL_USE,\n CANCEL_MESSAGE,\n REJECT_MESSAGE,\n NO_RESPONSE_REQUESTED,\n])\n\nfunction stableUuidFromSeed(seed: string): UUID {\n const hex = createHash('sha256').update(seed).digest('hex').slice(0, 32)\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}` as UUID\n}\n\nfunction baseCreateAssistantMessage(\n content: ContentBlock[],\n extra?: Partial<AssistantMessage>,\n): AssistantMessage {\n return {\n type: 'assistant',\n costUSD: 0,\n durationMs: 0,\n uuid: randomUUID(),\n message: {\n id: randomUUID(),\n model: '<synthetic>',\n role: 'assistant',\n stop_reason: 'stop_sequence',\n stop_sequence: '',\n type: 'message',\n usage: {\n input_tokens: 0,\n output_tokens: 0,\n cache_creation_input_tokens: 0,\n cache_read_input_tokens: 0,\n },\n content,\n },\n ...extra,\n }\n}\n\nexport function createAssistantMessage(content: string): AssistantMessage {\n return baseCreateAssistantMessage([\n {\n type: 'text' as const,\n text: content === '' ? NO_CONTENT_MESSAGE : content,\n citations: [],\n },\n ])\n}\n\nexport function createAssistantAPIErrorMessage(\n content: string,\n): AssistantMessage {\n return baseCreateAssistantMessage(\n [\n {\n type: 'text' as const,\n text: content === '' ? NO_CONTENT_MESSAGE : content,\n citations: [],\n },\n ],\n { isApiErrorMessage: true },\n )\n}\n\nexport type FullToolUseResult = {\n data: unknown\n resultForAssistant: ToolResultBlockParam['content']\n newMessages?: Message[]\n contextModifier?: { modifyContext: (ctx: any) => any }\n}\n\nfunction createUserTextBlocks(content: string): ContentBlockParam[] {\n return [{ type: 'text', text: content }]\n}\n\nexport function createUserMessageFromBlocks(\n content: ContentBlockParam[],\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m: UserMessage = {\n type: 'user',\n message: {\n role: 'user',\n content,\n },\n uuid: randomUUID(),\n toolUseResult,\n options: {\n contentInputPath: 'blocks',\n },\n }\n return m\n}\n\nexport function createUserMessageFromText(\n content: string,\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m: UserMessage = {\n type: 'user',\n message: {\n role: 'user',\n content: createUserTextBlocks(content),\n },\n uuid: randomUUID(),\n toolUseResult,\n options: {\n contentInputPath: 'blocks',\n },\n }\n return m\n}\n\nexport function generateQueryId(): string {\n return randomUUID()\n}\n\nexport function createUserTurnMessageFromBlocks(\n content: ContentBlockParam[],\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m = createUserMessageFromBlocks(content, toolUseResult)\n m.queryId = generateQueryId()\n return m\n}\n\nexport function createUserTurnMessageFromText(\n content: string,\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m = createUserMessageFromText(content, toolUseResult)\n m.queryId = generateQueryId()\n return m\n}\n\nexport function createProgressMessage(\n toolUseID: string,\n siblingToolUseIDs: Set<string>,\n content: AssistantMessage,\n normalizedMessages: NormalizedMessage[],\n tools: Tool[],\n meta?: {\n progressState?: 'queued_waiting' | 'running' | 'unknown'\n },\n): ProgressMessage {\n return {\n type: 'progress',\n content,\n normalizedMessages,\n siblingToolUseIDs,\n tools,\n toolUseID,\n progressState: meta?.progressState ?? 'unknown',\n uuid: randomUUID(),\n }\n}\n\nexport function filterProgressMessagesForTools(\n messages: NormalizedMessage[],\n toolNames: Set<string>,\n): NormalizedMessage[] {\n const toolUseIds = new Set<string>()\n for (const message of messages) {\n if (message.type !== 'assistant') continue\n const block = message.message.content[0]\n if (!isToolUseLikeBlockParam(block)) continue\n if (toolNames.has(block.name)) {\n toolUseIds.add(block.id)\n }\n }\n if (toolUseIds.size === 0) return messages\n return messages.filter(\n message => message.type !== 'progress' || !toolUseIds.has(message.toolUseID),\n )\n}\n\nexport function createToolResultStopMessage(\n toolUseID: string,\n): ToolResultBlockParam {\n return {\n type: 'tool_result',\n content: CANCEL_MESSAGE,\n is_error: true,\n tool_use_id: toolUseID,\n }\n}\n\nexport function extractTagFromMessage(\n message: Message,\n tagName: string,\n): string | null {\n if (message.type === 'progress') {\n return null\n }\n if (typeof message.message.content !== 'string') {\n return null\n }\n return extractTag(message.message.content, tagName)\n}\n\nexport function extractTag(html: string, tagName: string): string | null {\n if (!html.trim() || !tagName.trim()) {\n return null\n }\n\n const escapedTag = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n const pattern = new RegExp(\n `<${escapedTag}(?:\\\\s+[^>]*)?>` + '([\\\\s\\\\S]*?)' + `<\\\\/${escapedTag}>`,\n 'gi',\n )\n\n let match\n let depth = 0\n let lastIndex = 0\n const openingTag = new RegExp(`<${escapedTag}(?:\\\\s+[^>]*?)?>`, 'gi')\n const closingTag = new RegExp(`<\\\\/${escapedTag}>`, 'gi')\n\n while ((match = pattern.exec(html)) !== null) {\n const content = match[1]\n const beforeMatch = html.slice(lastIndex, match.index)\n\n depth = 0\n\n openingTag.lastIndex = 0\n while (openingTag.exec(beforeMatch) !== null) {\n depth++\n }\n\n closingTag.lastIndex = 0\n while (closingTag.exec(beforeMatch) !== null) {\n depth--\n }\n\n if (depth === 0 && content) {\n return content\n }\n\n lastIndex = match.index + match[0].length\n }\n\n return null\n}\n\nexport function isNotEmptyMessage(message: Message): boolean {\n if (message.type === 'progress') {\n return true\n }\n\n if (typeof message.message.content === 'string') {\n return message.message.content.trim().length > 0\n }\n\n if (message.message.content.length === 0) {\n return false\n }\n\n if (message.message.content.length > 1) {\n return true\n }\n\n if (message.message.content[0]!.type !== 'text') {\n return true\n }\n\n return (\n message.message.content[0]!.text.trim().length > 0 &&\n message.message.content[0]!.text !== NO_CONTENT_MESSAGE &&\n message.message.content[0]!.text !== INTERRUPT_MESSAGE_FOR_TOOL_USE\n )\n}\n\ntype NormalizedUserMessage = {\n message: {\n content: [\n | TextBlockParam\n | ImageBlockParam\n | ToolUseBlockParam\n | ToolResultBlockParam,\n ]\n role: 'user'\n }\n type: 'user'\n uuid: UUID\n}\n\nexport type NormalizedMessage =\n | NormalizedUserMessage\n | AssistantMessage\n | ProgressMessage\n\nexport function normalizeMessages(messages: Message[]): NormalizedMessage[] {\n return messages.flatMap(message => {\n if (message.type === 'progress') {\n return [message] as NormalizedMessage[]\n }\n if (typeof message.message.content === 'string') {\n return [message] as NormalizedMessage[]\n }\n const contentBlocks = message.message.content.filter(\n block =>\n !(\n block.type === 'thinking' &&\n (typeof (block as any).thinking !== 'string' ||\n (block as any).thinking.trim().length === 0)\n ),\n )\n\n return contentBlocks.map((block, blockIndex) => {\n switch (message.type) {\n case 'assistant':\n const baseSeed = String(\n (message as any).uuid ??\n (message as any).message?.id ??\n randomUUID(),\n )\n return {\n type: 'assistant',\n uuid: stableUuidFromSeed(`${baseSeed}:${blockIndex}`),\n message: {\n ...message.message,\n content: [block],\n },\n costUSD:\n (message as AssistantMessage).costUSD / contentBlocks.length,\n durationMs: (message as AssistantMessage).durationMs,\n } as NormalizedMessage\n case 'user':\n return message as NormalizedUserMessage\n }\n })\n })\n}\n\ntype ToolUseRequestMessage = AssistantMessage & {\n message: { content: any[] }\n}\n\ntype ToolUseLikeBlockParam = ToolUseBlockParam & {\n type: 'tool_use' | 'server_tool_use' | 'mcp_tool_use'\n}\n\nfunction isToolUseLikeBlockParam(block: any): block is ToolUseLikeBlockParam {\n return (\n block &&\n typeof block === 'object' &&\n (block.type === 'tool_use' ||\n block.type === 'server_tool_use' ||\n block.type === 'mcp_tool_use') &&\n typeof block.id === 'string'\n )\n}\n\nfunction isToolUseRequestMessage(\n message: Message,\n): message is ToolUseRequestMessage {\n return (\n message.type === 'assistant' &&\n 'costUSD' in message &&\n message.message.content.some(isToolUseLikeBlockParam)\n )\n}\n\nexport function reorderMessages(\n messages: NormalizedMessage[],\n): NormalizedMessage[] {\n const ms: NormalizedMessage[] = []\n const toolUseMessages: ToolUseRequestMessage[] = []\n\n for (const message of messages) {\n if (isToolUseRequestMessage(message)) {\n toolUseMessages.push(message)\n }\n\n if (message.type === 'progress') {\n const existingProgressMessage = ms.find(\n _ => _.type === 'progress' && _.toolUseID === message.toolUseID,\n )\n if (existingProgressMessage) {\n ms[ms.indexOf(existingProgressMessage)] = message\n continue\n }\n const toolUseMessage = toolUseMessages.find(\n _ => _.message.content[0]?.id === message.toolUseID,\n )\n if (toolUseMessage) {\n ms.splice(ms.indexOf(toolUseMessage) + 1, 0, message)\n continue\n }\n }\n\n if (\n message.type === 'user' &&\n Array.isArray(message.message.content) &&\n message.message.content[0]?.type === 'tool_result'\n ) {\n const toolUseID = (message.message.content[0] as ToolResultBlockParam)\n ?.tool_use_id\n\n const lastProgressMessage = ms.find(\n _ => _.type === 'progress' && _.toolUseID === toolUseID,\n )\n if (lastProgressMessage) {\n ms.splice(ms.indexOf(lastProgressMessage) + 1, 0, message)\n continue\n }\n\n const toolUseMessage = toolUseMessages.find(\n _ => _.message.content[0]?.id === toolUseID,\n )\n if (toolUseMessage) {\n ms.splice(ms.indexOf(toolUseMessage) + 1, 0, message)\n continue\n }\n }\n\n else {\n ms.push(message)\n }\n }\n\n return ms\n}\n\nconst getToolResultIDs = memoize(\n (normalizedMessages: NormalizedMessage[]): { [toolUseID: string]: boolean } =>\n Object.fromEntries(\n normalizedMessages.flatMap(_ =>\n _.type === 'user' && _.message.content[0]?.type === 'tool_result'\n ? [\n [\n _.message.content[0]!.tool_use_id,\n _.message.content[0]!.is_error ?? false,\n ],\n ]\n : ([] as [string, boolean][]),\n ),\n ),\n)\n\nexport function getUnresolvedToolUseIDs(\n normalizedMessages: NormalizedMessage[],\n): Set<string> {\n const toolResults = getToolResultIDs(normalizedMessages)\n return new Set(\n normalizedMessages\n .filter(\n (\n _,\n ): _ is AssistantMessage & {\n message: { content: [ToolUseLikeBlockParam] }\n } =>\n _.type === 'assistant' &&\n Array.isArray(_.message.content) &&\n isToolUseLikeBlockParam(_.message.content[0]) &&\n !(_.message.content[0].id in toolResults),\n )\n .map(_ => _.message.content[0].id),\n )\n}\n\nexport function getInProgressToolUseIDs(\n normalizedMessages: NormalizedMessage[],\n): Set<string> {\n const unresolvedToolUseIDs = getUnresolvedToolUseIDs(normalizedMessages)\n\n function isQueuedWaitingProgressMessage(message: NormalizedMessage): boolean {\n if (message.type !== 'progress') return false\n if (message.progressState === 'queued_waiting') return true\n return false\n }\n\n const toolUseIDsThatHaveProgressMessages = new Set(\n normalizedMessages\n .filter(\n (_): _ is ProgressMessage =>\n _.type === 'progress' && !isQueuedWaitingProgressMessage(_),\n )\n .map(_ => _.toolUseID),\n )\n return new Set(\n (\n normalizedMessages.filter(_ => {\n if (_.type !== 'assistant') {\n return false\n }\n const firstBlock = _.message.content[0]\n if (!isToolUseLikeBlockParam(firstBlock)) return false\n const toolUseID = firstBlock.id\n if (toolUseID === unresolvedToolUseIDs.values().next().value) {\n return true\n }\n\n if (\n toolUseIDsThatHaveProgressMessages.has(toolUseID) &&\n unresolvedToolUseIDs.has(toolUseID)\n ) {\n return true\n }\n\n return false\n }) as AssistantMessage[]\n ).map(_ => (_.message.content[0]! as ToolUseBlockParam).id),\n )\n}\n\nexport function getErroredToolUseMessages(\n normalizedMessages: NormalizedMessage[],\n): AssistantMessage[] {\n const toolResults = getToolResultIDs(normalizedMessages)\n return normalizedMessages.filter(\n _ =>\n _.type === 'assistant' &&\n Array.isArray(_.message.content) &&\n isToolUseLikeBlockParam(_.message.content[0]) &&\n _.message.content[0].id in toolResults &&\n toolResults[_.message.content[0].id],\n ) as AssistantMessage[]\n}\n\nexport function normalizeMessagesForAPI(\n messages: Message[],\n): (UserMessage | AssistantMessage)[] {\n let partPreserveCount = 0\n const partDowngradeCount = 0\n const partClearCount = 0\n const partTrimOrderValid = true\n\n function isSyntheticApiErrorMessage(message: Message): boolean {\n return (\n message.type === 'assistant' &&\n message.isApiErrorMessage === true &&\n message.message.model === '<synthetic>'\n )\n }\n\n function normalizeUserContent(\n content: UserMessage['message']['content'],\n ): ContentBlockParam[] {\n function preservePartFields(part: ContentBlockParam): ContentBlockParam {\n if ((part as any)?.type !== 'tool_result') {\n return part\n }\n partPreserveCount += 1\n const toolResult = part as any\n return {\n ...toolResult,\n tool_use_id: toolResult.tool_use_id,\n status: toolResult.status,\n errors: toolResult.errors,\n }\n }\n\n const applyPartLevelPipeline = (part: ContentBlockParam): ContentBlockParam => {\n const preserved = preservePartFields(part)\n return preserved\n }\n\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }].map(applyPartLevelPipeline)\n }\n return content.map(applyPartLevelPipeline)\n }\n\n function toolResultsFirst(content: ContentBlockParam[]): ContentBlockParam[] {\n const toolResults: ContentBlockParam[] = []\n const rest: ContentBlockParam[] = []\n for (const block of content) {\n if (block.type === 'tool_result') {\n toolResults.push(block)\n } else {\n rest.push(block)\n }\n }\n return [...toolResults, ...rest]\n }\n\n function mergeUserMessages(\n base: UserMessage,\n next: UserMessage,\n ): UserMessage {\n const baseBlocks = normalizeUserContent(base.message.content)\n const nextBlocks = normalizeUserContent(next.message.content)\n return {\n ...base,\n message: {\n ...base.message,\n content: toolResultsFirst([...baseBlocks, ...nextBlocks]),\n },\n }\n }\n\n function isUserToolResultMessage(message: Message): message is UserMessage {\n if (message.type !== 'user') return false\n if (!Array.isArray(message.message.content)) return false\n return message.message.content.some(block => block.type === 'tool_result')\n }\n\n const result: (UserMessage | AssistantMessage)[] = []\n let userStringContentCount = 0\n let totalUserContentCount = 0\n let userMergeCount = 0\n let toolResultMergeCount = 0\n let boundaryGuardHitCount = 0\n let crossTurnUserMergeBlockCount = 0\n for (const message of messages) {\n if (message.type === 'progress') continue\n if (isSyntheticApiErrorMessage(message)) continue\n\n switch (message.type) {\n case 'user': {\n totalUserContentCount += 1\n if (typeof message.message.content === 'string') {\n userStringContentCount += 1\n }\n const prev = last(result)\n if (\n prev?.type === 'user' &&\n isUserToolResultMessage(prev) &&\n isUserToolResultMessage(message)\n ) {\n toolResultMergeCount += 1\n result[result.indexOf(prev)] = mergeUserMessages(prev, message)\n } else {\n if (prev?.type === 'user') {\n boundaryGuardHitCount += 1\n crossTurnUserMergeBlockCount += 1\n }\n result.push({\n ...message,\n message: {\n ...message.message,\n content: normalizeUserContent(message.message.content),\n },\n })\n }\n break\n }\n case 'assistant': {\n let merged = false\n for (let i = result.length - 1; i >= 0; i--) {\n const prev = result[i]\n if (prev.type !== 'assistant' && !isUserToolResultMessage(prev)) {\n break\n }\n if (prev.type === 'assistant') {\n if (prev.message.id === message.message.id) {\n result[i] = {\n ...prev,\n message: {\n ...prev.message,\n content: [\n ...(Array.isArray(prev.message.content)\n ? prev.message.content\n : []),\n ...(Array.isArray(message.message.content)\n ? message.message.content\n : []),\n ],\n },\n }\n merged = true\n }\n break\n }\n }\n if (!merged) {\n result.push(message)\n }\n break\n }\n }\n }\n\n emitAutoCompactTelemetryEvent('MESSAGE_USER_CONTENT_ADAPTED', {\n totalUserContentCount,\n userStringContentCount,\n user_merge_count: userMergeCount,\n tool_result_merge_count: toolResultMergeCount,\n part_preserve_count: partPreserveCount,\n part_downgrade_count: partDowngradeCount,\n part_clear_count: partClearCount,\n part_trim_order_valid: partTrimOrderValid,\n string_input_path_usage_rate:\n totalUserContentCount > 0 ? userStringContentCount / totalUserContentCount : 0,\n })\n emitAutoCompactTelemetryEvent('BOUNDARY_NORMALIZE_GUARD_APPLIED', {\n applied: boundaryGuardHitCount > 0,\n boundary_guard_hit_count: boundaryGuardHitCount,\n cross_turn_user_merge_block_count: crossTurnUserMergeBlockCount,\n })\n\n return result\n}\n\nexport function normalizeContentFromAPI(\n content: APIMessage['content'],\n): APIMessage['content'] {\n const filteredContent = content.filter(\n _ => _.type !== 'text' || _.text.trim().length > 0,\n )\n\n if (filteredContent.length === 0) {\n return [{ type: 'text', text: NO_CONTENT_MESSAGE, citations: [] }]\n }\n\n return filteredContent\n}\n\nexport function isEmptyMessageText(text: string): boolean {\n return (\n stripSystemMessages(text).trim() === '' ||\n text.trim() === NO_CONTENT_MESSAGE\n )\n}\nconst STRIPPED_TAGS = [\n 'commit_analysis',\n 'context',\n 'function_analysis',\n 'pr_analysis',\n]\n\nexport function stripSystemMessages(content: string): string {\n const regex = new RegExp(`<(${STRIPPED_TAGS.join('|')})>.*?</\\\\1>\\n?`, 'gs')\n return content.replace(regex, '').trim()\n}\n\nexport function getToolUseID(message: NormalizedMessage): string | null {\n switch (message.type) {\n case 'assistant':\n return isToolUseLikeBlockParam(message.message.content[0])\n ? message.message.content[0].id\n : null\n case 'user':\n if (message.message.content[0]?.type !== 'tool_result') {\n return null\n }\n return message.message.content[0].tool_use_id\n case 'progress':\n return message.toolUseID\n }\n}\n\nexport function getLastAssistantMessageId(\n messages: Message[],\n): string | undefined {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (message && message.type === 'assistant') {\n return message.message.id\n }\n }\n return undefined\n}\n", "export const API_ERROR_MESSAGE_PREFIX = 'API Error'\nexport const PROMPT_TOO_LONG_ERROR_MESSAGE = 'Prompt is too long'\nexport const CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE = 'Credit balance is too low'\nexport const INVALID_API_KEY_ERROR_MESSAGE =\n 'Invalid API key \u00B7 Please run /login'\nexport const NO_CONTENT_MESSAGE = '(no content)'\n\nexport const MAIN_QUERY_TEMPERATURE = 1\n", "export type TelemetryEvent = {\n channel: string\n phase: string\n data?: Record<string, any>\n timestamp: number\n}\n\ntype TelemetryListener = (event: TelemetryEvent) => void\n\nconst listeners = new Map<string, TelemetryListener>()\n\nexport function registerTelemetryListener(\n listenerId: string,\n listener: TelemetryListener,\n) {\n listeners.set(listenerId, listener)\n}\n\nexport function unregisterTelemetryListener(listenerId: string) {\n listeners.delete(listenerId)\n}\n\nexport function emitTelemetryEvent(event: TelemetryEvent) {\n for (const listener of listeners.values()) {\n listener(event)\n }\n}\n\nexport function clearTelemetryListeners() {\n listeners.clear()\n}\n\n", "type EventRecord = {\n phase: string\n data?: Record<string, any>\n}\n\nexport type AutoCompactMetrics = {\n compact_invalid_shape_rate: number\n compact_retry_success_rate: number\n thinking_first_ratio: number\n cross_model_replay_error_rate: number\n structured_primary_path_rate?: number\n structured_semantic_coverage_rate?: number\n typed_primary_path_rate?: number\n typed_contract_fail_rate?: number\n recoverable_failure_rate?: number\n retry_exhausted_rate?: number\n status_compensation_failure_rate?: number\n compaction_boundary_hit_rate?: number\n boundary_pair_match_rate?: number\n boundary_false_cut_rate?: number\n post_cut_goal_adherence_rate?: number\n noise_ratio_after_compaction?: number\n task_goal_retention_rate?: number\n result_fidelity_rate?: number\n error_fidelity_rate?: number\n first_turn_drift_rate?: number\n turn_drift_rate?: number\n stale_instruction_revisit_rate?: number\n latest_user_goal_adherence_rate?: number\n tracker_restore_integrity_issue_rate?: number\n string_input_path_usage_rate?: number\n prune_marker_coverage_rate?: number\n compacted_index_integrity_rate?: number\n post_prune_noise_ratio?: number\n tool_output_aging_hit_rate?: number\n tool_output_placeholder_hit_rate?: number\n tool_output_token_reduction_rate?: number\n dangling_tool_closure_rate?: number\n w11_sample_pass_rate?: number\n w14_sample_pass_rate?: number\n cache_chain_trace_rate?: number\n continuation_injected_rate?: number\n replay_hit_rate?: number\n replay_dedup_skip_rate?: number\n post_compaction_first_turn_drift_rate?: number\n}\n\nfunction safeDivide(numerator: number, denominator: number): number {\n if (denominator <= 0) return 0\n return numerator / denominator\n}\n\nexport function computeAutoCompactMetrics(events: EventRecord[]): AutoCompactMetrics {\n const failedEvents = events.filter(event => event.phase === 'AUTO_COMPACT_FAILED')\n const retryEvents = events.filter(event => event.phase === 'AUTO_COMPACT_RETRY')\n const fallbackEvents = events.filter(event => event.phase === 'AUTO_COMPACT_FALLBACK')\n\n const invalidShapeFailures = failedEvents.filter(\n event => event.data?.failureType === 'invalid_content_shape',\n ).length\n const compact_invalid_shape_rate = safeDivide(\n invalidShapeFailures,\n failedEvents.length,\n )\n\n const retrySuccessSignals = fallbackEvents.length\n const compact_retry_success_rate = safeDivide(\n retrySuccessSignals,\n retryEvents.length + fallbackEvents.length,\n )\n\n const transformAppliedEvents = events.filter(\n event => event.phase === 'MESSAGE_TRANSFORM_APPLIED',\n )\n const thinkingFirstCount = transformAppliedEvents.filter(event => {\n const stats = event.data?.outputBlockStats || {}\n const thinking = Number(stats.thinking ?? 0)\n const text = Number(stats.text ?? 0)\n return thinking > 0 && text > 0\n }).length\n const thinking_first_ratio = safeDivide(\n thinkingFirstCount,\n transformAppliedEvents.length,\n )\n\n const crossReplayTagged = events.filter(\n event =>\n event.phase === 'AUTO_COMPACT_FAILED' ||\n event.phase === 'AUTO_COMPACT_RETRY' ||\n event.phase === 'AUTO_COMPACT_FALLBACK',\n )\n const crossReplayErrors = crossReplayTagged.filter(\n event =>\n event.data?.crossModelReplay === true &&\n event.phase === 'AUTO_COMPACT_FAILED',\n ).length\n const crossReplayTotal = crossReplayTagged.filter(\n event => event.data?.crossModelReplay === true,\n ).length\n const cross_model_replay_error_rate = safeDivide(\n crossReplayErrors,\n crossReplayTotal,\n )\n const sessionTypedPathEvents = events.filter(\n event => event.phase === 'SESSION_TYPED_PATH_APPLIED',\n )\n const sessionTypedConsistencyFailedEvents = events.filter(\n event => event.phase === 'SESSION_TYPED_PATH_CONSISTENCY_FAILED',\n )\n const typedPathDecisionEventsCount =\n sessionTypedPathEvents.length + sessionTypedConsistencyFailedEvents.length\n const typed_primary_path_rate =\n sessionTypedPathEvents.length > 0\n ? safeDivide(\n sessionTypedPathEvents.length,\n sessionTypedPathEvents.length,\n )\n : undefined\n const typed_contract_fail_rate =\n typedPathDecisionEventsCount > 0\n ? safeDivide(\n sessionTypedConsistencyFailedEvents.length,\n typedPathDecisionEventsCount,\n )\n : undefined\n const recoverable_failure_rate =\n failedEvents.length + retryEvents.length > 0\n ? safeDivide(retryEvents.length, failedEvents.length + retryEvents.length)\n : undefined\n const retry_exhausted_rate =\n failedEvents.length > 0\n ? safeDivide(\n failedEvents.filter(\n event =>\n Number.isFinite(Number(event.data?.attempts)) &&\n Number(event.data?.attempts) >= 2,\n ).length,\n failedEvents.length,\n )\n : undefined\n const boundaryEvents = events.filter(\n event => event.phase === 'COMPACTION_BOUNDARY_APPLIED',\n )\n const compaction_boundary_hit_rate =\n boundaryEvents.length > 0\n ? safeDivide(\n boundaryEvents.filter(event => event.data?.applied === true).length,\n boundaryEvents.length,\n )\n : undefined\n const boundaryCandidateEvents = boundaryEvents.filter(event => {\n const index = Number(event.data?.lastCompactionIndex ?? -1)\n if (Number.isFinite(index) && index >= 0) return true\n const resolution = String(event.data?.boundaryResolution ?? '')\n return (\n resolution === 'hard_cut_applied' || resolution === 'missing_valid_pair'\n )\n })\n const boundary_pair_match_rate =\n boundaryCandidateEvents.length > 0\n ? safeDivide(\n boundaryCandidateEvents.filter(\n event => event.data?.boundaryPairMatched === true,\n ).length,\n boundaryCandidateEvents.length,\n )\n : undefined\n const boundaryHardCutEvents = boundaryEvents.filter(\n event => event.data?.applied === true,\n )\n const boundary_false_cut_rate =\n boundaryHardCutEvents.length > 0\n ? safeDivide(\n boundaryHardCutEvents.filter(\n event => event.data?.boundaryPairMatched !== true,\n ).length,\n boundaryHardCutEvents.length,\n )\n : undefined\n const pruneCoverageSamples = boundaryEvents.filter(\n event => typeof event.data?.pruneMarkerConsumed === 'boolean',\n )\n const prune_marker_coverage_rate =\n pruneCoverageSamples.length > 0\n ? safeDivide(\n pruneCoverageSamples.filter(\n event => event.data?.pruneMarkerConsumed === true,\n ).length,\n pruneCoverageSamples.length,\n )\n : undefined\n const indexIntegritySamples = boundaryEvents.filter(\n event => event.data?.indexValidationKnown === true,\n )\n const compacted_index_integrity_rate =\n indexIntegritySamples.length > 0\n ? safeDivide(\n indexIntegritySamples.filter(\n event => event.data?.indexValidationValid === true,\n ).length,\n indexIntegritySamples.length,\n )\n : undefined\n const lifecycleEvents = events.filter(\n event => event.phase === 'TOOL_OUTPUT_LIFECYCLE_APPLIED',\n )\n const lifecycleAppliedEvents = lifecycleEvents.filter(\n event => event.data?.applied !== false,\n )\n const lifecycleAgedTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.agedBlocks ?? 0),\n 0,\n )\n const lifecycleToolResultBeforeTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.totalToolResultBlocksBefore ?? 0),\n 0,\n )\n const lifecyclePlaceholderTotal = lifecycleAppliedEvents.reduce(\n (sum, event) =>\n sum +\n Number(event.data?.l2Blocks ?? 0) +\n Number(event.data?.l3Blocks ?? 0),\n 0,\n )\n const lifecycleBeforeTokensTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.beforeTokens ?? 0),\n 0,\n )\n const lifecycleTokenDeltaTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.tokenDelta ?? 0),\n 0,\n )\n const danglingDetectedTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.danglingDetected ?? 0),\n 0,\n )\n const danglingClosedTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.danglingClosed ?? 0),\n 0,\n )\n const tool_output_aging_hit_rate =\n lifecycleToolResultBeforeTotal > 0\n ? safeDivide(lifecycleAgedTotal, lifecycleToolResultBeforeTotal)\n : undefined\n const tool_output_placeholder_hit_rate =\n lifecycleAgedTotal > 0\n ? safeDivide(lifecyclePlaceholderTotal, lifecycleAgedTotal)\n : undefined\n const tool_output_token_reduction_rate =\n lifecycleBeforeTokensTotal > 0\n ? safeDivide(lifecycleTokenDeltaTotal, lifecycleBeforeTokensTotal)\n : undefined\n const dangling_tool_closure_rate =\n danglingDetectedTotal > 0\n ? safeDivide(danglingClosedTotal, danglingDetectedTotal)\n : undefined\n const status_compensation_failure_rate =\n danglingDetectedTotal > 0\n ? safeDivide(\n Math.max(0, danglingDetectedTotal - danglingClosedTotal),\n danglingDetectedTotal,\n )\n : undefined\n const lifecycleDraftEvents = events.filter(\n event => event.phase === 'TOOL_OUTPUT_LIFECYCLE_PRE_GATE_METRICS_DRAFT',\n )\n const latestLifecycleDraft =\n lifecycleDraftEvents.length > 0\n ? lifecycleDraftEvents[lifecycleDraftEvents.length - 1]\n : undefined\n const w11_sample_pass_rate = Number.isFinite(\n Number(latestLifecycleDraft?.data?.w11_sample_pass_rate),\n )\n ? Number(latestLifecycleDraft?.data?.w11_sample_pass_rate)\n : undefined\n const w14_sample_pass_rate = Number.isFinite(\n Number(latestLifecycleDraft?.data?.w14_sample_pass_rate),\n )\n ? Number(latestLifecycleDraft?.data?.w14_sample_pass_rate)\n : undefined\n const postPruneNoiseSamples = lifecycleEvents.filter(\n event =>\n Number.isFinite(Number(event.data?.beforeTokens)) &&\n Number(event.data?.beforeTokens) > 0 &&\n Number.isFinite(Number(event.data?.afterTokens)),\n )\n const post_prune_noise_ratio =\n postPruneNoiseSamples.length > 0\n ? postPruneNoiseSamples.reduce((sum, event) => {\n const before = Number(event.data?.beforeTokens)\n const after = Number(event.data?.afterTokens)\n return sum + Math.max(0, Math.min(1, safeDivide(after, before)))\n }, 0) / postPruneNoiseSamples.length\n : undefined\n\n const sanitizerEvents = events.filter(\n event => event.phase === 'AUTO_COMPACT_SANITIZER_APPLIED',\n )\n const removedNoiseTotal = sanitizerEvents.reduce(\n (sum, event) =>\n sum +\n Number(event.data?.removedReminderTags ?? 0) +\n Number(event.data?.removedToolProgressTags ?? 0),\n 0,\n )\n const changedMessagesTotal = sanitizerEvents.reduce(\n (sum, event) => sum + Number(event.data?.changedMessages ?? 0),\n 0,\n )\n const noise_ratio_after_compaction =\n changedMessagesTotal > 0\n ? Math.max(\n 0,\n Math.min(1, 1 - safeDivide(removedNoiseTotal, changedMessagesTotal * 2)),\n )\n : undefined\n const summaryInputPathEvents = events.filter(\n event => event.phase === 'AUTO_COMPACT_SUMMARY_INPUT_PATH_APPLIED',\n )\n const structuredPrimaryPathEvents = summaryInputPathEvents.filter(\n event => event.data?.mode === 'structured_primary',\n )\n const structured_primary_path_rate =\n summaryInputPathEvents.length > 0\n ? safeDivide(structuredPrimaryPathEvents.length, summaryInputPathEvents.length)\n : undefined\n const structured_semantic_coverage_rate = structured_primary_path_rate\n\n const qualityEvents = events.filter(\n event => event.phase === 'AUTO_COMPACT_SUMMARY_QUALITY',\n )\n const goalSamples = qualityEvents.filter(\n event => typeof event.data?.taskGoalRetained === 'boolean',\n )\n const resultSamples = qualityEvents.filter(\n event => typeof event.data?.hasResultInput === 'boolean',\n )\n const errorSamples = qualityEvents.filter(\n event => typeof event.data?.hasErrorInput === 'boolean',\n )\n const task_goal_retention_rate =\n goalSamples.length > 0\n ? safeDivide(\n goalSamples.filter(event => event.data?.taskGoalRetained === true).length,\n goalSamples.length,\n )\n : undefined\n const result_fidelity_rate =\n resultSamples.length > 0\n ? safeDivide(\n resultSamples.filter(event => {\n if (event.data?.hasResultInput !== true) return true\n return event.data?.hasResultSummary === true\n }).length,\n resultSamples.length,\n )\n : undefined\n const error_fidelity_rate =\n errorSamples.length > 0\n ? safeDivide(\n errorSamples.filter(event => {\n if (event.data?.hasErrorInput !== true) return true\n return event.data?.hasErrorSummary === true\n }).length,\n errorSamples.length,\n )\n : undefined\n const first_turn_drift_rate =\n task_goal_retention_rate === undefined ? undefined : 1 - task_goal_retention_rate\n const latest_user_goal_adherence_rate = task_goal_retention_rate\n const post_cut_goal_adherence_rate = latest_user_goal_adherence_rate\n const turn_drift_rate = first_turn_drift_rate\n const restoreIntegrityEvents = events.filter(\n event => event.phase === 'TRACKER_RESTORE_INTEGRITY_CHECK',\n )\n const restoreIntegrityIssueCount = restoreIntegrityEvents.filter(event => {\n const isConsistent = event.data?.isConsistent\n if (typeof isConsistent === 'boolean') return isConsistent === false\n return Number(event.data?.droppedCount ?? 0) > 0\n }).length\n const tracker_restore_integrity_issue_rate =\n restoreIntegrityEvents.length > 0\n ? safeDivide(restoreIntegrityIssueCount, restoreIntegrityEvents.length)\n : undefined\n const userContentAdaptedEvents = events.filter(\n event => event.phase === 'MESSAGE_USER_CONTENT_ADAPTED',\n )\n const normalizeGuardEvents = events.filter(\n event => event.phase === 'BOUNDARY_NORMALIZE_GUARD_APPLIED',\n )\n const staleInstructionBlockedTotal = normalizeGuardEvents.reduce(\n (sum, event) => sum + Number(event.data?.cross_turn_user_merge_block_count ?? 0),\n 0,\n )\n const cacheChainEvents = events.filter(\n event => event.phase === 'CACHE_CONTROL_CHAIN',\n )\n const cacheChainTraceSamples = cacheChainEvents.filter(\n event =>\n Number.isFinite(Number(event.data?.cached_block_count)) &&\n Number.isFinite(Number(event.data?.response_chain_depth)),\n )\n const cache_chain_trace_rate =\n cacheChainEvents.length > 0\n ? safeDivide(cacheChainTraceSamples.length, cacheChainEvents.length)\n : undefined\n const continuationDecisionEvents = events.filter(\n event => event.phase === 'AUTO_COMPACT_CONTINUATION_DECISION',\n )\n const continuationInjectedCount = continuationDecisionEvents.filter(\n event => event.data?.injected === true,\n ).length\n const continuationReplayHitCount = continuationDecisionEvents.filter(\n event => event.data?.mode === 'replay',\n ).length\n const continuationDedupSkipCount = continuationDecisionEvents.filter(\n event => event.data?.replaySkippedReason === 'dedup_marker',\n ).length\n const continuation_injected_rate =\n continuationDecisionEvents.length > 0\n ? safeDivide(continuationInjectedCount, continuationDecisionEvents.length)\n : undefined\n const replay_hit_rate =\n continuationInjectedCount > 0\n ? safeDivide(continuationReplayHitCount, continuationInjectedCount)\n : undefined\n const replay_dedup_skip_rate =\n continuationDecisionEvents.length > 0\n ? safeDivide(continuationDedupSkipCount, continuationDecisionEvents.length)\n : undefined\n const post_compaction_first_turn_drift_rate = first_turn_drift_rate\n const stringInputPathNumerator = userContentAdaptedEvents.reduce((sum, event) => {\n const eventTotal = Number(event.data?.totalUserContentCount ?? 0)\n const eventString = Number(event.data?.userStringContentCount ?? 0)\n if (!Number.isFinite(eventTotal) || eventTotal <= 0) return sum\n if (!Number.isFinite(eventString) || eventString < 0) return sum\n return sum + Math.min(eventTotal, eventString)\n }, 0)\n const stringInputPathDenominator = userContentAdaptedEvents.reduce((sum, event) => {\n const eventTotal = Number(event.data?.totalUserContentCount ?? 0)\n if (!Number.isFinite(eventTotal) || eventTotal <= 0) return sum\n return sum + eventTotal\n }, 0)\n const string_input_path_usage_rate =\n stringInputPathDenominator > 0\n ? safeDivide(stringInputPathNumerator, stringInputPathDenominator)\n : undefined\n const stale_instruction_revisit_rate =\n stringInputPathDenominator > 0\n ? safeDivide(staleInstructionBlockedTotal, stringInputPathDenominator)\n : undefined\n\n return {\n compact_invalid_shape_rate,\n compact_retry_success_rate,\n thinking_first_ratio,\n cross_model_replay_error_rate,\n structured_primary_path_rate,\n structured_semantic_coverage_rate,\n typed_primary_path_rate,\n typed_contract_fail_rate,\n recoverable_failure_rate,\n retry_exhausted_rate,\n status_compensation_failure_rate,\n compaction_boundary_hit_rate,\n boundary_pair_match_rate,\n boundary_false_cut_rate,\n post_cut_goal_adherence_rate,\n noise_ratio_after_compaction,\n task_goal_retention_rate,\n result_fidelity_rate,\n error_fidelity_rate,\n first_turn_drift_rate,\n turn_drift_rate,\n stale_instruction_revisit_rate,\n latest_user_goal_adherence_rate,\n tracker_restore_integrity_issue_rate,\n string_input_path_usage_rate,\n prune_marker_coverage_rate,\n compacted_index_integrity_rate,\n post_prune_noise_ratio,\n tool_output_aging_hit_rate,\n tool_output_placeholder_hit_rate,\n tool_output_token_reduction_rate,\n dangling_tool_closure_rate,\n w11_sample_pass_rate,\n w14_sample_pass_rate,\n cache_chain_trace_rate,\n continuation_injected_rate,\n replay_hit_rate,\n replay_dedup_skip_rate,\n post_compaction_first_turn_drift_rate,\n }\n}\n", "import {\n computeAutoCompactMetrics,\n type AutoCompactMetrics,\n} from './autoCompactMetrics'\n\ntype SinkEvent = {\n phase: string\n data?: Record<string, any>\n}\n\nexport function createAutoCompactMetricsSink() {\n const events: SinkEvent[] = []\n return {\n push(event: SinkEvent) {\n events.push(event)\n },\n snapshot(): { eventCount: number; metrics: AutoCompactMetrics } {\n return {\n eventCount: events.length,\n metrics: computeAutoCompactMetrics(events),\n }\n },\n clear() {\n events.length = 0\n },\n }\n}\n\n", "import {\n registerTelemetryListener,\n emitTelemetryEvent,\n type TelemetryEvent,\n} from './eventBus'\nimport { createAutoCompactMetricsSink } from '@utils/session/autoCompactMetricsSink'\n\nconst AUTO_COMPACT_TELEMETRY_PHASES = new Set([\n 'AUTO_COMPACT_FAILED',\n 'AUTO_COMPACT_RETRY',\n 'AUTO_COMPACT_FALLBACK',\n 'MESSAGE_TRANSFORM_APPLIED',\n 'AUTO_COMPACT_SUMMARY_INPUT_PATH_APPLIED',\n 'AUTO_COMPACT_SUMMARY_QUALITY',\n 'AUTO_COMPACT_BUDGET_APPLIED',\n 'AUTO_COMPACT_POST_PERSIST_CHECK',\n 'TRACKER_RESTORE_INTEGRITY_CHECK',\n 'COMPACTION_BOUNDARY_APPLIED',\n 'COMPACTION_HOOK_TURN_END',\n 'COMPACTION_HOOK_OVERFLOW_DETECTED',\n 'COMPACTION_HOOK_PRE_NEXT_TURN',\n 'TOOL_OUTPUT_LIFECYCLE_APPLIED',\n 'SESSION_TYPED_PATH_APPLIED',\n 'SESSION_TYPED_PATH_CONSISTENCY_FAILED',\n 'SESSION_TYPED_PATH_POLICY_APPLIED',\n 'SESSION_TYPED_PATH_AUTO_DEGRADED',\n 'MESSAGE_USER_CONTENT_ADAPTED',\n 'AUTO_COMPACT_TASK_NODE_CREATED',\n 'AUTO_COMPACT_TASK_NODE_TRANSITION',\n 'AUTO_COMPACT_TASK_NODE_FAILED',\n 'AUTO_COMPACT_OVERFLOW_JOINT_DECISION_DRAFT',\n 'AUTO_COMPACT_CONTINUATION_DECISION',\n])\n\nconst AUTO_COMPACT_SINK_LISTENER_ID = 'auto-compact-metrics-sink'\nconst autoCompactSink = createAutoCompactMetricsSink()\nlet sinkRegistered = false\n\nexport function ensureAutoCompactTelemetryRegistered() {\n if (sinkRegistered) return\n registerTelemetryListener(AUTO_COMPACT_SINK_LISTENER_ID, event => {\n if (!AUTO_COMPACT_TELEMETRY_PHASES.has(event.phase)) return\n autoCompactSink.push({\n phase: event.phase,\n data: event.data,\n })\n })\n sinkRegistered = true\n}\n\nexport function emitAutoCompactTelemetryEvent(\n phase: string,\n data?: Record<string, any>,\n) {\n ensureAutoCompactTelemetryRegistered()\n emitTelemetryEvent({\n channel: 'auto_compact',\n phase,\n data,\n timestamp: Date.now(),\n })\n}\n\nexport function getAutoCompactMetricsSnapshot() {\n ensureAutoCompactTelemetryRegistered()\n return autoCompactSink.snapshot()\n}\n\nexport function resetAutoCompactTelemetry() {\n autoCompactSink.clear()\n}\n\nexport function mapDebugEventToTelemetryEvent(\n phase: string,\n data?: Record<string, any>,\n): TelemetryEvent {\n return {\n channel: 'auto_compact',\n phase,\n data,\n timestamp: Date.now(),\n }\n}\n\nensureAutoCompactTelemetryRegistered()\n", "export * from './core'\n\nimport type { SetToolJSXFn, ToolUseContext } from '@tool'\nimport type { Message } from '@query'\n\nexport async function processUserInput(\n input: string,\n mode: 'bash' | 'prompt' | 'pyb',\n setToolJSX: SetToolJSXFn,\n context: ToolUseContext & {\n setForkConvoWithMessagesOnTheNextRender: (\n forkConvoWithMessages: Message[],\n ) => void\n options?: {\n isPybRequest?: boolean\n pybContext?: string\n }\n },\n pastedImages: Array<{\n placeholder: string\n data: string\n mediaType: string\n }> | null,\n): Promise<Message[]> {\n const impl = await import('./userInput')\n return impl.processUserInput(input, mode, setToolJSX, context, pastedImages)\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -7,14 +7,14 @@ import {
7
7
  getSettingsFileCandidates,
8
8
  loadSettingsWithLegacyFallback,
9
9
  saveSettingsToPrimaryAndSyncLegacy
10
- } from "./chunk-R3GBNLW5.js";
10
+ } from "./chunk-ZKDULVN5.js";
11
11
  import {
12
12
  getSessionPlugins
13
13
  } from "./chunk-BJSWTHRM.js";
14
14
  import {
15
15
  getCwd,
16
16
  getXdgConfigDir
17
- } from "./chunk-5L7V2WZ2.js";
17
+ } from "./chunk-SY5A3V3Q.js";
18
18
 
19
19
  // src/services/ui/outputStyles.ts
20
20
  import figures from "figures";
@@ -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-P6TEUVAU.js";
5
+ } from "./chunk-7ALGFH5X.js";
6
6
  import {
7
7
  logError
8
- } from "./chunk-5L7V2WZ2.js";
8
+ } from "./chunk-SY5A3V3Q.js";
9
9
 
10
10
  // src/services/system/systemReminder.ts
11
11
  var SystemReminderService = class {
@@ -103,7 +103,12 @@ var SystemReminderService = class {
103
103
  return reminders;
104
104
  }
105
105
  isMentionReminder(reminder) {
106
- const mentionTypes = ["agent_mention", "file_mention", "ask_model_mention"];
106
+ const mentionTypes = [
107
+ "agent_mention",
108
+ "file_mention",
109
+ "ask_model_mention",
110
+ "compaction_continuation"
111
+ ];
107
112
  return mentionTypes.includes(reminder.type);
108
113
  }
109
114
  createReminderMessage(type, category, priority, content, timestamp) {
@@ -301,6 +306,16 @@ ${content}
301
306
  timestamp: context.timestamp
302
307
  });
303
308
  });
309
+ this.addEventListener("compaction:continuation", (context) => {
310
+ this.createMentionReminder({
311
+ type: "compaction_continuation",
312
+ key: `compaction_continuation_${context.timestamp}`,
313
+ category: "task",
314
+ priority: "high",
315
+ content: typeof context?.continuationText === "string" && context.continuationText.trim().length > 0 ? context.continuationText : "Continue the latest user request from the compacted context.",
316
+ timestamp: context.timestamp
317
+ });
318
+ });
304
319
  }
305
320
  addEventListener(event, callback) {
306
321
  if (!this.eventDispatcher.has(event)) {
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/services/system/systemReminder.ts"],
4
+ "sourcesContent": ["import { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport interface ReminderMessage {\n role: 'system'\n content: string\n isMeta: boolean\n timestamp: number\n type: string\n priority: 'low' | 'medium' | 'high'\n category: 'task' | 'security' | 'performance' | 'general'\n}\n\ninterface ReminderConfig {\n securityReminder: boolean\n performanceReminder: boolean\n maxRemindersPerSession: number\n}\n\ninterface SessionReminderState {\n lastFileAccess: number\n lastTaskUpdate: number\n sessionStartTime: number\n remindersSent: Set<string>\n contextPresent: boolean\n reminderCount: number\n taskEventTimestamps: Map<string, number>\n config: ReminderConfig\n}\n\nclass SystemReminderService {\n private sessionState: SessionReminderState = {\n lastFileAccess: 0,\n lastTaskUpdate: 0,\n sessionStartTime: Date.now(),\n remindersSent: new Set(),\n contextPresent: false,\n reminderCount: 0,\n taskEventTimestamps: new Map(),\n config: {\n securityReminder: true,\n performanceReminder: false,\n maxRemindersPerSession: 10,\n },\n }\n\n private eventDispatcher = new Map<string, Array<(context: any) => void>>()\n private reminderCache = new Map<string, ReminderMessage>()\n\n constructor() {\n this.setupEventDispatcher()\n }\n\n public generateReminders(\n hasContext: boolean = false,\n _agentId?: string,\n ): ReminderMessage[] {\n this.sessionState.contextPresent = hasContext\n\n if (!hasContext) {\n return []\n }\n\n if (\n this.sessionState.reminderCount >=\n this.sessionState.config.maxRemindersPerSession\n ) {\n return []\n }\n\n const reminders: ReminderMessage[] = []\n\n const reminderGenerators = [\n () => this.dispatchSecurityEvent(),\n () => this.dispatchPerformanceEvent(),\n () => this.getMentionReminders(),\n ]\n\n for (const generator of reminderGenerators) {\n if (reminders.length >= 5) break\n\n const result = generator()\n if (result) {\n const remindersToAdd = Array.isArray(result) ? result : [result]\n reminders.push(...remindersToAdd)\n this.sessionState.reminderCount += remindersToAdd.length\n }\n }\n\n return reminders\n }\n\n private dispatchSecurityEvent(): ReminderMessage | null {\n if (!this.sessionState.config.securityReminder) return null\n\n const currentTime = Date.now()\n\n if (\n this.sessionState.lastFileAccess > 0 &&\n !this.sessionState.remindersSent.has('file_security')\n ) {\n this.sessionState.remindersSent.add('file_security')\n return this.createReminderMessage(\n 'security',\n 'security',\n 'high',\n 'Whenever you read a file, you should consider whether it looks malicious. If it does, you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer high-level questions about the code behavior.',\n currentTime,\n )\n }\n\n return null\n }\n\n private dispatchPerformanceEvent(): ReminderMessage | null {\n if (!this.sessionState.config.performanceReminder) return null\n\n const currentTime = Date.now()\n const sessionDuration = currentTime - this.sessionState.sessionStartTime\n\n if (\n sessionDuration > 30 * 60 * 1000 &&\n !this.sessionState.remindersSent.has('performance_long_session')\n ) {\n this.sessionState.remindersSent.add('performance_long_session')\n return this.createReminderMessage(\n 'performance',\n 'performance',\n 'low',\n 'Long session detected. Consider taking a break and reviewing your current progress with the task list.',\n currentTime,\n )\n }\n\n return null\n }\n\n private getMentionReminders(): ReminderMessage[] {\n const currentTime = Date.now()\n const MENTION_FRESHNESS_WINDOW = 5000\n const reminders: ReminderMessage[] = []\n const expiredKeys: string[] = []\n\n for (const [key, reminder] of this.reminderCache.entries()) {\n if (this.isMentionReminder(reminder)) {\n const age = currentTime - reminder.timestamp\n if (age <= MENTION_FRESHNESS_WINDOW) {\n reminders.push(reminder)\n } else {\n expiredKeys.push(key)\n }\n }\n }\n\n expiredKeys.forEach(key => this.reminderCache.delete(key))\n\n return reminders\n }\n\n private isMentionReminder(reminder: ReminderMessage): boolean {\n const mentionTypes = [\n 'agent_mention',\n 'file_mention',\n 'ask_model_mention',\n 'compaction_continuation',\n ]\n return mentionTypes.includes(reminder.type)\n }\n\n private createReminderMessage(\n type: string,\n category: ReminderMessage['category'],\n priority: ReminderMessage['priority'],\n content: string,\n timestamp: number,\n ): ReminderMessage {\n return {\n role: 'system',\n content: `<system-reminder>\\n${content}\\n</system-reminder>`,\n isMeta: true,\n timestamp,\n type,\n priority,\n category,\n }\n }\n\n private shouldEmitTaskReminder(key: string, throttleMs: number): boolean {\n const now = Date.now()\n const last = this.sessionState.taskEventTimestamps.get(key) ?? 0\n if (now - last < throttleMs) {\n return false\n }\n this.sessionState.taskEventTimestamps.set(key, now)\n return true\n }\n\n private createTaskListReminder(context: any): ReminderMessage | null {\n const { listId, summary } = context\n if (!summary || !listId) return null\n const reminderKey = `task_list_${listId}_${summary.total}_${summary.ready}_${summary.blocked}_${summary.inProgress}_${summary.pending}_${summary.done}_${summary.deleted}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_list_changed',\n 'task',\n 'medium',\n `Your task list changed. Ready: ${summary.ready}, Blocked: ${summary.blocked}, In progress: ${summary.inProgress}, Pending: ${summary.pending}, Done: ${summary.done}, Deleted: ${summary.deleted}.`,\n Date.now(),\n )\n }\n\n private createTaskReadyReminder(context: any): ReminderMessage | null {\n const { listId, readyIds } = context\n if (!listId || !Array.isArray(readyIds)) return null\n const limited = readyIds.slice(0, 5).join(', ')\n const reminderKey = `task_ready_${listId}_${readyIds.length}_${limited}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_ready_changed',\n 'task',\n 'medium',\n `Task readiness changed. Ready count: ${readyIds.length}. Ready ids: ${limited || 'none'}.`,\n Date.now(),\n )\n }\n\n private createTaskCreatedReminder(context: any): ReminderMessage | null {\n const { listId, taskId, task } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_created_${listId}_${taskId}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n const subject = task?.subject || taskId\n return this.createReminderMessage(\n 'task_created',\n 'task',\n 'medium',\n `Task created: ${subject} (${taskId}). Review details and adjust status if needed.`,\n Date.now(),\n )\n }\n\n private createTaskUpdatedReminder(context: any): ReminderMessage | null {\n const { listId, taskId, task } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_updated_${listId}_${taskId}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n const subject = task?.subject || taskId\n return this.createReminderMessage(\n 'task_updated',\n 'task',\n 'medium',\n `Task updated: ${subject} (${taskId}). Confirm dependencies and status are correct.`,\n Date.now(),\n )\n }\n\n private createTaskStatusReminder(context: any): ReminderMessage | null {\n const { listId, taskId, previousStatus, status } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_status_${listId}_${taskId}_${previousStatus}_${status}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_status_changed',\n 'task',\n 'medium',\n `Task status changed for ${taskId}: ${previousStatus} \u2192 ${status}. Review dependent tasks if needed.`,\n Date.now(),\n )\n }\n\n private createTaskDepsReminder(context: any): ReminderMessage | null {\n const { listId, taskId, deps } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_deps_${listId}_${taskId}_${JSON.stringify(deps ?? {})}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_deps_changed',\n 'task',\n 'medium',\n `Task dependencies changed for ${taskId}. Recheck readiness and blockers.`,\n Date.now(),\n )\n }\n\n private setupEventDispatcher(): void {\n this.addEventListener('session:startup', context => {\n this.resetSession()\n\n this.sessionState.sessionStartTime = Date.now()\n this.sessionState.contextPresent =\n Object.keys(context.context || {}).length > 0\n })\n\n this.addEventListener('task:list_changed', context => {\n const key = `task_list_${context.listId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n\n this.addEventListener('task:ready_changed', context => {\n const key = `task_ready_${context.listId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n\n this.addEventListener('task.created', context => {\n const key = `task_created_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n this.addEventListener('task.created.v1', context => {\n const key = `task_created_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n\n this.addEventListener('task.updated', context => {\n const key = `task_updated_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n this.addEventListener('task.updated.v1', context => {\n const key = `task_updated_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n\n this.addEventListener('task.status_changed', context => {\n const key = `task_status_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n this.addEventListener('task.status_changed.v1', context => {\n const key = `task_status_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n\n this.addEventListener('task.deps_changed', context => {\n const key = `task_deps_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n })\n\n this.addEventListener('file:read', context => {\n this.sessionState.lastFileAccess = Date.now()\n })\n\n this.addEventListener('file:edited', context => {\n })\n\n this.addEventListener('agent:mentioned', context => {\n this.createMentionReminder({\n type: 'agent_mention',\n key: `agent_mention_${context.agentType}_${context.timestamp}`,\n category: 'task',\n priority: 'high',\n content: `The user mentioned @${context.originalMention}. You MUST use the Task tool with subagent_type=\"${context.agentType}\" to delegate this task to the specified agent. Provide a detailed, self-contained task description that fully captures the user's intent for the ${context.agentType} agent to execute.`,\n timestamp: context.timestamp,\n })\n })\n\n this.addEventListener('file:mentioned', context => {\n this.createMentionReminder({\n type: 'file_mention',\n key: `file_mention_${context.filePath}_${context.timestamp}`,\n category: 'general',\n priority: 'high',\n content: `The user mentioned @${context.originalMention}. You MUST read the entire content of the file at path: ${context.filePath} using the Read tool to understand the full context before proceeding with the user's request.`,\n timestamp: context.timestamp,\n })\n })\n\n this.addEventListener('ask-model:mentioned', context => {\n this.createMentionReminder({\n type: 'ask_model_mention',\n key: `ask_model_mention_${context.modelName}_${context.timestamp}`,\n category: 'task',\n priority: 'high',\n content: `The user mentioned @${context.modelName}. You MUST use the AskExpertModelTool to consult this specific model for expert opinions and analysis. Provide the user's question or context clearly to get the most relevant response from ${context.modelName}.`,\n timestamp: context.timestamp,\n })\n })\n\n this.addEventListener('compaction:continuation', context => {\n this.createMentionReminder({\n type: 'compaction_continuation',\n key: `compaction_continuation_${context.timestamp}`,\n category: 'task',\n priority: 'high',\n content:\n typeof context?.continuationText === 'string' &&\n context.continuationText.trim().length > 0\n ? context.continuationText\n : 'Continue the latest user request from the compacted context.',\n timestamp: context.timestamp,\n })\n })\n }\n\n public addEventListener(\n event: string,\n callback: (context: any) => void,\n ): void {\n if (!this.eventDispatcher.has(event)) {\n this.eventDispatcher.set(event, [])\n }\n this.eventDispatcher.get(event)!.push(callback)\n }\n\n public emitEvent(event: string, context: any): void {\n const listeners = this.eventDispatcher.get(event) || []\n listeners.forEach(callback => {\n try {\n callback(context)\n } catch (error) {\n logError(error)\n debugLogger.warn('SYSTEM_REMINDER_LISTENER_ERROR', {\n event,\n error: error instanceof Error ? error.message : String(error),\n })\n }\n })\n }\n\n private createMentionReminder(params: {\n type: string\n key: string\n category: ReminderMessage['category']\n priority: ReminderMessage['priority']\n content: string\n timestamp: number\n }): void {\n if (!this.sessionState.remindersSent.has(params.key)) {\n this.sessionState.remindersSent.add(params.key)\n\n const reminder = this.createReminderMessage(\n params.type,\n params.category,\n params.priority,\n params.content,\n params.timestamp,\n )\n\n this.reminderCache.set(params.key, reminder)\n }\n }\n\n public resetSession(): void {\n this.sessionState = {\n lastFileAccess: 0,\n lastTaskUpdate: 0,\n sessionStartTime: Date.now(),\n remindersSent: new Set(),\n contextPresent: false,\n reminderCount: 0,\n taskEventTimestamps: new Map(),\n config: { ...this.sessionState.config },\n }\n this.reminderCache.clear()\n }\n\n public updateConfig(config: Partial<ReminderConfig>): void {\n this.sessionState.config = { ...this.sessionState.config, ...config }\n }\n\n public getSessionState(): SessionReminderState {\n return { ...this.sessionState }\n }\n}\n\nexport const systemReminderService = new SystemReminderService()\n\nexport const generateSystemReminders = (\n hasContext: boolean = false,\n agentId?: string,\n) => systemReminderService.generateReminders(hasContext, agentId)\n\nexport const emitReminderEvent = (event: string, context: any) =>\n systemReminderService.emitEvent(event, context)\n\nexport const resetReminderSession = () => systemReminderService.resetSession()\nexport const getReminderSessionState = () =>\n systemReminderService.getSessionState()\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -8,13 +8,13 @@ import {
8
8
  } from "./chunk-KFEHHKZ2.js";
9
9
  import {
10
10
  ripGrepWithStatus
11
- } from "./chunk-E6G23ISX.js";
11
+ } from "./chunk-LMXJDGUG.js";
12
12
  import {
13
13
  getCurrentProjectConfig,
14
14
  getGlobalConfig,
15
15
  getOrCreateUserID,
16
16
  saveCurrentProjectConfig
17
- } from "./chunk-4ZPF4KPZ.js";
17
+ } from "./chunk-2VA64CKU.js";
18
18
  import {
19
19
  SESSION_ID,
20
20
  env,
@@ -22,10 +22,10 @@ import {
22
22
  getCwd,
23
23
  isContextScanDisabled,
24
24
  logError
25
- } from "./chunk-5L7V2WZ2.js";
25
+ } from "./chunk-SY5A3V3Q.js";
26
26
  import {
27
27
  MACRO
28
- } from "./chunk-XUHOOFY3.js";
28
+ } from "./chunk-3NASYKEW.js";
29
29
  import {
30
30
  __require
31
31
  } from "./chunk-I3J4JYES.js";
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSettingsFileCandidates,
5
5
  loadSettingsWithLegacyFallback
6
- } from "./chunk-R3GBNLW5.js";
6
+ } from "./chunk-ZKDULVN5.js";
7
7
  import {
8
8
  getSessionPlugins
9
9
  } from "./chunk-BJSWTHRM.js";
10
10
  import {
11
11
  getTheme
12
- } from "./chunk-2TJIZB3T.js";
12
+ } from "./chunk-LW26RTGS.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-4ZPF4KPZ.js";
22
+ } from "./chunk-2VA64CKU.js";
23
23
  import {
24
24
  PRODUCT_COMMAND,
25
25
  PRODUCT_NAME,
26
26
  getCwd,
27
27
  logMCPError
28
- } from "./chunk-5L7V2WZ2.js";
28
+ } from "./chunk-SY5A3V3Q.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-R3GBNLW5.js";
11
+ } from "./chunk-ZKDULVN5.js";
12
12
  import {
13
13
  getCurrentProjectConfig
14
- } from "./chunk-4ZPF4KPZ.js";
14
+ } from "./chunk-2VA64CKU.js";
15
15
  import {
16
16
  getCwd,
17
17
  logError
18
- } from "./chunk-5L7V2WZ2.js";
18
+ } from "./chunk-SY5A3V3Q.js";
19
19
 
20
20
  // src/utils/permissions/toolPermissionSettings.ts
21
21
  function uniqueStrings(value) {
@@ -4,7 +4,7 @@ import {
4
4
  BunShell,
5
5
  execFileNoThrow,
6
6
  logError
7
- } from "./chunk-5L7V2WZ2.js";
7
+ } from "./chunk-SY5A3V3Q.js";
8
8
 
9
9
  // src/utils/system/ripgrep.ts
10
10
  import { findActualExecutable } from "spawn-rx";
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getGlobalConfig
5
- } from "./chunk-4ZPF4KPZ.js";
5
+ } from "./chunk-2VA64CKU.js";
6
6
 
7
7
  // src/utils/theme/index.ts
8
8
  var lightTheme = {
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  createSessionSqlStore
5
- } from "./chunk-42NB6J75.js";
5
+ } from "./chunk-5G4RB7MC.js";
6
6
 
7
7
  // src/utils/protocol/pybAgentSessionLoad.ts
8
8
  function loadPybAgentSessionLogData(args) {
@@ -5,14 +5,14 @@ import {
5
5
  } from "./chunk-B6IMQJZM.js";
6
6
  import {
7
7
  loadSettingsWithLegacyFallback
8
- } from "./chunk-R3GBNLW5.js";
8
+ } from "./chunk-ZKDULVN5.js";
9
9
  import {
10
10
  getSessionPlugins
11
11
  } from "./chunk-BJSWTHRM.js";
12
12
  import {
13
13
  getCwd,
14
14
  logError
15
- } from "./chunk-5L7V2WZ2.js";
15
+ } from "./chunk-SY5A3V3Q.js";
16
16
 
17
17
  // src/utils/session/pybHooks.ts
18
18
  import { spawn } from "child_process";
@@ -496,7 +496,7 @@ async function runPromptHook(args) {
496
496
  fallbackTimeoutMs: args.fallbackTimeoutMs
497
497
  });
498
498
  try {
499
- const { queryQuick } = await import("./llmLazy-76CZJ77B.js");
499
+ const { queryQuick } = await import("./llmLazy-GPAEOXPV.js");
500
500
  const systemPrompt = [
501
501
  "You are executing a Pyb prompt hook.",
502
502
  "Return a single JSON object only (no markdown, no prose).",
@@ -2,11 +2,11 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  listAllContentFiles
5
- } from "./chunk-E6G23ISX.js";
5
+ } from "./chunk-LMXJDGUG.js";
6
6
  import {
7
7
  getCwd,
8
8
  logError
9
- } from "./chunk-5L7V2WZ2.js";
9
+ } from "./chunk-SY5A3V3Q.js";
10
10
 
11
11
  // src/utils/fs/file.ts
12
12
  import {
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  PERSISTENCE_VERSION
5
- } from "./chunk-P7AQWPIC.js";
5
+ } from "./chunk-3I5AJWST.js";
6
6
 
7
7
  // src/utils/session/conversationMessageState.ts
8
8
  function mapFinishReason(rawReason) {
@@ -2,15 +2,15 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  loadSettingsWithLegacyFallback
5
- } from "./chunk-R3GBNLW5.js";
5
+ } from "./chunk-ZKDULVN5.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-P6TEUVAU.js";
8
+ } from "./chunk-7ALGFH5X.js";
9
9
  import {
10
10
  env,
11
11
  getSessionRoot,
12
12
  resolveXdgDataPath
13
- } from "./chunk-5L7V2WZ2.js";
13
+ } from "./chunk-SY5A3V3Q.js";
14
14
  import {
15
15
  __require
16
16
  } from "./chunk-I3J4JYES.js";
@@ -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-XUHOOFY3.js";
5
+ } from "./chunk-3NASYKEW.js";
6
6
 
7
7
  // src/utils/state/index.ts
8
8
  import { cwd } from "process";
@@ -5,7 +5,7 @@ import {
5
5
  getSessionStoreFlags,
6
6
  recordSessionSqlDualWriteFailure,
7
7
  recordSessionSqlDualWriteSuccess
8
- } from "./chunk-42NB6J75.js";
8
+ } from "./chunk-5G4RB7MC.js";
9
9
  import {
10
10
  isUuid
11
11
  } from "./chunk-5P7HBXTD.js";
@@ -18,10 +18,10 @@ import {
18
18
  PLAN_SLUG_VERBS,
19
19
  getCwd,
20
20
  resolveXdgDataPath
21
- } from "./chunk-5L7V2WZ2.js";
21
+ } from "./chunk-SY5A3V3Q.js";
22
22
  import {
23
23
  MACRO
24
- } from "./chunk-XUHOOFY3.js";
24
+ } from "./chunk-3NASYKEW.js";
25
25
 
26
26
  // src/utils/protocol/pybAgentSessionResume.ts
27
27
  import { existsSync as existsSync2, readdirSync, readFileSync as readFileSync2, statSync as statSync2 } from "fs";
@@ -2,13 +2,13 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  MarketplaceManifestSchema
5
- } from "./chunk-YOMCW22M.js";
5
+ } from "./chunk-W2ZTYIRJ.js";
6
6
  import {
7
7
  parseFrontmatter
8
- } from "./chunk-IJ6E6OZC.js";
8
+ } from "./chunk-W57S56SZ.js";
9
9
  import {
10
10
  getCwd
11
- } from "./chunk-5L7V2WZ2.js";
11
+ } from "./chunk-SY5A3V3Q.js";
12
12
 
13
13
  // src/services/plugins/pluginValidation.ts
14
14
  import { existsSync, lstatSync, readFileSync } from "node:fs";
@@ -3,7 +3,7 @@ const require = __pybCreateRequire(import.meta.url);
3
3
 
4
4
  // src/services/ai/llmLazy.ts
5
5
  async function queryLLM(messages, systemPrompt, maxThinkingTokens, tools, signal, options) {
6
- const { queryLLM: inner } = await import("./llm-PBSE4RKC.js");
6
+ const { queryLLM: inner } = await import("./llm-SPIGEJ2Z.js");
7
7
  return inner(
8
8
  messages,
9
9
  systemPrompt,
@@ -14,15 +14,15 @@ async function queryLLM(messages, systemPrompt, maxThinkingTokens, tools, signal
14
14
  );
15
15
  }
16
16
  async function queryQuick(args) {
17
- const { queryQuick: inner } = await import("./llm-PBSE4RKC.js");
17
+ const { queryQuick: inner } = await import("./llm-SPIGEJ2Z.js");
18
18
  return inner(args);
19
19
  }
20
20
  async function verifyApiKey(apiKey, baseURL, provider) {
21
- const { verifyApiKey: inner } = await import("./llm-PBSE4RKC.js");
21
+ const { verifyApiKey: inner } = await import("./llm-SPIGEJ2Z.js");
22
22
  return inner(apiKey, baseURL, provider);
23
23
  }
24
24
  async function fetchAnthropicModels(apiKey, baseURL) {
25
- const { fetchAnthropicModels: inner } = await import("./llm-PBSE4RKC.js");
25
+ const { fetchAnthropicModels: inner } = await import("./llm-SPIGEJ2Z.js");
26
26
  return inner(apiKey, baseURL);
27
27
  }
28
28
 
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getGlobalConfig,
5
5
  saveGlobalConfig
6
- } from "./chunk-4ZPF4KPZ.js";
6
+ } from "./chunk-2VA64CKU.js";
7
7
  import {
8
8
  debug
9
- } from "./chunk-P6TEUVAU.js";
9
+ } from "./chunk-7ALGFH5X.js";
10
10
  import {
11
11
  logError
12
- } from "./chunk-5L7V2WZ2.js";
12
+ } from "./chunk-SY5A3V3Q.js";
13
13
 
14
14
  // src/utils/model/index.ts
15
15
  import { memoize } from "lodash-es";
@@ -5,7 +5,7 @@ import {
5
5
  getCwd,
6
6
  resolveXdgCachePath,
7
7
  resolveXdgDataPath
8
- } from "./chunk-5L7V2WZ2.js";
8
+ } from "./chunk-SY5A3V3Q.js";
9
9
 
10
10
  // src/services/plugins/skillMarketplace.ts
11
11
  import {
@@ -5,12 +5,12 @@ import {
5
5
  } from "./chunk-BJSWTHRM.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-P6TEUVAU.js";
8
+ } from "./chunk-7ALGFH5X.js";
9
9
  import {
10
10
  getCwd,
11
11
  logError,
12
12
  resolveXdgDataPath
13
- } from "./chunk-5L7V2WZ2.js";
13
+ } from "./chunk-SY5A3V3Q.js";
14
14
 
15
15
  // src/services/plugins/customCommands.ts
16
16
  import { existsSync, readFileSync, readdirSync, statSync } from "fs";
@@ -4,10 +4,10 @@ import {
4
4
  PRODUCT_NAME,
5
5
  execFileNoThrow,
6
6
  logError
7
- } from "./chunk-5L7V2WZ2.js";
7
+ } from "./chunk-SY5A3V3Q.js";
8
8
  import {
9
9
  MACRO
10
- } from "./chunk-XUHOOFY3.js";
10
+ } from "./chunk-3NASYKEW.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-ELAYWDG5.js"), import("./env-VHEZ3MTD.js")]);
85
+ ] = await Promise.all([import("./config-UOF22R5A.js"), import("./env-NFA6MDCD.js")]);
86
86
  if (await isAutoUpdaterDisabled()) return;
87
87
  if (await env.getIsDocker()) return;
88
88
  if (!await env.hasInternetAccess()) return;