pybao-cli 1.5.50 → 1.5.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/REPL-CDBGUX7H.js +53 -0
  2. package/dist/{acp-VXAHCMQ4.js → acp-KC4VUW7Q.js} +47 -47
  3. package/dist/{agentsValidate-PFVCK6ZC.js → agentsValidate-YGJMW4T4.js} +9 -9
  4. package/dist/{ask-7RQ2G5S3.js → ask-YHWMV475.js} +46 -46
  5. package/dist/{autoUpdater-TDN3ABMG.js → autoUpdater-76RMCNA7.js} +4 -4
  6. package/dist/{blockParser-QPLEX5NJ.js → blockParser-RZPICWAA.js} +2 -2
  7. package/dist/{chunk-L4CGYTJQ.js → chunk-2EQA5NLL.js} +1 -1
  8. package/dist/{chunk-FNDIHEBT.js → chunk-33EYH7S3.js} +5 -5
  9. package/dist/{chunk-IXFDCJ25.js → chunk-3I35GELX.js} +5 -5
  10. package/dist/{chunk-CHH6TEXB.js → chunk-4MAX5UNY.js} +1 -1
  11. package/dist/{chunk-ZDDVFBS4.js → chunk-4UQCXDKA.js} +4 -4
  12. package/dist/{chunk-DBMDQEQO.js → chunk-6QSG5OON.js} +5 -5
  13. package/dist/{chunk-VAZ4VRTA.js → chunk-AZF3LTDE.js} +3 -3
  14. package/dist/{chunk-XHAEEYYH.js → chunk-CBDJJ2WQ.js} +2 -2
  15. package/dist/{chunk-YFVKGHW2.js → chunk-DPE2QUR4.js} +4 -4
  16. package/dist/{chunk-CNBKKQSV.js → chunk-DYLRL3GG.js} +1 -1
  17. package/dist/{chunk-F4AXICO7.js → chunk-EXNV3ROJ.js} +1 -1
  18. package/dist/{chunk-NBDDIZNJ.js → chunk-FNMZKMUC.js} +2 -2
  19. package/dist/{chunk-ZKW5V7MR.js → chunk-HSOB4XJ2.js} +1 -1
  20. package/dist/{chunk-7MR3XX5X.js → chunk-I42N2MZA.js} +3 -3
  21. package/dist/{chunk-KKNO6B2K.js → chunk-JGECWVPT.js} +1873 -766
  22. package/dist/{chunk-UJRT7VK2.js → chunk-KPZ4UMNV.js} +1 -1
  23. package/dist/{chunk-CNW45NOZ.js → chunk-KQBUAEA5.js} +4 -4
  24. package/dist/{chunk-NQGIALRP.js → chunk-L2JZIHLB.js} +6 -6
  25. package/dist/{chunk-5ITEAEJC.js → chunk-NQJAXQZX.js} +3 -3
  26. package/dist/{chunk-A45A3UUU.js → chunk-O6CVVWZV.js} +1 -1
  27. package/dist/{chunk-Y7I4XTJJ.js → chunk-OEHXDSEI.js} +4 -4
  28. package/dist/{chunk-NRORTICH.js → chunk-PA5FTBIQ.js} +2 -2
  29. package/dist/{chunk-NSFU6Y4R.js → chunk-QEPBMPEE.js} +1 -1
  30. package/dist/{chunk-5AGDLQAW.js → chunk-QQ27ECXF.js} +1 -1
  31. package/dist/{chunk-J6HKEIL2.js → chunk-QYVB7FJ4.js} +1 -1
  32. package/dist/{chunk-K3QEELFX.js → chunk-R64GVTIZ.js} +3 -3
  33. package/dist/{chunk-LE5VGGP6.js → chunk-RETS7G2B.js} +6 -6
  34. package/dist/{chunk-EY3ZOE75.js → chunk-SZS6SEDB.js} +1 -1
  35. package/dist/{chunk-PXRUNRK7.js → chunk-UCNZU6OO.js} +2 -2
  36. package/dist/{chunk-BQCQ3DEN.js → chunk-UG7ZFONK.js} +4 -4
  37. package/dist/{chunk-C7BUAPKP.js → chunk-VFFYWI27.js} +4 -4
  38. package/dist/{chunk-OMELVAJD.js → chunk-YQ6JLMLS.js} +1 -1
  39. package/dist/{chunk-3IPEAISZ.js → chunk-ZFLQSIXD.js} +3 -3
  40. package/dist/{chunk-5P4A6TN2.js → chunk-ZWTGVUTI.js} +3 -3
  41. package/dist/{cli-PMOATR2H.js → cli-JMJIGYNF.js} +120 -120
  42. package/dist/commands-N4RLEJU6.js +57 -0
  43. package/dist/{config-PQYZDDGW.js → config-6AW7SYEB.js} +6 -6
  44. package/dist/{context-BWXP2WB4.js → context-VGBWHZ57.js} +9 -9
  45. package/dist/{conversationPersistence-CS2SQ6Z6.js → conversationPersistence-AAJPHPUT.js} +4 -4
  46. package/dist/{conversationTracker-3OLKEYWM.js → conversationTracker-MVX6VQG2.js} +5 -5
  47. package/dist/{costTracker-DJVFVAVZ.js → costTracker-KBXHS4NS.js} +2 -2
  48. package/dist/{customCommands-VPTXXYYR.js → customCommands-PJI43HDH.js} +6 -6
  49. package/dist/{env-G5ZYCG5S.js → env-JEHV2OD5.js} +3 -3
  50. package/dist/{file-2I2KXCVN.js → file-G3IOPSJE.js} +5 -5
  51. package/dist/index.js +4 -4
  52. package/dist/{llm-KXF74SNS.js → llm-CVILTZMI.js} +50 -50
  53. package/dist/{llmLazy-L3IJUBN2.js → llmLazy-TS22QBZC.js} +2 -2
  54. package/dist/{loader-CJOJNOV7.js → loader-DA33SOZU.js} +7 -7
  55. package/dist/{lsp-OKPL75YW.js → lsp-M5NJ7YC7.js} +9 -9
  56. package/dist/{lspAnchor-7Z5YNXX3.js → lspAnchor-LUE27QI2.js} +10 -10
  57. package/dist/{mcp-C65V4JYM.js → mcp-3R7KNW6M.js} +10 -10
  58. package/dist/{mentionProcessor-EDZBHP7Y.js → mentionProcessor-KM7DJSIF.js} +8 -8
  59. package/dist/{messages-YBAYUMKL.js → messages-EUS4CRVP.js} +3 -3
  60. package/dist/{model-7WMFC6F7.js → model-3GE72U3P.js} +7 -7
  61. package/dist/{openai-YWEX6G4I.js → openai-3TL5XAIV.js} +8 -8
  62. package/dist/{outputStyles-N6S27KGD.js → outputStyles-7FC4BJZX.js} +7 -7
  63. package/dist/{pluginRuntime-3XWIAPQ7.js → pluginRuntime-IWKORZEI.js} +8 -8
  64. package/dist/{pluginValidation-2JLTTMJL.js → pluginValidation-DC2PWTS3.js} +8 -8
  65. package/dist/prompts-X5RHKH65.js +59 -0
  66. package/dist/{pybAgentSessionId-EPCAMQ25.js → pybAgentSessionId-3LL4RMFU.js} +2 -2
  67. package/dist/{pybAgentSessionLoad-XJ6XWCK5.js → pybAgentSessionLoad-DCESKISD.js} +6 -6
  68. package/dist/{pybAgentSessionResume-SMNXFGFB.js → pybAgentSessionResume-CIJIMHTT.js} +8 -8
  69. package/dist/{pybAgentStreamJson-EQPO52B6.js → pybAgentStreamJson-K7E4VEFE.js} +2 -2
  70. package/dist/{pybAgentStreamJsonSession-33YU7WNJ.js → pybAgentStreamJsonSession-SZMCWTVW.js} +4 -4
  71. package/dist/{pybAgentStructuredStdio-ROCSOGNT.js → pybAgentStructuredStdio-T6JJLJVC.js} +3 -3
  72. package/dist/{pybHooks-6JRPW3VW.js → pybHooks-CYAJNZ6G.js} +7 -7
  73. package/dist/query-7PFFQCW2.js +57 -0
  74. package/dist/{registry-67P26WKJ.js → registry-HF5Y4WZS.js} +6 -6
  75. package/dist/{replSessionBridge-EBXNFUAD.js → replSessionBridge-4XEXXNRH.js} +3 -3
  76. package/dist/{responsesStreaming-NPGJLPV3.js → responsesStreaming-RZW2QVJU.js} +3 -3
  77. package/dist/{ripgrep-DPLWHL7O.js → ripgrep-W5ULQHU4.js} +4 -4
  78. package/dist/{skillMarketplace-MGU4KRUF.js → skillMarketplace-WKOGEWIO.js} +4 -4
  79. package/dist/{smart-edit-AWHJDSU6.js → smart-edit-EQBEMPKQ.js} +2 -2
  80. package/dist/{state-NZVNNCHH.js → state-GWKESQ7O.js} +3 -3
  81. package/dist/theme-VRKM2HNU.js +14 -0
  82. package/dist/{toolPermissionContext-BSFV23IL.js → toolPermissionContext-TAUII5GX.js} +2 -2
  83. package/dist/{toolPermissionSettings-NEXN25B3.js → toolPermissionSettings-Z2I77LVO.js} +9 -9
  84. package/dist/tools-VM7IZKXZ.js +57 -0
  85. package/dist/{userInput-PHXM4ITY.js → userInput-Q2HIIFPM.js} +49 -49
  86. package/dist/{uuid-CVHEFGW4.js → uuid-EJN2AIBK.js} +2 -2
  87. package/package.json +3 -3
  88. package/dist/REPL-5XUDCAF4.js +0 -53
  89. package/dist/REPL-5XUDCAF4.js.map +0 -7
  90. package/dist/acp-VXAHCMQ4.js.map +0 -7
  91. package/dist/agentsValidate-PFVCK6ZC.js.map +0 -7
  92. package/dist/ask-7RQ2G5S3.js.map +0 -7
  93. package/dist/autoUpdater-TDN3ABMG.js.map +0 -7
  94. package/dist/blockParser-QPLEX5NJ.js.map +0 -7
  95. package/dist/chunk-2RXKUCFS.js.map +0 -7
  96. package/dist/chunk-3DFBSQIT.js.map +0 -7
  97. package/dist/chunk-3IPEAISZ.js.map +0 -7
  98. package/dist/chunk-5AGDLQAW.js.map +0 -7
  99. package/dist/chunk-5ITEAEJC.js.map +0 -7
  100. package/dist/chunk-5JHD6MUL.js.map +0 -7
  101. package/dist/chunk-5P4A6TN2.js.map +0 -7
  102. package/dist/chunk-5P7HBXTD.js.map +0 -7
  103. package/dist/chunk-7MR3XX5X.js.map +0 -7
  104. package/dist/chunk-A3BVXXA3.js.map +0 -7
  105. package/dist/chunk-A45A3UUU.js.map +0 -7
  106. package/dist/chunk-B6IMQJZM.js.map +0 -7
  107. package/dist/chunk-BJSWTHRM.js.map +0 -7
  108. package/dist/chunk-BKCAVW2G.js.map +0 -7
  109. package/dist/chunk-BQCQ3DEN.js.map +0 -7
  110. package/dist/chunk-C7BUAPKP.js.map +0 -7
  111. package/dist/chunk-CHH6TEXB.js.map +0 -7
  112. package/dist/chunk-CNBKKQSV.js.map +0 -7
  113. package/dist/chunk-CNW45NOZ.js.map +0 -7
  114. package/dist/chunk-CZZKRPE2.js.map +0 -7
  115. package/dist/chunk-DBMDQEQO.js.map +0 -7
  116. package/dist/chunk-EY3ZOE75.js.map +0 -7
  117. package/dist/chunk-F4AXICO7.js.map +0 -7
  118. package/dist/chunk-FNDIHEBT.js.map +0 -7
  119. package/dist/chunk-I3J4JYES.js.map +0 -7
  120. package/dist/chunk-IXFDCJ25.js.map +0 -7
  121. package/dist/chunk-J6HKEIL2.js.map +0 -7
  122. package/dist/chunk-K3QEELFX.js.map +0 -7
  123. package/dist/chunk-KFEHHKZ2.js.map +0 -7
  124. package/dist/chunk-KKNO6B2K.js.map +0 -7
  125. package/dist/chunk-L4CGYTJQ.js.map +0 -7
  126. package/dist/chunk-LE5VGGP6.js.map +0 -7
  127. package/dist/chunk-MWPFU2KU.js.map +0 -7
  128. package/dist/chunk-NBDDIZNJ.js.map +0 -7
  129. package/dist/chunk-NQGIALRP.js.map +0 -7
  130. package/dist/chunk-NRORTICH.js.map +0 -7
  131. package/dist/chunk-NSFU6Y4R.js.map +0 -7
  132. package/dist/chunk-OMELVAJD.js.map +0 -7
  133. package/dist/chunk-OUXHGDLH.js.map +0 -7
  134. package/dist/chunk-PXRUNRK7.js.map +0 -7
  135. package/dist/chunk-QWIBSCDN.js.map +0 -7
  136. package/dist/chunk-RQVLBMP7.js.map +0 -7
  137. package/dist/chunk-TFHFYID3.js.map +0 -7
  138. package/dist/chunk-UJRT7VK2.js.map +0 -7
  139. package/dist/chunk-UNNVICVU.js.map +0 -7
  140. package/dist/chunk-UZ34JEUK.js.map +0 -7
  141. package/dist/chunk-VAZ4VRTA.js.map +0 -7
  142. package/dist/chunk-XHAEEYYH.js.map +0 -7
  143. package/dist/chunk-XKYHFZEC.js.map +0 -7
  144. package/dist/chunk-Y7I4XTJJ.js.map +0 -7
  145. package/dist/chunk-YFVKGHW2.js.map +0 -7
  146. package/dist/chunk-ZDDVFBS4.js.map +0 -7
  147. package/dist/chunk-ZKW5V7MR.js.map +0 -7
  148. package/dist/cli-PMOATR2H.js.map +0 -7
  149. package/dist/commands-HA2TW7NU.js +0 -57
  150. package/dist/commands-HA2TW7NU.js.map +0 -7
  151. package/dist/config-PQYZDDGW.js.map +0 -7
  152. package/dist/context-BWXP2WB4.js.map +0 -7
  153. package/dist/conversationPersistence-CS2SQ6Z6.js.map +0 -7
  154. package/dist/conversationTracker-3OLKEYWM.js.map +0 -7
  155. package/dist/costTracker-DJVFVAVZ.js.map +0 -7
  156. package/dist/customCommands-VPTXXYYR.js.map +0 -7
  157. package/dist/env-G5ZYCG5S.js.map +0 -7
  158. package/dist/file-2I2KXCVN.js.map +0 -7
  159. package/dist/index.js.map +0 -7
  160. package/dist/llm-KXF74SNS.js.map +0 -7
  161. package/dist/llmLazy-L3IJUBN2.js.map +0 -7
  162. package/dist/loader-CJOJNOV7.js.map +0 -7
  163. package/dist/lsp-OKPL75YW.js.map +0 -7
  164. package/dist/lspAnchor-7Z5YNXX3.js.map +0 -7
  165. package/dist/mcp-C65V4JYM.js.map +0 -7
  166. package/dist/mentionProcessor-EDZBHP7Y.js.map +0 -7
  167. package/dist/messages-YBAYUMKL.js.map +0 -7
  168. package/dist/model-7WMFC6F7.js.map +0 -7
  169. package/dist/openai-YWEX6G4I.js.map +0 -7
  170. package/dist/outputStyles-N6S27KGD.js.map +0 -7
  171. package/dist/pluginRuntime-3XWIAPQ7.js.map +0 -7
  172. package/dist/pluginValidation-2JLTTMJL.js.map +0 -7
  173. package/dist/prompts-HCGQPTDJ.js +0 -59
  174. package/dist/prompts-HCGQPTDJ.js.map +0 -7
  175. package/dist/pybAgentSessionId-EPCAMQ25.js.map +0 -7
  176. package/dist/pybAgentSessionLoad-XJ6XWCK5.js.map +0 -7
  177. package/dist/pybAgentSessionResume-SMNXFGFB.js.map +0 -7
  178. package/dist/pybAgentStreamJson-EQPO52B6.js.map +0 -7
  179. package/dist/pybAgentStreamJsonSession-33YU7WNJ.js.map +0 -7
  180. package/dist/pybAgentStructuredStdio-ROCSOGNT.js.map +0 -7
  181. package/dist/pybHooks-6JRPW3VW.js.map +0 -7
  182. package/dist/query-GGJC3XT2.js +0 -57
  183. package/dist/query-GGJC3XT2.js.map +0 -7
  184. package/dist/registry-67P26WKJ.js.map +0 -7
  185. package/dist/replSessionBridge-EBXNFUAD.js.map +0 -7
  186. package/dist/responsesStreaming-NPGJLPV3.js.map +0 -7
  187. package/dist/ripgrep-DPLWHL7O.js.map +0 -7
  188. package/dist/skillMarketplace-MGU4KRUF.js.map +0 -7
  189. package/dist/smart-edit-AWHJDSU6.js.map +0 -7
  190. package/dist/state-NZVNNCHH.js.map +0 -7
  191. package/dist/theme-XV4CTBG6.js +0 -14
  192. package/dist/theme-XV4CTBG6.js.map +0 -7
  193. package/dist/toolPermissionContext-BSFV23IL.js.map +0 -7
  194. package/dist/toolPermissionSettings-NEXN25B3.js.map +0 -7
  195. package/dist/tools-R7EDLOFS.js +0 -57
  196. package/dist/tools-R7EDLOFS.js.map +0 -7
  197. package/dist/userInput-PHXM4ITY.js.map +0 -7
  198. package/dist/uuid-CVHEFGW4.js.map +0 -7
  199. /package/dist/{chunk-UZ34JEUK.js → chunk-7HEKZ73X.js} +0 -0
  200. /package/dist/{chunk-5JHD6MUL.js → chunk-ADD7XJ5F.js} +0 -0
  201. /package/dist/{chunk-B6IMQJZM.js → chunk-DRSLDSBY.js} +0 -0
  202. /package/dist/{chunk-KFEHHKZ2.js → chunk-F3JSDBR6.js} +0 -0
  203. /package/dist/{chunk-QWIBSCDN.js → chunk-GEEDQS2I.js} +0 -0
  204. /package/dist/{chunk-2RXKUCFS.js → chunk-ISMRCABJ.js} +0 -0
  205. /package/dist/{chunk-MWPFU2KU.js → chunk-JVKJ7J5H.js} +0 -0
  206. /package/dist/{chunk-BJSWTHRM.js → chunk-KNUG3M6O.js} +0 -0
  207. /package/dist/{chunk-UNNVICVU.js → chunk-LG65MFKB.js} +0 -0
  208. /package/dist/{chunk-CZZKRPE2.js → chunk-MGN3VYPN.js} +0 -0
  209. /package/dist/{chunk-A3BVXXA3.js → chunk-OQEZC7X2.js} +0 -0
  210. /package/dist/{chunk-I3J4JYES.js → chunk-OYT6EI36.js} +0 -0
  211. /package/dist/{chunk-RQVLBMP7.js → chunk-PDH2QHLY.js} +0 -0
  212. /package/dist/{chunk-5P7HBXTD.js → chunk-QAMAR4LW.js} +0 -0
  213. /package/dist/{chunk-TFHFYID3.js → chunk-TNCBVAVV.js} +0 -0
  214. /package/dist/{chunk-XKYHFZEC.js → chunk-U6BMHOQT.js} +0 -0
  215. /package/dist/{chunk-OUXHGDLH.js → chunk-VEHLCRJN.js} +0 -0
  216. /package/dist/{chunk-3DFBSQIT.js → chunk-XZG5WCDK.js} +0 -0
  217. /package/dist/{chunk-BKCAVW2G.js → chunk-ZY2PESP4.js} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/session/sessionSqlStore.ts", "../src/utils/session/sessionStoreConfig.ts", "../src/utils/session/sessionStoreSchema.ts", "../src/utils/session/sessionProjectIdentity.ts", "../src/utils/session/sessionSqlDualWriteTelemetry.ts"],
4
- "sourcesContent": ["import { createRequire } from 'node:module'\nimport { existsSync, mkdirSync } from 'fs'\nimport { dirname } from 'path'\nimport type {\n SessionStoreLoadedFileHistorySnapshot,\n SessionStoreLoadedMetaEvent,\n SessionStoreLoadedSummary,\n SessionStore,\n SessionStoreAppendFileHistorySnapshotInput,\n SessionStoreAppendMessageInput,\n SessionStoreAppendMetaEventInput,\n SessionStoreAppendPartInput,\n SessionStoreAppendSummaryInput,\n SessionStoreLoadOptions,\n SessionStoreLoadedMessage,\n} from './sessionStore'\nimport { getSessionStoreDbPath } from './sessionStoreConfig'\nimport { ensureSessionStoreSchema } from './sessionStoreSchema'\nimport { resolveSessionProjectIdentity } from './sessionProjectIdentity'\nimport {\n recordSessionProjectResolveFailure,\n recordSessionProjectResolveSuccess,\n} from './sessionSqlDualWriteTelemetry'\n\ntype BunSqliteDatabase = any\ntype BunSqliteDatabaseCtor = new (\n filePath: string,\n options?: { create?: boolean },\n) => BunSqliteDatabase\n\nconst requireForSqlite = createRequire(import.meta.url)\nlet cachedDatabaseCtor: BunSqliteDatabaseCtor | null | undefined\n\nfunction getDatabaseCtor(): BunSqliteDatabaseCtor | null {\n if (cachedDatabaseCtor !== undefined) return cachedDatabaseCtor\n try {\n const mod = requireForSqlite('bun:sqlite') as {\n Database?: BunSqliteDatabaseCtor\n }\n if (typeof mod?.Database === 'function') {\n cachedDatabaseCtor = mod.Database\n return cachedDatabaseCtor\n }\n } catch {}\n cachedDatabaseCtor = null\n return null\n}\n\nfunction getDatabaseCtorOrThrow(): BunSqliteDatabaseCtor {\n const Database = getDatabaseCtor()\n if (Database) return Database\n const error = new Error(\n 'PYB_SESSION_SQL_UNAVAILABLE: bun:sqlite is unavailable for session store',\n ) as Error & { code?: string }\n error.code = 'PYB_SESSION_SQL_UNAVAILABLE'\n throw error\n}\n\nfunction asNullableText(value: unknown): string | null {\n const text = String(value ?? '').trim()\n return text ? text : null\n}\n\nfunction asRole(value: unknown): 'user' | 'assistant' | 'progress' {\n return value === 'assistant' || value === 'progress' ? value : 'user'\n}\n\nfunction asProjectCwd(value: unknown): string | null {\n const text = String(value ?? '').trim()\n return text ? text : null\n}\n\nexport function createSessionSqlStore(options?: { dbFilePath?: string }): SessionStore {\n const dbFilePath = options?.dbFilePath ?? getSessionStoreDbPath()\n if (!existsSync(dirname(dbFilePath))) {\n mkdirSync(dirname(dbFilePath), { recursive: true })\n }\n const Database = getDatabaseCtorOrThrow()\n const db = new Database(dbFilePath, { create: true })\n ensureSessionStoreSchema(db)\n const upsertProject = db.prepare(`\n INSERT INTO project (id, cwd, normalized_cwd, name, vcs, time_created, time_updated)\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)\n ON CONFLICT(id) DO UPDATE SET\n cwd = excluded.cwd,\n normalized_cwd = excluded.normalized_cwd,\n name = COALESCE(excluded.name, project.name),\n vcs = COALESCE(excluded.vcs, project.vcs),\n time_updated = excluded.time_updated\n `)\n const upsertSession = db.prepare(`\n INSERT INTO session (id, project_id, cwd, created_at, updated_at)\n VALUES (?1, ?2, ?3, ?4, ?5)\n ON CONFLICT(id) DO UPDATE SET\n project_id = COALESCE(excluded.project_id, session.project_id),\n cwd = COALESCE(excluded.cwd, session.cwd),\n updated_at = excluded.updated_at\n `)\n const upsertMessage = db.prepare(`\n INSERT INTO message (\n uuid, session_id, agent_id, role, parent_uuid, logical_parent_uuid,\n request_id, is_api_error, time_created, raw_message_json, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)\n ON CONFLICT(uuid) DO UPDATE SET\n session_id = excluded.session_id,\n agent_id = excluded.agent_id,\n role = excluded.role,\n parent_uuid = excluded.parent_uuid,\n logical_parent_uuid = excluded.logical_parent_uuid,\n request_id = excluded.request_id,\n is_api_error = excluded.is_api_error,\n time_created = excluded.time_created,\n raw_message_json = excluded.raw_message_json,\n updated_at = excluded.updated_at\n `)\n const upsertPart = db.prepare(`\n INSERT INTO part (\n id, message_uuid, session_id, part_index, part_type, raw_part_json, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8)\n ON CONFLICT(id) DO UPDATE SET\n message_uuid = excluded.message_uuid,\n session_id = excluded.session_id,\n part_index = excluded.part_index,\n part_type = excluded.part_type,\n raw_part_json = excluded.raw_part_json,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertSummary = db.prepare(`\n INSERT INTO session_summary (\n id, session_id, leaf_uuid, summary, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n leaf_uuid = excluded.leaf_uuid,\n summary = excluded.summary,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertMetaEvent = db.prepare(`\n INSERT INTO session_meta_event (\n id, session_id, event_type, payload_json, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n event_type = excluded.event_type,\n payload_json = excluded.payload_json,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertFileHistorySnapshot = db.prepare(`\n INSERT INTO file_history_snapshot (\n id, session_id, message_uuid, snapshot_json, is_update, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n message_uuid = excluded.message_uuid,\n snapshot_json = excluded.snapshot_json,\n is_update = excluded.is_update,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const resolveProjectId = (\n projectCwd: string | null,\n timeCreated: number,\n now: number,\n ): string | null => {\n if (!projectCwd) return null\n try {\n const identity = resolveSessionProjectIdentity(projectCwd)\n upsertProject.run(\n identity.projectId,\n identity.projectCwd,\n identity.normalizedCwd,\n null,\n null,\n timeCreated,\n now,\n )\n recordSessionProjectResolveSuccess()\n return identity.projectId\n } catch {\n recordSessionProjectResolveFailure()\n return null\n }\n }\n const appendMessages = (messages: SessionStoreAppendMessageInput[]) => {\n if (!Array.isArray(messages) || messages.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendMessageInput[]) => {\n for (const item of list) {\n const sessionId = String(item.sessionId ?? '').trim()\n const uuid = String(item.uuid ?? '').trim()\n if (!sessionId || !uuid) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertMessage.run(\n uuid,\n sessionId,\n asNullableText(item.agentId),\n asRole(item.role),\n asNullableText(item.parentUuid),\n asNullableText(item.logicalParentUuid),\n asNullableText(item.requestId),\n item.isApiError ? 1 : 0,\n timeCreated,\n JSON.stringify(item.rawMessage ?? {}),\n now,\n )\n }\n })\n tx(messages)\n return messages.length\n }\n const appendParts = (parts: SessionStoreAppendPartInput[]) => {\n if (!Array.isArray(parts) || parts.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendPartInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const messageUuid = String(item.messageUuid ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !messageUuid || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertPart.run(\n id,\n messageUuid,\n sessionId,\n Number(item.partIndex) || 0,\n String(item.partType ?? 'unknown'),\n JSON.stringify(item.rawPart ?? {}),\n timeCreated,\n now,\n )\n }\n })\n tx(parts)\n return parts.length\n }\n const appendSessionSummaries = (records: SessionStoreAppendSummaryInput[]) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendSummaryInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertSummary.run(\n id,\n sessionId,\n asNullableText(item.leafUuid),\n String(item.summary ?? ''),\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const appendSessionMetaEvents = (records: SessionStoreAppendMetaEventInput[]) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendMetaEventInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertMetaEvent.run(\n id,\n sessionId,\n String(item.eventType ?? 'unknown'),\n JSON.stringify(item.payload ?? {}),\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const appendFileHistorySnapshots = (\n records: SessionStoreAppendFileHistorySnapshotInput[],\n ) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendFileHistorySnapshotInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertFileHistorySnapshot.run(\n id,\n sessionId,\n asNullableText(item.messageUuid),\n JSON.stringify(item.snapshot ?? {}),\n item.isSnapshotUpdate ? 1 : 0,\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const loadMessages = (\n sessionId: string,\n options: SessionStoreLoadOptions = {},\n ): SessionStoreLoadedMessage[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const fromTime = Number.isFinite(options.fromTime) ? Number(options.fromTime) : null\n const toTime = Number.isFinite(options.toTime) ? Number(options.toTime) : null\n const rows = db\n .prepare(\n `\n SELECT\n session_id, uuid, role, time_created, raw_message_json,\n agent_id, parent_uuid, logical_parent_uuid, request_id, is_api_error\n FROM message\n WHERE session_id = ?1\n AND (?2 IS NULL OR time_created >= ?2)\n AND (?3 IS NULL OR time_created <= ?3)\n ORDER BY time_created ASC, uuid ASC\n `,\n )\n .all(target, fromTime, toTime) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n uuid: String(row.uuid),\n role: asRole(row.role),\n timeCreated: Number(row.time_created) || 0,\n rawMessage: JSON.parse(String(row.raw_message_json ?? '{}')),\n agentId: asNullableText(row.agent_id),\n parentUuid: asNullableText(row.parent_uuid),\n logicalParentUuid: asNullableText(row.logical_parent_uuid),\n requestId: asNullableText(row.request_id),\n isApiError: Number(row.is_api_error ?? 0) > 0,\n }))\n }\n const loadSessionSummaries = (sessionId: string): SessionStoreLoadedSummary[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, leaf_uuid, summary, time_created\n FROM session_summary\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n leafUuid: asNullableText(row.leaf_uuid),\n summary: String(row.summary ?? ''),\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const loadSessionMetaEvents = (sessionId: string): SessionStoreLoadedMetaEvent[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, event_type, payload_json, time_created\n FROM session_meta_event\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n eventType: String(row.event_type ?? ''),\n payload: JSON.parse(String(row.payload_json ?? '{}')),\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const loadFileHistorySnapshots = (\n sessionId: string,\n ): SessionStoreLoadedFileHistorySnapshot[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, message_uuid, snapshot_json, is_update, time_created\n FROM file_history_snapshot\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n messageUuid: asNullableText(row.message_uuid),\n snapshot: JSON.parse(String(row.snapshot_json ?? '{}')),\n isSnapshotUpdate: Number(row.is_update ?? 0) > 0,\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const findLatestSessionId = (cwd?: string): string | null => {\n const projectScope = asProjectCwd(cwd)\n if (projectScope) {\n const scopeIdentity = resolveSessionProjectIdentity(projectScope)\n const projectRow = db\n .prepare(\n `\n SELECT id\n FROM session\n WHERE project_id = ?1\n ORDER BY updated_at DESC, id DESC\n LIMIT 1\n `,\n )\n .get(scopeIdentity.projectId) as { id?: string } | null\n const projectScopedId = asNullableText(projectRow?.id)\n if (projectScopedId) return projectScopedId\n\n const cwdRow = db\n .prepare(\n `\n SELECT id\n FROM session\n WHERE cwd = ?1\n ORDER BY updated_at DESC, id DESC\n LIMIT 1\n `,\n )\n .get(projectScope) as { id?: string } | null\n const cwdScopedId = asNullableText(cwdRow?.id)\n if (cwdScopedId) return cwdScopedId\n }\n const row = db\n .prepare(\n `\n SELECT session_id\n FROM message\n ORDER BY time_created DESC, uuid DESC\n LIMIT 1\n `,\n )\n .get() as { session_id?: string } | null\n return asNullableText(row?.session_id)\n }\n const close = () => {\n db.close()\n }\n return {\n appendMessages,\n appendParts,\n appendSessionSummaries,\n appendSessionMetaEvents,\n appendFileHistorySnapshots,\n loadSessionSummaries,\n loadSessionMetaEvents,\n loadFileHistorySnapshots,\n loadMessages,\n findLatestSessionId,\n close,\n }\n}\n", "import { resolveXdgDataPath } from '@utils/config/env'\n\nexport type SessionStoreFlags = {\n sqlWriteEnabled: boolean\n sqlReadEnabled: boolean\n}\n\nlet cachedFlags: SessionStoreFlags | null = null\n\nfunction parseBooleanFlag(\n rawValue: string | undefined,\n defaultValue: boolean,\n): boolean {\n const normalized = String(rawValue ?? '')\n .trim()\n .toLowerCase()\n if (!normalized) return defaultValue\n if (['1', 'true', 'yes', 'on'].includes(normalized)) return true\n if (['0', 'false', 'no', 'off'].includes(normalized)) return false\n return defaultValue\n}\n\nexport function getSessionStoreFlags(): SessionStoreFlags {\n if (cachedFlags) return cachedFlags\n cachedFlags = {\n sqlWriteEnabled: parseBooleanFlag(\n process.env.PYB_SESSION_STORE_SQL_WRITE,\n true,\n ),\n sqlReadEnabled: parseBooleanFlag(process.env.PYB_SESSION_STORE_SQL_READ, true),\n }\n return cachedFlags\n}\n\nexport function getSessionStoreDbPath(): string {\n const override = String(process.env.PYB_SESSION_STORE_DB_PATH ?? '').trim()\n if (override) return override\n return resolveXdgDataPath('sessions/session-store.db')\n}\n\nexport function resetSessionStoreFlagsForTest() {\n cachedFlags = null\n}\n", "type BunSqliteDatabase = any\n\nexport const SESSION_STORE_SCHEMA_VERSION = 2\n\nfunction applyRuntimePragmas(db: BunSqliteDatabase) {\n db.exec(`PRAGMA journal_mode=WAL;`)\n db.exec(`PRAGMA synchronous=NORMAL;`)\n db.exec(`PRAGMA busy_timeout=5000;`)\n db.exec(`PRAGMA foreign_keys=ON;`)\n}\n\nexport function ensureSessionStoreSchema(db: BunSqliteDatabase) {\n applyRuntimePragmas(db)\n db.exec(`\n CREATE TABLE IF NOT EXISTS schema_version (\n name TEXT PRIMARY KEY,\n version INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS project (\n id TEXT PRIMARY KEY,\n cwd TEXT NOT NULL,\n normalized_cwd TEXT NOT NULL,\n name TEXT,\n vcs TEXT,\n time_created INTEGER NOT NULL,\n time_updated INTEGER NOT NULL\n );\n `)\n db.exec(`\n CREATE UNIQUE INDEX IF NOT EXISTS idx_project_normalized_cwd_unique\n ON project(normalized_cwd);\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session (\n id TEXT PRIMARY KEY,\n project_id TEXT,\n cwd TEXT,\n slug TEXT,\n git_branch TEXT,\n user_type TEXT,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `)\n const sessionColumns = db\n .prepare(`PRAGMA table_info(session)`)\n .all() as Array<{ name: string }>\n if (!sessionColumns.some(col => col.name === 'project_id')) {\n db.exec(`ALTER TABLE session ADD COLUMN project_id TEXT;`)\n }\n db.exec(`\n CREATE TABLE IF NOT EXISTS message (\n uuid TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n agent_id TEXT,\n role TEXT NOT NULL,\n parent_uuid TEXT,\n logical_parent_uuid TEXT,\n request_id TEXT,\n is_api_error INTEGER NOT NULL DEFAULT 0,\n time_created INTEGER NOT NULL,\n raw_message_json TEXT NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS part (\n id TEXT PRIMARY KEY,\n message_uuid TEXT NOT NULL,\n session_id TEXT NOT NULL,\n part_index INTEGER NOT NULL,\n part_type TEXT NOT NULL,\n raw_part_json TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(message_uuid) REFERENCES message(uuid) ON DELETE CASCADE,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session_meta_event (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n event_type TEXT NOT NULL,\n payload_json TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session_summary (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n leaf_uuid TEXT,\n summary TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS file_history_snapshot (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n message_uuid TEXT,\n snapshot_json TEXT NOT NULL,\n is_update INTEGER NOT NULL DEFAULT 0,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_message_session_time_uuid\n ON message(session_id, time_created, uuid);\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_part_session_message_part_index\n ON part(session_id, message_uuid, part_index);\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_meta_event_session_time\n ON session_meta_event(session_id, time_created);\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_session_project_updated\n ON session(project_id, updated_at, id);\n `)\n const now = Date.now()\n db.prepare(\n `\n INSERT INTO schema_version (name, version, updated_at)\n VALUES (?1, ?2, ?3)\n ON CONFLICT(name) DO UPDATE SET\n version = excluded.version,\n updated_at = excluded.updated_at\n `,\n ).run('session_store', SESSION_STORE_SCHEMA_VERSION, now)\n}\n", "import { createHash } from 'crypto'\r\nimport { realpathSync } from 'fs'\r\nimport { findGitRoot } from '@utils/config/projectInstructions'\r\n\r\ntype PlatformKind = NodeJS.Platform\r\n\r\ntype ResolveOptions = {\r\n platform?: PlatformKind\r\n realpathResolver?: (inputPath: string) => string\r\n}\r\n\r\ntype IdentityOptions = ResolveOptions & {\r\n findGitRoot?: (cwd: string) => string | null\r\n}\r\n\r\nexport type SessionProjectIdentity = {\r\n source: 'repo_root' | 'cwd'\r\n projectCwd: string\r\n normalizedCwd: string\r\n projectId: string\r\n}\r\n\r\nfunction defaultRealpath(inputPath: string): string {\r\n try {\r\n return realpathSync(inputPath)\r\n } catch {\r\n return inputPath\r\n }\r\n}\r\n\r\nexport function normalizeSessionProjectPath(\r\n inputPath: string,\r\n options: ResolveOptions = {},\r\n): string {\r\n const platform = options.platform ?? process.platform\r\n const realpathResolver = options.realpathResolver ?? defaultRealpath\r\n const resolved = realpathResolver(inputPath)\r\n let normalized = String(resolved).replace(/\\\\/g, '/')\r\n if (normalized.length > 1) {\r\n normalized = normalized.replace(/\\/+$/, '')\r\n }\r\n if (platform === 'win32') {\r\n normalized = normalized.replace(/^([A-Z]):/, (_m, drive: string) =>\r\n `${drive.toLowerCase()}:`,\r\n )\r\n normalized = normalized.toLowerCase()\r\n }\r\n return normalized\r\n}\r\n\r\nexport function computeSessionProjectId(normalizedCwd: string): string {\r\n return createHash('sha256').update(normalizedCwd, 'utf8').digest('hex')\r\n}\r\n\r\nexport function resolveSessionProjectIdentity(\r\n cwd: string,\r\n options: IdentityOptions = {},\r\n): SessionProjectIdentity {\r\n const gitRootRunner = options.findGitRoot ?? findGitRoot\r\n const repoRoot = gitRootRunner(cwd)\r\n const source: SessionProjectIdentity['source'] = repoRoot ? 'repo_root' : 'cwd'\r\n const projectCwd = repoRoot ?? cwd\r\n const normalizedCwd = normalizeSessionProjectPath(projectCwd, options)\r\n const projectId = computeSessionProjectId(normalizedCwd)\r\n return {\r\n source,\r\n projectCwd,\r\n normalizedCwd,\r\n projectId,\r\n }\r\n}\r\n", "export type SessionSqlDualWriteSnapshot = {\n successCount: number\n failCount: number\n totalLatencyMs: number\n lastErrorCode: string | null\n projectResolveSuccessCount: number\n projectResolveFailCount: number\n}\n\nexport type SessionSqlDualWriteMetrics = SessionSqlDualWriteSnapshot & {\n totalAttempts: number\n successRate: number\n avgSuccessLatencyMs: number\n}\n\nconst state: SessionSqlDualWriteSnapshot = {\n successCount: 0,\n failCount: 0,\n totalLatencyMs: 0,\n lastErrorCode: null,\n projectResolveSuccessCount: 0,\n projectResolveFailCount: 0,\n}\n\nexport function recordSessionSqlDualWriteSuccess(latencyMs: number) {\n state.successCount += 1\n state.totalLatencyMs += Math.max(0, Number(latencyMs) || 0)\n}\n\nexport function recordSessionSqlDualWriteFailure(errorCode?: string | null) {\n state.failCount += 1\n state.lastErrorCode = errorCode ? String(errorCode) : 'SESSION_SQL_DUALWRITE_FAILED'\n}\n\nexport function recordSessionProjectResolveSuccess() {\n state.projectResolveSuccessCount += 1\n}\n\nexport function recordSessionProjectResolveFailure() {\n state.projectResolveFailCount += 1\n}\n\nexport function getSessionSqlDualWriteSnapshot(): SessionSqlDualWriteSnapshot {\n return { ...state }\n}\n\nexport function getSessionSqlDualWriteMetrics(): SessionSqlDualWriteMetrics {\n const totalAttempts = state.successCount + state.failCount\n const successRate = totalAttempts > 0 ? state.successCount / totalAttempts : 0\n const avgSuccessLatencyMs =\n state.successCount > 0 ? state.totalLatencyMs / state.successCount : 0\n return {\n ...state,\n totalAttempts,\n successRate,\n avgSuccessLatencyMs,\n }\n}\n\nexport function resetSessionSqlDualWriteTelemetry() {\n state.successCount = 0\n state.failCount = 0\n state.totalLatencyMs = 0\n state.lastErrorCode = null\n state.projectResolveSuccessCount = 0\n state.projectResolveFailCount = 0\n}\n"],
5
- "mappings": "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",
6
- "names": ["options"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/session/sessionState.ts"],
4
- "sourcesContent": ["type SessionStateBase = {\n modelErrors: Record<string, unknown>\n currentError: string | null\n}\n\ntype SessionCoreStateShape<\n TMessage = unknown,\n TToolPermissionContext = unknown,\n TResponseState = Record<string, unknown>,\n TConversationTracker = unknown,\n TMode = string,\n> = {\n sessionId?: string\n cwd?: string\n messages?: TMessage[]\n toolPermissionContext?: TToolPermissionContext\n readFileTimestamps?: Record<string, number>\n responseState?: TResponseState\n currentModeId?: TMode\n conversationTracker?: TConversationTracker\n}\n\ntype SessionState = SessionStateBase & SessionCoreStateShape\n\nconst isDebug =\n process.argv.includes('--debug') ||\n process.argv.includes('-d') ||\n process.env.DEBUG === 'true'\n\nfunction createSessionStateBase(\n overrides?: Partial<SessionStateBase>,\n): SessionStateBase {\n return {\n modelErrors: {},\n currentError: null,\n ...(overrides ?? {}),\n }\n}\n\nfunction createSessionCoreState<\n TMessage = unknown,\n TToolPermissionContext = unknown,\n TResponseState = Record<string, unknown>,\n TConversationTracker = unknown,\n TMode = string,\n>(\n coreState: Required<\n SessionCoreStateShape<\n TMessage,\n TToolPermissionContext,\n TResponseState,\n TConversationTracker,\n TMode\n >\n >,\n baseState?: Partial<SessionStateBase>,\n): SessionStateBase &\n Required<\n SessionCoreStateShape<\n TMessage,\n TToolPermissionContext,\n TResponseState,\n TConversationTracker,\n TMode\n >\n > {\n return {\n ...createSessionStateBase(baseState),\n ...coreState,\n }\n}\n\nconst sessionStateStore = new Map<string, SessionState>()\nlet currentSessionId: string | null = null\n\nfunction getOrCreateDefaultState(sessionId?: string): SessionState {\n return {\n sessionId,\n ...createSessionStateBase(),\n }\n}\n\nfunction getActiveSessionState(): SessionState | undefined {\n if (!currentSessionId) return undefined\n return (\n sessionStateStore.get(currentSessionId) ??\n ensureSessionState(currentSessionId)\n )\n}\n\nfunction ensureSessionState(\n sessionId: string,\n initial?: Partial<SessionState>,\n): SessionState {\n const existing = sessionStateStore.get(sessionId)\n if (existing) {\n if (initial) Object.assign(existing, initial)\n return existing\n }\n const created: SessionState = {\n ...getOrCreateDefaultState(sessionId),\n ...(initial ?? {}),\n }\n sessionStateStore.set(sessionId, created)\n return created\n}\n\nfunction setCurrentSessionId(sessionId: string | null): void {\n currentSessionId = sessionId\n}\n\nfunction getCurrentSessionId(): string | null {\n return currentSessionId\n}\n\nfunction clearAllSessionStates(): void {\n sessionStateStore.clear()\n currentSessionId = null\n}\n\nfunction setSessionState<K extends keyof SessionState>(\n key: K,\n value: SessionState[K],\n): void\nfunction setSessionState(partialState: Partial<SessionState>): void\nfunction setSessionState(\n keyOrState: keyof SessionState | Partial<SessionState>,\n value?: any,\n): void {\n const active = getActiveSessionState()\n if (!active) return\n if (typeof keyOrState === 'string') {\n active[keyOrState] = value\n } else {\n Object.assign(active, keyOrState)\n }\n}\n\nfunction getSessionState(): SessionState\nfunction getSessionState<K extends keyof SessionState>(key: K): SessionState[K]\nfunction getSessionState<K extends keyof SessionState>(key?: K) {\n const active = getActiveSessionState()\n if (active) return key === undefined ? active : active[key]\n if (key === undefined) return createSessionStateBase() as SessionState\n if (key === 'modelErrors') return {} as SessionState[K]\n if (key === 'currentError') return null as SessionState[K]\n return undefined as SessionState[K]\n}\n\nexport type { SessionState, SessionStateBase, SessionCoreStateShape }\nexport {\n setSessionState,\n getSessionState,\n createSessionStateBase,\n createSessionCoreState,\n ensureSessionState,\n setCurrentSessionId,\n getCurrentSessionId,\n clearAllSessionStates,\n}\n"],
5
- "mappings": ";;;;AAwBA,IAAM,UACJ,QAAQ,KAAK,SAAS,SAAS,KAC/B,QAAQ,KAAK,SAAS,IAAI,KAC1B,QAAQ,IAAI,UAAU;AAExB,SAAS,uBACP,WACkB;AAClB,SAAO;AAAA,IACL,aAAa,CAAC;AAAA,IACd,cAAc;AAAA,IACd,GAAI,aAAa,CAAC;AAAA,EACpB;AACF;AAmCA,IAAM,oBAAoB,oBAAI,IAA0B;AACxD,IAAI,mBAAkC;AAEtC,SAAS,wBAAwB,WAAkC;AACjE,SAAO;AAAA,IACL;AAAA,IACA,GAAG,uBAAuB;AAAA,EAC5B;AACF;AAEA,SAAS,wBAAkD;AACzD,MAAI,CAAC,iBAAkB,QAAO;AAC9B,SACE,kBAAkB,IAAI,gBAAgB,KACtC,mBAAmB,gBAAgB;AAEvC;AAEA,SAAS,mBACP,WACA,SACc;AACd,QAAM,WAAW,kBAAkB,IAAI,SAAS;AAChD,MAAI,UAAU;AACZ,QAAI,QAAS,QAAO,OAAO,UAAU,OAAO;AAC5C,WAAO;AAAA,EACT;AACA,QAAM,UAAwB;AAAA,IAC5B,GAAG,wBAAwB,SAAS;AAAA,IACpC,GAAI,WAAW,CAAC;AAAA,EAClB;AACA,oBAAkB,IAAI,WAAW,OAAO;AACxC,SAAO;AACT;AAEA,SAAS,oBAAoB,WAAgC;AAC3D,qBAAmB;AACrB;AAEA,SAAS,sBAAqC;AAC5C,SAAO;AACT;AAYA,SAAS,gBACP,YACA,OACM;AACN,QAAM,SAAS,sBAAsB;AACrC,MAAI,CAAC,OAAQ;AACb,MAAI,OAAO,eAAe,UAAU;AAClC,WAAO,UAAU,IAAI;AAAA,EACvB,OAAO;AACL,WAAO,OAAO,QAAQ,UAAU;AAAA,EAClC;AACF;AAIA,SAAS,gBAA8C,KAAS;AAC9D,QAAM,SAAS,sBAAsB;AACrC,MAAI,OAAQ,QAAO,QAAQ,SAAY,SAAS,OAAO,GAAG;AAC1D,MAAI,QAAQ,OAAW,QAAO,uBAAuB;AACrD,MAAI,QAAQ,cAAe,QAAO,CAAC;AACnC,MAAI,QAAQ,eAAgB,QAAO;AACnC,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/permissions/toolPermissionSettings.ts"],
4
- "sourcesContent": ["import type {\n ToolPermissionContext,\n ToolPermissionContextUpdate,\n ToolPermissionRuleBehavior,\n ToolPermissionUpdateDestination,\n} from '@pyb-types/toolPermissionContext'\nimport {\n createDefaultToolPermissionContext,\n isPersistableToolPermissionDestination,\n} from '@pyb-types/toolPermissionContext'\nimport { getCurrentProjectConfig } from '@utils/config'\nimport { getCwd } from '@utils/state'\nimport { logError } from '@utils/log'\nimport {\n getSettingsFileCandidates,\n loadSettingsWithLegacyFallback,\n saveSettingsToPrimaryAndSyncLegacy,\n type SettingsFile,\n} from '@utils/config/settingsFiles'\n\ntype SettingsPermissions = {\n allow?: unknown\n deny?: unknown\n ask?: unknown\n additionalDirectories?: unknown\n}\n\ntype SettingsFileWithPermissions = {\n permissions?: SettingsPermissions\n [key: string]: unknown\n}\n\nfunction uniqueStrings(value: unknown): string[] {\n if (!Array.isArray(value)) return []\n const out: string[] = []\n const seen = new Set<string>()\n for (const item of value) {\n if (typeof item !== 'string') continue\n if (seen.has(item)) continue\n seen.add(item)\n out.push(item)\n }\n return out\n}\n\nfunction getPrimarySettingsFilePathForDestination(options: {\n destination: ToolPermissionUpdateDestination\n projectDir?: string\n homeDir?: string\n}): string | null {\n const candidates = getSettingsFileCandidates({\n destination: options.destination as any,\n projectDir: options.projectDir,\n homeDir: options.homeDir,\n })\n return candidates?.primary ?? null\n}\n\nexport function loadToolPermissionContextFromDisk(options?: {\n projectDir?: string\n homeDir?: string\n includePybProjectConfig?: boolean\n isBypassPermissionsModeAvailable?: boolean\n}): ToolPermissionContext {\n const projectDir = options?.projectDir ?? getCwd()\n const homeDir = options?.homeDir\n const includePybProjectConfig = options?.includePybProjectConfig ?? true\n\n const base = createDefaultToolPermissionContext({\n isBypassPermissionsModeAvailable:\n options?.isBypassPermissionsModeAvailable ?? false,\n })\n\n const destinations: ToolPermissionUpdateDestination[] = [\n 'userSettings',\n 'projectSettings',\n 'localSettings',\n ]\n\n for (const destination of destinations) {\n const settings = loadSettingsWithLegacyFallback({\n destination: destination as any,\n projectDir,\n homeDir,\n migrateToPrimary: true,\n }).settings as SettingsFileWithPermissions | null\n const perms = settings?.permissions\n const allow = uniqueStrings(perms?.allow)\n const deny = uniqueStrings(perms?.deny)\n const ask = uniqueStrings(perms?.ask)\n const additionalDirectories = uniqueStrings(perms?.additionalDirectories)\n\n if (allow.length > 0) base.alwaysAllowRules[destination] = allow\n if (deny.length > 0) base.alwaysDenyRules[destination] = deny\n if (ask.length > 0) base.alwaysAskRules[destination] = ask\n\n for (const dir of additionalDirectories) {\n base.additionalWorkingDirectories.set(dir, {\n path: dir,\n source: destination,\n })\n }\n }\n\n if (includePybProjectConfig) {\n try {\n const cfg = getCurrentProjectConfig()\n const allow = Array.isArray(cfg.allowedTools) ? cfg.allowedTools : []\n const deny = Array.isArray((cfg as any).deniedTools)\n ? (cfg as any).deniedTools\n : []\n const ask = Array.isArray((cfg as any).askedTools)\n ? (cfg as any).askedTools\n : []\n\n if (allow.length > 0) {\n const prev = base.alwaysAllowRules.localSettings ?? []\n base.alwaysAllowRules.localSettings = [...new Set([...prev, ...allow])]\n }\n if (deny.length > 0) {\n const prev = base.alwaysDenyRules.localSettings ?? []\n base.alwaysDenyRules.localSettings = [...new Set([...prev, ...deny])]\n }\n if (ask.length > 0) {\n const prev = base.alwaysAskRules.localSettings ?? []\n base.alwaysAskRules.localSettings = [...new Set([...prev, ...ask])]\n }\n } catch (error) {\n logError(error)\n }\n }\n\n return base\n}\n\nfunction getOrCreatePermissions(\n settings: SettingsFileWithPermissions,\n): Required<SettingsFileWithPermissions>['permissions'] {\n const existing = settings.permissions\n if (existing && typeof existing === 'object') {\n return existing as SettingsPermissions\n }\n settings.permissions = {}\n return settings.permissions as SettingsPermissions\n}\n\nfunction behaviorKey(\n behavior: ToolPermissionRuleBehavior,\n): keyof SettingsPermissions {\n switch (behavior) {\n case 'allow':\n return 'allow'\n case 'deny':\n return 'deny'\n case 'ask':\n return 'ask'\n }\n}\n\nexport function persistToolPermissionUpdateToDisk(options: {\n update: ToolPermissionContextUpdate\n projectDir?: string\n homeDir?: string\n}): { persisted: boolean } {\n const update = options.update\n if (!isPersistableToolPermissionDestination(update.destination)) {\n return { persisted: false }\n }\n if (update.type === 'setMode') {\n return { persisted: false }\n }\n\n const filePath = getPrimarySettingsFilePathForDestination({\n destination: update.destination,\n projectDir: options.projectDir,\n homeDir: options.homeDir,\n })\n if (!filePath) return { persisted: false }\n\n const existing =\n (loadSettingsWithLegacyFallback({\n destination: update.destination as any,\n projectDir: options.projectDir,\n homeDir: options.homeDir,\n migrateToPrimary: true,\n }).settings as SettingsFileWithPermissions | null) ?? {}\n const permissions = getOrCreatePermissions(existing)\n\n try {\n switch (update.type) {\n case 'addRules':\n case 'replaceRules':\n case 'removeRules': {\n const key = behaviorKey(update.behavior)\n const current = uniqueStrings(permissions[key])\n\n if (update.type === 'addRules') {\n const merged = [...new Set([...current, ...update.rules])]\n permissions[key] = merged\n } else if (update.type === 'replaceRules') {\n permissions[key] = uniqueStrings(update.rules)\n } else {\n const toRemove = new Set(update.rules)\n permissions[key] = current.filter(rule => !toRemove.has(rule))\n }\n break\n }\n case 'addDirectories':\n case 'removeDirectories': {\n const current = uniqueStrings(permissions.additionalDirectories)\n if (update.type === 'addDirectories') {\n permissions.additionalDirectories = [\n ...new Set([...current, ...update.directories]),\n ]\n } else {\n const toRemove = new Set(update.directories)\n permissions.additionalDirectories = current.filter(\n dir => !toRemove.has(dir),\n )\n }\n break\n }\n default:\n return { persisted: false }\n }\n\n saveSettingsToPrimaryAndSyncLegacy({\n destination: update.destination as any,\n projectDir: options.projectDir,\n homeDir: options.homeDir,\n settings: existing as SettingsFile,\n syncLegacyIfExists: true,\n })\n return { persisted: true }\n } catch (error) {\n logError(error)\n return { persisted: false }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 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 Read on directory paths (offset>=1, optional limit) to understand one-level directory structure 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 one-level directory structure/entry points, read the directory path first; if you have keywords or fuzzy paths, prefer Glob first. If results are too broad, use Read to confirm 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 (Read directory path) \u2192 Hotspot Location \u2192 Read file \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 (Read directory path) \u2192 Hotspot Location \u2192 Read file \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": ";;;;;;;;;;;;;;;;;;AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,UAAU,SAAS,MAAM,eAAe;AACjD,SAAS,eAAe;AACxB,OAAO,YAAY;AACnB,OAAO,UAAU;AACjB,SAAS,eAAe;AACxB,SAAS,SAAS;AA6ClB,SAAS,yBAAiC;AACxC,UAAQ,QAAQ,UAAU;AAAA,IACxB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,WAAW,+BAA+B,IAC7C,kCACA;AAAA,IACN;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,kBAAkB,OAA+B;AACxD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,UAAU,QAAQ,OAAO,IAAI;AACtC;AAEA,SAAS,cAAc,QAA4B;AACjD,QAAM,MAAgB,CAAC;AACvB,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,SAAS,QAAQ;AAC1B,QAAI,CAAC,MAAO;AACZ,QAAI,KAAK,IAAI,KAAK,EAAG;AACrB,SAAK,IAAI,KAAK;AACd,QAAI,KAAK,KAAK;AAAA,EAChB;AACA,SAAO;AACT;AAEA,SAAS,qBAA+B;AACtC,QAAM,iBAAiB,kBAAkB,QAAQ,IAAI,iBAAiB;AACtE,QAAM,cAAc,kBAAkB,QAAQ,IAAI,cAAc;AAEhE,QAAM,iBAAiB,QAAQ,kBAAkB,WAAW;AAC5D,MAAI,gBAAgB;AAClB,WAAO,cAAc,CAAC,kBAAkB,IAAI,eAAe,EAAE,CAAC;AAAA,EAChE;AAEA,SAAO,cAAc;AAAA,IACnB,gBAAgB;AAAA,IAChB,KAAK,QAAQ,GAAG,SAAS;AAAA,IACzB,KAAK,QAAQ,GAAG,MAAM;AAAA,EACxB,CAAC;AACH;AAEA,SAAS,qBAAqB,KAAuB;AACnD,QAAM,SAAmB,CAAC;AAC1B,QAAM,OAAO,QAAQ,QAAQ,CAAC;AAC9B,MAAI,UAAU,QAAQ,GAAG;AAEzB,SAAO,YAAY,MAAM;AACvB,UAAM,YAAY,KAAK,SAAS,WAAW,QAAQ;AACnD,QAAI,WAAW,SAAS,EAAG,QAAO,KAAK,SAAS;AAEhD,UAAM,SAAS,KAAK,SAAS,QAAQ,QAAQ;AAC7C,QAAI,WAAW,MAAM,EAAG,QAAO,KAAK,MAAM;AAE1C,UAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,WAAW,QAAS;AACxB,cAAU;AAAA,EACZ;AAEA,SAAO;AACT;AAEA,SAAS,6BAA6B,SAA2B;AAC/D,QAAM,QAAkB,CAAC;AACzB,QAAM,cAAc,oBAAI,IAAY;AAEpC,QAAM,OAAO,CAAC,YAAoB;AAChC,QAAI;AACJ,QAAI;AACF,gBAAU,SAAS,OAAO;AAAA,IAC5B,QAAQ;AACN;AAAA,IACF;AACA,QAAI,CAAC,QAAQ,YAAY,EAAG;AAE5B,UAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,QAAQ,GAAG;AAC5C,QAAI,YAAY,IAAI,MAAM,EAAG;AAC7B,gBAAY,IAAI,MAAM;AAEtB,QAAI;AAMJ,QAAI;AACF,gBAAU,YAAY,SAAS;AAAA,QAC7B,eAAe;AAAA,QACf,UAAU;AAAA,MACZ,CAAC;AAAA,IACH,QAAQ;AACN;AAAA,IACF;AAEA,eAAW,SAAS,SAAS;AAC3B,YAAM,OAAO,OAAO,MAAM,QAAQ,EAAE;AACpC,YAAM,WAAW,KAAK,SAAS,IAAI;AAEnC,UAAI,MAAM,YAAY,GAAG;AACvB,aAAK,QAAQ;AACb;AAAA,MACF;AAEA,UAAI,MAAM,OAAO,GAAG;AAClB,YAAI,KAAK,SAAS,KAAK,EAAG,OAAM,KAAK,QAAQ;AAC7C;AAAA,MACF;AAEA,UAAI,MAAM,eAAe,GAAG;AAC1B,YAAI;AACF,gBAAM,KAAK,SAAS,QAAQ;AAC5B,cAAI,GAAG,YAAY,GAAG;AACpB,iBAAK,QAAQ;AAAA,UACf,WAAW,GAAG,OAAO,KAAK,KAAK,SAAS,KAAK,GAAG;AAC9C,kBAAM,KAAK,QAAQ;AAAA,UACrB;AAAA,QACF,QAAQ;AACN;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,WAAW,OAAO,EAAG,QAAO,CAAC;AAClC,OAAK,OAAO;AACZ,SAAO;AACT;AAEA,SAAS,iBAAiB,UAAgE;AACxF,MAAI;AACF,UAAM,MAAM,aAAa,UAAU,MAAM;AACzC,UAAM,aAAc,KAAa;AACjC,UAAM,gBAAgB;AAAA,MACpB,SAAS;AAAA,QACP,MAAM;AAAA,UACJ,OAAO,CAAC,UACN,KAAK,KAAK,OAAO,aAAa,EAAE,QAAQ,WAAW,IAAI,MAAS,KAChE,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,OAAO,KAAK,aAAa;AACxC,WAAO;AAAA,MACL,aAAc,OAAO,QAAgB,CAAC;AAAA,MACtC,SAAS,OAAO,OAAO,WAAW,EAAE;AAAA,IACtC;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,QAA4B;AAChD,MAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AACjC,QAAM,MAAgB,CAAC;AAEvB,aAAW,SAAS,QAAQ;AAC1B,QAAI,CAAC,MAAO;AACZ,QAAI,UAAU;AACd,QAAI,WAAW;AAEf,eAAW,MAAM,OAAO;AACtB,cAAQ,IAAI;AAAA,QACV,KAAK;AACH,qBAAW;AACX,qBAAW;AACX;AAAA,QACF,KAAK;AACH,qBAAW;AACX,qBAAW;AACX;AAAA,QACF,KAAK;AACH,cAAI,UAAU;AACZ,uBAAW;AAAA,UACb,OAAO;AACL,kBAAMA,WAAU,QAAQ,KAAK;AAC7B,gBAAIA,SAAS,KAAI,KAAKA,QAAO;AAC7B,sBAAU;AAAA,UACZ;AACA;AAAA,QACF,KAAK;AACH,cAAI,UAAU;AACZ,uBAAW;AAAA,UACb,OAAO;AACL,kBAAMA,WAAU,QAAQ,KAAK;AAC7B,gBAAIA,SAAS,KAAI,KAAKA,QAAO;AAC7B,sBAAU;AAAA,UACZ;AACA;AAAA,QACF;AACE,qBAAW;AAAA,MACf;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ,KAAK;AAC7B,QAAI,QAAS,KAAI,KAAK,OAAO;AAAA,EAC/B;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAiC;AAC1D,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,MAAI,MAAgB,CAAC;AACrB,MAAI,OAAO,UAAU,SAAU,OAAM,CAAC,KAAK;AAAA,WAClC,MAAM,QAAQ,KAAK;AAC1B,UAAM,MAAM,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ;AAE9D,MAAI,IAAI,WAAW,EAAG,QAAO,CAAC;AAC9B,QAAM,SAAS,aAAa,GAAG;AAC/B,MAAI,OAAO,SAAS,GAAG,EAAG,QAAO,CAAC,GAAG;AACrC,SAAO;AACT;AAEA,SAAS,IAAI,OAAsC;AACjD,QAAM,aAAa,kBAAkB,KAAK;AAC1C,MAAI,eAAe,KAAM,QAAO,UAAU,SAAY,SAAY,CAAC;AACnE,MAAI,WAAW,SAAS,GAAG,EAAG,QAAO;AACrC,SAAO;AACT;AAEA,SAAS,GAAG,OAA0B;AACpC,QAAM,aAAa,kBAAkB,KAAK;AAC1C,MAAI,eAAe,KAAM,QAAO,CAAC;AACjC,SAAO;AACT;AAEA,IAAM,yBAAyB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,iBAAiB,QAAoC;AAC5D,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,mBAAmB,SAIL;AACrB,QAAM,SAAS,iBAAiB,QAAQ,QAAQ;AAChD,MAAI,CAAC,OAAQ,QAAO;AAEpB,MAAI;AACF,UAAM,KAAK,OAAO,eAAe,CAAC;AAClC,QAAI,OAAgB,GAAG;AACvB,QAAI,cAAuB,GAAG;AAE9B,QAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,CAAC,eAAe,OAAO,gBAAgB,UAAU;AACxF,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,YAAY,QAAQ,QAAQ,IAAI;AAClD,UAAM,WAAW,SAAS,QAAQ,UAAU,KAAK;AAEjD,UAAM,QAAQ,OAAO,GAAG,UAAU,WAAW,GAAG,QAAQ;AAExD,QAAI,WAAoB,GAAG;AAC3B,QAAI,OAAO,aAAa,YAAY,OAAO,GAAG,eAAe,UAAU;AACrE,iBAAW,GAAG;AAAA,IAChB;AACA,QAAI,QACF,OAAO,aAAa,WAAW,SAAS,KAAK,IAAI;AACnD,QAAI,UAAU,GAAI,SAAQ;AAE1B,UAAM,mBAA4B,GAAG;AACrC,QACE,qBAAqB,UACrB,qBAAqB,UACrB,qBAAqB,SACrB;AACA,YAAY,KAAK,qCAAqC;AAAA,QACpD,UAAU,QAAQ;AAAA,QAClB,aAAa,OAAO,gBAAgB;AAAA,MACtC,CAAC;AAAA,IACH;AACA,UAAM,cAAc,qBAAqB;AAEzC,QAAI,eAAe,SAAS,UAAU,WAAW;AAC/C,YAAY,KAAK,4CAA4C;AAAA,QAC3D,UAAU,QAAQ;AAAA,QAClB;AAAA,MACF,CAAC;AACD,cAAQ;AAAA,IACV;AAEA,UAAM,sBAA+B,GAAG;AACxC,UAAM,wBACJ,OAAO,wBAAwB,YAC/B,uBAAuB,SAAS,mBAA0C;AAC5E,QACE,OAAO,wBAAwB,YAC/B,uBACA,CAAC,uBACD;AACA,YAAY,KAAK,wCAAwC;AAAA,QACvD,UAAU,QAAQ;AAAA,QAClB,gBAAgB;AAAA,QAChB,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,UAAM,YAAY,IAAI,GAAG,KAAK;AAC9B,UAAM,QACJ,cAAc,UAAa,UAAU,SAAS,GAAG,IAAI,MAAM;AAE7D,UAAM,gBACJ,GAAG,mBACH,GAAG,kBAAkB,KACrB,GAAG,kBAAkB;AACvB,UAAM,kBAAkB,kBAAkB,SAAY,IAAI,aAAa,IAAI;AAE3E,UAAM,SAAS,GAAG,GAAG,MAAM;AAC3B,UAAM,eAAe,OAAO,QAAQ,KAAK;AAEzC,UAAM,QAAqB;AAAA,MACzB,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,GAAI,oBAAoB,SAAY,EAAE,gBAAgB,IAAI,CAAC;AAAA,MAC3D,GAAI,OAAO,SAAS,IAAI,EAAE,OAAO,IAAI,EAAE,QAAQ,CAAC,EAAE;AAAA,MAClD;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB,UAAU,iBAAiB,QAAQ,MAAM;AAAA,MACzC,SAAS,QAAQ;AAAA,MACjB;AAAA,MACA,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,MACzB,GAAI,QAAQ,EAAE,MAA2B,IAAI,CAAC;AAAA,MAC9C,GAAI,wBAAwB,EAAE,gBAAgB,oBAA2C,IAAI,CAAC;AAAA,MAC9F,GAAI,cAAc,EAAE,aAAa,KAAK,IAAI,CAAC;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,6BAA6B;AAAA,EAC5D,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC9C,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,wBAAwB;AAAA,EAClD,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,SAAS;AAC1D,CAAC;AAED,IAAM,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe;AAE7D,SAAS,mBAAmB,WAAmB,OAAoC;AACjF,QAAM,SAAS,gBAAgB,UAAU,KAAK;AAC9C,MAAI,CAAC,OAAO,QAAS,QAAO;AAE5B,QAAM,YAAY,IAAI,OAAO,KAAK,KAAK;AACvC,QAAM,iBACJ,OAAO,KAAK,oBAAoB,SAAY,IAAI,OAAO,KAAK,eAAe,IAAI;AACjF,QAAM,QACJ,OAAO,OAAO,KAAK,UAAU,WAAW,OAAO,KAAK,MAAM,KAAK,IAAI;AAErE,SAAO;AAAA,IACL;AAAA,IACA,WAAW,OAAO,KAAK;AAAA,IACvB,OAAO,cAAc,UAAa,UAAU,SAAS,GAAG,IAAI,MAAM;AAAA,IAClE,GAAI,mBAAmB,SAAY,EAAE,iBAAiB,eAAe,IAAI,CAAC;AAAA,IAC1E,cAAc,OAAO,KAAK;AAAA,IAC1B,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,GAAI,QAAQ,EAAE,MAA2B,IAAI,CAAC;AAAA,IAC9C,GAAI,OAAO,KAAK,iBAAiB,EAAE,gBAAgB,OAAO,KAAK,eAAe,IAAI,CAAC;AAAA,EACrF;AACF;AAEA,IAAI,cAA6B,CAAC;AAE3B,SAAS,yBAAyB,MAAgC;AACvE,MAAI,CAAC,MAAM;AACT,kBAAc,CAAC;AACf,oBAAgB;AAChB;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,UAAM,KAAK,MAAM,IAAI;AAAA,EACvB,SAAS,KAAK;AACZ,aAAS,GAAG;AACZ,UAAY,KAAK,8CAA8C;AAAA,MAC7D,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACxD,CAAC;AACD,kBAAc,CAAC;AACf,oBAAgB;AAChB;AAAA,EACF;AAEA,QAAM,SAAS,iBAAiB,UAAU,GAAG;AAC7C,MAAI,CAAC,OAAO,SAAS;AACnB,aAAS,OAAO,KAAK;AACrB,UAAY,KAAK,2CAA2C;AAAA,MAC1D,OAAO,OAAO,MAAM;AAAA,IACtB,CAAC;AACD,kBAAc,CAAC;AACf,oBAAgB;AAChB;AAAA,EACF;AAEA,gBAAc,OAAO,QAAQ,OAAO,IAAI,EACrC,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM,mBAAmB,WAAW,KAAK,CAAC,EAChE,OAAO,CAAC,UAAgC,UAAU,IAAI;AAEzD,kBAAgB;AAClB;AAEA,IAAM,0BAAuC;AAAA,EAC3C,WAAW;AAAA,EACX,WACE;AAAA,EACF,OAAO;AAAA,EACP,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAad,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX;AAEA,IAAM,kBAA+B;AAAA,EACnC,WAAW;AAAA,EACX,WACE;AAAA,EACF,OAAO;AAAA,EACP,iBAAiB,CAAC,QAAQ,QAAQ,SAAS,cAAc;AAAA,EACzD,OAAO;AAAA,EACP,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkEd,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX;AAEA,IAAM,eAA4B;AAAA,EAChC,WAAW;AAAA,EACX,WACE;AAAA,EACF,OAAO;AAAA,EACP,iBAAiB,CAAC,QAAQ,QAAQ,SAAS,cAAc;AAAA,EACzD,OAAO;AAAA,EACP,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmEd,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX;AAEA,IAAM,2BAAwC;AAAA,EAC5C,WAAW;AAAA,EACX,WACE;AAAA,EACF,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,EAC9B,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBd,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX;AAEA,SAAS,YAAY,WAAyC;AAC5D,QAAM,UAAU,UAAU,OAAO,OAAK,EAAE,WAAW,UAAU;AAC7D,QAAM,SAAS,UAAU,OAAO,OAAK,EAAE,WAAW,QAAQ;AAC1D,QAAM,OAAO,UAAU,OAAO,OAAK,EAAE,WAAW,cAAc;AAC9D,QAAM,UAAU,UAAU,OAAO,OAAK,EAAE,WAAW,iBAAiB;AACpE,QAAM,OAAO,UAAU,OAAO,OAAK,EAAE,WAAW,cAAc;AAC9D,QAAM,SAAS,UAAU,OAAO,OAAK,EAAE,WAAW,gBAAgB;AAElE,QAAM,UAAU,CAAC,SAAS,QAAQ,MAAM,SAAS,MAAM,MAAM;AAC7D,QAAM,MAAM,oBAAI,IAAyB;AACzC,aAAW,SAAS,SAAS;AAC3B,eAAW,SAAS,OAAO;AACzB,UAAI,IAAI,MAAM,WAAW,KAAK;AAAA,IAChC;AAAA,EACF;AACA,SAAO,MAAM,KAAK,IAAI,OAAO,CAAC;AAChC;AAEA,SAAS,gBAAgB,UAAiC;AACxD,MAAI;AACF,UAAM,KAAK,SAAS,QAAQ;AAC5B,QAAI,OAAQ,GAAW,QAAQ,YAAY,OAAQ,GAAW,QAAQ,UAAU;AAC9E,aAAO,GAAI,GAAW,GAAG,IAAK,GAAW,GAAG;AAAA,IAC9C;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,SAKN;AAChB,QAAM,MAAqB,CAAC;AAE5B,QAAM,UAAU,CAAC,aAAqB;AACpC,QAAI,CAAC,SAAS,SAAS,KAAK,EAAG;AAE/B,UAAM,WAAW,gBAAgB,QAAQ;AACzC,QAAI,UAAU;AACZ,YAAM,WAAW,QAAQ,WAAW,IAAI,QAAQ;AAChD,UAAI,SAAU;AACd,cAAQ,WAAW,IAAI,UAAU,QAAQ,MAAM;AAAA,IACjD;AAEA,UAAM,QAAQ,mBAAmB;AAAA,MAC/B;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AACD,QAAI,MAAO,KAAI,KAAK,KAAK;AAAA,EAC3B;AAEA,MAAI;AACJ,MAAI;AACF,SAAK,SAAS,QAAQ,aAAa;AAAA,EACrC,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,GAAG,OAAO,GAAG;AACf,YAAQ,QAAQ,aAAa;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,GAAG,YAAY,EAAG,QAAO,CAAC;AAE/B,aAAW,YAAY,6BAA6B,QAAQ,aAAa,GAAG;AAC1E,YAAQ,QAAQ;AAAA,EAClB;AAEA,SAAO;AACT;AAEA,eAAe,gBAGZ;AACD,QAAM,gBAA+B;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,aAAa,oBAAI,IAAyB;AAEhD,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,kBAAkB,eAAe,QAAQ,OAAK,EAAE,cAAc,CAAC,CAAC;AACtE,QAAM,eAAe,gBAAgB;AAAA,IAAQ,SAC3C,eAAe;AAAA,MACb,eAAe;AAAA,MACf,SAAS;AAAA,MACT,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,KAAK,uBAAuB,GAAG,WAAW,QAAQ;AAC1E,QAAM,eAAe,eAAe;AAAA,IAClC,eAAe;AAAA,IACf,SAAS;AAAA,IACT,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AAED,QAAM,aAA4B,CAAC;AACnC,MAAI,uBAAuB,cAAc,GAAG;AAC1C,eAAW,QAAQ,mBAAmB,GAAG;AACvC,YAAM,MAAM,KAAK,MAAM,QAAQ;AAC/B,iBAAW;AAAA,QACT,GAAG,eAAe;AAAA,UAChB,eAAe;AAAA,UACf,SAAS;AAAA,UACT,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAA+B,CAAC;AACtC,MAAI,uBAAuB,iBAAiB,GAAG;AAC7C,UAAM,OAAO,qBAAqB,OAAO,CAAC;AAC1C,eAAW,OAAO,MAAM;AACtB,oBAAc;AAAA,QACZ,GAAG,eAAe;AAAA,UAChB,eAAe;AAAA,UACf,SAAS;AAAA,UACT,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAA2B;AAAA,IAC/B,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,QAAM,eAAe,YAAY,SAAS;AAC1C,SAAO,EAAE,cAAc,UAAU;AACnC;AAEO,IAAM,kBAAkB,QAAQ,YAAoC;AACzE,QAAM,EAAE,aAAa,IAAI,MAAM,cAAc;AAC7C,SAAO;AACT,CAAC;AAEM,IAAM,eAAe,QAAQ,YAAoC;AACtE,QAAM,EAAE,UAAU,IAAI,MAAM,cAAc;AAC1C,SAAO;AACT,CAAC;AAEM,IAAM,iBAAiB;AAAA,EAC5B,OAAO,cAAwD;AAC7D,UAAM,SAAS,MAAM,gBAAgB;AACrC,WAAO,OAAO,KAAK,WAAS,MAAM,cAAc,SAAS;AAAA,EAC3D;AACF;AAEO,IAAM,yBAAyB,QAAQ,YAA+B;AAC3E,QAAM,SAAS,MAAM,gBAAgB;AACrC,SAAO,OAAO,IAAI,WAAS,MAAM,SAAS;AAC5C,CAAC;AAEM,SAAS,kBAAwB;AACtC,kBAAgB,OAAO,QAAQ;AAC/B,eAAa,OAAO,QAAQ;AAC5B,iBAAe,OAAO,QAAQ;AAC9B,yBAAuB,OAAO,QAAQ;AACxC;AAEA,IAAI,WAAwB,CAAC;AAE7B,eAAsB,kBAAkB,UAAsC;AAC5E,QAAM,iBAAiB;AAEvB,QAAM,YAAsB,CAAC;AAE7B,YAAU,KAAK,KAAK,uBAAuB,GAAG,WAAW,QAAQ,CAAC;AAElE,MAAI,uBAAuB,cAAc,GAAG;AAC1C,eAAW,QAAQ,mBAAmB,GAAG;AACvC,gBAAU,KAAK,KAAK,MAAM,QAAQ,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,MAAI,uBAAuB,iBAAiB,GAAG;AAC7C,cAAU,KAAK,GAAG,qBAAqB,OAAO,CAAC,CAAC;AAAA,EAClD;AAEA,aAAW,UAAU,kBAAkB,GAAG;AACxC,eAAW,OAAO,OAAO,cAAc,CAAC,GAAG;AACzC,gBAAU,KAAK,GAAG;AAAA,IACpB;AAAA,EACF;AAEA,aAAW,WAAW,cAAc,SAAS,GAAG;AAC9C,QAAI,CAAC,WAAW,OAAO,EAAG;AAC1B,QAAI;AACF,YAAM,UAAU;AAAA,QACd;AAAA,QACA,EAAE,WAAW,MAAM;AAAA,QACnB,OAAO,YAAY,aAAa;AAC9B,cAAI,YAAY,SAAS,SAAS,KAAK,GAAG;AACxC,4BAAgB;AAChB,uBAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AACA,eAAS,KAAK,OAAO;AAAA,IACvB,QAAQ;AACN;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,mBAAkC;AACtD,MAAI;AACF,eAAW,WAAW,UAAU;AAC9B,UAAI;AACF,gBAAQ,MAAM;AAAA,MAChB,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF,UAAE;AACA,eAAW,CAAC;AAAA,EACd;AACF;",
6
- "names": ["trimmed"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/services/ai/llmLazy.ts"],
4
- "sourcesContent": ["import type { AssistantMessage, UserMessage } from '@query'\nimport type { Tool, ToolUseContext } from '@tool'\nimport type { ModelPointerType } from '@utils/config'\n\nexport async function queryLLM(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string | ModelPointerType\n prependCLISysprompt: boolean\n temperature?: number\n toolUseContext?: ToolUseContext\n __testModelManager?: any\n __testQueryLLMWithPromptCaching?: any\n },\n): Promise<AssistantMessage> {\n const { queryLLM: inner } = await import('@services/llm')\n return inner(\n messages as any,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n options as any,\n )\n}\n\nexport async function queryQuick(args: {\n systemPrompt?: string[]\n userPrompt: string\n assistantPrompt?: string\n enablePromptCaching?: boolean\n signal?: AbortSignal\n}): Promise<AssistantMessage> {\n const { queryQuick: inner } = await import('@services/llm')\n return inner(args as any)\n}\n\nexport async function verifyApiKey(\n apiKey: string,\n baseURL?: string,\n provider?: string,\n): Promise<boolean> {\n const { verifyApiKey: inner } = await import('@services/llm')\n return inner(apiKey, baseURL, provider)\n}\n\nexport async function fetchAnthropicModels(\n apiKey: string,\n baseURL?: string,\n): Promise<any[]> {\n const { fetchAnthropicModels: inner } = await import('@services/llm')\n return inner(apiKey, baseURL)\n}\n"],
5
- "mappings": ";;;;AAIA,eAAsB,SACpB,UACA,cACA,mBACA,OACA,QACA,SAS2B;AAC3B,QAAM,EAAE,UAAU,MAAM,IAAI,MAAM,OAAO,mBAAe;AACxD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,WAAW,MAMH;AAC5B,QAAM,EAAE,YAAY,MAAM,IAAI,MAAM,OAAO,mBAAe;AAC1D,SAAO,MAAM,IAAW;AAC1B;AAEA,eAAsB,aACpB,QACA,SACA,UACkB;AAClB,QAAM,EAAE,cAAc,MAAM,IAAI,MAAM,OAAO,mBAAe;AAC5D,SAAO,MAAM,QAAQ,SAAS,QAAQ;AACxC;AAEA,eAAsB,qBACpB,QACA,SACgB;AAChB,QAAM,EAAE,sBAAsB,MAAM,IAAI,MAAM,OAAO,mBAAe;AACpE,SAAO,MAAM,QAAQ,OAAO;AAC9B;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/system/ripgrep.ts"],
4
- "sourcesContent": ["import { findActualExecutable } from 'spawn-rx'\nimport { memoize } from 'lodash-es'\nimport {\n chmodSync,\n closeSync,\n copyFileSync,\n existsSync,\n mkdirSync,\n mkdtempSync,\n openSync,\n readdirSync,\n readFileSync,\n rmSync,\n statSync,\n writeFileSync,\n} from 'node:fs'\nimport { createHash } from 'node:crypto'\nimport { execFile, spawn } from 'child_process'\nimport debug from 'debug'\nimport { quote } from 'shell-quote'\nimport { logError } from '@utils/log'\nimport { execFileNoThrow } from '@utils/system/execFileNoThrow'\nimport type { BunShellSandboxOptions } from '@utils/bun/shell'\nimport { BunShell } from '@utils/bun/shell'\nimport { basename, dirname, isAbsolute, join, relative, sep } from 'path'\nimport envPaths from 'env-paths'\nimport { unzipSync } from 'fflate'\nimport { fileURLToPath } from 'node:url'\n\nconst d = debug('pyb:ripgrep')\n\nconst DEFAULT_RIPGREP_VERSION = '14.1.1'\nconst PLATFORM_CONFIG = {\n 'arm64-darwin': { platform: 'aarch64-apple-darwin', extension: 'tar.gz' },\n 'arm64-linux': { platform: 'aarch64-unknown-linux-gnu', extension: 'tar.gz' },\n 'x64-darwin': { platform: 'x86_64-apple-darwin', extension: 'tar.gz' },\n 'x64-linux': { platform: 'x86_64-unknown-linux-musl', extension: 'tar.gz' },\n 'x64-win32': { platform: 'x86_64-pc-windows-msvc', extension: 'zip' },\n} as const\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n if (!value) return false\n return ['1', 'true', 'yes', 'on'].includes(value.trim().toLowerCase())\n}\n\nfunction getRipgrepVersion(): string {\n const override = process.env.PYB_RIPGREP_VERSION?.trim()\n return override || DEFAULT_RIPGREP_VERSION\n}\n\nfunction getRipgrepBinaryName(): string {\n return process.platform === 'win32' ? 'rg.exe' : 'rg'\n}\n\nfunction getPlatformConfig() {\n const platformKey = `${process.arch}-${process.platform}` as keyof typeof PLATFORM_CONFIG\n const config = PLATFORM_CONFIG[platformKey]\n if (!config) {\n throw new Error(`Unsupported ripgrep platform: ${platformKey}`)\n }\n return { platformKey, ...config }\n}\n\nfunction getDirname() {\n try {\n return __dirname\n } catch {\n return dirname(fileURLToPath(import.meta.url))\n }\n}\n\nfunction normalizePath(value: string) {\n return value.replaceAll('/', sep).replaceAll('\\\\', sep)\n}\n\nfunction parentDir(path: string, levels: number) {\n let cur = path\n for (let i = 0; i < levels; i += 1) {\n cur = dirname(cur)\n }\n return cur\n}\n\nfunction findPackageRootFrom(start: string): string | null {\n let cur = start\n for (let i = 0; i < 30; i += 1) {\n if (existsSync(join(cur, 'package.json'))) return cur\n const next = dirname(cur)\n if (next === cur) break\n cur = next\n }\n return null\n}\n\nexport function getRipgrepResourcesDirCandidates(input?: {\n env?: NodeJS.ProcessEnv\n runtimeDir?: string\n argvEntry?: string\n}): string[] {\n const env = input?.env ?? process.env\n const candidates: string[] = []\n\n const explicitDir = env.PYB_RIPGREP_RESOURCE_DIR?.trim()\n if (explicitDir) {\n candidates.push(explicitDir)\n }\n\n const packageRoot = env.PYB_PACKAGE_ROOT?.trim()\n if (packageRoot) {\n candidates.push(join(packageRoot, 'resources', 'ripgrep'))\n }\n\n const dirnameValue = input?.runtimeDir ?? getDirname()\n candidates.push(join(dirnameValue, '../../../resources/ripgrep'))\n candidates.push(join(dirnameValue, '../../../../resources/ripgrep'))\n candidates.push(join(dirnameValue, '../../resources/ripgrep'))\n candidates.push(join(dirnameValue, '../../../../../resources/ripgrep'))\n\n const argv1 = input?.argvEntry ?? process.argv?.[1]\n if (argv1) {\n const argvDir = dirname(argv1)\n const root = findPackageRootFrom(argvDir)\n if (root) {\n candidates.push(join(root, 'resources', 'ripgrep'))\n }\n }\n\n const unique: string[] = []\n const seen = new Set<string>()\n for (const item of candidates) {\n const normalized = normalizePath(item)\n if (!seen.has(normalized)) {\n seen.add(normalized)\n unique.push(item)\n }\n }\n return unique\n}\n\nfunction resolveRipgrepResourcesDir() {\n const explicitDir = process.env.PYB_RIPGREP_RESOURCE_DIR?.trim()\n if (explicitDir) {\n return explicitDir\n }\n const candidates = getRipgrepResourcesDirCandidates()\n for (const candidate of candidates) {\n const manifestPath = join(candidate, 'manifest.json')\n if (existsSync(manifestPath)) {\n return candidate\n }\n }\n return candidates[0] ?? join(getDirname(), '../../../resources/ripgrep')\n}\n\nfunction getRipgrepManifestPath() {\n return join(resolveRipgrepResourcesDir(), 'manifest.json')\n}\n\nfunction isVendorFallbackEnabled(env: NodeJS.ProcessEnv = process.env) {\n return isTruthyEnv(env.PYB_RIPGREP_VENDOR_ENABLED)\n}\n\nfunction isFalsyEnv(value: string | undefined): boolean {\n if (!value) return false\n return ['0', 'false', 'no', 'off'].includes(value.trim().toLowerCase())\n}\n\nfunction readBooleanEnv(\n env: NodeJS.ProcessEnv,\n key: string,\n defaultValue: boolean,\n): boolean {\n const raw = env[key]\n if (raw === undefined) return defaultValue\n if (isTruthyEnv(raw)) return true\n if (isFalsyEnv(raw)) return false\n return defaultValue\n}\n\nexport type RipgrepPolicy = {\n vendorFirst: boolean\n offlineStrict: boolean\n allowNetworkFallback: boolean\n allowPathFallback: boolean\n allowVendorFallback: boolean\n}\n\nexport function resolveRipgrepPolicy(\n env: NodeJS.ProcessEnv = process.env,\n): RipgrepPolicy {\n const offlineStrict = readBooleanEnv(env, 'PYB_OFFLINE_STRICT', false)\n const vendorFirst = readBooleanEnv(env, 'PYB_VENDOR_FIRST', true)\n const allowNetworkFallback =\n !offlineStrict && readBooleanEnv(env, 'PYB_ALLOW_NETWORK_FALLBACK', false)\n const preferBundled = isTruthyEnv(env.USE_BUILTIN_RIPGREP)\n const allowPathFallback = !offlineStrict && !preferBundled\n const allowVendorFallback = vendorFirst || isVendorFallbackEnabled(env) || offlineStrict\n return {\n vendorFirst,\n offlineStrict,\n allowNetworkFallback,\n allowPathFallback,\n allowVendorFallback,\n }\n}\n\nexport function getRipgrepPolicyMode(policy: RipgrepPolicy): string {\n if (policy.offlineStrict) {\n return 'strict-offline'\n }\n return policy.vendorFirst ? 'vendor-first' : 'path-first'\n}\n\ntype RipgrepManifest = {\n version?: string\n platforms?: Record<string, { binary?: string; sha256?: string }>\n}\n\nfunction loadRipgrepManifest(): RipgrepManifest {\n const manifestPath = getRipgrepManifestPath()\n if (!existsSync(manifestPath)) {\n const tried = getRipgrepResourcesDirCandidates().map(dir =>\n join(dir, 'manifest.json'),\n )\n throw new Error(\n `ripgrep checksum mismatch: manifest missing at ${manifestPath}; tried=${tried.join(' | ')}`,\n )\n }\n const rawBuffer = readFileSync(manifestPath)\n const raw = decodeManifestContent(rawBuffer)\n const parsed = JSON.parse(raw) as RipgrepManifest\n if (!parsed.platforms || typeof parsed.platforms !== 'object') {\n throw new Error('ripgrep checksum mismatch: manifest platforms missing')\n }\n return parsed\n}\n\nfunction decodeManifestContent(buffer: Buffer) {\n if (buffer.length >= 2) {\n if (buffer[0] === 0xff && buffer[1] === 0xfe) {\n return buffer.subarray(2).toString('utf16le')\n }\n if (buffer[0] === 0xfe && buffer[1] === 0xff) {\n throw new Error('ripgrep checksum mismatch: utf16be manifest is not supported')\n }\n }\n return buffer.toString('utf8').replace(/^\\uFEFF/, '')\n}\n\nfunction sha256File(filePath: string) {\n return createHash('sha256').update(readFileSync(filePath)).digest('hex')\n}\n\nexport function verifyRipgrepBinaryIntegrity(input: {\n binaryPath: string\n platformKey: keyof typeof PLATFORM_CONFIG\n}) {\n const manifest = loadRipgrepManifest()\n const platformEntry = manifest.platforms?.[input.platformKey]\n if (!platformEntry?.sha256) {\n throw new Error(\n `ripgrep checksum mismatch: sha256 missing for platform ${input.platformKey}`,\n )\n }\n const actualSha256 = sha256File(input.binaryPath)\n if (actualSha256 !== platformEntry.sha256) {\n throw new Error(\n `ripgrep checksum mismatch for ${input.platformKey}: expected ${platformEntry.sha256}, got ${actualSha256}`,\n )\n }\n}\n\nexport function resolveVendorRipgrepBinaryPath() {\n const { platformKey } = getPlatformConfig()\n const manifest = loadRipgrepManifest()\n const platformEntry = manifest.platforms?.[platformKey]\n if (!platformEntry?.binary) {\n throw new Error(`vendor ripgrep binary missing for ${platformKey}`)\n }\n const vendorBinaryPath = join(\n resolveRipgrepResourcesDir(),\n platformKey,\n platformEntry.binary,\n )\n if (!existsSync(vendorBinaryPath)) {\n throw new Error(`vendor ripgrep binary missing for ${platformKey}`)\n }\n verifyRipgrepBinaryIntegrity({ binaryPath: vendorBinaryPath, platformKey })\n return vendorBinaryPath\n}\n\nfunction getRipgrepCacheRoot(): string {\n const override = process.env.PYB_RIPGREP_CACHE_DIR?.trim()\n if (override) return override\n const paths = envPaths('pyb')\n return join(paths.cache, 'ripgrep')\n}\n\nfunction getDownloadBaseUrl(version: string): string {\n const override = process.env.PYB_RIPGREP_DOWNLOAD_BASE_URL?.trim()\n if (!override) {\n return `https://github.com/BurntSushi/ripgrep/releases/download/${version}`\n }\n if (override.includes('{version}')) {\n return override.replace('{version}', version)\n }\n return `${override.replace(/\\/$/, '')}/${version}`\n}\n\nasync function delay(ms: number): Promise<void> {\n await new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction findFileRecursive(root: string, filename: string): string | null {\n const entries = readdirSync(root, { withFileTypes: true })\n for (const entry of entries) {\n const full = join(root, entry.name)\n if (entry.isDirectory()) {\n const found = findFileRecursive(full, filename)\n if (found) return found\n } else if (entry.isFile() && entry.name === filename) {\n return full\n }\n }\n return null\n}\n\nasync function execFileChecked(\n command: string,\n args: string[],\n options: { cwd: string },\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n execFile(\n command,\n args,\n { cwd: options.cwd, maxBuffer: 1_000_000 },\n (error, _stdout, stderr) => {\n if (error) {\n reject(\n new Error(\n `${command} ${args.join(' ')} failed: ${stderr || error.message}`,\n ),\n )\n } else {\n resolve()\n }\n },\n )\n })\n}\n\nasync function acquireLock(\n lockPath: string,\n readyPath: string,\n): Promise<number | null> {\n const start = Date.now()\n while (true) {\n try {\n return openSync(lockPath, 'wx')\n } catch (error: any) {\n if (error?.code !== 'EEXIST') {\n throw error\n }\n if (existsSync(readyPath)) return null\n if (Date.now() - start > 20000) {\n throw new Error('Timed out waiting for ripgrep download lock')\n }\n await delay(100)\n }\n }\n}\n\nasync function downloadRipgrepTo(cacheDir: string): Promise<string> {\n const { platform, extension, platformKey } = getPlatformConfig()\n const version = getRipgrepVersion()\n const filename = `ripgrep-${version}-${platform}.${extension}`\n const url = `${getDownloadBaseUrl(version)}/${filename}`\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(\n `Failed to download ripgrep (${response.status}): ${url}`,\n )\n }\n const buffer = new Uint8Array(await response.arrayBuffer())\n const tempDir = mkdtempSync(join(cacheDir, 'tmp-'))\n try {\n const binaryName = getRipgrepBinaryName()\n const targetPath = join(cacheDir, binaryName)\n if (extension === 'zip') {\n const files = unzipSync(buffer)\n const entryName = Object.keys(files).find(name =>\n name.endsWith(binaryName),\n )\n if (!entryName) {\n throw new Error(`ripgrep binary not found in zip: ${filename}`)\n }\n writeFileSync(targetPath, files[entryName]!)\n } else {\n const archivePath = join(tempDir, filename)\n const extractDir = join(tempDir, 'extract')\n mkdirSync(extractDir, { recursive: true })\n writeFileSync(archivePath, buffer)\n await execFileChecked('tar', ['-xzf', archivePath, '-C', extractDir], {\n cwd: tempDir,\n })\n const extracted = findFileRecursive(extractDir, binaryName)\n if (!extracted) {\n throw new Error(\n `ripgrep binary not found after extraction: ${platformKey}`,\n )\n }\n copyFileSync(extracted, targetPath)\n }\n if (process.platform !== 'win32') {\n chmodSync(targetPath, 0o755)\n }\n return targetPath\n } finally {\n rmSync(tempDir, { recursive: true, force: true })\n }\n}\n\nasync function ensureCachedRipgrep(): Promise<string> {\n const version = getRipgrepVersion()\n const { platformKey } = getPlatformConfig()\n const cacheRoot = getRipgrepCacheRoot()\n const cacheDir = join(cacheRoot, version, platformKey)\n const binaryPath = join(cacheDir, getRipgrepBinaryName())\n if (existsSync(binaryPath)) {\n verifyRipgrepBinaryIntegrity({ binaryPath, platformKey })\n return binaryPath\n }\n mkdirSync(cacheDir, { recursive: true })\n const lockPath = join(cacheDir, '.lock')\n const lockFd = await acquireLock(lockPath, binaryPath)\n if (!lockFd) return binaryPath\n try {\n if (!existsSync(binaryPath)) {\n await downloadRipgrepTo(cacheDir)\n }\n verifyRipgrepBinaryIntegrity({ binaryPath, platformKey })\n return binaryPath\n } finally {\n try {\n closeSync(lockFd)\n } catch {}\n rmSync(lockPath, { force: true })\n }\n}\n\nasync function resolveRipgrepPathOrThrow(): Promise<string> {\n const explicit = process.env.PYB_RIPGREP_PATH\n if (explicit) {\n if (!existsSync(explicit)) {\n throw new Error(`PYB_RIPGREP_PATH points to a missing file: ${explicit}`)\n }\n return explicit\n }\n const policy = resolveRipgrepPolicy()\n const resolutionErrors: string[] = []\n const resolutionErrorSet = new Set<string>()\n const pushResolutionError = (error: unknown) => {\n const message = String(error instanceof Error ? error.message : error)\n if (!resolutionErrorSet.has(message)) {\n resolutionErrorSet.add(message)\n resolutionErrors.push(message)\n }\n }\n\n if (policy.allowVendorFallback && (policy.vendorFirst || policy.offlineStrict)) {\n try {\n const vendorBinaryPath = resolveVendorRipgrepBinaryPath()\n d('Using vendor ripgrep: %s', vendorBinaryPath)\n return vendorBinaryPath\n } catch (error) {\n pushResolutionError(error)\n if (policy.offlineStrict) {\n throw new Error(\n `ripgrep strict offline mode: vendor resolution failed: ${resolutionErrors.join('; ')}`,\n )\n }\n }\n }\n\n if (policy.allowPathFallback) {\n const { cmd } = findActualExecutable('rg', [])\n d(`ripgrep initially resolved as: ${cmd}`)\n if (cmd !== 'rg') {\n return cmd\n }\n }\n\n if (policy.allowNetworkFallback) {\n try {\n const cached = await ensureCachedRipgrep()\n d('Using cached ripgrep: %s', cached)\n return cached\n } catch (error) {\n pushResolutionError(error)\n }\n }\n\n if (policy.allowVendorFallback) {\n try {\n const vendorBinaryPath = resolveVendorRipgrepBinaryPath()\n d('Using vendor ripgrep fallback: %s', vendorBinaryPath)\n return vendorBinaryPath\n } catch (error) {\n pushResolutionError(error)\n }\n }\n\n throw new Error(\n `Unable to resolve ripgrep path under current policy (${getRipgrepPolicyMode(policy)}): ${resolutionErrors.join('; ') || 'no eligible fallback'}`,\n )\n}\n\nexport const getRipgrepPath = memoize(\n async (): Promise<string> => resolveRipgrepPathOrThrow(),\n)\n\ntype RipGrepStatus = {\n files: string[]\n status: 'ok' | 'error'\n code?: number\n}\n\nexport async function ripGrepWithStatus(\n args: string[],\n target: string,\n abortSignal: AbortSignal,\n options?: { sandbox?: BunShellSandboxOptions },\n): Promise<RipGrepStatus> {\n await codesignRipgrepIfNecessary()\n const rg = await getRipgrepPath()\n d('ripgrep called: %s %o', rg, target, args)\n\n if (options?.sandbox?.enabled === true) {\n const cmd = quote([rg, ...args, target])\n const result = await BunShell.getInstance().exec(cmd, abortSignal, 10_000, {\n sandbox: options.sandbox,\n })\n if (result.code === 1) return { files: [], status: 'ok', code: 1 }\n if (result.code !== 0) {\n logError(`ripgrep failed with exit code ${result.code}: ${result.stderr}`)\n return { files: [], status: 'error', code: result.code }\n }\n return {\n files: result.stdout.trim().split('\\n').filter(Boolean),\n status: 'ok',\n code: 0,\n }\n }\n\n return new Promise(resolve => {\n const bun = (globalThis as any).Bun\n if (bun?.spawn && typeof bun.spawn === 'function') {\n const files: string[] = []\n let buffer = ''\n let stderr = ''\n const decoder = new TextDecoder()\n const proc = bun.spawn([rg, ...args, target], {\n stdout: 'pipe',\n stderr: 'pipe',\n signal: abortSignal,\n })\n const readStdout = async () => {\n const reader = proc.stdout.getReader()\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n const parts = buffer.split(/\\r?\\n/)\n buffer = parts.pop() ?? ''\n for (const line of parts) {\n if (line) files.push(line)\n }\n }\n reader.releaseLock()\n }\n const readStderr = async () => {\n const reader = proc.stderr.getReader()\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n stderr += decoder.decode(value, { stream: true })\n }\n reader.releaseLock()\n }\n Promise.all([readStdout(), readStderr(), proc.exited])\n .then(([_, __, exitCode]) => {\n if (buffer) files.push(buffer)\n if (exitCode && exitCode !== 1) {\n if (stderr) {\n logError(`ripgrep failed with exit code ${exitCode}: ${stderr}`)\n }\n resolve({ files: [], status: 'error', code: exitCode })\n return\n }\n resolve({ files, status: 'ok', code: exitCode ?? 0 })\n })\n .catch(error => {\n d('ripgrep error: %o', error)\n logError(error)\n resolve({ files: [], status: 'error' })\n })\n return\n }\n const proc = spawn(rg, [...args, target], {\n signal: abortSignal,\n timeout: 10_000,\n })\n const files: string[] = []\n let buffer = ''\n let stderr = ''\n proc.stdout?.on('data', chunk => {\n buffer += chunk.toString()\n const parts = buffer.split(/\\r?\\n/)\n buffer = parts.pop() ?? ''\n for (const line of parts) {\n if (line) files.push(line)\n }\n })\n proc.stderr?.on('data', chunk => {\n stderr += chunk.toString()\n })\n proc.on('error', error => {\n d('ripgrep error: %o', error)\n logError(error)\n })\n proc.on('close', code => {\n if (buffer.trim().length > 0) files.push(buffer.trim())\n if (code && code !== 1) {\n if (stderr) {\n logError(`ripgrep failed with exit code ${code}: ${stderr}`)\n }\n resolve({ files: [], status: 'error', code })\n return\n }\n resolve({\n files,\n status: 'ok',\n code: code ?? 0,\n })\n })\n })\n}\n\nexport async function ripGrep(\n args: string[],\n target: string,\n abortSignal: AbortSignal,\n options?: { sandbox?: BunShellSandboxOptions },\n): Promise<string[]> {\n const result = await ripGrepWithStatus(args, target, abortSignal, options)\n return result.files\n}\n\nexport async function listAllContentFiles(\n path: string,\n abortSignal: AbortSignal,\n limit: number,\n): Promise<string[]> {\n try {\n d('listAllContentFiles called: %s', path)\n return (await ripGrep(['-l', '.', path], path, abortSignal)).slice(0, limit)\n } catch (e) {\n d('listAllContentFiles failed: %o', e)\n\n logError(e)\n return []\n }\n}\n\nlet alreadyDoneSignCheck = false\nasync function codesignRipgrepIfNecessary(): Promise<void> {\n if (process.platform !== 'darwin' || alreadyDoneSignCheck) {\n return\n }\n\n alreadyDoneSignCheck = true\n\n d('checking if ripgrep is already signed')\n const lines = (\n await execFileNoThrow(\n 'codesign',\n ['-vv', '-d', await getRipgrepPath()],\n undefined,\n undefined,\n false,\n )\n ).stdout.split('\\n')\n\n const needsSigned = lines.find(line => line.includes('linker-signed'))\n if (!needsSigned) {\n d('seems to be already signed')\n return\n }\n\n try {\n d('signing ripgrep')\n const signResult = await execFileNoThrow('codesign', [\n '--sign',\n '-',\n '--force',\n '--preserve-metadata=entitlements,requirements,flags,runtime',\n await getRipgrepPath(),\n ])\n\n if (signResult.code !== 0) {\n d('failed to sign ripgrep: %o', signResult)\n logError(\n `Failed to sign ripgrep: ${signResult.stdout} ${signResult.stderr}`,\n )\n }\n\n d('removing quarantine')\n const quarantineResult = await execFileNoThrow('xattr', [\n '-d',\n 'com.apple.quarantine',\n await getRipgrepPath(),\n ])\n\n if (quarantineResult.code !== 0) {\n d('failed to remove quarantine: %o', quarantineResult)\n logError(\n `Failed to remove quarantine: ${quarantineResult.stdout} ${quarantineResult.stderr}`,\n )\n }\n } catch (e) {\n d('failed during sign: %o', e)\n logError(e)\n }\n}\n\nexport function resetRipgrepPathCacheForTests(): void {\n ;(getRipgrepPath as any).cache?.clear?.()\n alreadyDoneSignCheck = false\n}\n\nexport function filesToTree(\n files: string[],\n cwd: string,\n limit: number = 50,\n): string {\n if (files.length === 0) return ''\n\n const relFiles = files.map(f => {\n if (isAbsolute(f)) return relative(cwd, f)\n return f\n })\n\n // Build Trie\n type Node = { [key: string]: Node }\n const treeRoot: Node = {}\n for (const f of relFiles) {\n const parts = f.split(sep)\n let cur = treeRoot\n for (const p of parts) {\n if (!cur[p]) cur[p] = {}\n cur = cur[p]\n }\n }\n\n // BFS to mark visible nodes\n const visible = new Set<Node>()\n const queue: Node[] = [treeRoot]\n visible.add(treeRoot)\n let visibleCount = 0\n\n while (queue.length > 0) {\n const node = queue.shift()!\n const children = Object.values(node)\n\n // Check if we can add children\n for (const child of children) {\n if (visibleCount < limit) {\n visible.add(child)\n visibleCount++\n queue.push(child)\n } else {\n break\n }\n }\n if (visibleCount >= limit) break\n }\n\n // Render DFS\n let output = ''\n\n function render(node: Node, prefix: string, isLast: boolean, name: string) {\n if (node !== treeRoot) {\n const connector = isLast ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 '\n output += `${prefix}${connector}${name}\\n`\n } else {\n output += `${name}\\n`\n }\n\n const childrenKeys = Object.keys(node).sort()\n const visibleChildren = childrenKeys.filter(k => visible.has(node[k]))\n const hiddenCount = childrenKeys.length - visibleChildren.length\n\n const childPrefix =\n node === treeRoot ? '' : prefix + (isLast ? ' ' : '\u2502 ')\n\n for (let i = 0; i < visibleChildren.length; i++) {\n const key = visibleChildren[i]\n const isChildLast = i === visibleChildren.length - 1 && hiddenCount === 0\n render(node[key], childPrefix, isChildLast, key)\n }\n\n if (hiddenCount > 0) {\n // If we have hidden children, we append truncation info.\n // The connector depends on whether we showed any children.\n // If visibleChildren.length > 0, the last one used \u251C\u2500\u2500, so we use \u2514\u2500\u2500.\n // If visibleChildren.length == 0, we use \u2514\u2500\u2500.\n const connector = '\u2514\u2500\u2500 '\n output += `${childPrefix}${connector}... [${hiddenCount} truncated]\\n`\n }\n }\n\n render(treeRoot, '', true, basename(cwd) || '.')\n return output\n}\n\nexport async function tree(\n cwd: string,\n limit: number = 50,\n abortSignal: AbortSignal,\n): Promise<string> {\n const files = await ripGrep(['--files'], cwd, abortSignal)\n return filesToTree(files, cwd, limit)\n}\n"],
5
- "mappings": "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",
6
- "names": ["files", "buffer", "stderr", "proc"]
7
- }