ccjk 15.28.2 → 15.29.0

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 (436) hide show
  1. package/README.md +5 -4
  2. package/dist/chunks/agent-teams.mjs +145 -0
  3. package/dist/chunks/agent.mjs +1439 -0
  4. package/dist/chunks/agents.mjs +3783 -0
  5. package/dist/chunks/api-cli.mjs +135 -0
  6. package/dist/chunks/api-config-selector.mjs +159 -0
  7. package/dist/chunks/api-providers.mjs +144 -0
  8. package/dist/chunks/api.mjs +115 -0
  9. package/dist/chunks/auto-bootstrap.mjs +358 -0
  10. package/dist/chunks/auto-fixer.mjs +95 -0
  11. package/dist/chunks/auto-updater.mjs +507 -0
  12. package/dist/chunks/banner.mjs +173 -0
  13. package/dist/chunks/bash.mjs +187 -0
  14. package/dist/chunks/boost.mjs +474 -0
  15. package/dist/chunks/brain-config.mjs +75 -0
  16. package/dist/chunks/brain-status.mjs +89 -0
  17. package/dist/chunks/ccjk-agents.mjs +416 -0
  18. package/dist/chunks/ccjk-all.mjs +1046 -0
  19. package/dist/chunks/ccjk-config.mjs +445 -0
  20. package/dist/chunks/ccjk-hooks.mjs +1074 -0
  21. package/dist/chunks/ccjk-mcp.mjs +763 -0
  22. package/dist/chunks/ccjk-setup.mjs +765 -0
  23. package/dist/chunks/ccjk-skills.mjs +518 -0
  24. package/dist/chunks/ccr.mjs +109 -0
  25. package/dist/chunks/ccu.mjs +40 -0
  26. package/dist/chunks/check-updates.mjs +117 -0
  27. package/dist/chunks/claude-code-incremental-manager.mjs +761 -0
  28. package/dist/chunks/claude-config.mjs +606 -0
  29. package/dist/chunks/claude-config2.mjs +62 -0
  30. package/dist/chunks/claude-wrapper.mjs +85 -0
  31. package/dist/chunks/clavue-config.mjs +1454 -0
  32. package/dist/chunks/cleanup-migration.mjs +20 -0
  33. package/dist/chunks/cli-hook.mjs +4096 -0
  34. package/dist/chunks/cloud-sync.mjs +29 -0
  35. package/dist/chunks/code-type-resolver.mjs +880 -0
  36. package/dist/chunks/codex-config-switch.mjs +452 -0
  37. package/dist/chunks/codex-provider-manager.mjs +238 -0
  38. package/dist/chunks/codex-uninstaller.mjs +404 -0
  39. package/dist/chunks/codex.mjs +2141 -0
  40. package/dist/chunks/commands.mjs +108 -0
  41. package/dist/chunks/commands2.mjs +421 -0
  42. package/dist/chunks/commit.mjs +140 -0
  43. package/dist/chunks/completion.mjs +517 -0
  44. package/dist/chunks/config-consolidator.mjs +172 -0
  45. package/dist/chunks/config-switch.mjs +334 -0
  46. package/dist/chunks/config.mjs +558 -0
  47. package/dist/chunks/config2.mjs +484 -0
  48. package/dist/chunks/config3.mjs +486 -0
  49. package/dist/chunks/constants.mjs +323 -0
  50. package/dist/chunks/context-opt.mjs +444 -0
  51. package/dist/chunks/context.mjs +974 -0
  52. package/dist/chunks/dashboard.mjs +481 -0
  53. package/dist/chunks/doctor.mjs +1301 -0
  54. package/dist/chunks/eval.mjs +502 -0
  55. package/dist/chunks/evolution.mjs +322 -0
  56. package/dist/chunks/features.mjs +715 -0
  57. package/dist/chunks/fish.mjs +181 -0
  58. package/dist/chunks/fs-operations.mjs +180 -0
  59. package/dist/chunks/health-alerts.mjs +830 -0
  60. package/dist/chunks/help.mjs +341 -0
  61. package/dist/chunks/hook-installer.mjs +48 -0
  62. package/dist/chunks/impact.mjs +651 -0
  63. package/dist/chunks/index.mjs +23 -0
  64. package/dist/chunks/index10.mjs +19 -0
  65. package/dist/chunks/index11.mjs +1171 -0
  66. package/dist/chunks/index12.mjs +218 -0
  67. package/dist/chunks/index13.mjs +679 -0
  68. package/dist/chunks/index14.mjs +1009 -0
  69. package/dist/chunks/index15.mjs +194 -0
  70. package/dist/chunks/index2.mjs +7637 -0
  71. package/dist/chunks/index3.mjs +171 -0
  72. package/dist/chunks/index4.mjs +26 -0
  73. package/dist/chunks/index5.mjs +19 -0
  74. package/dist/chunks/index6.mjs +19092 -0
  75. package/dist/chunks/index7.mjs +616 -0
  76. package/dist/chunks/index8.mjs +1602 -0
  77. package/dist/chunks/index9.mjs +5384 -0
  78. package/dist/chunks/init.mjs +1911 -0
  79. package/dist/chunks/installer.mjs +757 -0
  80. package/dist/chunks/installer2.mjs +103 -0
  81. package/dist/chunks/interview.mjs +2927 -0
  82. package/dist/chunks/json-config.mjs +60 -0
  83. package/dist/chunks/linux.mjs +3863 -0
  84. package/dist/chunks/macos.mjs +69 -0
  85. package/dist/chunks/main.mjs +635 -0
  86. package/dist/chunks/manager.mjs +1048 -0
  87. package/dist/chunks/marketplace.mjs +265 -0
  88. package/dist/chunks/mcp-cli.mjs +205 -0
  89. package/dist/chunks/mcp-performance.mjs +187 -0
  90. package/dist/chunks/mcp.mjs +667 -0
  91. package/dist/chunks/memory-check.mjs +2973 -0
  92. package/dist/chunks/memory-paths.mjs +259 -0
  93. package/dist/chunks/memory-sync.mjs +209 -0
  94. package/dist/chunks/memory.mjs +354 -0
  95. package/dist/chunks/metrics-display.mjs +153 -0
  96. package/dist/chunks/monitor.mjs +1856 -0
  97. package/dist/chunks/notification.mjs +1864 -0
  98. package/dist/chunks/onboarding.mjs +386 -0
  99. package/dist/chunks/package.mjs +3 -0
  100. package/dist/chunks/paradigm.mjs +74 -0
  101. package/dist/chunks/permission-manager.mjs +250 -0
  102. package/dist/chunks/permissions.mjs +265 -0
  103. package/dist/chunks/persistence-manager.mjs +801 -0
  104. package/dist/chunks/persistence.mjs +707 -0
  105. package/dist/chunks/platform.mjs +395 -0
  106. package/dist/chunks/plugin.mjs +1936 -0
  107. package/dist/chunks/powershell.mjs +213 -0
  108. package/dist/chunks/prompts.mjs +244 -0
  109. package/dist/chunks/providers.mjs +263 -0
  110. package/dist/chunks/quick-actions.mjs +335 -0
  111. package/dist/chunks/quick-provider.mjs +755 -0
  112. package/dist/chunks/quick-setup.mjs +421 -0
  113. package/dist/chunks/remote.mjs +497 -0
  114. package/dist/chunks/research.mjs +1904 -0
  115. package/dist/chunks/rollback.mjs +38 -0
  116. package/dist/chunks/session-manager.mjs +1371 -0
  117. package/dist/chunks/session.mjs +878 -0
  118. package/dist/chunks/sessions.mjs +106 -0
  119. package/dist/chunks/silent-updater.mjs +396 -0
  120. package/dist/chunks/simple-config.mjs +122 -0
  121. package/dist/chunks/skill.mjs +117 -0
  122. package/dist/chunks/skill2.mjs +9052 -0
  123. package/dist/chunks/skills-sync.mjs +1343 -0
  124. package/dist/chunks/skills.mjs +577 -0
  125. package/dist/chunks/slash-commands.mjs +208 -0
  126. package/dist/chunks/smart-guide.mjs +247 -0
  127. package/dist/chunks/snapshot.mjs +58 -0
  128. package/dist/chunks/startup.mjs +487 -0
  129. package/dist/chunks/stats.mjs +191 -0
  130. package/dist/chunks/status.mjs +471 -0
  131. package/dist/chunks/team.mjs +63 -0
  132. package/dist/chunks/thinking.mjs +626 -0
  133. package/dist/chunks/trace.mjs +57 -0
  134. package/dist/chunks/uninstall.mjs +852 -0
  135. package/dist/chunks/update.mjs +174 -0
  136. package/dist/chunks/upgrade-manager.mjs +204 -0
  137. package/dist/chunks/upgrade.mjs +133 -0
  138. package/dist/chunks/version-checker.mjs +891 -0
  139. package/dist/chunks/vim.mjs +903 -0
  140. package/dist/chunks/windows.mjs +14 -0
  141. package/dist/chunks/workflows.mjs +633 -0
  142. package/dist/chunks/wsl.mjs +129 -0
  143. package/dist/chunks/zero-config.mjs +871 -0
  144. package/dist/chunks/zsh.mjs +182 -0
  145. package/dist/cli.d.mts +1 -0
  146. package/dist/cli.d.ts +1 -0
  147. package/dist/cli.js +11 -2
  148. package/dist/cli.js.map +1 -1
  149. package/dist/cli.mjs +2684 -0
  150. package/dist/commands/edit.js +1 -2
  151. package/dist/commands/edit.js.map +1 -1
  152. package/dist/commands/grok.js +35 -0
  153. package/dist/commands/grok.js.map +1 -0
  154. package/dist/commands/init.js +183 -110
  155. package/dist/commands/init.js.map +1 -1
  156. package/dist/commands/migrate.js +6 -8
  157. package/dist/commands/migrate.js.map +1 -1
  158. package/dist/commands/profile.js +10 -28
  159. package/dist/commands/profile.js.map +1 -1
  160. package/dist/commands/quick.js +28 -25
  161. package/dist/commands/quick.js.map +1 -1
  162. package/dist/core/codex-config.js +11 -29
  163. package/dist/core/codex-config.js.map +1 -1
  164. package/dist/core/grok-config.js +110 -0
  165. package/dist/core/grok-config.js.map +1 -0
  166. package/dist/core/perms.js +96 -86
  167. package/dist/core/perms.js.map +1 -1
  168. package/dist/core/profiles.js +13 -57
  169. package/dist/core/profiles.js.map +1 -1
  170. package/dist/core/providers.js +58 -49
  171. package/dist/core/providers.js.map +1 -1
  172. package/dist/core/quick-parse.js +1 -7
  173. package/dist/core/quick-parse.js.map +1 -1
  174. package/dist/core/tools.js +24 -0
  175. package/dist/core/tools.js.map +1 -1
  176. package/dist/i18n/locales/en/agent-teams.json +18 -0
  177. package/dist/i18n/locales/en/agentBrowser.json +80 -0
  178. package/dist/i18n/locales/en/agents.json +135 -0
  179. package/dist/i18n/locales/en/api.json +63 -0
  180. package/dist/i18n/locales/en/ccjk-agents.json +33 -0
  181. package/dist/i18n/locales/en/ccjk-all.json +23 -0
  182. package/dist/i18n/locales/en/ccjk-skills.json +22 -0
  183. package/dist/i18n/locales/en/ccjk.json +276 -0
  184. package/dist/i18n/locales/en/ccr.json +65 -0
  185. package/dist/i18n/locales/en/claude-md.json +73 -0
  186. package/dist/i18n/locales/en/cli.json +148 -0
  187. package/dist/i18n/locales/en/cloud-setup.json +31 -0
  188. package/dist/i18n/locales/en/cloud-sync.json +147 -0
  189. package/dist/i18n/locales/en/cloud.json +40 -0
  190. package/dist/i18n/locales/en/cloudPlugins.json +118 -0
  191. package/dist/i18n/locales/en/codex.json +184 -0
  192. package/dist/i18n/locales/en/cometix.json +29 -0
  193. package/dist/i18n/locales/en/common.json +68 -0
  194. package/dist/i18n/locales/en/config.json +108 -0
  195. package/dist/i18n/locales/en/configuration.json +236 -0
  196. package/dist/i18n/locales/en/context.json +85 -0
  197. package/dist/i18n/locales/en/dashboard.json +78 -0
  198. package/dist/i18n/locales/en/errors.json +26 -0
  199. package/dist/i18n/locales/en/evolution.json +54 -0
  200. package/dist/i18n/locales/en/hooks.json +74 -0
  201. package/dist/i18n/locales/en/hooksSync.json +133 -0
  202. package/dist/i18n/locales/en/installation.json +83 -0
  203. package/dist/i18n/locales/en/interview.json +104 -0
  204. package/dist/i18n/locales/en/language.json +19 -0
  205. package/dist/i18n/locales/en/lsp.json +78 -0
  206. package/dist/i18n/locales/en/marketplace.json +116 -0
  207. package/dist/i18n/locales/en/mcp.json +180 -0
  208. package/dist/i18n/locales/en/memory.json +23 -0
  209. package/dist/i18n/locales/en/menu.json +299 -0
  210. package/dist/i18n/locales/en/multi-config.json +79 -0
  211. package/dist/i18n/locales/en/notification.json +307 -0
  212. package/dist/i18n/locales/en/permissions.json +95 -0
  213. package/dist/i18n/locales/en/persistence.json +127 -0
  214. package/dist/i18n/locales/en/plugins.json +146 -0
  215. package/dist/i18n/locales/en/quick-actions.json +78 -0
  216. package/dist/i18n/locales/en/registry.json +54 -0
  217. package/dist/i18n/locales/en/remote.json +93 -0
  218. package/dist/i18n/locales/en/sandbox.json +44 -0
  219. package/dist/i18n/locales/en/setup.json +44 -0
  220. package/dist/i18n/locales/en/shencha.json +14 -0
  221. package/dist/i18n/locales/en/skills.json +100 -0
  222. package/dist/i18n/locales/en/skillsSync.json +74 -0
  223. package/dist/i18n/locales/en/smartGuide.json +49 -0
  224. package/dist/i18n/locales/en/stats.json +20 -0
  225. package/dist/i18n/locales/en/subagent.json +69 -0
  226. package/dist/i18n/locales/en/superpowers.json +117 -0
  227. package/dist/i18n/locales/en/team.json +7 -0
  228. package/dist/i18n/locales/en/thinking.json +65 -0
  229. package/dist/i18n/locales/en/tools.json +42 -0
  230. package/dist/i18n/locales/en/uninstall.json +56 -0
  231. package/dist/i18n/locales/en/updater.json +29 -0
  232. package/dist/i18n/locales/en/vim.json +169 -0
  233. package/dist/i18n/locales/en/workflow.json +55 -0
  234. package/dist/i18n/locales/en/workspace.json +108 -0
  235. package/dist/i18n/locales/zh-CN/agent-teams.json +18 -0
  236. package/dist/i18n/locales/zh-CN/agentBrowser.json +80 -0
  237. package/dist/i18n/locales/zh-CN/agents.json +135 -0
  238. package/dist/i18n/locales/zh-CN/api.json +63 -0
  239. package/dist/i18n/locales/zh-CN/ccjk-agents.json +33 -0
  240. package/dist/i18n/locales/zh-CN/ccjk-all.json +23 -0
  241. package/dist/i18n/locales/zh-CN/ccjk-skills.json +22 -0
  242. package/dist/i18n/locales/zh-CN/ccjk.json +276 -0
  243. package/dist/i18n/locales/zh-CN/ccr.json +65 -0
  244. package/dist/i18n/locales/zh-CN/claude-md.json +73 -0
  245. package/dist/i18n/locales/zh-CN/cli.json +148 -0
  246. package/dist/i18n/locales/zh-CN/cloud-setup.json +31 -0
  247. package/dist/i18n/locales/zh-CN/cloud-sync.json +147 -0
  248. package/dist/i18n/locales/zh-CN/cloud.json +40 -0
  249. package/dist/i18n/locales/zh-CN/cloudPlugins.json +118 -0
  250. package/dist/i18n/locales/zh-CN/codex.json +184 -0
  251. package/dist/i18n/locales/zh-CN/cometix.json +29 -0
  252. package/dist/i18n/locales/zh-CN/common.json +68 -0
  253. package/dist/i18n/locales/zh-CN/config.json +108 -0
  254. package/dist/i18n/locales/zh-CN/configuration.json +234 -0
  255. package/dist/i18n/locales/zh-CN/context.json +85 -0
  256. package/dist/i18n/locales/zh-CN/dashboard.json +78 -0
  257. package/dist/i18n/locales/zh-CN/errors.json +26 -0
  258. package/dist/i18n/locales/zh-CN/evolution.json +54 -0
  259. package/dist/i18n/locales/zh-CN/hooks.json +74 -0
  260. package/dist/i18n/locales/zh-CN/hooksSync.json +133 -0
  261. package/dist/i18n/locales/zh-CN/installation.json +83 -0
  262. package/dist/i18n/locales/zh-CN/interview.json +104 -0
  263. package/dist/i18n/locales/zh-CN/language.json +19 -0
  264. package/dist/i18n/locales/zh-CN/lsp.json +78 -0
  265. package/dist/i18n/locales/zh-CN/marketplace.json +116 -0
  266. package/dist/i18n/locales/zh-CN/mcp.json +180 -0
  267. package/dist/i18n/locales/zh-CN/memory.json +23 -0
  268. package/dist/i18n/locales/zh-CN/menu.json +299 -0
  269. package/dist/i18n/locales/zh-CN/multi-config.json +79 -0
  270. package/dist/i18n/locales/zh-CN/notification.json +307 -0
  271. package/dist/i18n/locales/zh-CN/permissions.json +95 -0
  272. package/dist/i18n/locales/zh-CN/persistence.json +127 -0
  273. package/dist/i18n/locales/zh-CN/plugins.json +146 -0
  274. package/dist/i18n/locales/zh-CN/quick-actions.json +78 -0
  275. package/dist/i18n/locales/zh-CN/registry.json +54 -0
  276. package/dist/i18n/locales/zh-CN/remote.json +93 -0
  277. package/dist/i18n/locales/zh-CN/sandbox.json +44 -0
  278. package/dist/i18n/locales/zh-CN/setup.json +44 -0
  279. package/dist/i18n/locales/zh-CN/shencha.json +14 -0
  280. package/dist/i18n/locales/zh-CN/skills.json +100 -0
  281. package/dist/i18n/locales/zh-CN/skillsSync.json +74 -0
  282. package/dist/i18n/locales/zh-CN/smartGuide.json +49 -0
  283. package/dist/i18n/locales/zh-CN/stats.json +20 -0
  284. package/dist/i18n/locales/zh-CN/subagent.json +69 -0
  285. package/dist/i18n/locales/zh-CN/superpowers.json +117 -0
  286. package/dist/i18n/locales/zh-CN/team.json +7 -0
  287. package/dist/i18n/locales/zh-CN/thinking.json +65 -0
  288. package/dist/i18n/locales/zh-CN/tools.json +42 -0
  289. package/dist/i18n/locales/zh-CN/uninstall.json +56 -0
  290. package/dist/i18n/locales/zh-CN/updater.json +29 -0
  291. package/dist/i18n/locales/zh-CN/vim.json +169 -0
  292. package/dist/i18n/locales/zh-CN/workflow.json +55 -0
  293. package/dist/i18n/locales/zh-CN/workspace.json +108 -0
  294. package/dist/index.d.mts +5658 -0
  295. package/dist/index.d.ts +5658 -0
  296. package/dist/index.mjs +3732 -0
  297. package/dist/shared/ccjk.5bEolFrk.mjs +254 -0
  298. package/dist/shared/ccjk.8oaxX4iR.mjs +90 -0
  299. package/dist/shared/ccjk.B2U7DsPy.mjs +31 -0
  300. package/dist/shared/ccjk.B2f-cwUP.mjs +468 -0
  301. package/dist/shared/ccjk.BAGoDD49.mjs +36 -0
  302. package/dist/shared/ccjk.BBtCGd_g.mjs +899 -0
  303. package/dist/shared/ccjk.BFQ7yr5S.mjs +16 -0
  304. package/dist/shared/ccjk.BLsIiTqO.mjs +449 -0
  305. package/dist/shared/ccjk.BXv8aYs1.mjs +170 -0
  306. package/dist/shared/ccjk.BnsY5WxD.mjs +171 -0
  307. package/dist/shared/ccjk.BoApaI4j.mjs +28 -0
  308. package/dist/shared/ccjk.Bq8TqZG_.mjs +189 -0
  309. package/dist/shared/ccjk.BtrioX1Z.mjs +25 -0
  310. package/dist/shared/ccjk.Bx_rmYfN.mjs +69 -0
  311. package/dist/shared/ccjk.BzPbSEP2.mjs +115 -0
  312. package/dist/shared/ccjk.C0WLUnFV.mjs +293 -0
  313. package/dist/shared/ccjk.C1hANZTu.mjs +19 -0
  314. package/dist/shared/ccjk.C2jHOZVP.mjs +52 -0
  315. package/dist/shared/ccjk.CNhnT6uQ.mjs +636 -0
  316. package/dist/shared/ccjk.COweQ1RR.mjs +5 -0
  317. package/dist/shared/ccjk.CfKKcvWy.mjs +126 -0
  318. package/dist/shared/ccjk.Cjgrln_h.mjs +297 -0
  319. package/dist/shared/ccjk.CoCHVXl3.mjs +3951 -0
  320. package/dist/shared/ccjk.CwGZSTAK.mjs +319 -0
  321. package/dist/shared/ccjk.CxpGa6MC.mjs +2724 -0
  322. package/dist/shared/ccjk.D-magaEx.mjs +763 -0
  323. package/dist/shared/ccjk.D0g2ABGg.mjs +171 -0
  324. package/dist/shared/ccjk.D6ycHbak.mjs +270 -0
  325. package/dist/shared/ccjk.D75wivnp.mjs +142 -0
  326. package/dist/shared/ccjk.DDL-4C-k.mjs +100 -0
  327. package/dist/shared/ccjk.DFRPtmK_.mjs +75 -0
  328. package/dist/shared/ccjk.DMV3x5Sd.mjs +299 -0
  329. package/dist/shared/ccjk.DZ2LLOa-.mjs +2195 -0
  330. package/dist/shared/ccjk.DbigonEQ.mjs +698 -0
  331. package/dist/shared/ccjk.DcMvE7lf.mjs +618 -0
  332. package/dist/shared/ccjk.DeWpAShp.mjs +1828 -0
  333. package/dist/shared/ccjk.DhJ1kyDR.mjs +30 -0
  334. package/dist/shared/ccjk.DlTXS9rP.mjs +224 -0
  335. package/dist/shared/ccjk.DopKzo3z.mjs +305 -0
  336. package/dist/shared/ccjk.DsZsc4LR.mjs +1280 -0
  337. package/dist/shared/ccjk.DuzJZlgj.mjs +418 -0
  338. package/dist/shared/ccjk.Dxgd2vjc.mjs +444 -0
  339. package/dist/shared/ccjk.J8YiPsOw.mjs +259 -0
  340. package/dist/shared/ccjk.KfSWcGlE.mjs +38 -0
  341. package/dist/shared/ccjk.L7yC58_i.mjs +225 -0
  342. package/dist/shared/ccjk.MwtjAULc.mjs +1447 -0
  343. package/dist/shared/ccjk.OJKHVSOb.mjs +2005 -0
  344. package/dist/shared/ccjk.OTnevPNE.mjs +225 -0
  345. package/dist/shared/ccjk.RyizuzOI.mjs +21 -0
  346. package/dist/shared/ccjk.T_cX87dY.mjs +15 -0
  347. package/dist/shared/ccjk.bQ7Dh1g4.mjs +249 -0
  348. package/dist/shared/ccjk.gDEDGD_t.mjs +38 -0
  349. package/dist/shared/ccjk.hoqrwWdN.mjs +333 -0
  350. package/dist/shared/ccjk.i_vn-9C3.mjs +317 -0
  351. package/dist/shared/ccjk.lG3ccFjm.mjs +885 -0
  352. package/dist/shared/ccjk.wLJHO0Af.mjs +244 -0
  353. package/dist/shared/ccjk.y-a_1vK4.mjs +5127 -0
  354. package/dist/templates/agents/README.md +78 -0
  355. package/dist/templates/agents/fullstack-developer.json +70 -0
  356. package/dist/templates/agents/go-expert.json +69 -0
  357. package/dist/templates/agents/index.json +64 -0
  358. package/dist/templates/agents/python-expert.json +69 -0
  359. package/dist/templates/agents/react-specialist.json +69 -0
  360. package/dist/templates/agents/testing-automation-expert.json +70 -0
  361. package/dist/templates/agents/typescript-architect.json +69 -0
  362. package/dist/templates/claude-code/common/settings.json +109 -0
  363. package/dist/templates/common/error-prevention.md +267 -0
  364. package/dist/templates/common/karpathy-baseline.md +83 -0
  365. package/dist/templates/common/output-styles/zh-CN/carmack-mode.md +381 -0
  366. package/dist/templates/common/output-styles/zh-CN/codex-rigor-mode.md +114 -0
  367. package/dist/templates/common/output-styles/zh-CN/dhh-mode.md +265 -0
  368. package/dist/templates/common/output-styles/zh-CN/evan-you-mode.md +539 -0
  369. package/dist/templates/common/output-styles/zh-CN/jobs-mode.md +369 -0
  370. package/dist/templates/common/output-styles/zh-CN/linus-mode.md +135 -0
  371. package/dist/templates/common/output-styles/zh-CN/uncle-bob-mode.md +221 -0
  372. package/dist/templates/common/workflow/continuousDelivery/en/continuous-delivery.md +628 -0
  373. package/dist/templates/common/workflow/continuousDelivery/zh-CN/continuous-delivery.md +628 -0
  374. package/dist/templates/common/workflow/essential/en/agents/ccjk-config-agent.md +187 -0
  375. package/dist/templates/common/workflow/essential/en/agents/ccjk-mcp-agent.md +191 -0
  376. package/dist/templates/common/workflow/essential/en/agents/ccjk-skill-agent.md +249 -0
  377. package/dist/templates/common/workflow/essential/en/agents/ccjk-workflow-agent.md +277 -0
  378. package/dist/templates/common/workflow/essential/en/agents/get-current-datetime.md +29 -0
  379. package/dist/templates/common/workflow/essential/en/agents/init-architect.md +115 -0
  380. package/dist/templates/common/workflow/essential/en/agents/ui-ux-designer.md +91 -0
  381. package/dist/templates/common/workflow/essential/en/feat.md +92 -0
  382. package/dist/templates/common/workflow/essential/en/goal.md +147 -0
  383. package/dist/templates/common/workflow/essential/en/init-project.md +53 -0
  384. package/dist/templates/common/workflow/essential/zh-CN/agents/get-current-datetime.md +29 -0
  385. package/dist/templates/common/workflow/essential/zh-CN/agents/init-architect.md +115 -0
  386. package/dist/templates/common/workflow/essential/zh-CN/agents/ui-ux-designer.md +91 -0
  387. package/dist/templates/common/workflow/essential/zh-CN/feat.md +315 -0
  388. package/dist/templates/common/workflow/essential/zh-CN/goal.md +146 -0
  389. package/dist/templates/common/workflow/essential/zh-CN/init-project.md +53 -0
  390. package/dist/templates/common/workflow/git/en/git-cleanBranches.md +102 -0
  391. package/dist/templates/common/workflow/git/en/git-commit.md +205 -0
  392. package/dist/templates/common/workflow/git/en/git-rollback.md +90 -0
  393. package/dist/templates/common/workflow/git/en/git-worktree.md +276 -0
  394. package/dist/templates/common/workflow/git/zh-CN/git-cleanBranches.md +102 -0
  395. package/dist/templates/common/workflow/git/zh-CN/git-commit.md +205 -0
  396. package/dist/templates/common/workflow/git/zh-CN/git-rollback.md +90 -0
  397. package/dist/templates/common/workflow/git/zh-CN/git-worktree.md +276 -0
  398. package/dist/templates/common/workflow/interview/en/interview.md +67 -0
  399. package/dist/templates/common/workflow/interview/zh-CN/interview.md +67 -0
  400. package/dist/templates/common/workflow/linearMethod/en/linear-method.md +651 -0
  401. package/dist/templates/common/workflow/linearMethod/zh-CN/linear-method.md +752 -0
  402. package/dist/templates/common/workflow/refactoringMaster/en/refactoring-master.md +516 -0
  403. package/dist/templates/common/workflow/refactoringMaster/zh-CN/refactoring-master.md +812 -0
  404. package/dist/templates/common/workflow/sixStep/en/workflow.md +83 -0
  405. package/dist/templates/common/workflow/sixStep/zh-CN/workflow.md +359 -0
  406. package/dist/templates/common/workflow/specFirstTDD/en/spec-first-tdd.md +364 -0
  407. package/dist/templates/common/workflow/specFirstTDD/zh-CN/spec-first-tdd.md +366 -0
  408. package/dist/templates/hooks/README.md +212 -0
  409. package/dist/templates/hooks/git-workflow-hooks.md +551 -0
  410. package/dist/templates/hooks/post-test/coverage.json +21 -0
  411. package/dist/templates/hooks/post-test/summary.json +21 -0
  412. package/dist/templates/hooks/post-test-coverage.md +434 -0
  413. package/dist/templates/hooks/pre-commit/eslint.json +22 -0
  414. package/dist/templates/hooks/pre-commit/prettier.json +22 -0
  415. package/dist/templates/hooks/pre-commit-black.md +274 -0
  416. package/dist/templates/hooks/pre-commit-eslint.md +153 -0
  417. package/dist/templates/hooks/pre-commit-gofmt.md +284 -0
  418. package/dist/templates/hooks/pre-commit-prettier.md +212 -0
  419. package/dist/templates/hooks/pre-commit-type-check.md +377 -0
  420. package/dist/templates/skills/ccjk-init.md +154 -0
  421. package/dist/templates/skills/ccjk-mcp-setup.md +205 -0
  422. package/dist/templates/skills/ccjk-troubleshoot.md +228 -0
  423. package/dist/templates/skills/django-patterns.md +1016 -0
  424. package/dist/templates/skills/git-workflow.md +748 -0
  425. package/dist/templates/skills/go-idioms.md +963 -0
  426. package/dist/templates/skills/index.json +132 -0
  427. package/dist/templates/skills/nextjs-optimization.md +694 -0
  428. package/dist/templates/skills/python-pep8.md +852 -0
  429. package/dist/templates/skills/react-patterns.md +686 -0
  430. package/dist/templates/skills/rust-patterns.md +1057 -0
  431. package/dist/templates/skills/security-best-practices.md +1413 -0
  432. package/dist/templates/skills/testing-best-practices.md +1315 -0
  433. package/dist/templates/skills/ts-best-practices.md +354 -0
  434. package/package.json +12 -13
  435. package/dist/core/codex-auth.js +0 -63
  436. package/dist/core/codex-auth.js.map +0 -1
@@ -0,0 +1,801 @@
1
+ import { writeFileSync } from 'node:fs';
2
+ import a from './index5.mjs';
3
+ import { i as inquirer } from './index6.mjs';
4
+ import { getContextPersistence } from './persistence.mjs';
5
+ import { i18n } from './index2.mjs';
6
+ import { j as join } from '../shared/ccjk.bQ7Dh1g4.mjs';
7
+ import '../shared/ccjk.BAGoDD49.mjs';
8
+ import 'node:readline';
9
+ import 'stream';
10
+ import 'node:tty';
11
+ import 'node:process';
12
+ import 'node:async_hooks';
13
+ import '../shared/ccjk.Cjgrln_h.mjs';
14
+ import 'node:util';
15
+ import 'tty';
16
+ import 'fs';
17
+ import 'child_process';
18
+ import 'node:path';
19
+ import 'node:os';
20
+ import 'node:crypto';
21
+ import 'buffer';
22
+ import 'string_decoder';
23
+ import 'better-sqlite3';
24
+ import 'node:url';
25
+
26
+ class L0Cache {
27
+ cache;
28
+ maxEntries;
29
+ maxSize;
30
+ currentSize;
31
+ hits;
32
+ misses;
33
+ constructor(maxEntries, maxSize) {
34
+ this.cache = /* @__PURE__ */ new Map();
35
+ this.maxEntries = maxEntries;
36
+ this.maxSize = maxSize;
37
+ this.currentSize = 0;
38
+ this.hits = 0;
39
+ this.misses = 0;
40
+ }
41
+ get(id) {
42
+ const entry = this.cache.get(id);
43
+ if (!entry) {
44
+ this.misses++;
45
+ return null;
46
+ }
47
+ entry.lastAccessed = Date.now();
48
+ entry.accessCount++;
49
+ this.cache.delete(id);
50
+ this.cache.set(id, entry);
51
+ this.hits++;
52
+ return entry;
53
+ }
54
+ set(id, context) {
55
+ const size = this.estimateSize(context.context);
56
+ while ((this.currentSize + size > this.maxSize || this.cache.size >= this.maxEntries) && this.cache.size > 0) {
57
+ this.evictLRU();
58
+ }
59
+ const existing = this.cache.get(id);
60
+ if (existing) {
61
+ this.currentSize -= this.estimateSize(existing.context);
62
+ this.cache.delete(id);
63
+ }
64
+ this.cache.set(id, context);
65
+ this.currentSize += size;
66
+ }
67
+ has(id) {
68
+ return this.cache.has(id);
69
+ }
70
+ delete(id) {
71
+ const entry = this.cache.get(id);
72
+ if (!entry)
73
+ return false;
74
+ this.currentSize -= this.estimateSize(entry.context);
75
+ return this.cache.delete(id);
76
+ }
77
+ clear() {
78
+ this.cache.clear();
79
+ this.currentSize = 0;
80
+ this.hits = 0;
81
+ this.misses = 0;
82
+ }
83
+ getAll() {
84
+ return Array.from(this.cache.values());
85
+ }
86
+ getStats() {
87
+ const total = this.hits + this.misses;
88
+ return {
89
+ count: this.cache.size,
90
+ size: this.currentSize,
91
+ hitRate: total > 0 ? this.hits / total : 0
92
+ };
93
+ }
94
+ evictLRU() {
95
+ const firstKey = this.cache.keys().next().value;
96
+ if (firstKey) {
97
+ this.delete(firstKey);
98
+ }
99
+ }
100
+ estimateSize(context) {
101
+ let size = context.compressed.length * 2;
102
+ if (context.metadata) {
103
+ size += JSON.stringify(context.metadata).length * 2;
104
+ }
105
+ size += 200;
106
+ return size;
107
+ }
108
+ }
109
+ class HierarchicalContextLoader {
110
+ persistence;
111
+ projectHash;
112
+ config;
113
+ l0Cache;
114
+ tierMigrations;
115
+ constructor(persistence, projectHash, config) {
116
+ this.persistence = persistence;
117
+ this.projectHash = projectHash;
118
+ this.config = {
119
+ hotThreshold: 24 * 60 * 60 * 1e3,
120
+ // 1 day
121
+ warmThreshold: 7 * 24 * 60 * 60 * 1e3,
122
+ // 7 days
123
+ l0MaxEntries: 100,
124
+ l0MaxSize: 5 * 1024 * 1024,
125
+ // 5MB
126
+ ...config
127
+ };
128
+ this.l0Cache = new L0Cache(this.config.l0MaxEntries, this.config.l0MaxSize);
129
+ this.tierMigrations = {
130
+ hotToWarm: 0,
131
+ warmToCold: 0,
132
+ coldToWarm: 0,
133
+ warmToHot: 0
134
+ };
135
+ this.initializeL0Cache();
136
+ }
137
+ /**
138
+ * Get context by ID (checks all tiers)
139
+ */
140
+ async getContext(contextId) {
141
+ const l0Entry = this.l0Cache.get(contextId);
142
+ if (l0Entry) {
143
+ return l0Entry.context;
144
+ }
145
+ const persisted = this.persistence.getContext(contextId);
146
+ if (!persisted)
147
+ return null;
148
+ const context = this.persistedToCompressed(persisted);
149
+ const tier = this.determineTier(persisted.lastAccessed);
150
+ if (tier === "L0" /* HOT */ || persisted.accessCount > 5) {
151
+ this.promoteToL0(contextId, context, persisted.lastAccessed, persisted.accessCount);
152
+ }
153
+ return context;
154
+ }
155
+ /**
156
+ * Get hot contexts (L0 tier, <1 day)
157
+ */
158
+ getHotContexts() {
159
+ return this.l0Cache.getAll();
160
+ }
161
+ /**
162
+ * Get warm contexts (L1 tier, 1-7 days)
163
+ */
164
+ getWarmContexts(limit) {
165
+ const now = Date.now();
166
+ const warmStart = now - this.config.warmThreshold;
167
+ const warmEnd = now - this.config.hotThreshold;
168
+ const contexts = this.persistence.getProjectContexts(this.projectHash, {
169
+ startTime: warmStart,
170
+ endTime: warmEnd,
171
+ sortBy: "lastAccessed",
172
+ sortOrder: "desc",
173
+ limit
174
+ });
175
+ return contexts.map((p) => this.persistedToTiered(p, "L1" /* WARM */));
176
+ }
177
+ /**
178
+ * Get cold contexts (L2 tier, >7 days)
179
+ */
180
+ getColdContexts(limit) {
181
+ const cutoff = Date.now() - this.config.warmThreshold;
182
+ const contexts = this.persistence.getProjectContexts(this.projectHash, {
183
+ endTime: cutoff,
184
+ sortBy: "lastAccessed",
185
+ sortOrder: "desc",
186
+ limit
187
+ });
188
+ return contexts.map((p) => this.persistedToTiered(p, "L2" /* COLD */));
189
+ }
190
+ /**
191
+ * Get contexts by tier
192
+ */
193
+ getContextsByTier(tier, limit) {
194
+ switch (tier) {
195
+ case "L0" /* HOT */:
196
+ return this.getHotContexts();
197
+ case "L1" /* WARM */:
198
+ return this.getWarmContexts(limit);
199
+ case "L2" /* COLD */:
200
+ return this.getColdContexts(limit);
201
+ }
202
+ }
203
+ /**
204
+ * Lazy load cold contexts (batch loading)
205
+ */
206
+ async lazyColdContexts(offset = 0, limit = 50) {
207
+ const cutoff = Date.now() - this.config.warmThreshold;
208
+ const contexts = this.persistence.queryContexts({
209
+ projectHash: this.projectHash,
210
+ endTime: cutoff,
211
+ sortBy: "lastAccessed",
212
+ sortOrder: "desc",
213
+ limit
214
+ });
215
+ const sliced = contexts.slice(offset, offset + limit);
216
+ return sliced.map((p) => this.persistedToTiered(p, "L2" /* COLD */));
217
+ }
218
+ /**
219
+ * Migrate contexts between tiers based on access patterns
220
+ */
221
+ migrateContexts() {
222
+ const now = Date.now();
223
+ let promoted = 0;
224
+ let demoted = 0;
225
+ const l0Contexts = this.l0Cache.getAll();
226
+ for (const entry of l0Contexts) {
227
+ const age = now - entry.lastAccessed;
228
+ if (age > this.config.hotThreshold) {
229
+ this.l0Cache.delete(entry.id);
230
+ this.tierMigrations.hotToWarm++;
231
+ demoted++;
232
+ }
233
+ }
234
+ const warmContexts = this.getWarmContexts(50);
235
+ for (const entry of warmContexts) {
236
+ if (entry.accessCount > 10) {
237
+ this.promoteToL0(entry.id, entry.context, entry.lastAccessed, entry.accessCount);
238
+ this.tierMigrations.warmToHot++;
239
+ promoted++;
240
+ }
241
+ }
242
+ return { promoted, demoted };
243
+ }
244
+ /**
245
+ * Get tier statistics
246
+ */
247
+ getStats() {
248
+ const l0Stats = this.l0Cache.getStats();
249
+ const now = Date.now();
250
+ const warmStart = now - this.config.warmThreshold;
251
+ const warmEnd = now - this.config.hotThreshold;
252
+ const l1Contexts = this.persistence.queryContexts({
253
+ projectHash: this.projectHash,
254
+ startTime: warmStart,
255
+ endTime: warmEnd
256
+ });
257
+ const l2Contexts = this.persistence.queryContexts({
258
+ projectHash: this.projectHash,
259
+ endTime: warmStart
260
+ });
261
+ return {
262
+ l0: l0Stats,
263
+ l1: {
264
+ count: l1Contexts.length,
265
+ avgAccessTime: this.calculateAvgAccessTime(l1Contexts)
266
+ },
267
+ l2: {
268
+ count: l2Contexts.length,
269
+ avgAccessTime: this.calculateAvgAccessTime(l2Contexts)
270
+ },
271
+ migrations: { ...this.tierMigrations }
272
+ };
273
+ }
274
+ /**
275
+ * Clear L0 cache
276
+ */
277
+ clearL0Cache() {
278
+ this.l0Cache.clear();
279
+ }
280
+ /**
281
+ * Refresh L0 cache with current hot contexts
282
+ */
283
+ refreshL0Cache() {
284
+ this.l0Cache.clear();
285
+ this.initializeL0Cache();
286
+ }
287
+ /**
288
+ * Initialize L0 cache with hot contexts from persistence
289
+ */
290
+ initializeL0Cache() {
291
+ const cutoff = Date.now() - this.config.hotThreshold;
292
+ const hotContexts = this.persistence.getProjectContexts(this.projectHash, {
293
+ startTime: cutoff,
294
+ sortBy: "lastAccessed",
295
+ sortOrder: "desc",
296
+ limit: this.config.l0MaxEntries
297
+ });
298
+ for (const persisted of hotContexts) {
299
+ const context = this.persistedToCompressed(persisted);
300
+ const tiered = {
301
+ id: persisted.id,
302
+ tier: "L0" /* HOT */,
303
+ lastAccessed: persisted.lastAccessed,
304
+ accessCount: persisted.accessCount,
305
+ context
306
+ };
307
+ this.l0Cache.set(persisted.id, tiered);
308
+ }
309
+ }
310
+ /**
311
+ * Promote context to L0 cache
312
+ */
313
+ promoteToL0(id, context, lastAccessed, accessCount) {
314
+ const tiered = {
315
+ id,
316
+ tier: "L0" /* HOT */,
317
+ lastAccessed,
318
+ accessCount,
319
+ context
320
+ };
321
+ this.l0Cache.set(id, tiered);
322
+ }
323
+ /**
324
+ * Determine tier based on last accessed time
325
+ */
326
+ determineTier(lastAccessed) {
327
+ const age = Date.now() - lastAccessed;
328
+ if (age < this.config.hotThreshold) {
329
+ return "L0" /* HOT */;
330
+ } else if (age < this.config.warmThreshold) {
331
+ return "L1" /* WARM */;
332
+ } else {
333
+ return "L2" /* COLD */;
334
+ }
335
+ }
336
+ /**
337
+ * Convert persisted context to compressed context
338
+ */
339
+ persistedToCompressed(persisted) {
340
+ return {
341
+ id: persisted.id,
342
+ compressed: persisted.compressed,
343
+ algorithm: persisted.algorithm,
344
+ strategy: persisted.strategy,
345
+ originalTokens: persisted.originalTokens,
346
+ compressedTokens: persisted.compressedTokens,
347
+ compressionRatio: persisted.compressionRatio,
348
+ metadata: JSON.parse(persisted.metadata),
349
+ compressedAt: persisted.timestamp
350
+ };
351
+ }
352
+ /**
353
+ * Convert persisted context to tiered context
354
+ */
355
+ persistedToTiered(persisted, tier) {
356
+ return {
357
+ id: persisted.id,
358
+ tier,
359
+ lastAccessed: persisted.lastAccessed,
360
+ accessCount: persisted.accessCount,
361
+ context: this.persistedToCompressed(persisted)
362
+ };
363
+ }
364
+ /**
365
+ * Calculate average access time for contexts
366
+ */
367
+ calculateAvgAccessTime(contexts) {
368
+ if (contexts.length === 0)
369
+ return 0;
370
+ const now = Date.now();
371
+ const totalAge = contexts.reduce((sum, c) => sum + (now - c.lastAccessed), 0);
372
+ return totalAge / contexts.length;
373
+ }
374
+ }
375
+ function createHierarchicalLoader(persistence, projectHash, config) {
376
+ return new HierarchicalContextLoader(persistence, projectHash, config);
377
+ }
378
+
379
+ function formatBytes(bytes) {
380
+ if (bytes === 0)
381
+ return "0 B";
382
+ const k = 1024;
383
+ const sizes = ["B", "KB", "MB", "GB"];
384
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
385
+ return `${(bytes / k ** i).toFixed(2)} ${sizes[i]}`;
386
+ }
387
+ function formatDate(timestamp) {
388
+ const date = new Date(timestamp);
389
+ return date.toLocaleString();
390
+ }
391
+ function formatDuration(ms) {
392
+ const seconds = Math.floor(ms / 1e3);
393
+ const minutes = Math.floor(seconds / 60);
394
+ const hours = Math.floor(minutes / 60);
395
+ const days = Math.floor(hours / 24);
396
+ if (days > 0)
397
+ return `${days}d ${hours % 24}h`;
398
+ if (hours > 0)
399
+ return `${hours}h ${minutes % 60}m`;
400
+ if (minutes > 0)
401
+ return `${minutes}m ${seconds % 60}s`;
402
+ return `${seconds}s`;
403
+ }
404
+ async function listContexts(projectHash) {
405
+ const isZh = i18n.language === "zh-CN";
406
+ const persistence = getContextPersistence();
407
+ console.log("");
408
+ console.log(a.bold.cyan(isZh ? "\u{1F4CB} \u5B58\u50A8\u7684\u4E0A\u4E0B\u6587\u5217\u8868" : "\u{1F4CB} Stored Contexts"));
409
+ console.log(a.dim("\u2500".repeat(80)));
410
+ const PAGE_SIZE = 20;
411
+ let offset = 0;
412
+ let showMore = true;
413
+ while (showMore) {
414
+ const contexts = persistence.queryContexts({
415
+ projectHash,
416
+ sortBy: "lastAccessed",
417
+ sortOrder: "desc",
418
+ limit: PAGE_SIZE
419
+ });
420
+ if (contexts.length === 0) {
421
+ console.log(a.yellow(isZh ? " \u6CA1\u6709\u627E\u5230\u4E0A\u4E0B\u6587" : " No contexts found"));
422
+ break;
423
+ }
424
+ const displayContexts = contexts.slice(offset, offset + PAGE_SIZE);
425
+ for (const ctx of displayContexts) {
426
+ const age = Date.now() - ctx.lastAccessed;
427
+ const ratio = (ctx.compressionRatio * 100).toFixed(1);
428
+ console.log(` ${a.green(ctx.id.substring(0, 8))}... ${a.dim("|")} ${a.cyan(ctx.algorithm)} ${a.dim("|")} ${ratio}% ${a.dim("|")} ${a.yellow(ctx.accessCount)} ${isZh ? "\u6B21\u8BBF\u95EE" : "accesses"} ${a.dim("|")} ${formatDuration(age)} ${isZh ? "\u524D" : "ago"}`);
429
+ }
430
+ if (offset + PAGE_SIZE < contexts.length) {
431
+ const { action } = await inquirer.prompt({
432
+ type: "list",
433
+ name: "action",
434
+ message: isZh ? "\u663E\u793A\u66F4\u591A?" : "Show more?",
435
+ choices: [
436
+ { name: isZh ? "\u4E0B\u4E00\u9875" : "Next page", value: "next" },
437
+ { name: isZh ? "\u8FD4\u56DE" : "Back", value: "back" }
438
+ ]
439
+ });
440
+ if (action === "next") {
441
+ offset += PAGE_SIZE;
442
+ } else {
443
+ showMore = false;
444
+ }
445
+ } else {
446
+ showMore = false;
447
+ }
448
+ }
449
+ console.log("");
450
+ }
451
+ async function searchContexts() {
452
+ const isZh = i18n.language === "zh-CN";
453
+ const persistence = getContextPersistence();
454
+ const { query } = await inquirer.prompt({
455
+ type: "input",
456
+ name: "query",
457
+ message: isZh ? '\u8F93\u5165\u641C\u7D22\u5173\u952E\u8BCD (\u652F\u6301 AND, OR, NOT, "\u77ED\u8BED"):' : 'Enter search query (supports AND, OR, NOT, "phrases"):',
458
+ validate: (value) => {
459
+ if (!value || value.trim().length === 0) {
460
+ return isZh ? "\u8BF7\u8F93\u5165\u641C\u7D22\u5173\u952E\u8BCD" : "Please enter a search query";
461
+ }
462
+ return true;
463
+ }
464
+ });
465
+ console.log("");
466
+ console.log(a.bold.cyan(isZh ? "\u{1F50D} \u641C\u7D22\u7ED3\u679C" : "\u{1F50D} Search Results"));
467
+ console.log(a.dim("\u2500".repeat(80)));
468
+ const results = persistence.searchContexts(query, {
469
+ sortBy: "relevance",
470
+ sortOrder: "desc",
471
+ limit: 50
472
+ });
473
+ if (results.length === 0) {
474
+ console.log(a.yellow(isZh ? " \u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u4E0A\u4E0B\u6587" : " No matching contexts found"));
475
+ } else {
476
+ for (const result of results) {
477
+ const ratio = (result.compressionRatio * 100).toFixed(1);
478
+ console.log(` ${a.green(result.id.substring(0, 8))}... ${a.dim("|")} ${a.cyan(result.algorithm)} ${a.dim("|")} ${ratio}% ${a.dim("|")} ${a.magenta(`rank: ${result.rank.toFixed(2)}`)}`);
479
+ if (result.snippet) {
480
+ console.log(` ${a.dim(result.snippet.replace(/<mark>/g, a.yellow.open).replace(/<\/mark>/g, a.yellow.close))}`);
481
+ }
482
+ }
483
+ }
484
+ console.log("");
485
+ }
486
+ async function viewContextDetails() {
487
+ const isZh = i18n.language === "zh-CN";
488
+ const persistence = getContextPersistence();
489
+ const { contextId } = await inquirer.prompt({
490
+ type: "input",
491
+ name: "contextId",
492
+ message: isZh ? "\u8F93\u5165\u4E0A\u4E0B\u6587 ID (\u5B8C\u6574\u6216\u524D\u7F00):" : "Enter context ID (full or prefix):",
493
+ validate: (value) => {
494
+ if (!value || value.trim().length === 0) {
495
+ return isZh ? "\u8BF7\u8F93\u5165\u4E0A\u4E0B\u6587 ID" : "Please enter a context ID";
496
+ }
497
+ return true;
498
+ }
499
+ });
500
+ const allContexts = persistence.queryContexts({ limit: 1e4 });
501
+ const context = allContexts.find((c) => c.id.startsWith(contextId.trim()));
502
+ if (!context) {
503
+ console.log(a.red(isZh ? " \u672A\u627E\u5230\u4E0A\u4E0B\u6587" : " Context not found"));
504
+ return;
505
+ }
506
+ console.log("");
507
+ console.log(a.bold.cyan(isZh ? "\u{1F4C4} \u4E0A\u4E0B\u6587\u8BE6\u60C5" : "\u{1F4C4} Context Details"));
508
+ console.log(a.dim("\u2500".repeat(80)));
509
+ console.log(` ${a.bold("ID:")} ${context.id}`);
510
+ console.log(` ${a.bold(isZh ? "\u9879\u76EE:" : "Project:")} ${context.projectHash}`);
511
+ console.log(` ${a.bold(isZh ? "\u7B97\u6CD5:" : "Algorithm:")} ${context.algorithm}`);
512
+ console.log(` ${a.bold(isZh ? "\u7B56\u7565:" : "Strategy:")} ${context.strategy}`);
513
+ console.log(` ${a.bold(isZh ? "\u539F\u59CB Tokens:" : "Original Tokens:")} ${context.originalTokens.toLocaleString()}`);
514
+ console.log(` ${a.bold(isZh ? "\u538B\u7F29\u540E Tokens:" : "Compressed Tokens:")} ${context.compressedTokens.toLocaleString()}`);
515
+ console.log(` ${a.bold(isZh ? "\u538B\u7F29\u7387:" : "Compression Ratio:")} ${(context.compressionRatio * 100).toFixed(1)}%`);
516
+ console.log(` ${a.bold(isZh ? "\u8BBF\u95EE\u6B21\u6570:" : "Access Count:")} ${context.accessCount}`);
517
+ console.log(` ${a.bold(isZh ? "\u521B\u5EFA\u65F6\u95F4:" : "Created:")} ${formatDate(context.timestamp)}`);
518
+ console.log(` ${a.bold(isZh ? "\u6700\u540E\u8BBF\u95EE:" : "Last Accessed:")} ${formatDate(context.lastAccessed)}`);
519
+ try {
520
+ const metadata = JSON.parse(context.metadata);
521
+ if (Object.keys(metadata).length > 0) {
522
+ console.log(` ${a.bold(isZh ? "\u5143\u6570\u636E:" : "Metadata:")}`);
523
+ for (const [key, value] of Object.entries(metadata)) {
524
+ console.log(` ${a.cyan(key)}: ${JSON.stringify(value)}`);
525
+ }
526
+ }
527
+ } catch {
528
+ }
529
+ console.log("");
530
+ }
531
+ async function exportContexts() {
532
+ const isZh = i18n.language === "zh-CN";
533
+ const persistence = getContextPersistence();
534
+ const { projectHash } = await inquirer.prompt({
535
+ type: "input",
536
+ name: "projectHash",
537
+ message: isZh ? "\u8F93\u5165\u9879\u76EE\u54C8\u5E0C (\u7559\u7A7A\u5BFC\u51FA\u5168\u90E8):" : "Enter project hash (leave empty for all):"
538
+ });
539
+ const { outputPath } = await inquirer.prompt({
540
+ type: "input",
541
+ name: "outputPath",
542
+ message: isZh ? "\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84:" : "Output file path:",
543
+ default: join(process.cwd(), "contexts-export.json")
544
+ });
545
+ const contexts = persistence.exportContexts(projectHash || void 0);
546
+ writeFileSync(outputPath, JSON.stringify(contexts, null, 2), "utf-8");
547
+ console.log("");
548
+ console.log(a.green(`\u2714 ${isZh ? "\u5DF2\u5BFC\u51FA" : "Exported"} ${contexts.length} ${isZh ? "\u4E2A\u4E0A\u4E0B\u6587\u5230" : "contexts to"} ${outputPath}`));
549
+ console.log("");
550
+ }
551
+ async function importContexts() {
552
+ const isZh = i18n.language === "zh-CN";
553
+ const persistence = getContextPersistence();
554
+ const { inputPath } = await inquirer.prompt({
555
+ type: "input",
556
+ name: "inputPath",
557
+ message: isZh ? "\u8F93\u5165\u6587\u4EF6\u8DEF\u5F84:" : "Input file path:",
558
+ validate: (value) => {
559
+ if (!value || value.trim().length === 0) {
560
+ return isZh ? "\u8BF7\u8F93\u5165\u6587\u4EF6\u8DEF\u5F84" : "Please enter a file path";
561
+ }
562
+ return true;
563
+ }
564
+ });
565
+ try {
566
+ const fs = require("node:fs");
567
+ const content = fs.readFileSync(inputPath, "utf-8");
568
+ const contexts = JSON.parse(content);
569
+ const imported = persistence.importContexts(contexts);
570
+ console.log("");
571
+ console.log(a.green(`\u2714 ${isZh ? "\u5DF2\u5BFC\u5165" : "Imported"} ${imported} ${isZh ? "\u4E2A\u4E0A\u4E0B\u6587" : "contexts"}`));
572
+ console.log("");
573
+ } catch (error) {
574
+ console.log("");
575
+ console.log(a.red(`\u2716 ${isZh ? "\u5BFC\u5165\u5931\u8D25:" : "Import failed:"} ${error instanceof Error ? error.message : String(error)}`));
576
+ console.log("");
577
+ }
578
+ }
579
+ async function clearOldContexts() {
580
+ const isZh = i18n.language === "zh-CN";
581
+ const persistence = getContextPersistence();
582
+ const { ageChoice } = await inquirer.prompt({
583
+ type: "list",
584
+ name: "ageChoice",
585
+ message: isZh ? "\u6E05\u7406\u591A\u4E45\u4E4B\u524D\u7684\u4E0A\u4E0B\u6587?" : "Clear contexts older than:",
586
+ choices: [
587
+ { name: isZh ? "7 \u5929" : "7 days", value: "7" },
588
+ { name: isZh ? "30 \u5929" : "30 days", value: "30" },
589
+ { name: isZh ? "90 \u5929" : "90 days", value: "90" },
590
+ { name: isZh ? "180 \u5929" : "180 days", value: "180" },
591
+ { name: isZh ? "\u81EA\u5B9A\u4E49" : "Custom", value: "custom" }
592
+ ]
593
+ });
594
+ let days;
595
+ if (ageChoice === "custom") {
596
+ const { customDays } = await inquirer.prompt({
597
+ type: "input",
598
+ name: "customDays",
599
+ message: isZh ? "\u8F93\u5165\u5929\u6570:" : "Enter days:",
600
+ validate: (value) => {
601
+ const num = parseInt(value, 10);
602
+ if (isNaN(num) || num <= 0) {
603
+ return isZh ? "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u5929\u6570" : "Please enter a valid number of days";
604
+ }
605
+ return true;
606
+ }
607
+ });
608
+ days = parseInt(customDays, 10);
609
+ } else {
610
+ days = parseInt(ageChoice, 10);
611
+ }
612
+ const maxAge = days * 24 * 60 * 60 * 1e3;
613
+ const { confirm } = await inquirer.prompt({
614
+ type: "confirm",
615
+ name: "confirm",
616
+ message: isZh ? `\u786E\u8BA4\u6E05\u7406 ${days} \u5929\u524D\u7684\u4E0A\u4E0B\u6587?` : `Confirm clearing contexts older than ${days} days?`,
617
+ default: false
618
+ });
619
+ if (!confirm) {
620
+ console.log(a.yellow(isZh ? " \u5DF2\u53D6\u6D88" : " Cancelled"));
621
+ return;
622
+ }
623
+ const deleted = persistence.cleanup(maxAge);
624
+ console.log("");
625
+ console.log(a.green(`\u2714 ${isZh ? "\u5DF2\u6E05\u7406" : "Cleared"} ${deleted} ${isZh ? "\u4E2A\u4E0A\u4E0B\u6587" : "contexts"}`));
626
+ console.log("");
627
+ }
628
+ async function viewTierDistribution() {
629
+ const isZh = i18n.language === "zh-CN";
630
+ const persistence = getContextPersistence();
631
+ const { projectHash } = await inquirer.prompt({
632
+ type: "input",
633
+ name: "projectHash",
634
+ message: isZh ? "\u8F93\u5165\u9879\u76EE\u54C8\u5E0C (\u7559\u7A7A\u67E5\u770B\u5168\u90E8):" : "Enter project hash (leave empty for all):"
635
+ });
636
+ const loader = createHierarchicalLoader(
637
+ persistence,
638
+ projectHash || "global"
639
+ );
640
+ const stats = loader.getStats();
641
+ console.log("");
642
+ console.log(a.bold.cyan(isZh ? "\u{1F4CA} \u5C42\u7EA7\u5206\u5E03\u7EDF\u8BA1" : "\u{1F4CA} Tier Distribution"));
643
+ console.log(a.dim("\u2500".repeat(80)));
644
+ console.log(` ${a.bold.red("L0 (Hot)")} ${a.dim("- <1 day, in-memory cache")}`);
645
+ console.log(` ${a.cyan(isZh ? "\u6570\u91CF:" : "Count:")} ${stats.l0.count}`);
646
+ console.log(` ${a.cyan(isZh ? "\u5927\u5C0F:" : "Size:")} ${formatBytes(stats.l0.size)}`);
647
+ console.log(` ${a.cyan(isZh ? "\u547D\u4E2D\u7387:" : "Hit Rate:")} ${(stats.l0.hitRate * 100).toFixed(1)}%`);
648
+ console.log(` ${a.bold.yellow("L1 (Warm)")} ${a.dim("- 1-7 days, indexed in DB")}`);
649
+ console.log(` ${a.cyan(isZh ? "\u6570\u91CF:" : "Count:")} ${stats.l1.count}`);
650
+ console.log(` ${a.cyan(isZh ? "\u5E73\u5747\u8BBF\u95EE\u65F6\u95F4:" : "Avg Access Time:")} ${formatDuration(stats.l1.avgAccessTime)}`);
651
+ console.log(` ${a.bold.blue("L2 (Cold)")} ${a.dim("- >7 days, lazy-loaded")}`);
652
+ console.log(` ${a.cyan(isZh ? "\u6570\u91CF:" : "Count:")} ${stats.l2.count}`);
653
+ console.log(` ${a.cyan(isZh ? "\u5E73\u5747\u8BBF\u95EE\u65F6\u95F4:" : "Avg Access Time:")} ${formatDuration(stats.l2.avgAccessTime)}`);
654
+ console.log(` ${a.bold.magenta(isZh ? "\u5C42\u7EA7\u8FC1\u79FB:" : "Tier Migrations:")}`);
655
+ console.log(` ${a.dim("Hot \u2192 Warm:")} ${stats.migrations.hotToWarm}`);
656
+ console.log(` ${a.dim("Warm \u2192 Cold:")} ${stats.migrations.warmToCold}`);
657
+ console.log(` ${a.dim("Cold \u2192 Warm:")} ${stats.migrations.coldToWarm}`);
658
+ console.log(` ${a.dim("Warm \u2192 Hot:")} ${stats.migrations.warmToHot}`);
659
+ console.log("");
660
+ }
661
+ async function migrateTiers() {
662
+ const isZh = i18n.language === "zh-CN";
663
+ const persistence = getContextPersistence();
664
+ const { projectHash } = await inquirer.prompt({
665
+ type: "input",
666
+ name: "projectHash",
667
+ message: isZh ? "\u8F93\u5165\u9879\u76EE\u54C8\u5E0C (\u7559\u7A7A\u8FC1\u79FB\u5168\u90E8):" : "Enter project hash (leave empty for all):"
668
+ });
669
+ const loader = createHierarchicalLoader(
670
+ persistence,
671
+ projectHash || "global"
672
+ );
673
+ console.log("");
674
+ console.log(a.cyan(isZh ? "\u6B63\u5728\u8FC1\u79FB\u5C42\u7EA7..." : "Migrating tiers..."));
675
+ const result = loader.migrateContexts();
676
+ console.log("");
677
+ console.log(a.green(`\u2714 ${isZh ? "\u8FC1\u79FB\u5B8C\u6210" : "Migration complete"}`));
678
+ console.log(` ${a.cyan(isZh ? "\u63D0\u5347:" : "Promoted:")} ${result.promoted}`);
679
+ console.log(` ${a.cyan(isZh ? "\u964D\u7EA7:" : "Demoted:")} ${result.demoted}`);
680
+ console.log("");
681
+ }
682
+ async function viewDatabaseStats() {
683
+ const isZh = i18n.language === "zh-CN";
684
+ const persistence = getContextPersistence();
685
+ const stats = persistence.getStats();
686
+ console.log("");
687
+ console.log(a.bold.cyan(isZh ? "\u{1F4C8} \u6570\u636E\u5E93\u7EDF\u8BA1" : "\u{1F4C8} Database Statistics"));
688
+ console.log(a.dim("\u2500".repeat(80)));
689
+ console.log(` ${a.bold(isZh ? "\u603B\u4E0A\u4E0B\u6587\u6570:" : "Total Contexts:")} ${stats.totalContexts.toLocaleString()}`);
690
+ console.log(` ${a.bold(isZh ? "\u603B\u9879\u76EE\u6570:" : "Total Projects:")} ${stats.totalProjects.toLocaleString()}`);
691
+ console.log(` ${a.bold(isZh ? "\u539F\u59CB Tokens:" : "Original Tokens:")} ${stats.totalOriginalTokens.toLocaleString()}`);
692
+ console.log(` ${a.bold(isZh ? "\u538B\u7F29\u540E Tokens:" : "Compressed Tokens:")} ${stats.totalCompressedTokens.toLocaleString()}`);
693
+ console.log(` ${a.bold(isZh ? "\u5E73\u5747\u538B\u7F29\u7387:" : "Avg Compression:")} ${(stats.averageCompressionRatio * 100).toFixed(1)}%`);
694
+ console.log(` ${a.bold(isZh ? "\u6570\u636E\u5E93\u5927\u5C0F:" : "Database Size:")} ${formatBytes(stats.totalSize)}`);
695
+ if (stats.oldestContext) {
696
+ console.log(` ${a.bold(isZh ? "\u6700\u65E9\u4E0A\u4E0B\u6587:" : "Oldest Context:")} ${formatDate(stats.oldestContext)}`);
697
+ }
698
+ if (stats.newestContext) {
699
+ console.log(` ${a.bold(isZh ? "\u6700\u65B0\u4E0A\u4E0B\u6587:" : "Newest Context:")} ${formatDate(stats.newestContext)}`);
700
+ }
701
+ const saved = stats.totalOriginalTokens - stats.totalCompressedTokens;
702
+ console.log(` ${a.bold.green(isZh ? "\u8282\u7701 Tokens:" : "Tokens Saved:")} ${saved.toLocaleString()} (${(stats.averageCompressionRatio * 100).toFixed(1)}%)`);
703
+ console.log("");
704
+ }
705
+ async function vacuumDatabase() {
706
+ const isZh = i18n.language === "zh-CN";
707
+ const persistence = getContextPersistence();
708
+ const { confirm } = await inquirer.prompt({
709
+ type: "confirm",
710
+ name: "confirm",
711
+ message: isZh ? "\u786E\u8BA4\u538B\u7F29\u6570\u636E\u5E93? (\u8FD9\u53EF\u80FD\u9700\u8981\u4E00\u4E9B\u65F6\u95F4)" : "Confirm vacuum database? (This may take some time)",
712
+ default: false
713
+ });
714
+ if (!confirm) {
715
+ console.log(a.yellow(isZh ? " \u5DF2\u53D6\u6D88" : " Cancelled"));
716
+ return;
717
+ }
718
+ console.log("");
719
+ console.log(a.cyan(isZh ? "\u6B63\u5728\u538B\u7F29\u6570\u636E\u5E93..." : "Vacuuming database..."));
720
+ persistence.vacuum();
721
+ console.log("");
722
+ console.log(a.green(`\u2714 ${isZh ? "\u6570\u636E\u5E93\u538B\u7F29\u5B8C\u6210" : "Database vacuum complete"}`));
723
+ console.log("");
724
+ }
725
+ async function showPersistenceMenu() {
726
+ const isZh = i18n.language === "zh-CN";
727
+ console.log("");
728
+ console.log(a.bold.yellow(isZh ? "\u{1F4BE} \u6301\u4E45\u5316\u7BA1\u7406\u5668" : "\u{1F4BE} Persistence Manager"));
729
+ console.log(a.dim("\u2500".repeat(80)));
730
+ console.log(` ${a.green("1.")} ${isZh ? "\u5217\u51FA\u5B58\u50A8\u7684\u4E0A\u4E0B\u6587" : "List stored contexts"} ${a.dim(isZh ? "- \u5206\u9875\u663E\u793A\u6240\u6709\u4E0A\u4E0B\u6587" : "- Paginated view of all contexts")}`);
731
+ console.log(` ${a.green("2.")} ${isZh ? "\u641C\u7D22\u4E0A\u4E0B\u6587" : "Search contexts"} ${a.dim(isZh ? "- \u5168\u6587\u641C\u7D22 (FTS5)" : "- Full-text search (FTS5)")}`);
732
+ console.log(` ${a.green("3.")} ${isZh ? "\u67E5\u770B\u4E0A\u4E0B\u6587\u8BE6\u60C5" : "View context details"} ${a.dim(isZh ? "- \u663E\u793A\u5143\u6570\u636E\u548C\u7EDF\u8BA1" : "- Show metadata and stats")}`);
733
+ console.log(` ${a.green("4.")} ${isZh ? "\u5BFC\u51FA\u4E0A\u4E0B\u6587" : "Export contexts"} ${a.dim(isZh ? "- \u5BFC\u51FA\u4E3A JSON \u683C\u5F0F" : "- Export to JSON format")}`);
734
+ console.log(` ${a.green("5.")} ${isZh ? "\u5BFC\u5165\u4E0A\u4E0B\u6587" : "Import contexts"} ${a.dim(isZh ? "- \u4ECE JSON \u5BFC\u5165" : "- Import from JSON")}`);
735
+ console.log(` ${a.green("6.")} ${isZh ? "\u6E05\u7406\u65E7\u4E0A\u4E0B\u6587" : "Clear old contexts"} ${a.dim(isZh ? "- \u6309\u65F6\u95F4\u6E05\u7406" : "- Clear by age")}`);
736
+ console.log(` ${a.green("7.")} ${isZh ? "\u67E5\u770B\u5C42\u7EA7\u5206\u5E03" : "View tier distribution"} ${a.dim(isZh ? "- L0/L1/L2 \u7EDF\u8BA1" : "- L0/L1/L2 stats")}`);
737
+ console.log(` ${a.green("8.")} ${isZh ? "\u624B\u52A8\u8FC1\u79FB\u5C42\u7EA7" : "Migrate tiers manually"} ${a.dim(isZh ? "- \u4F18\u5316\u5C42\u7EA7\u5206\u5E03" : "- Optimize tier distribution")}`);
738
+ console.log(` ${a.green("9.")} ${isZh ? "\u6570\u636E\u5E93\u7EDF\u8BA1" : "Database statistics"} ${a.dim(isZh ? "- \u67E5\u770B\u5168\u5C40\u7EDF\u8BA1" : "- View global stats")}`);
739
+ console.log(` ${a.green("V.")} ${isZh ? "\u538B\u7F29\u6570\u636E\u5E93" : "Vacuum database"} ${a.dim(isZh ? "- \u56DE\u6536\u7A7A\u95F4" : "- Reclaim space")}`);
740
+ console.log(` ${a.green("Q.")} ${isZh ? "\u8FD4\u56DE" : "Back"}`);
741
+ console.log("");
742
+ const { choice } = await inquirer.prompt({
743
+ type: "input",
744
+ name: "choice",
745
+ message: isZh ? "\u8BF7\u9009\u62E9\u64CD\u4F5C:" : "Select operation:",
746
+ validate: (value) => {
747
+ const normalized2 = value.trim().toLowerCase();
748
+ const valid = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "v", "q"];
749
+ return valid.includes(normalized2) || (isZh ? "\u8BF7\u8F93\u5165\u6709\u6548\u9009\u9879" : "Please enter a valid option");
750
+ }
751
+ });
752
+ const normalized = choice.trim().toLowerCase();
753
+ switch (normalized) {
754
+ case "1":
755
+ await listContexts();
756
+ break;
757
+ case "2":
758
+ await searchContexts();
759
+ break;
760
+ case "3":
761
+ await viewContextDetails();
762
+ break;
763
+ case "4":
764
+ await exportContexts();
765
+ break;
766
+ case "5":
767
+ await importContexts();
768
+ break;
769
+ case "6":
770
+ await clearOldContexts();
771
+ break;
772
+ case "7":
773
+ await viewTierDistribution();
774
+ break;
775
+ case "8":
776
+ await migrateTiers();
777
+ break;
778
+ case "9":
779
+ await viewDatabaseStats();
780
+ break;
781
+ case "v":
782
+ await vacuumDatabase();
783
+ break;
784
+ case "q":
785
+ return false;
786
+ }
787
+ return true;
788
+ }
789
+ async function persistenceManager() {
790
+ try {
791
+ let continueMenu = true;
792
+ while (continueMenu) {
793
+ continueMenu = await showPersistenceMenu();
794
+ }
795
+ } catch (error) {
796
+ const isZh = i18n.language === "zh-CN";
797
+ console.error(a.red(`${isZh ? "\u9519\u8BEF:" : "Error:"} ${error instanceof Error ? error.message : String(error)}`));
798
+ }
799
+ }
800
+
801
+ export { persistenceManager };