pybao-cli 1.5.10 → 1.5.12
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-GBEPTREF.js +50 -0
- package/dist/{acp-OPW4NHQM.js → acp-Y5IIA2WP.js} +31 -31
- package/dist/{agentsValidate-ZVFEF4KY.js → agentsValidate-DY2NM3DJ.js} +7 -7
- package/dist/{ask-SLRDSXCI.js → ask-GPGFZXW5.js} +30 -30
- package/dist/{autoUpdater-BZ7E2E54.js → autoUpdater-M2OUQGQB.js} +3 -3
- package/dist/{chunk-P6O6FCAD.js → chunk-227OYWVC.js} +2 -2
- package/dist/{chunk-2KTGONPT.js → chunk-2ITFLNCF.js} +1 -1
- package/dist/{chunk-7SZNDNLK.js → chunk-2OOXJ4JL.js} +15 -9
- package/dist/chunk-2OOXJ4JL.js.map +7 -0
- package/dist/{chunk-TQTC7KJZ.js → chunk-3BURXBWN.js} +1 -1
- package/dist/{chunk-7FGPQ22V.js → chunk-4PFJOP5W.js} +1 -1
- package/dist/{chunk-UV2N4M64.js → chunk-4RFXDDFR.js} +3 -3
- package/dist/{chunk-MT3ZAKKO.js → chunk-4SRPMRVV.js} +3 -3
- package/dist/{chunk-AO6J7LEE.js → chunk-55ZZ26MV.js} +3 -3
- package/dist/{chunk-46JMZBCX.js → chunk-5OQ3NGHH.js} +1 -1
- package/dist/{chunk-HPUNAUYE.js → chunk-5VJYKH3Y.js} +2 -2
- package/dist/chunk-5ZAXW6YC.js.map +7 -0
- package/dist/{chunk-WKSMEOKH.js → chunk-6BD6I6S2.js} +20 -6
- package/dist/{chunk-WKSMEOKH.js.map → chunk-6BD6I6S2.js.map} +2 -2
- package/dist/{chunk-4USBSNI7.js → chunk-6MWZ7CQZ.js} +1815 -992
- package/dist/chunk-6MWZ7CQZ.js.map +7 -0
- package/dist/{chunk-6UPWXBMK.js → chunk-7TQBXHKB.js} +1 -1
- package/dist/{chunk-TF4T573B.js → chunk-7TYWNOBA.js} +2 -2
- package/dist/{chunk-E6OFGHIW.js → chunk-A5VNXFCK.js} +3 -3
- package/dist/{chunk-RSYAAJ5F.js → chunk-EYP4MYSC.js} +6 -7
- package/dist/{chunk-RSYAAJ5F.js.map → chunk-EYP4MYSC.js.map} +2 -2
- package/dist/{chunk-W6OFNZ3W.js → chunk-GAQ4MRQE.js} +2 -2
- package/dist/{chunk-3YDOR2NA.js → chunk-H36NFG5R.js} +4 -4
- package/dist/{chunk-MPEAANUT.js → chunk-IPK7SMWY.js} +3 -3
- package/dist/{chunk-NIW3GVZ6.js → chunk-J4QOIMCY.js} +166 -626
- package/dist/chunk-J4QOIMCY.js.map +7 -0
- package/dist/{chunk-EEKXOPVZ.js → chunk-J5TXPVLF.js} +3 -3
- package/dist/{chunk-25MWUHVP.js → chunk-M2UVICYL.js} +1 -1
- package/dist/{chunk-SJIE5KQR.js → chunk-NGJAMMVA.js} +5 -5
- package/dist/{chunk-SJIE5KQR.js.map → chunk-NGJAMMVA.js.map} +1 -1
- package/dist/{chunk-YTESBILA.js → chunk-NKKES2C5.js} +1 -1
- package/dist/{chunk-AJEGTH5Q.js → chunk-PAF6R5NZ.js} +1 -1
- package/dist/{chunk-4LLCMT3D.js → chunk-PFX6IKOO.js} +2 -2
- package/dist/{chunk-UPULEKBE.js → chunk-QCT45V24.js} +1 -1
- package/dist/{chunk-UFR47H5I.js → chunk-RLHWOGYA.js} +12 -1
- package/dist/chunk-RLHWOGYA.js.map +7 -0
- package/dist/{chunk-72ICL3CH.js → chunk-TYOFB7OQ.js} +6 -7
- package/dist/{chunk-72ICL3CH.js.map → chunk-TYOFB7OQ.js.map} +2 -2
- package/dist/{chunk-OHW6JWIB.js → chunk-VP6FXGFA.js} +4 -4
- package/dist/{chunk-EWXKQF7L.js → chunk-WNSD3D42.js} +4 -1
- package/dist/{chunk-EWXKQF7L.js.map → chunk-WNSD3D42.js.map} +2 -2
- package/dist/{chunk-PUG4EOMG.js → chunk-XBS7CGQI.js} +1 -1
- package/dist/{cli-OZWYRJHM.js → cli-XKJKAXHT.js} +92 -92
- package/dist/commands-TUBV2Y5X.js +54 -0
- package/dist/{config-LCNYYLVP.js → config-GVJLYS6J.js} +4 -4
- package/dist/{context-DPW4MYE4.js → context-4CGVBFDS.js} +6 -6
- package/dist/{conversationPersistence-JLI7ZCBG.js → conversationPersistence-G424Q2MK.js} +3 -3
- package/dist/{conversationTracker-KVYAMRCS.js → conversationTracker-Q26GHUUC.js} +4 -4
- package/dist/{customCommands-O2J3V24X.js → customCommands-LM4FM5U3.js} +4 -4
- package/dist/{env-VUPUO64W.js → env-L3OOLUJ2.js} +2 -2
- package/dist/{file-VJBZTSIC.js → file-WDYIWIDQ.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-BXWBQJQA.js → llm-D52SN2GV.js} +32 -32
- package/dist/{llmLazy-XR66QEVP.js → llmLazy-3NN2ZUR4.js} +1 -1
- package/dist/{loader-IHQ33LHG.js → loader-D2S3WQNM.js} +4 -4
- package/dist/{lsp-57NLFUAK.js → lsp-HEXOWAPA.js} +6 -6
- package/dist/{lspAnchor-VWSO7YZY.js → lspAnchor-L56WS5TF.js} +6 -6
- package/dist/{mcp-XJJDR27I.js → mcp-6QYH5WSD.js} +7 -7
- package/dist/{mentionProcessor-6MSAZVVB.js → mentionProcessor-HSJQXOES.js} +5 -5
- package/dist/{messages-4KD4FLFL.js → messages-M7O4ITWW.js} +1 -1
- package/dist/{model-AA5UZIM5.js → model-OBGYKN2R.js} +5 -5
- package/dist/{openai-HAAQ3Y7C.js → openai-WSL6ONMZ.js} +5 -5
- package/dist/{outputStyles-MJS6OUKM.js → outputStyles-PEKSPFFT.js} +4 -4
- package/dist/{pluginRuntime-O23ERPKS.js → pluginRuntime-HXPNSVLK.js} +6 -6
- package/dist/{pluginValidation-T25KVTG4.js → pluginValidation-LUNRNYN5.js} +6 -6
- package/dist/prompts-DUBZMFLB.js +56 -0
- package/dist/{pybAgentSessionLoad-M3JZ2DH3.js → pybAgentSessionLoad-2HQF3WDO.js} +4 -4
- package/dist/{pybAgentSessionResume-D2R55SPH.js → pybAgentSessionResume-DHJIRJQX.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-LKZILYAG.js → pybAgentStreamJsonSession-BPIP4CM4.js} +1 -1
- package/dist/{pybHooks-GAJ5GRHI.js → pybHooks-YGTJ3V7F.js} +4 -4
- package/dist/query-QQZDEGH6.js +56 -0
- package/dist/{registry-GDKX2X34.js → registry-V4XSGNR3.js} +5 -5
- package/dist/{ripgrep-FJH77I5J.js → ripgrep-2NKICK37.js} +3 -3
- package/dist/{skillMarketplace-6NXN5AYJ.js → skillMarketplace-BHCLGUQJ.js} +3 -3
- package/dist/{state-5JZ6HLQY.js → state-QXUVP75D.js} +2 -2
- package/dist/{theme-HJNALYGQ.js → theme-2TTCOHK4.js} +5 -5
- package/dist/{toolPermissionSettings-KPM5KUAD.js → toolPermissionSettings-XE4MDEZ2.js} +6 -6
- package/dist/tools-SD5RYBF4.js +55 -0
- package/dist/{userInput-BXJEMFWI.js → userInput-AUO3ADIL.js} +32 -32
- package/package.json +12 -1
- package/scripts/session-behavior-invariant-gate.mjs +78 -0
- package/scripts/session-contract-gate.mjs +107 -0
- package/scripts/typed-part-baseline-benchmark.mjs +179 -0
- package/scripts/typed-part-performance-gate.mjs +100 -0
- package/scripts/typed-sql-no-fallback-gate.mjs +28 -9
- package/scripts/typed-sql-release-gate.mjs +30 -0
- package/scripts/typed-sql-schema-guard.mjs +68 -0
- package/dist/REPL-LEORZMM6.js +0 -50
- package/dist/chunk-4USBSNI7.js.map +0 -7
- package/dist/chunk-7SZNDNLK.js.map +0 -7
- package/dist/chunk-NIW3GVZ6.js.map +0 -7
- package/dist/chunk-OC5CZWBQ.js.map +0 -7
- package/dist/chunk-UFR47H5I.js.map +0 -7
- package/dist/commands-ASLDRXGO.js +0 -54
- package/dist/prompts-CU2RK7D3.js +0 -56
- package/dist/query-2X4R5ZCX.js +0 -58
- package/dist/tools-C65SWXV6.js +0 -55
- /package/dist/{REPL-LEORZMM6.js.map → REPL-GBEPTREF.js.map} +0 -0
- /package/dist/{acp-OPW4NHQM.js.map → acp-Y5IIA2WP.js.map} +0 -0
- /package/dist/{agentsValidate-ZVFEF4KY.js.map → agentsValidate-DY2NM3DJ.js.map} +0 -0
- /package/dist/{ask-SLRDSXCI.js.map → ask-GPGFZXW5.js.map} +0 -0
- /package/dist/{autoUpdater-BZ7E2E54.js.map → autoUpdater-M2OUQGQB.js.map} +0 -0
- /package/dist/{chunk-P6O6FCAD.js.map → chunk-227OYWVC.js.map} +0 -0
- /package/dist/{chunk-2KTGONPT.js.map → chunk-2ITFLNCF.js.map} +0 -0
- /package/dist/{chunk-TQTC7KJZ.js.map → chunk-3BURXBWN.js.map} +0 -0
- /package/dist/{chunk-7FGPQ22V.js.map → chunk-4PFJOP5W.js.map} +0 -0
- /package/dist/{chunk-UV2N4M64.js.map → chunk-4RFXDDFR.js.map} +0 -0
- /package/dist/{chunk-MT3ZAKKO.js.map → chunk-4SRPMRVV.js.map} +0 -0
- /package/dist/{chunk-AO6J7LEE.js.map → chunk-55ZZ26MV.js.map} +0 -0
- /package/dist/{chunk-46JMZBCX.js.map → chunk-5OQ3NGHH.js.map} +0 -0
- /package/dist/{chunk-HPUNAUYE.js.map → chunk-5VJYKH3Y.js.map} +0 -0
- /package/dist/{chunk-OC5CZWBQ.js → chunk-5ZAXW6YC.js} +0 -0
- /package/dist/{chunk-6UPWXBMK.js.map → chunk-7TQBXHKB.js.map} +0 -0
- /package/dist/{chunk-TF4T573B.js.map → chunk-7TYWNOBA.js.map} +0 -0
- /package/dist/{chunk-E6OFGHIW.js.map → chunk-A5VNXFCK.js.map} +0 -0
- /package/dist/{chunk-W6OFNZ3W.js.map → chunk-GAQ4MRQE.js.map} +0 -0
- /package/dist/{chunk-3YDOR2NA.js.map → chunk-H36NFG5R.js.map} +0 -0
- /package/dist/{chunk-MPEAANUT.js.map → chunk-IPK7SMWY.js.map} +0 -0
- /package/dist/{chunk-EEKXOPVZ.js.map → chunk-J5TXPVLF.js.map} +0 -0
- /package/dist/{chunk-25MWUHVP.js.map → chunk-M2UVICYL.js.map} +0 -0
- /package/dist/{chunk-YTESBILA.js.map → chunk-NKKES2C5.js.map} +0 -0
- /package/dist/{chunk-AJEGTH5Q.js.map → chunk-PAF6R5NZ.js.map} +0 -0
- /package/dist/{chunk-4LLCMT3D.js.map → chunk-PFX6IKOO.js.map} +0 -0
- /package/dist/{chunk-UPULEKBE.js.map → chunk-QCT45V24.js.map} +0 -0
- /package/dist/{chunk-OHW6JWIB.js.map → chunk-VP6FXGFA.js.map} +0 -0
- /package/dist/{chunk-PUG4EOMG.js.map → chunk-XBS7CGQI.js.map} +0 -0
- /package/dist/{cli-OZWYRJHM.js.map → cli-XKJKAXHT.js.map} +0 -0
- /package/dist/{commands-ASLDRXGO.js.map → commands-TUBV2Y5X.js.map} +0 -0
- /package/dist/{config-LCNYYLVP.js.map → config-GVJLYS6J.js.map} +0 -0
- /package/dist/{context-DPW4MYE4.js.map → context-4CGVBFDS.js.map} +0 -0
- /package/dist/{conversationPersistence-JLI7ZCBG.js.map → conversationPersistence-G424Q2MK.js.map} +0 -0
- /package/dist/{conversationTracker-KVYAMRCS.js.map → conversationTracker-Q26GHUUC.js.map} +0 -0
- /package/dist/{customCommands-O2J3V24X.js.map → customCommands-LM4FM5U3.js.map} +0 -0
- /package/dist/{env-VUPUO64W.js.map → env-L3OOLUJ2.js.map} +0 -0
- /package/dist/{file-VJBZTSIC.js.map → file-WDYIWIDQ.js.map} +0 -0
- /package/dist/{llm-BXWBQJQA.js.map → llm-D52SN2GV.js.map} +0 -0
- /package/dist/{llmLazy-XR66QEVP.js.map → llmLazy-3NN2ZUR4.js.map} +0 -0
- /package/dist/{loader-IHQ33LHG.js.map → loader-D2S3WQNM.js.map} +0 -0
- /package/dist/{lsp-57NLFUAK.js.map → lsp-HEXOWAPA.js.map} +0 -0
- /package/dist/{lspAnchor-VWSO7YZY.js.map → lspAnchor-L56WS5TF.js.map} +0 -0
- /package/dist/{mcp-XJJDR27I.js.map → mcp-6QYH5WSD.js.map} +0 -0
- /package/dist/{mentionProcessor-6MSAZVVB.js.map → mentionProcessor-HSJQXOES.js.map} +0 -0
- /package/dist/{messages-4KD4FLFL.js.map → messages-M7O4ITWW.js.map} +0 -0
- /package/dist/{model-AA5UZIM5.js.map → model-OBGYKN2R.js.map} +0 -0
- /package/dist/{openai-HAAQ3Y7C.js.map → openai-WSL6ONMZ.js.map} +0 -0
- /package/dist/{outputStyles-MJS6OUKM.js.map → outputStyles-PEKSPFFT.js.map} +0 -0
- /package/dist/{pluginRuntime-O23ERPKS.js.map → pluginRuntime-HXPNSVLK.js.map} +0 -0
- /package/dist/{pluginValidation-T25KVTG4.js.map → pluginValidation-LUNRNYN5.js.map} +0 -0
- /package/dist/{prompts-CU2RK7D3.js.map → prompts-DUBZMFLB.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-M3JZ2DH3.js.map → pybAgentSessionLoad-2HQF3WDO.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-D2R55SPH.js.map → pybAgentSessionResume-DHJIRJQX.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-LKZILYAG.js.map → pybAgentStreamJsonSession-BPIP4CM4.js.map} +0 -0
- /package/dist/{pybHooks-GAJ5GRHI.js.map → pybHooks-YGTJ3V7F.js.map} +0 -0
- /package/dist/{query-2X4R5ZCX.js.map → query-QQZDEGH6.js.map} +0 -0
- /package/dist/{registry-GDKX2X34.js.map → registry-V4XSGNR3.js.map} +0 -0
- /package/dist/{ripgrep-FJH77I5J.js.map → ripgrep-2NKICK37.js.map} +0 -0
- /package/dist/{skillMarketplace-6NXN5AYJ.js.map → skillMarketplace-BHCLGUQJ.js.map} +0 -0
- /package/dist/{state-5JZ6HLQY.js.map → state-QXUVP75D.js.map} +0 -0
- /package/dist/{theme-HJNALYGQ.js.map → theme-2TTCOHK4.js.map} +0 -0
- /package/dist/{toolPermissionSettings-KPM5KUAD.js.map → toolPermissionSettings-XE4MDEZ2.js.map} +0 -0
- /package/dist/{tools-C65SWXV6.js.map → tools-SD5RYBF4.js.map} +0 -0
- /package/dist/{userInput-BXJEMFWI.js.map → userInput-AUO3ADIL.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/utils/agent/loader.ts"],
|
|
4
|
-
"sourcesContent": ["\nimport {\n existsSync,\n readFileSync,\n readdirSync,\n statSync,\n watch,\n type FSWatcher,\n} from 'fs'\nimport { basename, dirname, join, resolve } from 'path'\nimport { homedir } from 'os'\nimport matter from 'gray-matter'\nimport yaml from 'js-yaml'\nimport { memoize } from 'lodash-es'\nimport { z } from 'zod'\nimport { getCwd } from '@utils/state'\nimport { getSessionPlugins } from '@utils/session/sessionPlugins'\nimport { isSettingSourceEnabled } from '@utils/config/settingSources'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\nimport { getXdgConfigDir } from '@utils/config/env'\n\nexport type AgentSource =\n | 'built-in'\n | 'plugin'\n | 'userSettings'\n | 'projectSettings'\n | 'flagSettings'\n | 'policySettings'\n\nexport type AgentLocation = 'built-in' | 'plugin' | 'user' | 'project'\n\nexport type AgentModel = 'inherit' | 'haiku' | 'sonnet' | 'opus' | (string & {})\n\nexport type AgentPermissionMode =\n | 'default'\n | 'acceptEdits'\n | 'plan'\n | 'bypassPermissions'\n | 'dontAsk'\n | 'delegate'\n\nexport interface AgentConfig {\n agentType: string\n whenToUse: string\n tools: string[] | '*'\n disallowedTools?: string[]\n skills?: string[]\n systemPrompt: string\n source: AgentSource\n location: AgentLocation\n baseDir?: string\n filename?: string\n color?: string\n model?: AgentModel\n permissionMode?: AgentPermissionMode\n forkContext?: boolean\n}\n\nfunction getClaudePolicyBaseDir(): string {\n switch (process.platform) {\n case 'darwin':\n return '/Library/Application Support/ClaudeCode'\n case 'win32':\n return existsSync('C:\\\\Program Files\\\\ClaudeCode')\n ? 'C:\\\\Program Files\\\\ClaudeCode'\n : 'C:\\\\ProgramData\\\\ClaudeCode'\n default:\n return '/etc/claude-code'\n }\n}\n\nfunction normalizeOverride(value: unknown): string | null {\n if (typeof value !== 'string') return null\n const trimmed = value.trim()\n return trimmed ? resolve(trimmed) : null\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n const out: string[] = []\n const seen = new Set<string>()\n for (const value of values) {\n if (!value) continue\n if (seen.has(value)) continue\n seen.add(value)\n out.push(value)\n }\n return out\n}\n\nfunction getUserConfigRoots(): string[] {\n const claudeOverride = normalizeOverride(process.env.CLAUDE_CONFIG_DIR)\n const pybOverride = normalizeOverride(process.env.PYB_CONFIG_DIR)\n\n const hasAnyOverride = Boolean(claudeOverride || pybOverride)\n if (hasAnyOverride) {\n return dedupeStrings([claudeOverride ?? '', pybOverride ?? ''])\n }\n\n return dedupeStrings([\n getXdgConfigDir(),\n join(homedir(), '.claude'),\n join(homedir(), '.pyb'),\n ])\n}\n\nfunction findProjectAgentDirs(cwd: string): string[] {\n const result: string[] = []\n const home = resolve(homedir())\n let current = resolve(cwd)\n\n while (current !== home) {\n const claudeDir = join(current, '.claude', 'agents')\n if (existsSync(claudeDir)) result.push(claudeDir)\n\n const pybDir = join(current, '.pyb', 'agents')\n if (existsSync(pybDir)) result.push(pybDir)\n\n const parent = dirname(current)\n if (parent === current) break\n current = parent\n }\n\n return result\n}\n\nfunction listMarkdownFilesRecursively(rootDir: string): string[] {\n const files: string[] = []\n const visitedDirs = new Set<string>()\n\n const walk = (dirPath: string) => {\n let dirStat: ReturnType<typeof statSync>\n try {\n dirStat = statSync(dirPath)\n } catch {\n return\n }\n if (!dirStat.isDirectory()) return\n\n const dirKey = `${dirStat.dev}:${dirStat.ino}`\n if (visitedDirs.has(dirKey)) return\n visitedDirs.add(dirKey)\n\n let entries: Array<{\n name: string\n isDirectory(): boolean\n isFile(): boolean\n isSymbolicLink(): boolean\n }>\n try {\n entries = readdirSync(dirPath, {\n withFileTypes: true,\n encoding: 'utf8',\n }) as any\n } catch {\n return\n }\n\n for (const entry of entries) {\n const name = String(entry.name ?? '')\n const fullPath = join(dirPath, name)\n\n if (entry.isDirectory()) {\n walk(fullPath)\n continue\n }\n\n if (entry.isFile()) {\n if (name.endsWith('.md')) files.push(fullPath)\n continue\n }\n\n if (entry.isSymbolicLink()) {\n try {\n const st = statSync(fullPath)\n if (st.isDirectory()) {\n walk(fullPath)\n } else if (st.isFile() && name.endsWith('.md')) {\n files.push(fullPath)\n }\n } catch {\n continue\n }\n }\n }\n }\n\n if (!existsSync(rootDir)) return []\n walk(rootDir)\n return files\n}\n\nfunction readMarkdownFile(filePath: string): { frontmatter: any; content: string } | null {\n try {\n const raw = readFileSync(filePath, 'utf8')\n const yamlSchema = (yaml as any).JSON_SCHEMA\n const matterOptions = {\n engines: {\n yaml: {\n parse: (input: string) =>\n yaml.load(input, yamlSchema ? { schema: yamlSchema } : undefined) ??\n {},\n },\n },\n }\n const parsed = matter(raw, matterOptions)\n return {\n frontmatter: (parsed.data as any) ?? {},\n content: String(parsed.content ?? ''),\n }\n } catch {\n return null\n }\n}\n\nfunction splitCliList(values: string[]): string[] {\n if (values.length === 0) return []\n const out: string[] = []\n\n for (const value of values) {\n if (!value) continue\n let current = ''\n let inParens = false\n\n for (const ch of value) {\n switch (ch) {\n case '(':\n inParens = true\n current += ch\n break\n case ')':\n inParens = false\n current += ch\n break\n case ',':\n if (inParens) {\n current += ch\n } else {\n const trimmed = current.trim()\n if (trimmed) out.push(trimmed)\n current = ''\n }\n break\n case ' ':\n if (inParens) {\n current += ch\n } else {\n const trimmed = current.trim()\n if (trimmed) out.push(trimmed)\n current = ''\n }\n break\n default:\n current += ch\n }\n }\n\n const trimmed = current.trim()\n if (trimmed) out.push(trimmed)\n }\n\n return out\n}\n\nfunction normalizeToolList(value: unknown): string[] | null {\n if (value === undefined || value === null) return null\n if (!value) return []\n\n let raw: string[] = []\n if (typeof value === 'string') raw = [value]\n else if (Array.isArray(value))\n raw = value.filter((v): v is string => typeof v === 'string')\n\n if (raw.length === 0) return []\n const parsed = splitCliList(raw)\n if (parsed.includes('*')) return ['*']\n return parsed\n}\n\nfunction z2A(value: unknown): string[] | undefined {\n const normalized = normalizeToolList(value)\n if (normalized === null) return value === undefined ? undefined : []\n if (normalized.includes('*')) return undefined\n return normalized\n}\n\nfunction qP(value: unknown): string[] {\n const normalized = normalizeToolList(value)\n if (normalized === null) return []\n return normalized\n}\n\nconst VALID_PERMISSION_MODES = [\n 'default',\n 'acceptEdits',\n 'plan',\n 'bypassPermissions',\n 'dontAsk',\n 'delegate',\n] as const\n\nfunction sourceToLocation(source: AgentSource): AgentLocation {\n switch (source) {\n case 'plugin':\n return 'plugin'\n case 'userSettings':\n return 'user'\n case 'projectSettings':\n return 'project'\n case 'built-in':\n case 'flagSettings':\n case 'policySettings':\n default:\n return 'built-in'\n }\n}\n\nfunction parseAgentFromFile(options: {\n filePath: string\n baseDir: string\n source: Exclude<AgentSource, 'flagSettings' | 'built-in'>\n}): AgentConfig | null {\n const parsed = readMarkdownFile(options.filePath)\n if (!parsed) return null\n\n try {\n const fm = parsed.frontmatter ?? {}\n let name: unknown = fm.name\n let description: unknown = fm.description\n\n if (!name || typeof name !== 'string' || !description || typeof description !== 'string') {\n return null\n }\n\n const whenToUse = description.replace(/\\\\n/g, '\\n')\n const filename = basename(options.filePath, '.md')\n\n const color = typeof fm.color === 'string' ? fm.color : undefined\n\n let modelRaw: unknown = fm.model\n if (typeof modelRaw !== 'string' && typeof fm.model_name === 'string') {\n modelRaw = fm.model_name\n }\n let model =\n typeof modelRaw === 'string' ? modelRaw.trim() : undefined\n if (model === '') model = undefined\n\n const forkContextValue: unknown = fm.forkContext\n if (\n forkContextValue !== undefined &&\n forkContextValue !== 'true' &&\n forkContextValue !== 'false'\n ) {\n debugLogger.warn('AGENT_LOADER_INVALID_FORK_CONTEXT', {\n filePath: options.filePath,\n forkContext: String(forkContextValue),\n })\n }\n const forkContext = forkContextValue === 'true'\n\n if (forkContext && model && model !== 'inherit') {\n debugLogger.warn('AGENT_LOADER_FORK_CONTEXT_MODEL_OVERRIDE', {\n filePath: options.filePath,\n model,\n })\n model = 'inherit'\n }\n\n const permissionModeValue: unknown = fm.permissionMode\n const permissionModeIsValid =\n typeof permissionModeValue === 'string' &&\n VALID_PERMISSION_MODES.includes(permissionModeValue as AgentPermissionMode)\n if (\n typeof permissionModeValue === 'string' &&\n permissionModeValue &&\n !permissionModeIsValid\n ) {\n debugLogger.warn('AGENT_LOADER_INVALID_PERMISSION_MODE', {\n filePath: options.filePath,\n permissionMode: permissionModeValue,\n valid: VALID_PERMISSION_MODES,\n })\n }\n\n const toolsList = z2A(fm.tools)\n const tools: string[] | '*' =\n toolsList === undefined || toolsList.includes('*') ? '*' : toolsList\n\n const disallowedRaw =\n fm.disallowedTools ??\n fm['disallowed-tools'] ??\n fm['disallowed_tools']\n const disallowedTools = disallowedRaw !== undefined ? z2A(disallowedRaw) : undefined\n\n const skills = qP(fm.skills)\n const systemPrompt = parsed.content.trim()\n\n const agent: AgentConfig = {\n agentType: name,\n whenToUse,\n tools,\n ...(disallowedTools !== undefined ? { disallowedTools } : {}),\n ...(skills.length > 0 ? { skills } : { skills: [] }),\n systemPrompt,\n source: options.source,\n location: sourceToLocation(options.source),\n baseDir: options.baseDir,\n filename,\n ...(color ? { color } : {}),\n ...(model ? { model: model as AgentModel } : {}),\n ...(permissionModeIsValid ? { permissionMode: permissionModeValue as AgentPermissionMode } : {}),\n ...(forkContext ? { forkContext: true } : {}),\n }\n\n return agent\n } catch {\n return null\n }\n}\n\nconst agentJsonSchema = z.object({\n description: z.string().min(1, 'Description cannot be empty'),\n tools: z.array(z.string()).optional(),\n disallowedTools: z.array(z.string()).optional(),\n prompt: z.string().min(1, 'Prompt cannot be empty'),\n model: z.string().optional(),\n permissionMode: z.enum(VALID_PERMISSION_MODES).optional(),\n})\n\nconst agentsJsonSchema = z.record(z.string(), agentJsonSchema)\n\nfunction parseAgentFromJson(agentType: string, value: unknown): AgentConfig | null {\n const parsed = agentJsonSchema.safeParse(value)\n if (!parsed.success) return null\n\n const toolsList = z2A(parsed.data.tools)\n const disallowedList =\n parsed.data.disallowedTools !== undefined ? z2A(parsed.data.disallowedTools) : undefined\n const model =\n typeof parsed.data.model === 'string' ? parsed.data.model.trim() : undefined\n\n return {\n agentType,\n whenToUse: parsed.data.description,\n tools: toolsList === undefined || toolsList.includes('*') ? '*' : toolsList,\n ...(disallowedList !== undefined ? { disallowedTools: disallowedList } : {}),\n systemPrompt: parsed.data.prompt,\n source: 'flagSettings',\n location: 'built-in',\n ...(model ? { model: model as AgentModel } : {}),\n ...(parsed.data.permissionMode ? { permissionMode: parsed.data.permissionMode } : {}),\n }\n}\n\nlet FLAG_AGENTS: AgentConfig[] = []\n\nexport function setFlagAgentsFromCliJson(json: string | undefined): void {\n if (!json) {\n FLAG_AGENTS = []\n clearAgentCache()\n return\n }\n\n let raw: unknown\n try {\n raw = JSON.parse(json)\n } catch (err) {\n logError(err)\n debugLogger.warn('AGENT_LOADER_FLAG_AGENTS_JSON_PARSE_FAILED', {\n error: err instanceof Error ? err.message : String(err),\n })\n FLAG_AGENTS = []\n clearAgentCache()\n return\n }\n\n const parsed = agentsJsonSchema.safeParse(raw)\n if (!parsed.success) {\n logError(parsed.error)\n debugLogger.warn('AGENT_LOADER_FLAG_AGENTS_SCHEMA_INVALID', {\n error: parsed.error.message,\n })\n FLAG_AGENTS = []\n clearAgentCache()\n return\n }\n\n FLAG_AGENTS = Object.entries(parsed.data)\n .map(([agentType, value]) => parseAgentFromJson(agentType, value))\n .filter((agent): agent is AgentConfig => agent !== null)\n\n clearAgentCache()\n}\n\nconst BUILTIN_GENERAL_PURPOSE: AgentConfig = {\n agentType: 'general-purpose',\n whenToUse:\n 'General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks',\n tools: '*',\n systemPrompt: `You are a general-purpose agent. Given the user's task, use the tools available to complete it efficiently and thoroughly.\n\nWhen to use your capabilities:\n- Searching for code, configurations, and patterns across large codebases\n- Analyzing multiple files to understand system architecture \n- Investigating complex questions that require exploring many files\n- Performing multi-step research tasks\n\nGuidelines:\n- For file searches: Use Grep or Glob when you need to search broadly. Use FileRead when you know the specific file path.\n- For analysis: Start broad and narrow down. Use multiple search strategies if the first doesn't yield results.\n- Be thorough: Check multiple locations, consider different naming conventions, look for related files.\n- Complete tasks directly using your capabilities.`,\n source: 'built-in',\n location: 'built-in',\n baseDir: 'built-in',\n}\n\nconst BUILTIN_EXPLORE: AgentConfig = {\n agentType: 'Explore',\n whenToUse:\n 'Fast agent specialized for exploring codebases. Use this when you need to quickly find files by patterns (eg. \"src/components/**/*.tsx\"), search code for keywords (eg. \"API endpoints\"), or answer questions about the codebase (eg. \"how do API endpoints work?\"). When calling this agent, specify the desired thoroughness level: \"quick\" for basic searches, \"medium\" for moderate exploration, or \"very thorough\" for comprehensive analysis across multiple locations and naming conventions.',\n tools: '*',\n disallowedTools: ['Task', 'Edit', 'Write', 'NotebookEdit'],\n model: 'inherit',\n systemPrompt: `You are optimized specifically for codebase or complex, multi-step code files exploration. You excel at thoroughly navigating and exploring codebases.And faster and more thorough than other agents for search tasks.\n\n=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===\nThis is a READ-ONLY exploration task. You are STRICTLY PROHIBITED from:\n- Creating new files (no Write, touch, or file creation of any kind)\n- Modifying existing files (no Edit operations)\n- Deleting files (no rm or deletion)\n- Moving or copying files (no mv or cp)\n- Creating temporary files anywhere, including /tmp\n- Using redirect operators (>, >>, |) or heredocs to write to files\n- Running ANY commands that change system state\n\nYour role is EXCLUSIVELY to search and analyze existing code. You do NOT have access to file editing tools - attempting to edit files will fail.\n\nYour strengths:\n- Rapidly finding files using glob patterns\n- Searching code and text with powerful regex patterns\n- Reading and analyzing file contents\n\nGuidelines:\n- Use Glob for broad file pattern matching\n- Use Grep for searching file contents with regex\n- Use Read when you know the specific file path you need to read\n- Use LS to understand directory structure and top-level layout quickly\n- Use LSP for symbol-level navigation (definitions/references) after you locate a file\n- Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)\n- NEVER use Bash for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification\n- Adapt your search approach based on the thoroughness level specified by the caller\n- Return file paths as absolute paths in your final response\n- For clear communication, avoid using emojis\n- Communicate your final report directly as a regular message - do NOT attempt to create files\n\nNOTE: You are meant to be a fast agent that returns output as quickly as possible. In order to achieve this you must:\n- Make efficient use of the tools that you have at your disposal: be smart about how you search for files and implementations\n- Wherever possible you should try to spawn multiple parallel tool calls for grepping and reading files\n\n# Tool usage policy\n- You can call multiple tools in a single response. If you intend to call multiple tools and there are no dependencies between them, make all independent tool calls in parallel. Maximize use of parallel tool calls where possible to increase efficiency. However, if some tool calls depend on previous calls to inform dependent values, do NOT call these tools in parallel and instead call them sequentially. For instance, if one operation must complete before another starts, run these operations sequentially instead. Never use placeholders or guess missing parameters in tool calls.\n- **LS vs Glob \"dir/*\"**: LS provides complexity stats (directory/file ratio, max depth) to guide strategy; Glob \"dir/*\" is faster but no stats. Use LS when you need structural insights; use Glob for quick one-level checks.\n- If the user specifies that they want you to run tools \"in parallel\", you MUST send a single message with multiple tool use content blocks.\n- It is always better to speculatively read multiple files as a batch that are potentially useful.\n- It is always better to speculatively perform multiple searches as a batch that are potentially useful.\n- Tool results and user messages may include <system-reminder> tags. <system-reminder> tags contain useful information and reminders. They are NOT part of the user's provided input or the tool result.\n\n# Cognitive Search Strategy\n1. **Concept Search**: WHEN searching for high-level concepts (e.g., \"Auth Logic\", \"Payment Flow\") OR when you are uncertain about exact naming, you MUST use \\`semantic: true\\` in Grep/Glob tools. This activates the LSP Workspace Symbol search which is resilient to typos and fuzzy matches.\n - Example: \\`GrepTool(pattern: \"AuthFeatr\", semantic: true)\\` will find \"AuthFeature\".\n - Example: \\`GlobTool(pattern: \"tests\", semantic: true)\\` will find test files based on project structure.\n2. **Exact Identifier**: WHEN you know the precise class/function name (e.g., \"UserProfile\", \"initDatabase\"), use standard Grep/Glob without \\`semantic\\` flag.\n3. **Exploration**: If standard search returns 0 results, AUTOMATICALLY retry with \\`semantic: true\\`.\n4. **File System Exploration Priority**:For file system exploration, decide based on intent: if you need global structure/entry points, prefer LS or Glob \"dir/*\" first; if you have keywords or fuzzy paths, prefer Glob first. If results are too broad, use LS or Glob \"dir/*\" to narrow structure or combine with Grep/LSP. Only use Bash for executing scripts or binaries.\n\n# Path Fragmentation Strategy\n- Root -> Core Directory -> Secondary Modules\n- Run structure scanning in the above order\n\n# LSP Priority & Scope Limits\n- **Order**: Structure Tree (LS) \u2192 Hotspot Location \u2192 Read \u2192 LSP\n- Use \\`LSPTool.documentSymbol\\` or \\`LSPTool.definition\\` only when you have a precise position and need to confirm exact range\n- Do NOT rely on line numbers from \\`read_file\\` alone as they may be outdated\n- \\`workspaceSymbol\\` requires a query and should provide clear path/module scope to avoid unbounded workspace queries\n\n# Path Fragmentation Strategy\n- Root \u2192 Core Directory \u2192 Secondary Modules\n- Execute structure scanning in the above order\n\nComplete the user's search request efficiently and report your findings clearly.`,\n source: 'built-in',\n location: 'built-in',\n baseDir: 'built-in',\n}\n\nconst BUILTIN_PLAN: AgentConfig = {\n agentType: 'Plan',\n whenToUse:\n 'Software architect agent for designing implementation plans. Use this when you need to plan the implementation strategy for a task. Returns step-by-step plans, identifies critical files, and considers architectural trade-offs.',\n tools: '*',\n disallowedTools: ['Task', 'Edit', 'Write', 'NotebookEdit'],\n model: 'inherit',\n systemPrompt: `You are a software architect and planning specialist. Your role is to explore the codebase and design implementation plans.\n\n=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===\nThis is a READ-ONLY planning task. You are STRICTLY PROHIBITED from:\n- Creating new files (no Write, touch, or file creation of any kind)\n- Modifying existing files (no Edit operations)\n- Deleting files (no rm or deletion)\n- Moving or copying files (no mv or cp)\n- Creating temporary files anywhere, including /tmp\n- Using redirect operators (>, >>, |) or heredocs to write to files\n- Running ANY commands that change system state\n\nYour role is EXCLUSIVELY to explore the codebase and design implementation plans. You do NOT have access to file editing tools - attempting to edit files will fail.\n\nYou will be provided with a set of requirements and optionally a perspective on how to approach the design process.\n\n## Your Process\n\n1. **Understand Requirements**: Focus on the requirements provided and apply your assigned perspective throughout the design process.\n\n2. **Explore Thoroughly**:\n - Read any files provided to you in the initial prompt\n - Find existing patterns and conventions using Glob, Grep, and Read\n - Understand the current architecture\n - Identify similar features as reference\n - Trace through relevant code paths\n - Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)\n - NEVER use Bash for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification\n\n3. **Design Solution**:\n - Create implementation approach based on your assigned perspective\n - Consider trade-offs and architectural decisions\n - Follow existing patterns where appropriate\n\n4. **Detail the Plan**:\n - Provide step-by-step implementation strategy\n - Identify dependencies and sequencing\n - Anticipate potential challenges\n\n## Required Output\n\nEnd your response with:\n\n### Critical Files for Implementation\nList 3-5 files most critical for implementing this plan:\n- path/to/file1.ts - [Brief reason: e.g., \"Core logic to modify\"]\n- path/to/file2.ts - [Brief reason: e.g., \"Interfaces to implement\"]\n- path/to/file3.ts - [Brief reason: e.g., \"Pattern to follow\"]\n\n# Cognitive Search Strategy\n1. **Concept Search**: WHEN searching for high-level concepts (e.g., \"Auth Logic\", \"Payment Flow\") OR when uncertain about exact naming, you MUST use \\`semantic: true\\` in Grep/Glob tools. This activates the LSP Workspace Symbol search which is resilient to typos and fuzzy matches.\n - Example: \\`GrepTool(pattern: \"AuthFeatr\", semantic: true)\\` will find \"AuthFeature\"\n - Example: \\`GlobTool(pattern: \"tests\", semantic: true)\\` will find test files based on project structure\n2. **Exact Identifier**: WHEN you know the precise class/function name (e.g., \"UserProfile\", \"initDatabase\"), use standard Grep/Glob without \\`semantic\\` flag.\n3. **Exploration**: If standard search returns 0 results, AUTOMATICALLY retry with \\`semantic: true\\`.\n\n# LSP Priority & Scope Limits\n- **Order**: Structure Tree (LS) \u2192 Hotspot Location \u2192 Read \u2192 LSP\n- Use \\`LSPTool.documentSymbol\\` or \\`LSPTool.definition\\` only when you have a precise position and need to confirm exact range\n- Do NOT rely on line numbers from \\`read_file\\` alone as they may be outdated\n- \\`workspaceSymbol\\` requires a query and should provide clear path/module scope to avoid unbounded workspace queries\n\n# Path Fragmentation Strategy\n- Root \u2192 Core Directory \u2192 Secondary Modules\n- Execute structure scanning in the above order\n\nREMEMBER: You can ONLY explore and plan. You CANNOT and MUST NOT write, edit, or modify any files. You do NOT have access to file editing tools.`,\n source: 'built-in',\n location: 'built-in',\n baseDir: 'built-in',\n}\n\nconst BUILTIN_STATUSLINE_SETUP: AgentConfig = {\n agentType: 'statusline-setup',\n whenToUse:\n 'Set up the CLI status line command (writes to ~/.pyb/settings.json statusLine). Use when the user runs /statusline.',\n tools: ['Read', 'Edit', 'Bash'],\n systemPrompt: `You are the status line setup agent.\n\nYour job is to configure a fast, single-line status command for the CLI UI.\n\nRequirements:\n- Write/update the user's ~/.pyb/settings.json and set the top-level key \"statusLine\" to a shell command string.\n- IMPORTANT: When using Read/Edit tools, use absolute paths (do not pass \"~\" to tool inputs).\n- The command must be quick (ideally <200ms), produce a single line, and be safe to run repeatedly.\n- Prefer using information that is generally available: current directory, git branch/dirty state, etc.\n- If you can't infer the user's preferred status info from their shell config, ask them what they want and propose a reasonable default.\n\nSuggested approach:\n1) Inspect common shell config files (Read):\n - macOS/Linux: ~/.zshrc, ~/.bashrc, ~/.config/fish/config.fish\n - Windows: consider PowerShell profile if the user provides its location\n2) Propose a statusLine command:\n - macOS/Linux: e.g. a small sh snippet that prints cwd basename and git branch if present\n - Windows: e.g. a short PowerShell one-liner that prints similar info\n3) Update ~/.pyb/settings.json:\n - If the file does not exist, create it as a minimal JSON object.\n - Preserve unrelated fields if present.\n4) Reply with the exact command you set and how the user can change/remove it later.`,\n source: 'built-in',\n location: 'built-in',\n baseDir: 'built-in',\n}\n\nfunction mergeAgents(allAgents: AgentConfig[]): AgentConfig[] {\n const builtIn = allAgents.filter(a => a.source === 'built-in')\n const plugin = allAgents.filter(a => a.source === 'plugin')\n const user = allAgents.filter(a => a.source === 'userSettings')\n const project = allAgents.filter(a => a.source === 'projectSettings')\n const flag = allAgents.filter(a => a.source === 'flagSettings')\n const policy = allAgents.filter(a => a.source === 'policySettings')\n\n const ordered = [builtIn, plugin, user, project, flag, policy]\n const map = new Map<string, AgentConfig>()\n for (const group of ordered) {\n for (const agent of group) {\n map.set(agent.agentType, agent)\n }\n }\n return Array.from(map.values())\n}\n\nfunction inodeKeyForPath(filePath: string): string | null {\n try {\n const st = statSync(filePath)\n if (typeof (st as any).dev === 'number' && typeof (st as any).ino === 'number') {\n return `${(st as any).dev}:${(st as any).ino}`\n }\n return null\n } catch {\n return null\n }\n}\n\nfunction scanAgentPaths(options: {\n dirPathOrFile: string\n baseDir: string\n source: Exclude<AgentSource, 'built-in' | 'flagSettings'>\n seenInodes: Map<string, AgentSource>\n}): AgentConfig[] {\n const out: AgentConfig[] = []\n\n const addFile = (filePath: string) => {\n if (!filePath.endsWith('.md')) return\n\n const inodeKey = inodeKeyForPath(filePath)\n if (inodeKey) {\n const existing = options.seenInodes.get(inodeKey)\n if (existing) return\n options.seenInodes.set(inodeKey, options.source)\n }\n\n const agent = parseAgentFromFile({\n filePath,\n baseDir: options.baseDir,\n source: options.source,\n })\n if (agent) out.push(agent)\n }\n\n let st: ReturnType<typeof statSync>\n try {\n st = statSync(options.dirPathOrFile)\n } catch {\n return []\n }\n\n if (st.isFile()) {\n addFile(options.dirPathOrFile)\n return out\n }\n\n if (!st.isDirectory()) return []\n\n for (const filePath of listMarkdownFilesRecursively(options.dirPathOrFile)) {\n addFile(filePath)\n }\n\n return out\n}\n\nasync function loadAllAgents(): Promise<{\n activeAgents: AgentConfig[]\n allAgents: AgentConfig[]\n}> {\n const builtinAgents: AgentConfig[] = [\n BUILTIN_GENERAL_PURPOSE,\n BUILTIN_STATUSLINE_SETUP,\n BUILTIN_EXPLORE,\n BUILTIN_PLAN,\n ]\n\n const seenInodes = new Map<string, AgentSource>()\n\n const sessionPlugins = getSessionPlugins()\n const pluginAgentDirs = sessionPlugins.flatMap(p => p.agentsDirs ?? [])\n const pluginAgents = pluginAgentDirs.flatMap(dir =>\n scanAgentPaths({\n dirPathOrFile: dir,\n baseDir: dir,\n source: 'plugin',\n seenInodes,\n }),\n )\n\n const policyAgentsDir = join(getClaudePolicyBaseDir(), '.claude', 'agents')\n const policyAgents = scanAgentPaths({\n dirPathOrFile: policyAgentsDir,\n baseDir: policyAgentsDir,\n source: 'policySettings',\n seenInodes,\n })\n\n const userAgents: AgentConfig[] = []\n if (isSettingSourceEnabled('userSettings')) {\n for (const root of getUserConfigRoots()) {\n const dir = join(root, 'agents')\n userAgents.push(\n ...scanAgentPaths({\n dirPathOrFile: dir,\n baseDir: dir,\n source: 'userSettings',\n seenInodes,\n }),\n )\n }\n }\n\n const projectAgents: AgentConfig[] = []\n if (isSettingSourceEnabled('projectSettings')) {\n const dirs = findProjectAgentDirs(getCwd())\n for (const dir of dirs) {\n projectAgents.push(\n ...scanAgentPaths({\n dirPathOrFile: dir,\n baseDir: dir,\n source: 'projectSettings',\n seenInodes,\n }),\n )\n }\n }\n\n const allAgents: AgentConfig[] = [\n ...builtinAgents,\n ...pluginAgents,\n ...userAgents,\n ...projectAgents,\n ...FLAG_AGENTS,\n ...policyAgents,\n ]\n\n const activeAgents = mergeAgents(allAgents)\n return { activeAgents, allAgents }\n}\n\nexport const getActiveAgents = memoize(async (): Promise<AgentConfig[]> => {\n const { activeAgents } = await loadAllAgents()\n return activeAgents\n})\n\nexport const getAllAgents = memoize(async (): Promise<AgentConfig[]> => {\n const { allAgents } = await loadAllAgents()\n return allAgents\n})\n\nexport const getAgentByType = memoize(\n async (agentType: string): Promise<AgentConfig | undefined> => {\n const agents = await getActiveAgents()\n return agents.find(agent => agent.agentType === agentType)\n },\n)\n\nexport const getAvailableAgentTypes = memoize(async (): Promise<string[]> => {\n const agents = await getActiveAgents()\n return agents.map(agent => agent.agentType)\n})\n\nexport function clearAgentCache(): void {\n getActiveAgents.cache?.clear?.()\n getAllAgents.cache?.clear?.()\n getAgentByType.cache?.clear?.()\n getAvailableAgentTypes.cache?.clear?.()\n}\n\nlet watchers: FSWatcher[] = []\n\nexport async function startAgentWatcher(onChange?: () => void): Promise<void> {\n await stopAgentWatcher()\n\n const watchDirs: string[] = []\n\n watchDirs.push(join(getClaudePolicyBaseDir(), '.claude', 'agents'))\n\n if (isSettingSourceEnabled('userSettings')) {\n for (const root of getUserConfigRoots()) {\n watchDirs.push(join(root, 'agents'))\n }\n }\n\n if (isSettingSourceEnabled('projectSettings')) {\n watchDirs.push(...findProjectAgentDirs(getCwd()))\n }\n\n for (const plugin of getSessionPlugins()) {\n for (const dir of plugin.agentsDirs ?? []) {\n watchDirs.push(dir)\n }\n }\n\n for (const dirPath of dedupeStrings(watchDirs)) {\n if (!existsSync(dirPath)) continue\n try {\n const watcher = watch(\n dirPath,\n { recursive: false },\n async (_eventType, filename) => {\n if (filename && filename.endsWith('.md')) {\n clearAgentCache()\n onChange?.()\n }\n },\n )\n watchers.push(watcher)\n } catch {\n continue\n }\n }\n}\n\nexport async function stopAgentWatcher(): Promise<void> {\n try {\n for (const watcher of watchers) {\n try {\n watcher.close()\n } catch {\n }\n }\n } finally {\n watchers = []\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["\nimport {\n existsSync,\n readFileSync,\n readdirSync,\n statSync,\n watch,\n type FSWatcher,\n} from 'fs'\nimport { basename, dirname, join, resolve } from 'path'\nimport { homedir } from 'os'\nimport matter from 'gray-matter'\nimport yaml from 'js-yaml'\nimport { memoize } from 'lodash-es'\nimport { z } from 'zod'\nimport { getCwd } from '@utils/state'\nimport { getSessionPlugins } from '@utils/session/sessionPlugins'\nimport { isSettingSourceEnabled } from '@utils/config/settingSources'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\nimport { getXdgConfigDir } from '@utils/config/env'\n\nexport type AgentSource =\n | 'built-in'\n | 'plugin'\n | 'userSettings'\n | 'projectSettings'\n | 'flagSettings'\n | 'policySettings'\n\nexport type AgentLocation = 'built-in' | 'plugin' | 'user' | 'project'\n\nexport type AgentModel = 'inherit' | 'haiku' | 'sonnet' | 'opus' | (string & {})\n\nexport type AgentPermissionMode =\n | 'default'\n | 'acceptEdits'\n | 'plan'\n | 'bypassPermissions'\n | 'dontAsk'\n | 'delegate'\n\nexport interface AgentConfig {\n agentType: string\n whenToUse: string\n tools: string[] | '*'\n disallowedTools?: string[]\n skills?: string[]\n systemPrompt: string\n source: AgentSource\n location: AgentLocation\n baseDir?: string\n filename?: string\n color?: string\n model?: AgentModel\n permissionMode?: AgentPermissionMode\n forkContext?: boolean\n}\n\nfunction getClaudePolicyBaseDir(): string {\n switch (process.platform) {\n case 'darwin':\n return '/Library/Application Support/ClaudeCode'\n case 'win32':\n return existsSync('C:\\\\Program Files\\\\ClaudeCode')\n ? 'C:\\\\Program Files\\\\ClaudeCode'\n : 'C:\\\\ProgramData\\\\ClaudeCode'\n default:\n return '/etc/claude-code'\n }\n}\n\nfunction normalizeOverride(value: unknown): string | null {\n if (typeof value !== 'string') return null\n const trimmed = value.trim()\n return trimmed ? resolve(trimmed) : null\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n const out: string[] = []\n const seen = new Set<string>()\n for (const value of values) {\n if (!value) continue\n if (seen.has(value)) continue\n seen.add(value)\n out.push(value)\n }\n return out\n}\n\nfunction getUserConfigRoots(): string[] {\n const claudeOverride = normalizeOverride(process.env.CLAUDE_CONFIG_DIR)\n const pybOverride = normalizeOverride(process.env.PYB_CONFIG_DIR)\n\n const hasAnyOverride = Boolean(claudeOverride || pybOverride)\n if (hasAnyOverride) {\n return dedupeStrings([claudeOverride ?? '', pybOverride ?? ''])\n }\n\n return dedupeStrings([\n getXdgConfigDir(),\n join(homedir(), '.claude'),\n join(homedir(), '.pyb'),\n ])\n}\n\nfunction findProjectAgentDirs(cwd: string): string[] {\n const result: string[] = []\n const home = resolve(homedir())\n let current = resolve(cwd)\n\n while (current !== home) {\n const claudeDir = join(current, '.claude', 'agents')\n if (existsSync(claudeDir)) result.push(claudeDir)\n\n const pybDir = join(current, '.pyb', 'agents')\n if (existsSync(pybDir)) result.push(pybDir)\n\n const parent = dirname(current)\n if (parent === current) break\n current = parent\n }\n\n return result\n}\n\nfunction listMarkdownFilesRecursively(rootDir: string): string[] {\n const files: string[] = []\n const visitedDirs = new Set<string>()\n\n const walk = (dirPath: string) => {\n let dirStat: ReturnType<typeof statSync>\n try {\n dirStat = statSync(dirPath)\n } catch {\n return\n }\n if (!dirStat.isDirectory()) return\n\n const dirKey = `${dirStat.dev}:${dirStat.ino}`\n if (visitedDirs.has(dirKey)) return\n visitedDirs.add(dirKey)\n\n let entries: Array<{\n name: string\n isDirectory(): boolean\n isFile(): boolean\n isSymbolicLink(): boolean\n }>\n try {\n entries = readdirSync(dirPath, {\n withFileTypes: true,\n encoding: 'utf8',\n }) as any\n } catch {\n return\n }\n\n for (const entry of entries) {\n const name = String(entry.name ?? '')\n const fullPath = join(dirPath, name)\n\n if (entry.isDirectory()) {\n walk(fullPath)\n continue\n }\n\n if (entry.isFile()) {\n if (name.endsWith('.md')) files.push(fullPath)\n continue\n }\n\n if (entry.isSymbolicLink()) {\n try {\n const st = statSync(fullPath)\n if (st.isDirectory()) {\n walk(fullPath)\n } else if (st.isFile() && name.endsWith('.md')) {\n files.push(fullPath)\n }\n } catch {\n continue\n }\n }\n }\n }\n\n if (!existsSync(rootDir)) return []\n walk(rootDir)\n return files\n}\n\nfunction readMarkdownFile(filePath: string): { frontmatter: any; content: string } | null {\n try {\n const raw = readFileSync(filePath, 'utf8')\n const yamlSchema = (yaml as any).JSON_SCHEMA\n const matterOptions = {\n engines: {\n yaml: {\n parse: (input: string) =>\n yaml.load(input, yamlSchema ? { schema: yamlSchema } : undefined) ??\n {},\n },\n },\n }\n const parsed = matter(raw, matterOptions)\n return {\n frontmatter: (parsed.data as any) ?? {},\n content: String(parsed.content ?? ''),\n }\n } catch {\n return null\n }\n}\n\nfunction splitCliList(values: string[]): string[] {\n if (values.length === 0) return []\n const out: string[] = []\n\n for (const value of values) {\n if (!value) continue\n let current = ''\n let inParens = false\n\n for (const ch of value) {\n switch (ch) {\n case '(':\n inParens = true\n current += ch\n break\n case ')':\n inParens = false\n current += ch\n break\n case ',':\n if (inParens) {\n current += ch\n } else {\n const trimmed = current.trim()\n if (trimmed) out.push(trimmed)\n current = ''\n }\n break\n case ' ':\n if (inParens) {\n current += ch\n } else {\n const trimmed = current.trim()\n if (trimmed) out.push(trimmed)\n current = ''\n }\n break\n default:\n current += ch\n }\n }\n\n const trimmed = current.trim()\n if (trimmed) out.push(trimmed)\n }\n\n return out\n}\n\nfunction normalizeToolList(value: unknown): string[] | null {\n if (value === undefined || value === null) return null\n if (!value) return []\n\n let raw: string[] = []\n if (typeof value === 'string') raw = [value]\n else if (Array.isArray(value))\n raw = value.filter((v): v is string => typeof v === 'string')\n\n if (raw.length === 0) return []\n const parsed = splitCliList(raw)\n if (parsed.includes('*')) return ['*']\n return parsed\n}\n\nfunction z2A(value: unknown): string[] | undefined {\n const normalized = normalizeToolList(value)\n if (normalized === null) return value === undefined ? undefined : []\n if (normalized.includes('*')) return undefined\n return normalized\n}\n\nfunction qP(value: unknown): string[] {\n const normalized = normalizeToolList(value)\n if (normalized === null) return []\n return normalized\n}\n\nconst VALID_PERMISSION_MODES = [\n 'default',\n 'acceptEdits',\n 'plan',\n 'bypassPermissions',\n 'dontAsk',\n 'delegate',\n] as const\n\nfunction sourceToLocation(source: AgentSource): AgentLocation {\n switch (source) {\n case 'plugin':\n return 'plugin'\n case 'userSettings':\n return 'user'\n case 'projectSettings':\n return 'project'\n case 'built-in':\n case 'flagSettings':\n case 'policySettings':\n default:\n return 'built-in'\n }\n}\n\nfunction parseAgentFromFile(options: {\n filePath: string\n baseDir: string\n source: Exclude<AgentSource, 'flagSettings' | 'built-in'>\n}): AgentConfig | null {\n const parsed = readMarkdownFile(options.filePath)\n if (!parsed) return null\n\n try {\n const fm = parsed.frontmatter ?? {}\n let name: unknown = fm.name\n let description: unknown = fm.description\n\n if (!name || typeof name !== 'string' || !description || typeof description !== 'string') {\n return null\n }\n\n const whenToUse = description.replace(/\\\\n/g, '\\n')\n const filename = basename(options.filePath, '.md')\n\n const color = typeof fm.color === 'string' ? fm.color : undefined\n\n let modelRaw: unknown = fm.model\n if (typeof modelRaw !== 'string' && typeof fm.model_name === 'string') {\n modelRaw = fm.model_name\n }\n let model =\n typeof modelRaw === 'string' ? modelRaw.trim() : undefined\n if (model === '') model = undefined\n\n const forkContextValue: unknown = fm.forkContext\n if (\n forkContextValue !== undefined &&\n forkContextValue !== 'true' &&\n forkContextValue !== 'false'\n ) {\n debugLogger.warn('AGENT_LOADER_INVALID_FORK_CONTEXT', {\n filePath: options.filePath,\n forkContext: String(forkContextValue),\n })\n }\n const forkContext = forkContextValue === 'true'\n\n if (forkContext && model && model !== 'inherit') {\n debugLogger.warn('AGENT_LOADER_FORK_CONTEXT_MODEL_OVERRIDE', {\n filePath: options.filePath,\n model,\n })\n model = 'inherit'\n }\n\n const permissionModeValue: unknown = fm.permissionMode\n const permissionModeIsValid =\n typeof permissionModeValue === 'string' &&\n VALID_PERMISSION_MODES.includes(permissionModeValue as AgentPermissionMode)\n if (\n typeof permissionModeValue === 'string' &&\n permissionModeValue &&\n !permissionModeIsValid\n ) {\n debugLogger.warn('AGENT_LOADER_INVALID_PERMISSION_MODE', {\n filePath: options.filePath,\n permissionMode: permissionModeValue,\n valid: VALID_PERMISSION_MODES,\n })\n }\n\n const toolsList = z2A(fm.tools)\n const tools: string[] | '*' =\n toolsList === undefined || toolsList.includes('*') ? '*' : toolsList\n\n const disallowedRaw =\n fm.disallowedTools ??\n fm['disallowed-tools'] ??\n fm['disallowed_tools']\n const disallowedTools = disallowedRaw !== undefined ? z2A(disallowedRaw) : undefined\n\n const skills = qP(fm.skills)\n const systemPrompt = parsed.content.trim()\n\n const agent: AgentConfig = {\n agentType: name,\n whenToUse,\n tools,\n ...(disallowedTools !== undefined ? { disallowedTools } : {}),\n ...(skills.length > 0 ? { skills } : { skills: [] }),\n systemPrompt,\n source: options.source,\n location: sourceToLocation(options.source),\n baseDir: options.baseDir,\n filename,\n ...(color ? { color } : {}),\n ...(model ? { model: model as AgentModel } : {}),\n ...(permissionModeIsValid ? { permissionMode: permissionModeValue as AgentPermissionMode } : {}),\n ...(forkContext ? { forkContext: true } : {}),\n }\n\n return agent\n } catch {\n return null\n }\n}\n\nconst agentJsonSchema = z.object({\n description: z.string().min(1, 'Description cannot be empty'),\n tools: z.array(z.string()).optional(),\n disallowedTools: z.array(z.string()).optional(),\n prompt: z.string().min(1, 'Prompt cannot be empty'),\n model: z.string().optional(),\n permissionMode: z.enum(VALID_PERMISSION_MODES).optional(),\n})\n\nconst agentsJsonSchema = z.record(z.string(), agentJsonSchema)\n\nfunction parseAgentFromJson(agentType: string, value: unknown): AgentConfig | null {\n const parsed = agentJsonSchema.safeParse(value)\n if (!parsed.success) return null\n\n const toolsList = z2A(parsed.data.tools)\n const disallowedList =\n parsed.data.disallowedTools !== undefined ? z2A(parsed.data.disallowedTools) : undefined\n const model =\n typeof parsed.data.model === 'string' ? parsed.data.model.trim() : undefined\n\n return {\n agentType,\n whenToUse: parsed.data.description,\n tools: toolsList === undefined || toolsList.includes('*') ? '*' : toolsList,\n ...(disallowedList !== undefined ? { disallowedTools: disallowedList } : {}),\n systemPrompt: parsed.data.prompt,\n source: 'flagSettings',\n location: 'built-in',\n ...(model ? { model: model as AgentModel } : {}),\n ...(parsed.data.permissionMode ? { permissionMode: parsed.data.permissionMode } : {}),\n }\n}\n\nlet FLAG_AGENTS: AgentConfig[] = []\n\nexport function setFlagAgentsFromCliJson(json: string | undefined): void {\n if (!json) {\n FLAG_AGENTS = []\n clearAgentCache()\n return\n }\n\n let raw: unknown\n try {\n raw = JSON.parse(json)\n } catch (err) {\n logError(err)\n debugLogger.warn('AGENT_LOADER_FLAG_AGENTS_JSON_PARSE_FAILED', {\n error: err instanceof Error ? err.message : String(err),\n })\n FLAG_AGENTS = []\n clearAgentCache()\n return\n }\n\n const parsed = agentsJsonSchema.safeParse(raw)\n if (!parsed.success) {\n logError(parsed.error)\n debugLogger.warn('AGENT_LOADER_FLAG_AGENTS_SCHEMA_INVALID', {\n error: parsed.error.message,\n })\n FLAG_AGENTS = []\n clearAgentCache()\n return\n }\n\n FLAG_AGENTS = Object.entries(parsed.data)\n .map(([agentType, value]) => parseAgentFromJson(agentType, value))\n .filter((agent): agent is AgentConfig => agent !== null)\n\n clearAgentCache()\n}\n\nconst BUILTIN_GENERAL_PURPOSE: AgentConfig = {\n agentType: 'general-purpose',\n whenToUse:\n 'General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks',\n tools: '*',\n systemPrompt: `You are a general-purpose agent. Given the user's task, use the tools available to complete it efficiently and thoroughly.\n\nWhen to use your capabilities:\n- Searching for code, configurations, and patterns across large codebases\n- Analyzing multiple files to understand system architecture \n- Investigating complex questions that require exploring many files\n- Performing multi-step research tasks\n\nGuidelines:\n- For file searches: Use Grep or Glob when you need to search broadly. Use FileRead when you know the specific file path.\n- For analysis: Start broad and narrow down. Use multiple search strategies if the first doesn't yield results.\n- Be thorough: Check multiple locations, consider different naming conventions, look for related files.\n- Complete tasks directly using your capabilities.`,\n source: 'built-in',\n location: 'built-in',\n baseDir: 'built-in',\n}\n\nconst BUILTIN_EXPLORE: AgentConfig = {\n agentType: 'Explore',\n whenToUse:\n 'Fast agent specialized for exploring codebases. Use this when you need to quickly find files by patterns (eg. \"src/components/**/*.tsx\"), search code for keywords (eg. \"API endpoints\"), or answer questions about the codebase (eg. \"how do API endpoints work?\"). When calling this agent, specify the desired thoroughness level: \"quick\" for basic searches, \"medium\" for moderate exploration, or \"very thorough\" for comprehensive analysis across multiple locations and naming conventions.',\n tools: '*',\n disallowedTools: ['Task', 'Edit', 'Write', 'NotebookEdit'],\n model: 'inherit',\n systemPrompt: `You are optimized specifically for codebase or complex, multi-step code files exploration. You excel at thoroughly navigating and exploring codebases.And faster and more thorough than other agents for search tasks.\n\n=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===\nThis is a READ-ONLY exploration task. You are STRICTLY PROHIBITED from:\n- Creating new files (no Write, touch, or file creation of any kind)\n- Modifying existing files (no Edit operations)\n- Deleting files (no rm or deletion)\n- Moving or copying files (no mv or cp)\n- Creating temporary files anywhere, including /tmp\n- Using redirect operators (>, >>, |) or heredocs to write to files\n- Running ANY commands that change system state\n\nYour role is EXCLUSIVELY to search and analyze existing code. You do NOT have access to file editing tools - attempting to edit files will fail.\n\nYour strengths:\n- Rapidly finding files using glob patterns\n- Searching code and text with powerful regex patterns\n- Reading and analyzing file contents\n\nGuidelines:\n- Use Glob for broad file pattern matching\n- Use Grep for searching file contents with regex\n- Use Read when you know the specific file path you need to read\n- Use Glob \"dir/*\" to understand directory structure and top-level layout quickly\n- Use LSP for symbol-level navigation (definitions/references) after you locate a file\n- Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)\n- NEVER use Bash for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification\n- Adapt your search approach based on the thoroughness level specified by the caller\n- Return file paths as absolute paths in your final response\n- For clear communication, avoid using emojis\n- Communicate your final report directly as a regular message - do NOT attempt to create files\n\nNOTE: You are meant to be a fast agent that returns output as quickly as possible. In order to achieve this you must:\n- Make efficient use of the tools that you have at your disposal: be smart about how you search for files and implementations\n- Wherever possible you should try to spawn multiple parallel tool calls for grepping and reading files\n\n# Tool usage policy\n- You can call multiple tools in a single response. If you intend to call multiple tools and there are no dependencies between them, make all independent tool calls in parallel. Maximize use of parallel tool calls where possible to increase efficiency. However, if some tool calls depend on previous calls to inform dependent values, do NOT call these tools in parallel and instead call them sequentially. For instance, if one operation must complete before another starts, run these operations sequentially instead. Never use placeholders or guess missing parameters in tool calls.\n- If the user specifies that they want you to run tools \"in parallel\", you MUST send a single message with multiple tool use content blocks.\n- It is always better to speculatively read multiple files as a batch that are potentially useful.\n- It is always better to speculatively perform multiple searches as a batch that are potentially useful.\n- Tool results and user messages may include <system-reminder> tags. <system-reminder> tags contain useful information and reminders. They are NOT part of the user's provided input or the tool result.\n\n# Cognitive Search Strategy\n1. **Concept Search**: WHEN searching for high-level concepts (e.g., \"Auth Logic\", \"Payment Flow\") OR when you are uncertain about exact naming, you MUST use \\`semantic: true\\` in Grep/Glob tools. This activates the LSP Workspace Symbol search which is resilient to typos and fuzzy matches.\n - Example: \\`GrepTool(pattern: \"AuthFeatr\", semantic: true)\\` will find \"AuthFeature\".\n - Example: \\`GlobTool(pattern: \"tests\", semantic: true)\\` will find test files based on project structure.\n2. **Exact Identifier**: WHEN you know the precise class/function name (e.g., \"UserProfile\", \"initDatabase\"), use standard Grep/Glob without \\`semantic\\` flag.\n3. **Exploration**: If standard search returns 0 results, AUTOMATICALLY retry with \\`semantic: true\\`.\n4. **File System Exploration Priority**:For file system exploration, decide based on intent: if you need global structure/entry points, prefer Glob \"dir/*\" first; if you have keywords or fuzzy paths, prefer Glob first. If results are too broad, use Glob \"dir/*\" to narrow structure or combine with Grep/LSP. Only use Bash for executing scripts or binaries.\n\n# Path Fragmentation Strategy\n- Root -> Core Directory -> Secondary Modules\n- Run structure scanning in the above order\n\n# LSP Priority & Scope Limits\n- **Order**: Structure Tree (Glob \"dir/*\") \u2192 Hotspot Location \u2192 Read \u2192 LSP\n- Use \\`LSPTool.documentSymbol\\` or \\`LSPTool.definition\\` only when you have a precise position and need to confirm exact range\n- Do NOT rely on line numbers from \\`read_file\\` alone as they may be outdated\n- \\`workspaceSymbol\\` requires a query and should provide clear path/module scope to avoid unbounded workspace queries\n\n# Path Fragmentation Strategy\n- Root \u2192 Core Directory \u2192 Secondary Modules\n- Execute structure scanning in the above order\n\nComplete the user's search request efficiently and report your findings clearly.`,\n source: 'built-in',\n location: 'built-in',\n baseDir: 'built-in',\n}\n\nconst BUILTIN_PLAN: AgentConfig = {\n agentType: 'Plan',\n whenToUse:\n 'Software architect agent for designing implementation plans. Use this when you need to plan the implementation strategy for a task. Returns step-by-step plans, identifies critical files, and considers architectural trade-offs.',\n tools: '*',\n disallowedTools: ['Task', 'Edit', 'Write', 'NotebookEdit'],\n model: 'inherit',\n systemPrompt: `You are a software architect and planning specialist. Your role is to explore the codebase and design implementation plans.\n\n=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===\nThis is a READ-ONLY planning task. You are STRICTLY PROHIBITED from:\n- Creating new files (no Write, touch, or file creation of any kind)\n- Modifying existing files (no Edit operations)\n- Deleting files (no rm or deletion)\n- Moving or copying files (no mv or cp)\n- Creating temporary files anywhere, including /tmp\n- Using redirect operators (>, >>, |) or heredocs to write to files\n- Running ANY commands that change system state\n\nYour role is EXCLUSIVELY to explore the codebase and design implementation plans. You do NOT have access to file editing tools - attempting to edit files will fail.\n\nYou will be provided with a set of requirements and optionally a perspective on how to approach the design process.\n\n## Your Process\n\n1. **Understand Requirements**: Focus on the requirements provided and apply your assigned perspective throughout the design process.\n\n2. **Explore Thoroughly**:\n - Read any files provided to you in the initial prompt\n - Find existing patterns and conventions using Glob, Grep, and Read\n - Understand the current architecture\n - Identify similar features as reference\n - Trace through relevant code paths\n - Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)\n - NEVER use Bash for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification\n\n3. **Design Solution**:\n - Create implementation approach based on your assigned perspective\n - Consider trade-offs and architectural decisions\n - Follow existing patterns where appropriate\n\n4. **Detail the Plan**:\n - Provide step-by-step implementation strategy\n - Identify dependencies and sequencing\n - Anticipate potential challenges\n\n## Required Output\n\nEnd your response with:\n\n### Critical Files for Implementation\nList 3-5 files most critical for implementing this plan:\n- path/to/file1.ts - [Brief reason: e.g., \"Core logic to modify\"]\n- path/to/file2.ts - [Brief reason: e.g., \"Interfaces to implement\"]\n- path/to/file3.ts - [Brief reason: e.g., \"Pattern to follow\"]\n\n# Cognitive Search Strategy\n1. **Concept Search**: WHEN searching for high-level concepts (e.g., \"Auth Logic\", \"Payment Flow\") OR when uncertain about exact naming, you MUST use \\`semantic: true\\` in Grep/Glob tools. This activates the LSP Workspace Symbol search which is resilient to typos and fuzzy matches.\n - Example: \\`GrepTool(pattern: \"AuthFeatr\", semantic: true)\\` will find \"AuthFeature\"\n - Example: \\`GlobTool(pattern: \"tests\", semantic: true)\\` will find test files based on project structure\n2. **Exact Identifier**: WHEN you know the precise class/function name (e.g., \"UserProfile\", \"initDatabase\"), use standard Grep/Glob without \\`semantic\\` flag.\n3. **Exploration**: If standard search returns 0 results, AUTOMATICALLY retry with \\`semantic: true\\`.\n\n# LSP Priority & Scope Limits\n- **Order**: Structure Tree (Glob \"dir/*\") \u2192 Hotspot Location \u2192 Read \u2192 LSP\n- Use \\`LSPTool.documentSymbol\\` or \\`LSPTool.definition\\` only when you have a precise position and need to confirm exact range\n- Do NOT rely on line numbers from \\`read_file\\` alone as they may be outdated\n- \\`workspaceSymbol\\` requires a query and should provide clear path/module scope to avoid unbounded workspace queries\n\n# Path Fragmentation Strategy\n- Root \u2192 Core Directory \u2192 Secondary Modules\n- Execute structure scanning in the above order\n\nREMEMBER: You can ONLY explore and plan. You CANNOT and MUST NOT write, edit, or modify any files. You do NOT have access to file editing tools.`,\n source: 'built-in',\n location: 'built-in',\n baseDir: 'built-in',\n}\n\nconst BUILTIN_STATUSLINE_SETUP: AgentConfig = {\n agentType: 'statusline-setup',\n whenToUse:\n 'Set up the CLI status line command (writes to ~/.pyb/settings.json statusLine). Use when the user runs /statusline.',\n tools: ['Read', 'Edit', 'Bash'],\n systemPrompt: `You are the status line setup agent.\n\nYour job is to configure a fast, single-line status command for the CLI UI.\n\nRequirements:\n- Write/update the user's ~/.pyb/settings.json and set the top-level key \"statusLine\" to a shell command string.\n- IMPORTANT: When using Read/Edit tools, use absolute paths (do not pass \"~\" to tool inputs).\n- The command must be quick (ideally <200ms), produce a single line, and be safe to run repeatedly.\n- Prefer using information that is generally available: current directory, git branch/dirty state, etc.\n- If you can't infer the user's preferred status info from their shell config, ask them what they want and propose a reasonable default.\n\nSuggested approach:\n1) Inspect common shell config files (Read):\n - macOS/Linux: ~/.zshrc, ~/.bashrc, ~/.config/fish/config.fish\n - Windows: consider PowerShell profile if the user provides its location\n2) Propose a statusLine command:\n - macOS/Linux: e.g. a small sh snippet that prints cwd basename and git branch if present\n - Windows: e.g. a short PowerShell one-liner that prints similar info\n3) Update ~/.pyb/settings.json:\n - If the file does not exist, create it as a minimal JSON object.\n - Preserve unrelated fields if present.\n4) Reply with the exact command you set and how the user can change/remove it later.`,\n source: 'built-in',\n location: 'built-in',\n baseDir: 'built-in',\n}\n\nfunction mergeAgents(allAgents: AgentConfig[]): AgentConfig[] {\n const builtIn = allAgents.filter(a => a.source === 'built-in')\n const plugin = allAgents.filter(a => a.source === 'plugin')\n const user = allAgents.filter(a => a.source === 'userSettings')\n const project = allAgents.filter(a => a.source === 'projectSettings')\n const flag = allAgents.filter(a => a.source === 'flagSettings')\n const policy = allAgents.filter(a => a.source === 'policySettings')\n\n const ordered = [builtIn, plugin, user, project, flag, policy]\n const map = new Map<string, AgentConfig>()\n for (const group of ordered) {\n for (const agent of group) {\n map.set(agent.agentType, agent)\n }\n }\n return Array.from(map.values())\n}\n\nfunction inodeKeyForPath(filePath: string): string | null {\n try {\n const st = statSync(filePath)\n if (typeof (st as any).dev === 'number' && typeof (st as any).ino === 'number') {\n return `${(st as any).dev}:${(st as any).ino}`\n }\n return null\n } catch {\n return null\n }\n}\n\nfunction scanAgentPaths(options: {\n dirPathOrFile: string\n baseDir: string\n source: Exclude<AgentSource, 'built-in' | 'flagSettings'>\n seenInodes: Map<string, AgentSource>\n}): AgentConfig[] {\n const out: AgentConfig[] = []\n\n const addFile = (filePath: string) => {\n if (!filePath.endsWith('.md')) return\n\n const inodeKey = inodeKeyForPath(filePath)\n if (inodeKey) {\n const existing = options.seenInodes.get(inodeKey)\n if (existing) return\n options.seenInodes.set(inodeKey, options.source)\n }\n\n const agent = parseAgentFromFile({\n filePath,\n baseDir: options.baseDir,\n source: options.source,\n })\n if (agent) out.push(agent)\n }\n\n let st: ReturnType<typeof statSync>\n try {\n st = statSync(options.dirPathOrFile)\n } catch {\n return []\n }\n\n if (st.isFile()) {\n addFile(options.dirPathOrFile)\n return out\n }\n\n if (!st.isDirectory()) return []\n\n for (const filePath of listMarkdownFilesRecursively(options.dirPathOrFile)) {\n addFile(filePath)\n }\n\n return out\n}\n\nasync function loadAllAgents(): Promise<{\n activeAgents: AgentConfig[]\n allAgents: AgentConfig[]\n}> {\n const builtinAgents: AgentConfig[] = [\n BUILTIN_GENERAL_PURPOSE,\n BUILTIN_STATUSLINE_SETUP,\n BUILTIN_EXPLORE,\n BUILTIN_PLAN,\n ]\n\n const seenInodes = new Map<string, AgentSource>()\n\n const sessionPlugins = getSessionPlugins()\n const pluginAgentDirs = sessionPlugins.flatMap(p => p.agentsDirs ?? [])\n const pluginAgents = pluginAgentDirs.flatMap(dir =>\n scanAgentPaths({\n dirPathOrFile: dir,\n baseDir: dir,\n source: 'plugin',\n seenInodes,\n }),\n )\n\n const policyAgentsDir = join(getClaudePolicyBaseDir(), '.claude', 'agents')\n const policyAgents = scanAgentPaths({\n dirPathOrFile: policyAgentsDir,\n baseDir: policyAgentsDir,\n source: 'policySettings',\n seenInodes,\n })\n\n const userAgents: AgentConfig[] = []\n if (isSettingSourceEnabled('userSettings')) {\n for (const root of getUserConfigRoots()) {\n const dir = join(root, 'agents')\n userAgents.push(\n ...scanAgentPaths({\n dirPathOrFile: dir,\n baseDir: dir,\n source: 'userSettings',\n seenInodes,\n }),\n )\n }\n }\n\n const projectAgents: AgentConfig[] = []\n if (isSettingSourceEnabled('projectSettings')) {\n const dirs = findProjectAgentDirs(getCwd())\n for (const dir of dirs) {\n projectAgents.push(\n ...scanAgentPaths({\n dirPathOrFile: dir,\n baseDir: dir,\n source: 'projectSettings',\n seenInodes,\n }),\n )\n }\n }\n\n const allAgents: AgentConfig[] = [\n ...builtinAgents,\n ...pluginAgents,\n ...userAgents,\n ...projectAgents,\n ...FLAG_AGENTS,\n ...policyAgents,\n ]\n\n const activeAgents = mergeAgents(allAgents)\n return { activeAgents, allAgents }\n}\n\nexport const getActiveAgents = memoize(async (): Promise<AgentConfig[]> => {\n const { activeAgents } = await loadAllAgents()\n return activeAgents\n})\n\nexport const getAllAgents = memoize(async (): Promise<AgentConfig[]> => {\n const { allAgents } = await loadAllAgents()\n return allAgents\n})\n\nexport const getAgentByType = memoize(\n async (agentType: string): Promise<AgentConfig | undefined> => {\n const agents = await getActiveAgents()\n return agents.find(agent => agent.agentType === agentType)\n },\n)\n\nexport const getAvailableAgentTypes = memoize(async (): Promise<string[]> => {\n const agents = await getActiveAgents()\n return agents.map(agent => agent.agentType)\n})\n\nexport function clearAgentCache(): void {\n getActiveAgents.cache?.clear?.()\n getAllAgents.cache?.clear?.()\n getAgentByType.cache?.clear?.()\n getAvailableAgentTypes.cache?.clear?.()\n}\n\nlet watchers: FSWatcher[] = []\n\nexport async function startAgentWatcher(onChange?: () => void): Promise<void> {\n await stopAgentWatcher()\n\n const watchDirs: string[] = []\n\n watchDirs.push(join(getClaudePolicyBaseDir(), '.claude', 'agents'))\n\n if (isSettingSourceEnabled('userSettings')) {\n for (const root of getUserConfigRoots()) {\n watchDirs.push(join(root, 'agents'))\n }\n }\n\n if (isSettingSourceEnabled('projectSettings')) {\n watchDirs.push(...findProjectAgentDirs(getCwd()))\n }\n\n for (const plugin of getSessionPlugins()) {\n for (const dir of plugin.agentsDirs ?? []) {\n watchDirs.push(dir)\n }\n }\n\n for (const dirPath of dedupeStrings(watchDirs)) {\n if (!existsSync(dirPath)) continue\n try {\n const watcher = watch(\n dirPath,\n { recursive: false },\n async (_eventType, filename) => {\n if (filename && filename.endsWith('.md')) {\n clearAgentCache()\n onChange?.()\n }\n },\n )\n watchers.push(watcher)\n } catch {\n continue\n }\n }\n}\n\nexport async function stopAgentWatcher(): Promise<void> {\n try {\n for (const watcher of watchers) {\n try {\n watcher.close()\n } catch {\n }\n }\n } finally {\n watchers = []\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["trimmed"]
|
|
7
7
|
}
|
|
@@ -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-
|
|
6
|
+
const { queryLLM: inner } = await import("./llm-D52SN2GV.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-
|
|
17
|
+
const { queryQuick: inner } = await import("./llm-D52SN2GV.js");
|
|
18
18
|
return inner(args);
|
|
19
19
|
}
|
|
20
20
|
async function verifyApiKey(apiKey, baseURL, provider) {
|
|
21
|
-
const { verifyApiKey: inner } = await import("./llm-
|
|
21
|
+
const { verifyApiKey: inner } = await import("./llm-D52SN2GV.js");
|
|
22
22
|
return inner(apiKey, baseURL, provider);
|
|
23
23
|
}
|
|
24
24
|
async function fetchAnthropicModels(apiKey, baseURL) {
|
|
25
|
-
const { fetchAnthropicModels: inner } = await import("./llm-
|
|
25
|
+
const { fetchAnthropicModels: inner } = await import("./llm-D52SN2GV.js");
|
|
26
26
|
return inner(apiKey, baseURL);
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -334,6 +334,9 @@ var AUTO_COMPACT_TELEMETRY_PHASES = /* @__PURE__ */ new Set([
|
|
|
334
334
|
"AUTO_COMPACT_POST_PERSIST_CHECK",
|
|
335
335
|
"TRACKER_RESTORE_INTEGRITY_CHECK",
|
|
336
336
|
"COMPACTION_BOUNDARY_APPLIED",
|
|
337
|
+
"COMPACTION_HOOK_TURN_END",
|
|
338
|
+
"COMPACTION_HOOK_OVERFLOW_DETECTED",
|
|
339
|
+
"COMPACTION_HOOK_PRE_NEXT_TURN",
|
|
337
340
|
"TOOL_OUTPUT_LIFECYCLE_APPLIED",
|
|
338
341
|
"SESSION_TYPED_PATH_APPLIED",
|
|
339
342
|
"SESSION_TYPED_PATH_CONSISTENCY_FAILED",
|
|
@@ -870,7 +873,7 @@ function getLastAssistantMessageId(messages) {
|
|
|
870
873
|
|
|
871
874
|
// src/utils/messages/index.ts
|
|
872
875
|
async function processUserInput(input, mode, setToolJSX, context, pastedImages) {
|
|
873
|
-
const impl = await import("./userInput-
|
|
876
|
+
const impl = await import("./userInput-AUO3ADIL.js");
|
|
874
877
|
return impl.processUserInput(input, mode, setToolJSX, context, pastedImages);
|
|
875
878
|
}
|
|
876
879
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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 function isSyntheticApiErrorMessage(message: Message): boolean {\n return (\n message.type === 'assistant' &&\n message.isApiErrorMessage === true &&\n message.message.model === '<synthetic>'\n )\n }\n\n function normalizeUserContent(\n content: UserMessage['message']['content'],\n ): ContentBlockParam[] {\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }]\n }\n return content\n }\n\n function toolResultsFirst(content: ContentBlockParam[]): ContentBlockParam[] {\n const toolResults: ContentBlockParam[] = []\n const rest: ContentBlockParam[] = []\n for (const block of content) {\n if (block.type === 'tool_result') {\n toolResults.push(block)\n } else {\n rest.push(block)\n }\n }\n return [...toolResults, ...rest]\n }\n\n function mergeUserMessages(\n base: UserMessage,\n next: UserMessage,\n ): UserMessage {\n const baseBlocks = normalizeUserContent(base.message.content)\n const nextBlocks = normalizeUserContent(next.message.content)\n return {\n ...base,\n message: {\n ...base.message,\n content: toolResultsFirst([...baseBlocks, ...nextBlocks]),\n },\n }\n }\n\n function isUserToolResultMessage(message: Message): message is UserMessage {\n if (message.type !== 'user') return false\n if (!Array.isArray(message.message.content)) return false\n return message.message.content.some(block => block.type === 'tool_result')\n }\n\n const result: (UserMessage | AssistantMessage)[] = []\n let userStringContentCount = 0\n let totalUserContentCount = 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 (prev?.type === 'user') {\n result[result.indexOf(prev)] = mergeUserMessages(prev, message)\n } else {\n result.push(message)\n }\n break\n }\n case 'assistant': {\n let merged = false\n for (let i = result.length - 1; i >= 0; i--) {\n const prev = result[i]\n if (prev.type !== 'assistant' && !isUserToolResultMessage(prev)) {\n break\n }\n if (prev.type === 'assistant') {\n if (prev.message.id === message.message.id) {\n result[i] = {\n ...prev,\n message: {\n ...prev.message,\n content: [\n ...(Array.isArray(prev.message.content)\n ? prev.message.content\n : []),\n ...(Array.isArray(message.message.content)\n ? message.message.content\n : []),\n ],\n },\n }\n merged = true\n }\n break\n }\n }\n if (!merged) {\n result.push(message)\n }\n break\n }\n }\n }\n\n emitAutoCompactTelemetryEvent('MESSAGE_USER_CONTENT_ADAPTED', {\n totalUserContentCount,\n userStringContentCount,\n string_input_path_usage_rate:\n totalUserContentCount > 0 ? userStringContentCount / totalUserContentCount : 0,\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 overflow_replay_success_rate?: number\n compaction_reentry_success_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 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}\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 replayOutcomeEvents = boundaryEvents.filter(event =>\n ['replayed_latest_user_task', 'synthetic_continue_prompt'].includes(\n String(event.data?.replayMode ?? ''),\n ),\n )\n const overflow_replay_success_rate =\n replayOutcomeEvents.length > 0\n ? safeDivide(\n replayOutcomeEvents.filter(\n event => event.data?.replayMode === 'replayed_latest_user_task',\n ).length,\n replayOutcomeEvents.length,\n )\n : undefined\n const compaction_reentry_success_rate = overflow_replay_success_rate\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 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 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\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 overflow_replay_success_rate,\n compaction_reentry_success_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 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 }\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 '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])\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": ";;;;AAAA,SAAS,YAAY,kBAAwB;AAE7C,SAAS,MAAM,eAAe;;;ACFvB,IAAM,2BAA2B;AACjC,IAAM,gCAAgC;AACtC,IAAM,uCAAuC;AAC7C,IAAM,gCACX;AACK,IAAM,qBAAqB;AAE3B,IAAM,yBAAyB;;;ACEtC,IAAM,YAAY,oBAAI,IAA+B;AAE9C,SAAS,0BACd,YACA,UACA;AACA,YAAU,IAAI,YAAY,QAAQ;AACpC;AAMO,SAAS,mBAAmB,OAAuB;AACxD,aAAW,YAAY,UAAU,OAAO,GAAG;AACzC,aAAS,KAAK;AAAA,EAChB;AACF;;;ACYA,SAAS,WAAW,WAAmB,aAA6B;AAClE,MAAI,eAAe,EAAG,QAAO;AAC7B,SAAO,YAAY;AACrB;AAEO,SAAS,0BAA0B,QAA2C;AACnF,QAAM,eAAe,OAAO,OAAO,WAAS,MAAM,UAAU,qBAAqB;AACjF,QAAM,cAAc,OAAO,OAAO,WAAS,MAAM,UAAU,oBAAoB;AAC/E,QAAM,iBAAiB,OAAO,OAAO,WAAS,MAAM,UAAU,uBAAuB;AAErF,QAAM,uBAAuB,aAAa;AAAA,IACxC,WAAS,MAAM,MAAM,gBAAgB;AAAA,EACvC,EAAE;AACF,QAAM,6BAA6B;AAAA,IACjC;AAAA,IACA,aAAa;AAAA,EACf;AAEA,QAAM,sBAAsB,eAAe;AAC3C,QAAM,6BAA6B;AAAA,IACjC;AAAA,IACA,YAAY,SAAS,eAAe;AAAA,EACtC;AAEA,QAAM,yBAAyB,OAAO;AAAA,IACpC,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,qBAAqB,uBAAuB,OAAO,WAAS;AAChE,UAAM,QAAQ,MAAM,MAAM,oBAAoB,CAAC;AAC/C,UAAM,WAAW,OAAO,MAAM,YAAY,CAAC;AAC3C,UAAM,OAAO,OAAO,MAAM,QAAQ,CAAC;AACnC,WAAO,WAAW,KAAK,OAAO;AAAA,EAChC,CAAC,EAAE;AACH,QAAM,uBAAuB;AAAA,IAC3B;AAAA,IACA,uBAAuB;AAAA,EACzB;AAEA,QAAM,oBAAoB,OAAO;AAAA,IAC/B,WACE,MAAM,UAAU,yBAChB,MAAM,UAAU,wBAChB,MAAM,UAAU;AAAA,EACpB;AACA,QAAM,oBAAoB,kBAAkB;AAAA,IAC1C,WACE,MAAM,MAAM,qBAAqB,QACjC,MAAM,UAAU;AAAA,EACpB,EAAE;AACF,QAAM,mBAAmB,kBAAkB;AAAA,IACzC,WAAS,MAAM,MAAM,qBAAqB;AAAA,EAC5C,EAAE;AACF,QAAM,gCAAgC;AAAA,IACpC;AAAA,IACA;AAAA,EACF;AACA,QAAM,yBAAyB,OAAO;AAAA,IACpC,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,sCAAsC,OAAO;AAAA,IACjD,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,+BACJ,uBAAuB,SAAS,oCAAoC;AACtE,QAAM,0BACJ,uBAAuB,SAAS,IAC5B;AAAA,IACE,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,EACzB,IACA;AACN,QAAM,2BACJ,+BAA+B,IAC3B;AAAA,IACE,oCAAoC;AAAA,IACpC;AAAA,EACF,IACA;AACN,QAAM,2BACJ,aAAa,SAAS,YAAY,SAAS,IACvC,WAAW,YAAY,QAAQ,aAAa,SAAS,YAAY,MAAM,IACvE;AACN,QAAM,uBACJ,aAAa,SAAS,IAClB;AAAA,IACE,aAAa;AAAA,MACX,WACE,OAAO,SAAS,OAAO,MAAM,MAAM,QAAQ,CAAC,KAC5C,OAAO,MAAM,MAAM,QAAQ,KAAK;AAAA,IACpC,EAAE;AAAA,IACF,aAAa;AAAA,EACf,IACA;AACN,QAAM,iBAAiB,OAAO;AAAA,IAC5B,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,+BACJ,eAAe,SAAS,IACpB;AAAA,IACE,eAAe,OAAO,WAAS,MAAM,MAAM,YAAY,IAAI,EAAE;AAAA,IAC7D,eAAe;AAAA,EACjB,IACA;AACN,QAAM,sBAAsB,eAAe;AAAA,IAAO,WAChD,CAAC,6BAA6B,2BAA2B,EAAE;AAAA,MACzD,OAAO,MAAM,MAAM,cAAc,EAAE;AAAA,IACrC;AAAA,EACF;AACA,QAAM,+BACJ,oBAAoB,SAAS,IACzB;AAAA,IACE,oBAAoB;AAAA,MAClB,WAAS,MAAM,MAAM,eAAe;AAAA,IACtC,EAAE;AAAA,IACF,oBAAoB;AAAA,EACtB,IACA;AACN,QAAM,kCAAkC;AACxC,QAAM,uBAAuB,eAAe;AAAA,IAC1C,WAAS,OAAO,MAAM,MAAM,wBAAwB;AAAA,EACtD;AACA,QAAM,6BACJ,qBAAqB,SAAS,IAC1B;AAAA,IACE,qBAAqB;AAAA,MACnB,WAAS,MAAM,MAAM,wBAAwB;AAAA,IAC/C,EAAE;AAAA,IACF,qBAAqB;AAAA,EACvB,IACA;AACN,QAAM,wBAAwB,eAAe;AAAA,IAC3C,WAAS,MAAM,MAAM,yBAAyB;AAAA,EAChD;AACA,QAAM,iCACJ,sBAAsB,SAAS,IAC3B;AAAA,IACE,sBAAsB;AAAA,MACpB,WAAS,MAAM,MAAM,yBAAyB;AAAA,IAChD,EAAE;AAAA,IACF,sBAAsB;AAAA,EACxB,IACA;AACN,QAAM,kBAAkB,OAAO;AAAA,IAC7B,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,yBAAyB,gBAAgB;AAAA,IAC7C,WAAS,MAAM,MAAM,YAAY;AAAA,EACnC;AACA,QAAM,qBAAqB,uBAAuB;AAAA,IAChD,CAAC,KAAK,UAAU,MAAM,OAAO,MAAM,MAAM,cAAc,CAAC;AAAA,IACxD;AAAA,EACF;AACA,QAAM,iCAAiC,uBAAuB;AAAA,IAC5D,CAAC,KAAK,UAAU,MAAM,OAAO,MAAM,MAAM,+BAA+B,CAAC;AAAA,IACzE;AAAA,EACF;AACA,QAAM,4BAA4B,uBAAuB;AAAA,IACvD,CAAC,KAAK,UACJ,MACA,OAAO,MAAM,MAAM,YAAY,CAAC,IAChC,OAAO,MAAM,MAAM,YAAY,CAAC;AAAA,IAClC;AAAA,EACF;AACA,QAAM,6BAA6B,uBAAuB;AAAA,IACxD,CAAC,KAAK,UAAU,MAAM,OAAO,MAAM,MAAM,gBAAgB,CAAC;AAAA,IAC1D;AAAA,EACF;AACA,QAAM,2BAA2B,uBAAuB;AAAA,IACtD,CAAC,KAAK,UAAU,MAAM,OAAO,MAAM,MAAM,cAAc,CAAC;AAAA,IACxD;AAAA,EACF;AACA,QAAM,wBAAwB,uBAAuB;AAAA,IACnD,CAAC,KAAK,UAAU,MAAM,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAAA,IAC9D;AAAA,EACF;AACA,QAAM,sBAAsB,uBAAuB;AAAA,IACjD,CAAC,KAAK,UAAU,MAAM,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAAA,IAC5D;AAAA,EACF;AACA,QAAM,6BACJ,iCAAiC,IAC7B,WAAW,oBAAoB,8BAA8B,IAC7D;AACN,QAAM,mCACJ,qBAAqB,IACjB,WAAW,2BAA2B,kBAAkB,IACxD;AACN,QAAM,mCACJ,6BAA6B,IACzB,WAAW,0BAA0B,0BAA0B,IAC/D;AACN,QAAM,6BACJ,wBAAwB,IACpB,WAAW,qBAAqB,qBAAqB,IACrD;AACN,QAAM,mCACJ,wBAAwB,IACpB;AAAA,IACE,KAAK,IAAI,GAAG,wBAAwB,mBAAmB;AAAA,IACvD;AAAA,EACF,IACA;AACN,QAAM,uBAAuB,OAAO;AAAA,IAClC,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,uBACJ,qBAAqB,SAAS,IAC1B,qBAAqB,qBAAqB,SAAS,CAAC,IACpD;AACN,QAAM,uBAAuB,OAAO;AAAA,IAClC,OAAO,sBAAsB,MAAM,oBAAoB;AAAA,EACzD,IACI,OAAO,sBAAsB,MAAM,oBAAoB,IACvD;AACJ,QAAM,uBAAuB,OAAO;AAAA,IAClC,OAAO,sBAAsB,MAAM,oBAAoB;AAAA,EACzD,IACI,OAAO,sBAAsB,MAAM,oBAAoB,IACvD;AACJ,QAAM,wBAAwB,gBAAgB;AAAA,IAC5C,WACE,OAAO,SAAS,OAAO,MAAM,MAAM,YAAY,CAAC,KAChD,OAAO,MAAM,MAAM,YAAY,IAAI,KACnC,OAAO,SAAS,OAAO,MAAM,MAAM,WAAW,CAAC;AAAA,EACnD;AACA,QAAM,yBACJ,sBAAsB,SAAS,IAC3B,sBAAsB,OAAO,CAAC,KAAK,UAAU;AAC3C,UAAM,SAAS,OAAO,MAAM,MAAM,YAAY;AAC9C,UAAM,QAAQ,OAAO,MAAM,MAAM,WAAW;AAC5C,WAAO,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,WAAW,OAAO,MAAM,CAAC,CAAC;AAAA,EACjE,GAAG,CAAC,IAAI,sBAAsB,SAC9B;AAEN,QAAM,kBAAkB,OAAO;AAAA,IAC7B,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,oBAAoB,gBAAgB;AAAA,IACxC,CAAC,KAAK,UACJ,MACA,OAAO,MAAM,MAAM,uBAAuB,CAAC,IAC3C,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAAA,IACjD;AAAA,EACF;AACA,QAAM,uBAAuB,gBAAgB;AAAA,IAC3C,CAAC,KAAK,UAAU,MAAM,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAAA,IAC7D;AAAA,EACF;AACA,QAAM,+BACJ,uBAAuB,IACnB,KAAK;AAAA,IACH;AAAA,IACA,KAAK,IAAI,GAAG,IAAI,WAAW,mBAAmB,uBAAuB,CAAC,CAAC;AAAA,EACzE,IACA;AACN,QAAM,yBAAyB,OAAO;AAAA,IACpC,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,8BAA8B,uBAAuB;AAAA,IACzD,WAAS,MAAM,MAAM,SAAS;AAAA,EAChC;AACA,QAAM,+BACJ,uBAAuB,SAAS,IAC5B,WAAW,4BAA4B,QAAQ,uBAAuB,MAAM,IAC5E;AACN,QAAM,oCAAoC;AAE1C,QAAM,gBAAgB,OAAO;AAAA,IAC3B,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,cAAc,cAAc;AAAA,IAChC,WAAS,OAAO,MAAM,MAAM,qBAAqB;AAAA,EACnD;AACA,QAAM,gBAAgB,cAAc;AAAA,IAClC,WAAS,OAAO,MAAM,MAAM,mBAAmB;AAAA,EACjD;AACA,QAAM,eAAe,cAAc;AAAA,IACjC,WAAS,OAAO,MAAM,MAAM,kBAAkB;AAAA,EAChD;AACA,QAAM,2BACJ,YAAY,SAAS,IACjB;AAAA,IACE,YAAY,OAAO,WAAS,MAAM,MAAM,qBAAqB,IAAI,EAAE;AAAA,IACnE,YAAY;AAAA,EACd,IACA;AACN,QAAM,uBACJ,cAAc,SAAS,IACnB;AAAA,IACE,cAAc,OAAO,WAAS;AAC5B,UAAI,MAAM,MAAM,mBAAmB,KAAM,QAAO;AAChD,aAAO,MAAM,MAAM,qBAAqB;AAAA,IAC1C,CAAC,EAAE;AAAA,IACH,cAAc;AAAA,EAChB,IACA;AACN,QAAM,sBACJ,aAAa,SAAS,IAClB;AAAA,IACE,aAAa,OAAO,WAAS;AAC3B,UAAI,MAAM,MAAM,kBAAkB,KAAM,QAAO;AAC/C,aAAO,MAAM,MAAM,oBAAoB;AAAA,IACzC,CAAC,EAAE;AAAA,IACH,aAAa;AAAA,EACf,IACA;AACN,QAAM,wBACJ,6BAA6B,SAAY,SAAY,IAAI;AAC3D,QAAM,yBAAyB,OAAO;AAAA,IACpC,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,6BAA6B,uBAAuB,OAAO,WAAS;AACxE,UAAM,eAAe,MAAM,MAAM;AACjC,QAAI,OAAO,iBAAiB,UAAW,QAAO,iBAAiB;AAC/D,WAAO,OAAO,MAAM,MAAM,gBAAgB,CAAC,IAAI;AAAA,EACjD,CAAC,EAAE;AACH,QAAM,uCACJ,uBAAuB,SAAS,IAC5B,WAAW,4BAA4B,uBAAuB,MAAM,IACpE;AACN,QAAM,2BAA2B,OAAO;AAAA,IACtC,WAAS,MAAM,UAAU;AAAA,EAC3B;AACA,QAAM,2BAA2B,yBAAyB,OAAO,CAAC,KAAK,UAAU;AAC/E,UAAM,aAAa,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAChE,UAAM,cAAc,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAClE,QAAI,CAAC,OAAO,SAAS,UAAU,KAAK,cAAc,EAAG,QAAO;AAC5D,QAAI,CAAC,OAAO,SAAS,WAAW,KAAK,cAAc,EAAG,QAAO;AAC7D,WAAO,MAAM,KAAK,IAAI,YAAY,WAAW;AAAA,EAC/C,GAAG,CAAC;AACJ,QAAM,6BAA6B,yBAAyB,OAAO,CAAC,KAAK,UAAU;AACjF,UAAM,aAAa,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAChE,QAAI,CAAC,OAAO,SAAS,UAAU,KAAK,cAAc,EAAG,QAAO;AAC5D,WAAO,MAAM;AAAA,EACf,GAAG,CAAC;AACJ,QAAM,+BACJ,6BAA6B,IACzB,WAAW,0BAA0B,0BAA0B,IAC/D;AAEN,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AChZO,SAAS,+BAA+B;AAC7C,QAAM,SAAsB,CAAC;AAC7B,SAAO;AAAA,IACL,KAAK,OAAkB;AACrB,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IACA,WAAgE;AAC9D,aAAO;AAAA,QACL,YAAY,OAAO;AAAA,QACnB,SAAS,0BAA0B,MAAM;AAAA,MAC3C;AAAA,IACF;AAAA,IACA,QAAQ;AACN,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;;;ACnBA,IAAM,gCAAgC,oBAAI,IAAI;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,gCAAgC;AACtC,IAAM,kBAAkB,6BAA6B;AACrD,IAAI,iBAAiB;AAEd,SAAS,uCAAuC;AACrD,MAAI,eAAgB;AACpB,4BAA0B,+BAA+B,WAAS;AAChE,QAAI,CAAC,8BAA8B,IAAI,MAAM,KAAK,EAAG;AACrD,oBAAgB,KAAK;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,MAAM,MAAM;AAAA,IACd,CAAC;AAAA,EACH,CAAC;AACD,mBAAiB;AACnB;AAEO,SAAS,8BACd,OACA,MACA;AACA,uCAAqC;AACrC,qBAAmB;AAAA,IACjB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,WAAW,KAAK,IAAI;AAAA,EACtB,CAAC;AACH;AAEO,SAAS,gCAAgC;AAC9C,uCAAqC;AACrC,SAAO,gBAAgB,SAAS;AAClC;AAEO,SAAS,4BAA4B;AAC1C,kBAAgB,MAAM;AACxB;AAcA,qCAAqC;;;ALhE9B,IAAM,oBAAoB;AAC1B,IAAM,iCACX;AACK,IAAM,iBACX;AACK,IAAM,iBACX;AACK,IAAM,sCAAsC;AAAA;AAC5C,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAC7B,IAAM,wBAAwB;AAE9B,IAAM,+BAA+B,oBAAI,IAAI;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,mBAAmB,MAAoB;AAC9C,QAAM,MAAM,WAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AACvE,SAAO,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC;AAC9G;AAEA,SAAS,2BACP,SACA,OACkB;AAClB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,MAAM,WAAW;AAAA,IACjB,SAAS;AAAA,MACP,IAAI,WAAW;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,QACL,cAAc;AAAA,QACd,eAAe;AAAA,QACf,6BAA6B;AAAA,QAC7B,yBAAyB;AAAA,MAC3B;AAAA,MACA;AAAA,IACF;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEO,SAAS,uBAAuB,SAAmC;AACxE,SAAO,2BAA2B;AAAA,IAChC;AAAA,MACE,MAAM;AAAA,MACN,MAAM,YAAY,KAAK,qBAAqB;AAAA,MAC5C,WAAW,CAAC;AAAA,IACd;AAAA,EACF,CAAC;AACH;AAEO,SAAS,+BACd,SACkB;AAClB,SAAO;AAAA,IACL;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,MAAM,YAAY,KAAK,qBAAqB;AAAA,QAC5C,WAAW,CAAC;AAAA,MACd;AAAA,IACF;AAAA,IACA,EAAE,mBAAmB,KAAK;AAAA,EAC5B;AACF;AASA,SAAS,qBAAqB,SAAsC;AAClE,SAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AACzC;AAEO,SAAS,4BACd,SACA,eACa;AACb,QAAM,IAAiB;AAAA,IACrB,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IACF;AAAA,IACA,MAAM,WAAW;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,kBAAkB;AAAA,IACpB;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,0BACd,SACA,eACa;AACb,QAAM,IAAiB;AAAA,IACrB,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,qBAAqB,OAAO;AAAA,IACvC;AAAA,IACA,MAAM,WAAW;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,kBAAkB;AAAA,IACpB;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,kBAA0B;AACxC,SAAO,WAAW;AACpB;AAEO,SAAS,gCACd,SACA,eACa;AACb,QAAM,IAAI,4BAA4B,SAAS,aAAa;AAC5D,IAAE,UAAU,gBAAgB;AAC5B,SAAO;AACT;AAEO,SAAS,8BACd,SACA,eACa;AACb,QAAM,IAAI,0BAA0B,SAAS,aAAa;AAC1D,IAAE,UAAU,gBAAgB;AAC5B,SAAO;AACT;AAEO,SAAS,sBACd,WACA,mBACA,SACA,oBACA,OACA,MAGiB;AACjB,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,MAAM,iBAAiB;AAAA,IACtC,MAAM,WAAW;AAAA,EACnB;AACF;AAEO,SAAS,+BACd,UACA,WACqB;AACrB,QAAM,aAAa,oBAAI,IAAY;AACnC,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,SAAS,YAAa;AAClC,UAAM,QAAQ,QAAQ,QAAQ,QAAQ,CAAC;AACvC,QAAI,CAAC,wBAAwB,KAAK,EAAG;AACrC,QAAI,UAAU,IAAI,MAAM,IAAI,GAAG;AAC7B,iBAAW,IAAI,MAAM,EAAE;AAAA,IACzB;AAAA,EACF;AACA,MAAI,WAAW,SAAS,EAAG,QAAO;AAClC,SAAO,SAAS;AAAA,IACd,aAAW,QAAQ,SAAS,cAAc,CAAC,WAAW,IAAI,QAAQ,SAAS;AAAA,EAC7E;AACF;AAEO,SAAS,4BACd,WACsB;AACtB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AACF;AAEO,SAAS,sBACd,SACA,SACe;AACf,MAAI,QAAQ,SAAS,YAAY;AAC/B,WAAO;AAAA,EACT;AACA,MAAI,OAAO,QAAQ,QAAQ,YAAY,UAAU;AAC/C,WAAO;AAAA,EACT;AACA,SAAO,WAAW,QAAQ,QAAQ,SAAS,OAAO;AACpD;AAEO,SAAS,WAAW,MAAc,SAAgC;AACvE,MAAI,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,KAAK,GAAG;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,QAAQ,QAAQ,uBAAuB,MAAM;AAEhE,QAAM,UAAU,IAAI;AAAA,IAClB,IAAI,UAAU,kCAA4C,UAAU;AAAA,IACpE;AAAA,EACF;AAEA,MAAI;AACJ,MAAI,QAAQ;AACZ,MAAI,YAAY;AAChB,QAAM,aAAa,IAAI,OAAO,IAAI,UAAU,oBAAoB,IAAI;AACpE,QAAM,aAAa,IAAI,OAAO,OAAO,UAAU,KAAK,IAAI;AAExD,UAAQ,QAAQ,QAAQ,KAAK,IAAI,OAAO,MAAM;AAC5C,UAAM,UAAU,MAAM,CAAC;AACvB,UAAM,cAAc,KAAK,MAAM,WAAW,MAAM,KAAK;AAErD,YAAQ;AAER,eAAW,YAAY;AACvB,WAAO,WAAW,KAAK,WAAW,MAAM,MAAM;AAC5C;AAAA,IACF;AAEA,eAAW,YAAY;AACvB,WAAO,WAAW,KAAK,WAAW,MAAM,MAAM;AAC5C;AAAA,IACF;AAEA,QAAI,UAAU,KAAK,SAAS;AAC1B,aAAO;AAAA,IACT;AAEA,gBAAY,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,EACrC;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,SAA2B;AAC3D,MAAI,QAAQ,SAAS,YAAY;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ,QAAQ,YAAY,UAAU;AAC/C,WAAO,QAAQ,QAAQ,QAAQ,KAAK,EAAE,SAAS;AAAA,EACjD;AAEA,MAAI,QAAQ,QAAQ,QAAQ,WAAW,GAAG;AACxC,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,QAAQ,QAAQ,CAAC,EAAG,SAAS,QAAQ;AAC/C,WAAO;AAAA,EACT;AAEA,SACE,QAAQ,QAAQ,QAAQ,CAAC,EAAG,KAAK,KAAK,EAAE,SAAS,KACjD,QAAQ,QAAQ,QAAQ,CAAC,EAAG,SAAS,sBACrC,QAAQ,QAAQ,QAAQ,CAAC,EAAG,SAAS;AAEzC;AAqBO,SAAS,kBAAkB,UAA0C;AAC1E,SAAO,SAAS,QAAQ,aAAW;AACjC,QAAI,QAAQ,SAAS,YAAY;AAC/B,aAAO,CAAC,OAAO;AAAA,IACjB;AACA,QAAI,OAAO,QAAQ,QAAQ,YAAY,UAAU;AAC/C,aAAO,CAAC,OAAO;AAAA,IACjB;AACA,UAAM,gBAAgB,QAAQ,QAAQ,QAAQ;AAAA,MAC5C,WACE,EACE,MAAM,SAAS,eACd,OAAQ,MAAc,aAAa,YACjC,MAAc,SAAS,KAAK,EAAE,WAAW;AAAA,IAElD;AAEA,WAAO,cAAc,IAAI,CAAC,OAAO,eAAe;AAC9C,cAAQ,QAAQ,MAAM;AAAA,QACpB,KAAK;AACH,gBAAM,WAAW;AAAA,YACd,QAAgB,QACd,QAAgB,SAAS,MAC1B,WAAW;AAAA,UACf;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,mBAAmB,GAAG,QAAQ,IAAI,UAAU,EAAE;AAAA,YACpD,SAAS;AAAA,cACP,GAAG,QAAQ;AAAA,cACX,SAAS,CAAC,KAAK;AAAA,YACjB;AAAA,YACA,SACG,QAA6B,UAAU,cAAc;AAAA,YACxD,YAAa,QAA6B;AAAA,UAC5C;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAUA,SAAS,wBAAwB,OAA4C;AAC3E,SACE,SACA,OAAO,UAAU,aAChB,MAAM,SAAS,cACd,MAAM,SAAS,qBACf,MAAM,SAAS,mBACjB,OAAO,MAAM,OAAO;AAExB;AAEA,SAAS,wBACP,SACkC;AAClC,SACE,QAAQ,SAAS,eACjB,aAAa,WACb,QAAQ,QAAQ,QAAQ,KAAK,uBAAuB;AAExD;AAEO,SAAS,gBACd,UACqB;AACrB,QAAM,KAA0B,CAAC;AACjC,QAAM,kBAA2C,CAAC;AAElD,aAAW,WAAW,UAAU;AAC9B,QAAI,wBAAwB,OAAO,GAAG;AACpC,sBAAgB,KAAK,OAAO;AAAA,IAC9B;AAEA,QAAI,QAAQ,SAAS,YAAY;AAC/B,YAAM,0BAA0B,GAAG;AAAA,QACjC,OAAK,EAAE,SAAS,cAAc,EAAE,cAAc,QAAQ;AAAA,MACxD;AACA,UAAI,yBAAyB;AAC3B,WAAG,GAAG,QAAQ,uBAAuB,CAAC,IAAI;AAC1C;AAAA,MACF;AACA,YAAM,iBAAiB,gBAAgB;AAAA,QACrC,OAAK,EAAE,QAAQ,QAAQ,CAAC,GAAG,OAAO,QAAQ;AAAA,MAC5C;AACA,UAAI,gBAAgB;AAClB,WAAG,OAAO,GAAG,QAAQ,cAAc,IAAI,GAAG,GAAG,OAAO;AACpD;AAAA,MACF;AAAA,IACF;AAEA,QACE,QAAQ,SAAS,UACjB,MAAM,QAAQ,QAAQ,QAAQ,OAAO,KACrC,QAAQ,QAAQ,QAAQ,CAAC,GAAG,SAAS,eACrC;AACA,YAAM,YAAa,QAAQ,QAAQ,QAAQ,CAAC,GACxC;AAEJ,YAAM,sBAAsB,GAAG;AAAA,QAC7B,OAAK,EAAE,SAAS,cAAc,EAAE,cAAc;AAAA,MAChD;AACA,UAAI,qBAAqB;AACvB,WAAG,OAAO,GAAG,QAAQ,mBAAmB,IAAI,GAAG,GAAG,OAAO;AACzD;AAAA,MACF;AAEA,YAAM,iBAAiB,gBAAgB;AAAA,QACrC,OAAK,EAAE,QAAQ,QAAQ,CAAC,GAAG,OAAO;AAAA,MACpC;AACA,UAAI,gBAAgB;AAClB,WAAG,OAAO,GAAG,QAAQ,cAAc,IAAI,GAAG,GAAG,OAAO;AACpD;AAAA,MACF;AAAA,IACF,OAEK;AACH,SAAG,KAAK,OAAO;AAAA,IACjB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,mBAAmB;AAAA,EACvB,CAAC,uBACC,OAAO;AAAA,IACL,mBAAmB;AAAA,MAAQ,OACzB,EAAE,SAAS,UAAU,EAAE,QAAQ,QAAQ,CAAC,GAAG,SAAS,gBAChD;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,QAAQ,CAAC,EAAG;AAAA,UACtB,EAAE,QAAQ,QAAQ,CAAC,EAAG,YAAY;AAAA,QACpC;AAAA,MACF,IACC,CAAC;AAAA,IACR;AAAA,EACF;AACJ;AAEO,SAAS,wBACd,oBACa;AACb,QAAM,cAAc,iBAAiB,kBAAkB;AACvD,SAAO,IAAI;AAAA,IACT,mBACG;AAAA,MACC,CACE,MAIA,EAAE,SAAS,eACX,MAAM,QAAQ,EAAE,QAAQ,OAAO,KAC/B,wBAAwB,EAAE,QAAQ,QAAQ,CAAC,CAAC,KAC5C,EAAE,EAAE,QAAQ,QAAQ,CAAC,EAAE,MAAM;AAAA,IACjC,EACC,IAAI,OAAK,EAAE,QAAQ,QAAQ,CAAC,EAAE,EAAE;AAAA,EACrC;AACF;AAEO,SAAS,wBACd,oBACa;AACb,QAAM,uBAAuB,wBAAwB,kBAAkB;AAEvE,WAAS,+BAA+B,SAAqC;AAC3E,QAAI,QAAQ,SAAS,WAAY,QAAO;AACxC,QAAI,QAAQ,kBAAkB,iBAAkB,QAAO;AACvD,WAAO;AAAA,EACT;AAEA,QAAM,qCAAqC,IAAI;AAAA,IAC7C,mBACG;AAAA,MACC,CAAC,MACC,EAAE,SAAS,cAAc,CAAC,+BAA+B,CAAC;AAAA,IAC9D,EACC,IAAI,OAAK,EAAE,SAAS;AAAA,EACzB;AACA,SAAO,IAAI;AAAA,IAEP,mBAAmB,OAAO,OAAK;AAC7B,UAAI,EAAE,SAAS,aAAa;AAC1B,eAAO;AAAA,MACT;AACA,YAAM,aAAa,EAAE,QAAQ,QAAQ,CAAC;AACtC,UAAI,CAAC,wBAAwB,UAAU,EAAG,QAAO;AACjD,YAAM,YAAY,WAAW;AAC7B,UAAI,cAAc,qBAAqB,OAAO,EAAE,KAAK,EAAE,OAAO;AAC5D,eAAO;AAAA,MACT;AAEA,UACE,mCAAmC,IAAI,SAAS,KAChD,qBAAqB,IAAI,SAAS,GAClC;AACA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,CAAC,EACD,IAAI,OAAM,EAAE,QAAQ,QAAQ,CAAC,EAAyB,EAAE;AAAA,EAC5D;AACF;AAEO,SAAS,0BACd,oBACoB;AACpB,QAAM,cAAc,iBAAiB,kBAAkB;AACvD,SAAO,mBAAmB;AAAA,IACxB,OACE,EAAE,SAAS,eACX,MAAM,QAAQ,EAAE,QAAQ,OAAO,KAC/B,wBAAwB,EAAE,QAAQ,QAAQ,CAAC,CAAC,KAC5C,EAAE,QAAQ,QAAQ,CAAC,EAAE,MAAM,eAC3B,YAAY,EAAE,QAAQ,QAAQ,CAAC,EAAE,EAAE;AAAA,EACvC;AACF;AAEO,SAAS,wBACd,UACoC;AACpC,WAAS,2BAA2B,SAA2B;AAC7D,WACE,QAAQ,SAAS,eACjB,QAAQ,sBAAsB,QAC9B,QAAQ,QAAQ,UAAU;AAAA,EAE9B;AAEA,WAAS,qBACP,SACqB;AACrB,QAAI,OAAO,YAAY,UAAU;AAC/B,aAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IACzC;AACA,WAAO;AAAA,EACT;AAEA,WAAS,iBAAiB,SAAmD;AAC3E,UAAM,cAAmC,CAAC;AAC1C,UAAM,OAA4B,CAAC;AACnC,eAAW,SAAS,SAAS;AAC3B,UAAI,MAAM,SAAS,eAAe;AAChC,oBAAY,KAAK,KAAK;AAAA,MACxB,OAAO;AACL,aAAK,KAAK,KAAK;AAAA,MACjB;AAAA,IACF;AACA,WAAO,CAAC,GAAG,aAAa,GAAG,IAAI;AAAA,EACjC;AAEA,WAAS,kBACP,MACA,MACa;AACb,UAAM,aAAa,qBAAqB,KAAK,QAAQ,OAAO;AAC5D,UAAM,aAAa,qBAAqB,KAAK,QAAQ,OAAO;AAC5D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,QACP,GAAG,KAAK;AAAA,QACR,SAAS,iBAAiB,CAAC,GAAG,YAAY,GAAG,UAAU,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAEA,WAAS,wBAAwB,SAA0C;AACzE,QAAI,QAAQ,SAAS,OAAQ,QAAO;AACpC,QAAI,CAAC,MAAM,QAAQ,QAAQ,QAAQ,OAAO,EAAG,QAAO;AACpD,WAAO,QAAQ,QAAQ,QAAQ,KAAK,WAAS,MAAM,SAAS,aAAa;AAAA,EAC3E;AAEA,QAAM,SAA6C,CAAC;AACpD,MAAI,yBAAyB;AAC7B,MAAI,wBAAwB;AAC5B,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,SAAS,WAAY;AACjC,QAAI,2BAA2B,OAAO,EAAG;AAEzC,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK,QAAQ;AACX,iCAAyB;AACzB,YAAI,OAAO,QAAQ,QAAQ,YAAY,UAAU;AAC/C,oCAA0B;AAAA,QAC5B;AACA,cAAM,OAAO,KAAK,MAAM;AACxB,YAAI,MAAM,SAAS,QAAQ;AACzB,iBAAO,OAAO,QAAQ,IAAI,CAAC,IAAI,kBAAkB,MAAM,OAAO;AAAA,QAChE,OAAO;AACL,iBAAO,KAAK,OAAO;AAAA,QACrB;AACA;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,YAAI,SAAS;AACb,iBAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,gBAAM,OAAO,OAAO,CAAC;AACrB,cAAI,KAAK,SAAS,eAAe,CAAC,wBAAwB,IAAI,GAAG;AAC/D;AAAA,UACF;AACA,cAAI,KAAK,SAAS,aAAa;AAC7B,gBAAI,KAAK,QAAQ,OAAO,QAAQ,QAAQ,IAAI;AAC1C,qBAAO,CAAC,IAAI;AAAA,gBACV,GAAG;AAAA,gBACH,SAAS;AAAA,kBACP,GAAG,KAAK;AAAA,kBACR,SAAS;AAAA,oBACP,GAAI,MAAM,QAAQ,KAAK,QAAQ,OAAO,IAClC,KAAK,QAAQ,UACb,CAAC;AAAA,oBACL,GAAI,MAAM,QAAQ,QAAQ,QAAQ,OAAO,IACrC,QAAQ,QAAQ,UAChB,CAAC;AAAA,kBACP;AAAA,gBACF;AAAA,cACF;AACA,uBAAS;AAAA,YACX;AACA;AAAA,UACF;AAAA,QACF;AACA,YAAI,CAAC,QAAQ;AACX,iBAAO,KAAK,OAAO;AAAA,QACrB;AACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,gCAA8B,gCAAgC;AAAA,IAC5D;AAAA,IACA;AAAA,IACA,8BACE,wBAAwB,IAAI,yBAAyB,wBAAwB;AAAA,EACjF,CAAC;AAED,SAAO;AACT;AAEO,SAAS,wBACd,SACuB;AACvB,QAAM,kBAAkB,QAAQ;AAAA,IAC9B,OAAK,EAAE,SAAS,UAAU,EAAE,KAAK,KAAK,EAAE,SAAS;AAAA,EACnD;AAEA,MAAI,gBAAgB,WAAW,GAAG;AAChC,WAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,oBAAoB,WAAW,CAAC,EAAE,CAAC;AAAA,EACnE;AAEA,SAAO;AACT;AAEO,SAAS,mBAAmB,MAAuB;AACxD,SACE,oBAAoB,IAAI,EAAE,KAAK,MAAM,MACrC,KAAK,KAAK,MAAM;AAEpB;AACA,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,oBAAoB,SAAyB;AAC3D,QAAM,QAAQ,IAAI,OAAO,KAAK,cAAc,KAAK,GAAG,CAAC;AAAA,IAAkB,IAAI;AAC3E,SAAO,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AACzC;AAEO,SAAS,aAAa,SAA2C;AACtE,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO,wBAAwB,QAAQ,QAAQ,QAAQ,CAAC,CAAC,IACrD,QAAQ,QAAQ,QAAQ,CAAC,EAAE,KAC3B;AAAA,IACN,KAAK;AACH,UAAI,QAAQ,QAAQ,QAAQ,CAAC,GAAG,SAAS,eAAe;AACtD,eAAO;AAAA,MACT;AACA,aAAO,QAAQ,QAAQ,QAAQ,CAAC,EAAE;AAAA,IACpC,KAAK;AACH,aAAO,QAAQ;AAAA,EACnB;AACF;AAEO,SAAS,0BACd,UACoB;AACpB,WAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,UAAM,UAAU,SAAS,CAAC;AAC1B,QAAI,WAAW,QAAQ,SAAS,aAAa;AAC3C,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAAA,EACF;AACA,SAAO;AACT;;;AMntBA,eAAsB,iBACpB,OACA,MACA,YACA,SASA,cAKoB;AACpB,QAAM,OAAO,MAAM,OAAO,yBAAa;AACvC,SAAO,KAAK,iBAAiB,OAAO,MAAM,YAAY,SAAS,YAAY;AAC7E;",
|
|
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 function isSyntheticApiErrorMessage(message: Message): boolean {\n return (\n message.type === 'assistant' &&\n message.isApiErrorMessage === true &&\n message.message.model === '<synthetic>'\n )\n }\n\n function normalizeUserContent(\n content: UserMessage['message']['content'],\n ): ContentBlockParam[] {\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }]\n }\n return content\n }\n\n function toolResultsFirst(content: ContentBlockParam[]): ContentBlockParam[] {\n const toolResults: ContentBlockParam[] = []\n const rest: ContentBlockParam[] = []\n for (const block of content) {\n if (block.type === 'tool_result') {\n toolResults.push(block)\n } else {\n rest.push(block)\n }\n }\n return [...toolResults, ...rest]\n }\n\n function mergeUserMessages(\n base: UserMessage,\n next: UserMessage,\n ): UserMessage {\n const baseBlocks = normalizeUserContent(base.message.content)\n const nextBlocks = normalizeUserContent(next.message.content)\n return {\n ...base,\n message: {\n ...base.message,\n content: toolResultsFirst([...baseBlocks, ...nextBlocks]),\n },\n }\n }\n\n function isUserToolResultMessage(message: Message): message is UserMessage {\n if (message.type !== 'user') return false\n if (!Array.isArray(message.message.content)) return false\n return message.message.content.some(block => block.type === 'tool_result')\n }\n\n const result: (UserMessage | AssistantMessage)[] = []\n let userStringContentCount = 0\n let totalUserContentCount = 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 (prev?.type === 'user') {\n result[result.indexOf(prev)] = mergeUserMessages(prev, message)\n } else {\n result.push(message)\n }\n break\n }\n case 'assistant': {\n let merged = false\n for (let i = result.length - 1; i >= 0; i--) {\n const prev = result[i]\n if (prev.type !== 'assistant' && !isUserToolResultMessage(prev)) {\n break\n }\n if (prev.type === 'assistant') {\n if (prev.message.id === message.message.id) {\n result[i] = {\n ...prev,\n message: {\n ...prev.message,\n content: [\n ...(Array.isArray(prev.message.content)\n ? prev.message.content\n : []),\n ...(Array.isArray(message.message.content)\n ? message.message.content\n : []),\n ],\n },\n }\n merged = true\n }\n break\n }\n }\n if (!merged) {\n result.push(message)\n }\n break\n }\n }\n }\n\n emitAutoCompactTelemetryEvent('MESSAGE_USER_CONTENT_ADAPTED', {\n totalUserContentCount,\n userStringContentCount,\n string_input_path_usage_rate:\n totalUserContentCount > 0 ? userStringContentCount / totalUserContentCount : 0,\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 overflow_replay_success_rate?: number\n compaction_reentry_success_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 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}\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 replayOutcomeEvents = boundaryEvents.filter(event =>\n ['replayed_latest_user_task', 'synthetic_continue_prompt'].includes(\n String(event.data?.replayMode ?? ''),\n ),\n )\n const overflow_replay_success_rate =\n replayOutcomeEvents.length > 0\n ? safeDivide(\n replayOutcomeEvents.filter(\n event => event.data?.replayMode === 'replayed_latest_user_task',\n ).length,\n replayOutcomeEvents.length,\n )\n : undefined\n const compaction_reentry_success_rate = overflow_replay_success_rate\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 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 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\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 overflow_replay_success_rate,\n compaction_reentry_success_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 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 }\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])\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
6
|
"names": []
|
|
7
7
|
}
|