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,651 @@
1
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import a from './index5.mjs';
4
+ import { getContextPersistence } from './persistence.mjs';
5
+ import { g as getStatsStorage } from '../shared/ccjk.OTnevPNE.mjs';
6
+ import { j as join, d as dirname } from '../shared/ccjk.bQ7Dh1g4.mjs';
7
+ import '../shared/ccjk.BAGoDD49.mjs';
8
+ import 'better-sqlite3';
9
+
10
+ async function impactCommand(options = {}) {
11
+ const report = collectImpactReport(options.days);
12
+ if (options.json) {
13
+ console.log(JSON.stringify(report, null, 2));
14
+ return;
15
+ }
16
+ renderImpactSummary(report);
17
+ const outputPath = options.output || getDefaultImpactReportPath();
18
+ writeImpactHtmlReport(report, outputPath);
19
+ console.log(a.dim(`HTML report: ${outputPath}`));
20
+ }
21
+ function collectImpactReport(daysInput) {
22
+ const days = normalizeDays(daysInput);
23
+ const storage = getStatsStorage();
24
+ const { startDate, endDate } = getDateRange(days);
25
+ const records = storage.getRecordsByDateRange(startDate, endDate);
26
+ const allUsageDates = storage.getAvailableDates();
27
+ const allUsageStartDate = allUsageDates[0];
28
+ const usageDailyMap = buildUsageDailyMap(records);
29
+ const windowDates = enumerateDates(startDate, endDate);
30
+ let compressionMetrics = [];
31
+ let topProjects = [];
32
+ let compressionNotes = [];
33
+ try {
34
+ const persistence = getContextPersistence();
35
+ compressionMetrics = persistence.getCompressionMetrics(void 0, {
36
+ startTime: toStartTimestamp(startDate),
37
+ endTime: toEndTimestamp(endDate),
38
+ sortOrder: "asc"
39
+ });
40
+ topProjects = persistence.listProjects().sort((a, b) => (b.total_tokens || 0) - (a.total_tokens || 0)).slice(0, 5).map((project) => ({
41
+ name: project.name || project.path || project.hash,
42
+ contexts: project.context_count || 0,
43
+ tokens: project.total_tokens || 0,
44
+ updatedAt: project.updated_at ? new Date(project.updated_at).toISOString() : void 0
45
+ }));
46
+ } catch {
47
+ compressionNotes.push("Context compression history is unavailable, so savings may be under-reported.");
48
+ }
49
+ const compressionDailyMap = buildCompressionDailyMap(compressionMetrics);
50
+ const daily = windowDates.map((date) => {
51
+ const usage = usageDailyMap.get(date);
52
+ const compression = compressionDailyMap.get(date);
53
+ return {
54
+ date,
55
+ requests: usage?.totalRequests || 0,
56
+ tokens: usage?.totalTokens || 0,
57
+ cost: usage?.totalCost || 0,
58
+ savedTokens: compression?.savedTokens || 0,
59
+ savedCost: compression?.savedCost || 0
60
+ };
61
+ });
62
+ const activeDays = daily.filter((day) => day.requests > 0 || day.savedTokens > 0).length;
63
+ const totalRequests = daily.reduce((sum, day) => sum + day.requests, 0);
64
+ const totalTokens = daily.reduce((sum, day) => sum + day.tokens, 0);
65
+ const totalCost = daily.reduce((sum, day) => sum + day.cost, 0);
66
+ const totalSavedTokens = daily.reduce((sum, day) => sum + day.savedTokens, 0);
67
+ const totalSavedCost = daily.reduce((sum, day) => sum + day.savedCost, 0);
68
+ const totalOriginalTokens = compressionMetrics.reduce((sum, metric) => sum + metric.originalTokens, 0);
69
+ const averageCompressionRatio = totalOriginalTokens > 0 ? totalSavedTokens / totalOriginalTokens : 0;
70
+ const averageCompressionTimeMs = compressionMetrics.length > 0 ? compressionMetrics.reduce((sum, metric) => sum + metric.timeTakenMs, 0) / compressionMetrics.length : 0;
71
+ const today = daily[daily.length - 1] || emptyDailyPoint(endDate);
72
+ const yesterday = daily[daily.length - 2] || emptyDailyPoint(endDate);
73
+ const comparison = buildComparison(daily);
74
+ const modelSummary = summarizeModels(records);
75
+ const providerSummary = summarizeProviders(records);
76
+ const algorithmSummary = summarizeAlgorithms(compressionMetrics);
77
+ const notes = buildNotes({
78
+ allUsageStartDate,
79
+ daily,
80
+ comparison,
81
+ hasCompressionData: compressionMetrics.length > 0,
82
+ compressionNotes
83
+ });
84
+ return {
85
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
86
+ rangeDays: days,
87
+ trackingStartDate: allUsageStartDate || daily.find((day) => day.savedTokens > 0)?.date,
88
+ baselineMethod: comparison ? "Comparison uses the earliest tracked window versus the most recent window." : "More history is needed before a baseline comparison is meaningful.",
89
+ today: {
90
+ ...today,
91
+ deltaTokensVsYesterday: today.tokens - yesterday.tokens,
92
+ deltaSavedTokensVsYesterday: today.savedTokens - yesterday.savedTokens
93
+ },
94
+ totals: {
95
+ activeDays,
96
+ totalRequests,
97
+ totalTokens,
98
+ totalCost,
99
+ totalSavedTokens,
100
+ totalSavedCost,
101
+ averageDailyTokens: activeDays > 0 ? totalTokens / activeDays : 0,
102
+ averageDailySavedTokens: activeDays > 0 ? totalSavedTokens / activeDays : 0,
103
+ averageCompressionRatio,
104
+ totalCompressions: compressionMetrics.length,
105
+ averageCompressionTimeMs
106
+ },
107
+ comparison,
108
+ topProviders: providerSummary,
109
+ topModels: modelSummary,
110
+ topProjects,
111
+ topAlgorithms: algorithmSummary,
112
+ daily,
113
+ notes
114
+ };
115
+ }
116
+ function normalizeDays(daysInput) {
117
+ if (!daysInput || Number.isNaN(daysInput)) {
118
+ return 14;
119
+ }
120
+ return Math.max(7, Math.min(90, Math.floor(daysInput)));
121
+ }
122
+ function getDateRange(days) {
123
+ const now = /* @__PURE__ */ new Date();
124
+ const end = formatDate(now);
125
+ const startTime = toStartTimestamp(end) - (days - 1) * 24 * 60 * 60 * 1e3;
126
+ const start = formatDate(new Date(startTime));
127
+ return { startDate: start, endDate: end };
128
+ }
129
+ function buildUsageDailyMap(records) {
130
+ const map = /* @__PURE__ */ new Map();
131
+ for (const record of records) {
132
+ const date = formatDate(new Date(record.timestamp));
133
+ const existing = map.get(date) || {
134
+ date,
135
+ totalRequests: 0,
136
+ successfulRequests: 0,
137
+ failedRequests: 0,
138
+ totalInputTokens: 0,
139
+ totalOutputTokens: 0,
140
+ totalTokens: 0,
141
+ totalCost: 0,
142
+ averageLatency: 0,
143
+ providerStats: {}
144
+ };
145
+ existing.totalRequests++;
146
+ if (record.success) {
147
+ existing.successfulRequests++;
148
+ } else {
149
+ existing.failedRequests++;
150
+ }
151
+ existing.totalInputTokens += record.inputTokens || 0;
152
+ existing.totalOutputTokens += record.outputTokens || 0;
153
+ existing.totalTokens += record.totalTokens || 0;
154
+ existing.totalCost += record.cost || 0;
155
+ map.set(date, existing);
156
+ }
157
+ return map;
158
+ }
159
+ function buildCompressionDailyMap(metrics) {
160
+ const map = /* @__PURE__ */ new Map();
161
+ for (const metric of metrics) {
162
+ const date = formatDate(new Date(metric.timestamp));
163
+ const existing = map.get(date) || { savedTokens: 0, savedCost: 0 };
164
+ const savedTokens = metric.originalTokens - metric.compressedTokens;
165
+ existing.savedTokens += savedTokens;
166
+ existing.savedCost += estimateCompressionCost(savedTokens);
167
+ map.set(date, existing);
168
+ }
169
+ return map;
170
+ }
171
+ function summarizeProviders(records) {
172
+ const map = /* @__PURE__ */ new Map();
173
+ for (const record of records) {
174
+ const key = record.provider || "unknown";
175
+ const current = map.get(key) || { requests: 0, tokens: 0, cost: 0 };
176
+ current.requests++;
177
+ current.tokens += record.totalTokens || 0;
178
+ current.cost += record.cost || 0;
179
+ map.set(key, current);
180
+ }
181
+ return Array.from(map.entries()).map(([provider, value]) => ({ provider, ...value })).sort((a, b) => b.tokens - a.tokens).slice(0, 5);
182
+ }
183
+ function summarizeModels(records) {
184
+ const map = /* @__PURE__ */ new Map();
185
+ for (const record of records) {
186
+ if (!record.model) {
187
+ continue;
188
+ }
189
+ const current = map.get(record.model) || { requests: 0, tokens: 0 };
190
+ current.requests++;
191
+ current.tokens += record.totalTokens || 0;
192
+ map.set(record.model, current);
193
+ }
194
+ return Array.from(map.entries()).map(([model, value]) => ({ model, ...value })).sort((a, b) => b.tokens - a.tokens).slice(0, 5);
195
+ }
196
+ function summarizeAlgorithms(metrics) {
197
+ const map = /* @__PURE__ */ new Map();
198
+ for (const metric of metrics) {
199
+ const current = map.get(metric.algorithm) || { count: 0, savedTokens: 0 };
200
+ current.count++;
201
+ current.savedTokens += metric.originalTokens - metric.compressedTokens;
202
+ map.set(metric.algorithm, current);
203
+ }
204
+ return Array.from(map.entries()).map(([algorithm, value]) => ({ algorithm, ...value })).sort((a, b) => b.savedTokens - a.savedTokens).slice(0, 5);
205
+ }
206
+ function buildComparison(daily) {
207
+ const activeDays = daily.filter((day) => day.requests > 0 || day.savedTokens > 0);
208
+ if (activeDays.length < 4) {
209
+ return void 0;
210
+ }
211
+ const windowSize = Math.min(7, Math.floor(activeDays.length / 2));
212
+ const baselineDays = activeDays.slice(0, windowSize);
213
+ const recentDays = activeDays.slice(-windowSize);
214
+ const baseline = summarizeWindow(baselineDays);
215
+ const recent = summarizeWindow(recentDays);
216
+ return {
217
+ baseline,
218
+ recent,
219
+ tokenDeltaPercent: calculatePercentDelta(baseline.avgDailyTokens, recent.avgDailyTokens),
220
+ costDeltaPercent: calculatePercentDelta(baseline.avgDailyCost, recent.avgDailyCost),
221
+ savedTokensDeltaPercent: calculatePercentDelta(baseline.avgDailySavedTokens, recent.avgDailySavedTokens)
222
+ };
223
+ }
224
+ function summarizeWindow(days) {
225
+ const dayCount = Math.max(days.length, 1);
226
+ return {
227
+ startDate: days[0].date,
228
+ endDate: days[days.length - 1].date,
229
+ avgDailyTokens: days.reduce((sum, day) => sum + day.tokens, 0) / dayCount,
230
+ avgDailyCost: days.reduce((sum, day) => sum + day.cost, 0) / dayCount,
231
+ avgDailySavedTokens: days.reduce((sum, day) => sum + day.savedTokens, 0) / dayCount
232
+ };
233
+ }
234
+ function calculatePercentDelta(baseline, current) {
235
+ if (baseline === 0) {
236
+ return current === 0 ? 0 : 100;
237
+ }
238
+ return (current - baseline) / baseline * 100;
239
+ }
240
+ function buildNotes(input) {
241
+ const notes = [...input.compressionNotes];
242
+ const usageDays = input.daily.filter((day) => day.requests > 0).length;
243
+ if (!input.allUsageStartDate) {
244
+ notes.push("No API usage history was found under ~/.ccjk/stats yet. The report is currently driven by compression history only.");
245
+ }
246
+ if (!input.hasCompressionData) {
247
+ notes.push("Compression savings data is not available yet, so the page can only show raw usage where records exist.");
248
+ }
249
+ if (!input.comparison) {
250
+ notes.push("At least four active days are needed before before/after comparison cards become meaningful.");
251
+ }
252
+ if (usageDays > 0 && input.allUsageStartDate) {
253
+ notes.push(`Tracking currently starts at ${input.allUsageStartDate}. Until an explicit install marker exists, the baseline uses earliest tracked data.`);
254
+ }
255
+ return notes;
256
+ }
257
+ function renderImpactSummary(report) {
258
+ console.log("");
259
+ console.log(a.cyan.bold("CCJK Usage Impact"));
260
+ console.log(a.gray("=".repeat(72)));
261
+ console.log(a.dim(`${report.rangeDays}-day view ending ${report.today.date}`));
262
+ console.log("");
263
+ console.log(a.yellow("Today"));
264
+ console.log(` Tokens: ${a.white.bold(formatInteger(report.today.tokens))} ${formatSigned(report.today.deltaTokensVsYesterday, "vs yesterday")}`);
265
+ console.log(` Cost: ${a.white.bold(formatCurrency(report.today.cost))}`);
266
+ console.log(` Saved: ${a.green.bold(formatInteger(report.today.savedTokens))} ${formatSigned(report.today.deltaSavedTokensVsYesterday, "vs yesterday")}`);
267
+ console.log(` Requests: ${a.white.bold(formatInteger(report.today.requests))}`);
268
+ console.log("");
269
+ console.log(a.yellow("Range Summary"));
270
+ console.log(` Total tokens: ${a.white.bold(formatInteger(report.totals.totalTokens))}`);
271
+ console.log(` Total cost: ${a.white.bold(formatCurrency(report.totals.totalCost))}`);
272
+ console.log(` Saved tokens: ${a.green.bold(formatInteger(report.totals.totalSavedTokens))}`);
273
+ console.log(` Saved cost: ${a.green.bold(formatCurrency(report.totals.totalSavedCost))}`);
274
+ console.log(` Compression runs: ${a.white.bold(formatInteger(report.totals.totalCompressions))}`);
275
+ console.log(` Avg compression: ${a.white.bold(formatPercent(report.totals.averageCompressionRatio))}`);
276
+ console.log(` Active days: ${a.white.bold(formatInteger(report.totals.activeDays))}`);
277
+ console.log("");
278
+ if (report.comparison) {
279
+ console.log(a.yellow("Before / After"));
280
+ console.log(` Baseline: ${report.comparison.baseline.startDate} -> ${report.comparison.baseline.endDate}`);
281
+ console.log(` Recent: ${report.comparison.recent.startDate} -> ${report.comparison.recent.endDate}`);
282
+ console.log(` Avg daily tokens: ${a.white.bold(formatInteger(report.comparison.recent.avgDailyTokens))} (${formatSigned(report.comparison.tokenDeltaPercent, "vs baseline", true)})`);
283
+ console.log(` Avg daily cost: ${a.white.bold(formatCurrency(report.comparison.recent.avgDailyCost))} (${formatSigned(report.comparison.costDeltaPercent, "vs baseline", true)})`);
284
+ console.log(` Avg daily saved: ${a.green.bold(formatInteger(report.comparison.recent.avgDailySavedTokens))} (${formatSigned(report.comparison.savedTokensDeltaPercent, "vs baseline", true)})`);
285
+ console.log("");
286
+ }
287
+ if (report.topProviders.length > 0) {
288
+ console.log(a.yellow("Provider Summary"));
289
+ for (const provider of report.topProviders) {
290
+ console.log(` ${provider.provider.padEnd(18)} ${formatInteger(provider.tokens).padStart(10)} tokens ${formatCurrency(provider.cost).padStart(10)}`);
291
+ }
292
+ console.log("");
293
+ }
294
+ if (report.topModels.length > 0) {
295
+ console.log(a.yellow("Model Summary"));
296
+ for (const model of report.topModels) {
297
+ console.log(` ${truncate(model.model, 30).padEnd(32)} ${formatInteger(model.tokens).padStart(10)} tokens`);
298
+ }
299
+ console.log("");
300
+ }
301
+ if (report.topProjects.length > 0) {
302
+ console.log(a.yellow("Code Summary"));
303
+ for (const project of report.topProjects) {
304
+ console.log(` ${truncate(project.name, 30).padEnd(32)} ${formatInteger(project.tokens).padStart(10)} tokens ${formatInteger(project.contexts).padStart(6)} ctx`);
305
+ }
306
+ console.log("");
307
+ }
308
+ if (report.topAlgorithms.length > 0) {
309
+ console.log(a.yellow("Optimization Summary"));
310
+ for (const algorithm of report.topAlgorithms) {
311
+ console.log(` ${algorithm.algorithm.padEnd(18)} ${formatInteger(algorithm.savedTokens).padStart(10)} saved ${formatInteger(algorithm.count).padStart(6)} runs`);
312
+ }
313
+ console.log("");
314
+ }
315
+ if (report.notes.length > 0) {
316
+ console.log(a.yellow("Notes"));
317
+ for (const note of report.notes) {
318
+ console.log(` - ${note}`);
319
+ }
320
+ console.log("");
321
+ }
322
+ }
323
+ function writeImpactHtmlReport(report, outputPath) {
324
+ const outputDir = dirname(outputPath);
325
+ if (!existsSync(outputDir)) {
326
+ mkdirSync(outputDir, { recursive: true });
327
+ }
328
+ writeFileSync(outputPath, generateImpactHtml(report), "utf-8");
329
+ }
330
+ function generateImpactHtml(report) {
331
+ const maxUsage = Math.max(...report.daily.map((day) => day.tokens), 1);
332
+ const maxSaved = Math.max(...report.daily.map((day) => day.savedTokens), 1);
333
+ return `<!doctype html>
334
+ <html lang="en">
335
+ <head>
336
+ <meta charset="UTF-8" />
337
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
338
+ <title>CCJK Usage Impact</title>
339
+ <style>
340
+ :root {
341
+ --bg: #f6f1e8;
342
+ --panel: rgba(255, 252, 246, 0.86);
343
+ --ink: #1f2933;
344
+ --muted: #5b6770;
345
+ --accent: #0f766e;
346
+ --accent-soft: #99f6e4;
347
+ --usage: #d97706;
348
+ --saved: #0f766e;
349
+ --border: rgba(31, 41, 51, 0.12);
350
+ }
351
+ * { box-sizing: border-box; }
352
+ body {
353
+ margin: 0;
354
+ color: var(--ink);
355
+ font-family: "IBM Plex Sans", "Avenir Next", "Segoe UI", sans-serif;
356
+ background:
357
+ radial-gradient(circle at top left, rgba(217, 119, 6, 0.18), transparent 30%),
358
+ radial-gradient(circle at top right, rgba(15, 118, 110, 0.2), transparent 28%),
359
+ linear-gradient(180deg, #fffaf1 0%, var(--bg) 100%);
360
+ }
361
+ .shell {
362
+ max-width: 1180px;
363
+ margin: 0 auto;
364
+ padding: 32px 20px 48px;
365
+ }
366
+ .hero, .panel {
367
+ background: var(--panel);
368
+ backdrop-filter: blur(10px);
369
+ border: 1px solid var(--border);
370
+ border-radius: 24px;
371
+ box-shadow: 0 20px 60px rgba(31, 41, 51, 0.08);
372
+ }
373
+ .hero {
374
+ padding: 28px;
375
+ margin-bottom: 20px;
376
+ }
377
+ .eyebrow {
378
+ text-transform: uppercase;
379
+ letter-spacing: 0.12em;
380
+ color: var(--accent);
381
+ font-size: 12px;
382
+ font-weight: 700;
383
+ }
384
+ h1 {
385
+ margin: 10px 0 8px;
386
+ font-size: clamp(34px, 5vw, 56px);
387
+ line-height: 0.98;
388
+ }
389
+ .subtle {
390
+ color: var(--muted);
391
+ max-width: 760px;
392
+ font-size: 15px;
393
+ }
394
+ .stats {
395
+ display: grid;
396
+ grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
397
+ gap: 14px;
398
+ margin-top: 24px;
399
+ }
400
+ .stat {
401
+ padding: 18px;
402
+ border-radius: 18px;
403
+ background: rgba(255,255,255,0.68);
404
+ border: 1px solid rgba(31, 41, 51, 0.08);
405
+ }
406
+ .stat .label {
407
+ font-size: 12px;
408
+ text-transform: uppercase;
409
+ letter-spacing: 0.08em;
410
+ color: var(--muted);
411
+ }
412
+ .stat .value {
413
+ margin-top: 8px;
414
+ font-size: 28px;
415
+ font-weight: 800;
416
+ }
417
+ .grid {
418
+ display: grid;
419
+ grid-template-columns: 1.4fr 1fr;
420
+ gap: 20px;
421
+ margin-top: 20px;
422
+ }
423
+ .panel {
424
+ padding: 22px;
425
+ }
426
+ .panel h2 {
427
+ margin: 0 0 14px;
428
+ font-size: 20px;
429
+ }
430
+ .chart {
431
+ display: grid;
432
+ gap: 10px;
433
+ }
434
+ .bar-row {
435
+ display: grid;
436
+ grid-template-columns: 86px 1fr 64px 64px;
437
+ gap: 10px;
438
+ align-items: center;
439
+ }
440
+ .bar-track {
441
+ position: relative;
442
+ height: 10px;
443
+ border-radius: 999px;
444
+ overflow: hidden;
445
+ background: rgba(31, 41, 51, 0.08);
446
+ }
447
+ .bar-usage, .bar-saved {
448
+ position: absolute;
449
+ top: 0;
450
+ left: 0;
451
+ bottom: 0;
452
+ border-radius: 999px;
453
+ }
454
+ .bar-usage { background: linear-gradient(90deg, #fb923c, var(--usage)); }
455
+ .bar-saved { background: linear-gradient(90deg, #5eead4, var(--saved)); opacity: 0.9; }
456
+ .mini {
457
+ color: var(--muted);
458
+ font-size: 12px;
459
+ }
460
+ table {
461
+ width: 100%;
462
+ border-collapse: collapse;
463
+ }
464
+ th, td {
465
+ padding: 10px 0;
466
+ text-align: left;
467
+ border-bottom: 1px solid rgba(31, 41, 51, 0.08);
468
+ font-size: 14px;
469
+ }
470
+ th {
471
+ color: var(--muted);
472
+ font-weight: 600;
473
+ }
474
+ .note-list {
475
+ margin: 0;
476
+ padding-left: 18px;
477
+ color: var(--muted);
478
+ }
479
+ @media (max-width: 900px) {
480
+ .grid { grid-template-columns: 1fr; }
481
+ .bar-row { grid-template-columns: 72px 1fr 56px 56px; }
482
+ }
483
+ </style>
484
+ </head>
485
+ <body>
486
+ <div class="shell">
487
+ <section class="hero">
488
+ <div class="eyebrow">Daily proof of value</div>
489
+ <h1>CCJK Usage Impact</h1>
490
+ <p class="subtle">A simple answer to the product question: is CCJK reducing usage and increasing token efficiency over time?</p>
491
+ <div class="stats">
492
+ ${statCard("Today tokens", formatInteger(report.today.tokens))}
493
+ ${statCard("Today saved", formatInteger(report.today.savedTokens))}
494
+ ${statCard("Today cost", formatCurrency(report.today.cost))}
495
+ ${statCard(`${report.rangeDays}d saved`, formatInteger(report.totals.totalSavedTokens))}
496
+ ${statCard("Compression runs", formatInteger(report.totals.totalCompressions))}
497
+ ${statCard("Avg compression", formatPercent(report.totals.averageCompressionRatio))}
498
+ </div>
499
+ </section>
500
+
501
+ <div class="grid">
502
+ <section class="panel">
503
+ <h2>Daily effect</h2>
504
+ <div class="chart">
505
+ ${report.daily.map((day) => `
506
+ <div class="bar-row">
507
+ <div class="mini">${day.date.slice(5)}</div>
508
+ <div class="bar-track">
509
+ <div class="bar-usage" style="width:${day.tokens / maxUsage * 100}%"></div>
510
+ <div class="bar-saved" style="width:${day.savedTokens / maxSaved * 100}%"></div>
511
+ </div>
512
+ <div class="mini">${compactNumber(day.tokens)}</div>
513
+ <div class="mini">${compactNumber(day.savedTokens)}</div>
514
+ </div>
515
+ `).join("")}
516
+ </div>
517
+ <p class="mini">Orange shows used tokens. Teal shows tokens saved through compression and context optimization.</p>
518
+ </section>
519
+
520
+ <section class="panel">
521
+ <h2>Before / after</h2>
522
+ ${report.comparison ? `
523
+ <table>
524
+ <tr><th>Window</th><th>Avg tokens/day</th><th>Avg saved/day</th></tr>
525
+ <tr><td>${report.comparison.baseline.startDate} \u2192 ${report.comparison.baseline.endDate}</td><td>${formatInteger(report.comparison.baseline.avgDailyTokens)}</td><td>${formatInteger(report.comparison.baseline.avgDailySavedTokens)}</td></tr>
526
+ <tr><td>${report.comparison.recent.startDate} \u2192 ${report.comparison.recent.endDate}</td><td>${formatInteger(report.comparison.recent.avgDailyTokens)}</td><td>${formatInteger(report.comparison.recent.avgDailySavedTokens)}</td></tr>
527
+ </table>
528
+ <p class="mini">Avg daily tokens delta: ${escapeHtml(formatSignedPlain(report.comparison.tokenDeltaPercent, "vs baseline", true))}</p>
529
+ <p class="mini">Avg daily saved tokens delta: ${escapeHtml(formatSignedPlain(report.comparison.savedTokensDeltaPercent, "vs baseline", true))}</p>
530
+ ` : `<p class="mini">Need more active days before baseline comparison becomes trustworthy.</p>`}
531
+ </section>
532
+ </div>
533
+
534
+ <div class="grid">
535
+ <section class="panel">
536
+ <h2>Provider and model summary</h2>
537
+ <table>
538
+ <tr><th>Provider</th><th>Requests</th><th>Tokens</th><th>Cost</th></tr>
539
+ ${report.topProviders.map((provider) => `<tr><td>${escapeHtml(provider.provider)}</td><td>${formatInteger(provider.requests)}</td><td>${formatInteger(provider.tokens)}</td><td>${formatCurrency(provider.cost)}</td></tr>`).join("") || '<tr><td colspan="4">No provider history yet</td></tr>'}
540
+ </table>
541
+ <br />
542
+ <table>
543
+ <tr><th>Model</th><th>Requests</th><th>Tokens</th></tr>
544
+ ${report.topModels.map((model) => `<tr><td>${escapeHtml(model.model)}</td><td>${formatInteger(model.requests)}</td><td>${formatInteger(model.tokens)}</td></tr>`).join("") || '<tr><td colspan="3">No model history yet</td></tr>'}
545
+ </table>
546
+ </section>
547
+
548
+ <section class="panel">
549
+ <h2>Code and optimization summary</h2>
550
+ <table>
551
+ <tr><th>Project</th><th>Contexts</th><th>Tokens</th></tr>
552
+ ${report.topProjects.map((project) => `<tr><td>${escapeHtml(project.name)}</td><td>${formatInteger(project.contexts)}</td><td>${formatInteger(project.tokens)}</td></tr>`).join("") || '<tr><td colspan="3">No project history yet</td></tr>'}
553
+ </table>
554
+ <br />
555
+ <table>
556
+ <tr><th>Algorithm</th><th>Runs</th><th>Saved</th></tr>
557
+ ${report.topAlgorithms.map((algorithm) => `<tr><td>${escapeHtml(algorithm.algorithm)}</td><td>${formatInteger(algorithm.count)}</td><td>${formatInteger(algorithm.savedTokens)}</td></tr>`).join("") || '<tr><td colspan="3">No optimization history yet</td></tr>'}
558
+ </table>
559
+ </section>
560
+ </div>
561
+
562
+ <section class="panel" style="margin-top:20px">
563
+ <h2>Notes</h2>
564
+ <ul class="note-list">
565
+ ${report.notes.map((note) => `<li>${escapeHtml(note)}</li>`).join("")}
566
+ </ul>
567
+ <p class="mini">Generated at ${escapeHtml(report.generatedAt)} from local CCJK tracking data.</p>
568
+ </section>
569
+ </div>
570
+ </body>
571
+ </html>`;
572
+ }
573
+ function statCard(label, value) {
574
+ return `<div class="stat"><div class="label">${escapeHtml(label)}</div><div class="value">${escapeHtml(value)}</div></div>`;
575
+ }
576
+ function getDefaultImpactReportPath() {
577
+ return join(homedir(), ".ccjk", "reports", "impact-latest.html");
578
+ }
579
+ function enumerateDates(startDate, endDate) {
580
+ const dates = [];
581
+ let cursor = toStartTimestamp(startDate);
582
+ const end = toStartTimestamp(endDate);
583
+ while (cursor <= end) {
584
+ dates.push(formatDate(new Date(cursor)));
585
+ cursor += 24 * 60 * 60 * 1e3;
586
+ }
587
+ return dates;
588
+ }
589
+ function toStartTimestamp(date) {
590
+ return (/* @__PURE__ */ new Date(`${date}T00:00:00`)).getTime();
591
+ }
592
+ function toEndTimestamp(date) {
593
+ return (/* @__PURE__ */ new Date(`${date}T23:59:59.999`)).getTime();
594
+ }
595
+ function emptyDailyPoint(date) {
596
+ return {
597
+ date,
598
+ requests: 0,
599
+ tokens: 0,
600
+ cost: 0,
601
+ savedTokens: 0,
602
+ savedCost: 0
603
+ };
604
+ }
605
+ function estimateCompressionCost(tokens) {
606
+ return tokens / 1e3 * 0.015;
607
+ }
608
+ function formatDate(date) {
609
+ const year = date.getFullYear();
610
+ const month = String(date.getMonth() + 1).padStart(2, "0");
611
+ const day = String(date.getDate()).padStart(2, "0");
612
+ return `${year}-${month}-${day}`;
613
+ }
614
+ function formatInteger(value) {
615
+ return Math.round(value).toLocaleString();
616
+ }
617
+ function formatCurrency(value) {
618
+ return `$${value.toFixed(2)}`;
619
+ }
620
+ function formatPercent(value) {
621
+ return `${(value * 100).toFixed(1)}%`;
622
+ }
623
+ function formatSigned(value, label, isPercent = false) {
624
+ const abs = isPercent ? `${Math.abs(value).toFixed(1)}%` : formatInteger(Math.abs(value));
625
+ const sign = value > 0 ? "+" : value < 0 ? "-" : "0";
626
+ const tone = value > 0 ? a.yellow : value < 0 ? a.green : a.gray;
627
+ const rendered = value === 0 ? `${abs} ${label}` : `${sign}${abs} ${label}`;
628
+ return tone(rendered);
629
+ }
630
+ function formatSignedPlain(value, label, isPercent = false) {
631
+ const abs = isPercent ? `${Math.abs(value).toFixed(1)}%` : formatInteger(Math.abs(value));
632
+ if (value === 0) {
633
+ return `${abs} ${label}`;
634
+ }
635
+ const sign = value > 0 ? "+" : "-";
636
+ return `${sign}${abs} ${label}`;
637
+ }
638
+ function compactNumber(value) {
639
+ return Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 }).format(value);
640
+ }
641
+ function truncate(value, maxLength) {
642
+ if (value.length <= maxLength) {
643
+ return value;
644
+ }
645
+ return `${value.slice(0, maxLength - 1)}\u2026`;
646
+ }
647
+ function escapeHtml(value) {
648
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
649
+ }
650
+
651
+ export { buildComparison, collectImpactReport, generateImpactHtml, impactCommand };
@@ -0,0 +1,23 @@
1
+ export { r as runHealthCheck } from '../shared/ccjk.Dxgd2vjc.mjs';
2
+ import 'node:fs';
3
+ import './constants.mjs';
4
+ import 'node:os';
5
+ import './index2.mjs';
6
+ import 'node:process';
7
+ import 'node:url';
8
+ import '../shared/ccjk.bQ7Dh1g4.mjs';
9
+ import './memory-check.mjs';
10
+ import 'node:path';
11
+ import '../shared/ccjk.BAGoDD49.mjs';
12
+ import 'fs';
13
+ import 'constants';
14
+ import 'stream';
15
+ import 'util';
16
+ import 'assert';
17
+ import 'path';
18
+ import './memory-paths.mjs';
19
+ import '../shared/ccjk.BBtCGd_g.mjs';
20
+ import './index3.mjs';
21
+ import './fs-operations.mjs';
22
+ import 'node:crypto';
23
+ import 'node:fs/promises';
@@ -0,0 +1,19 @@
1
+ import { _ as _path } from '../shared/ccjk.bQ7Dh1g4.mjs';
2
+ export { b as basename, d as dirname, e as extname, f as format, i as isAbsolute, j as join, m as matchesGlob, n as normalize, a as normalizeString, p as parse, r as relative, c as resolve, s as sep, t as toNamespacedPath } from '../shared/ccjk.bQ7Dh1g4.mjs';
3
+
4
+ const delimiter = /* @__PURE__ */ (() => globalThis.process?.platform === "win32" ? ";" : ":")();
5
+ const _platforms = { posix: void 0, win32: void 0 };
6
+ const mix = (del = delimiter) => {
7
+ return new Proxy(_path, {
8
+ get(_, prop) {
9
+ if (prop === "delimiter") return del;
10
+ if (prop === "posix") return posix;
11
+ if (prop === "win32") return win32;
12
+ return _platforms[prop] || _path[prop];
13
+ }
14
+ });
15
+ };
16
+ const posix = /* @__PURE__ */ mix(":");
17
+ const win32 = /* @__PURE__ */ mix(";");
18
+
19
+ export { posix as default, delimiter, posix, win32 };