thanh-kit 2.5.0 → 2.5.2

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 (886) hide show
  1. package/dist/index.js +20 -61
  2. package/dist/index.js.map +1 -1
  3. package/package.json +1 -1
  4. package/templates/.ck.json +60 -0
  5. package/templates/.ckignore +27 -0
  6. package/templates/.mcp.json.example +23 -0
  7. package/templates/agents/brainstormer.md +18 -2
  8. package/templates/agents/code-reviewer.md +122 -142
  9. package/templates/agents/code-simplifier.md +50 -100
  10. package/templates/agents/debugger.md +27 -11
  11. package/templates/agents/docs-manager.md +100 -38
  12. package/templates/agents/fullstack-developer.md +15 -3
  13. package/templates/agents/git-manager.md +11 -386
  14. package/templates/agents/journal-writer.md +13 -8
  15. package/templates/agents/mcp-manager.md +21 -6
  16. package/templates/agents/planner.md +24 -8
  17. package/templates/agents/project-manager.md +17 -121
  18. package/templates/agents/researcher.md +22 -7
  19. package/templates/agents/tester.md +23 -7
  20. package/templates/agents/ui-ux-designer.md +23 -14
  21. package/templates/{commands → command-archive}/ask.md +5 -5
  22. package/templates/{commands → command-archive}/ck-help.md +18 -2
  23. package/templates/command-archive/docs/init.md +38 -0
  24. package/templates/command-archive/docs/summarize.md +22 -0
  25. package/templates/command-archive/docs/update.md +76 -0
  26. package/templates/command-archive/journal.md +18 -0
  27. package/templates/{commands → command-archive}/kanban.md +5 -7
  28. package/templates/{commands → command-archive}/plan/archive.md +2 -2
  29. package/templates/command-archive/plan/red-team.md +200 -0
  30. package/templates/command-archive/plan/validate.md +188 -0
  31. package/templates/command-archive/preview.md +283 -0
  32. package/templates/command-archive/review/codebase/parallel.md +122 -0
  33. package/templates/{commands → command-archive}/test/ui.md +3 -3
  34. package/templates/{commands → command-archive}/use-mcp.md +6 -2
  35. package/templates/command-archive/worktree.md +109 -0
  36. package/templates/hooks/__tests__/ck-config-utils.test.cjs +557 -0
  37. package/templates/hooks/__tests__/descriptive-name.test.cjs +292 -0
  38. package/templates/hooks/__tests__/dev-rules-reminder.test.cjs +336 -0
  39. package/templates/hooks/__tests__/integration/path-resolution.test.cjs +319 -0
  40. package/templates/hooks/__tests__/privacy-block.test.cjs +273 -0
  41. package/templates/hooks/__tests__/session-init.test.cjs +308 -0
  42. package/templates/hooks/__tests__/skill-dedup.test.cjs +527 -0
  43. package/templates/hooks/__tests__/subagent-init.test.cjs +622 -0
  44. package/templates/hooks/__tests__/task-completed-handler.test.cjs +246 -0
  45. package/templates/hooks/__tests__/team-context-inject.test.cjs +804 -0
  46. package/templates/hooks/__tests__/teammate-idle-handler.test.cjs +254 -0
  47. package/templates/hooks/cook-after-plan-reminder.cjs +72 -0
  48. package/templates/hooks/descriptive-name.cjs +47 -0
  49. package/templates/hooks/dev-rules-reminder.cjs +37 -214
  50. package/templates/hooks/lib/__tests__/README.md +240 -0
  51. package/templates/hooks/lib/__tests__/ck-config-utils.test.cjs +613 -1
  52. package/templates/hooks/lib/__tests__/context-builder.test.cjs +468 -0
  53. package/templates/hooks/lib/__tests__/project-detector.test.cjs +754 -0
  54. package/templates/hooks/lib/__tests__/statusline-integration.test.cjs +678 -0
  55. package/templates/hooks/lib/__tests__/statusline.test.cjs +689 -0
  56. package/templates/hooks/lib/ck-config-utils.cjs +146 -21
  57. package/templates/hooks/lib/colors.cjs +95 -0
  58. package/templates/hooks/lib/config-counter.cjs +103 -0
  59. package/templates/hooks/lib/context-builder.cjs +616 -0
  60. package/templates/hooks/lib/git-info-cache.cjs +143 -0
  61. package/templates/hooks/lib/hook-logger.cjs +92 -0
  62. package/templates/hooks/lib/privacy-checker.cjs +297 -0
  63. package/templates/hooks/lib/project-detector.cjs +474 -0
  64. package/templates/hooks/lib/scout-checker.cjs +263 -0
  65. package/templates/hooks/lib/transcript-parser.cjs +181 -0
  66. package/templates/hooks/notifications/discord_notify.sh +17 -4
  67. package/templates/hooks/notifications/docs/discord-hook-setup.md +26 -10
  68. package/templates/hooks/notifications/docs/telegram-hook-setup.md +24 -6
  69. package/templates/hooks/notifications/notify.cjs +0 -0
  70. package/templates/hooks/notifications/send-discord.sh +0 -0
  71. package/templates/hooks/notifications/telegram_notify.sh +17 -4
  72. package/templates/hooks/post-edit-simplify-reminder.cjs +156 -0
  73. package/templates/hooks/privacy-block.cjs +97 -188
  74. package/templates/hooks/scout-block/broad-pattern-detector.cjs +4 -6
  75. package/templates/hooks/scout-block/error-formatter.cjs +0 -0
  76. package/templates/hooks/scout-block/path-extractor.cjs +102 -13
  77. package/templates/hooks/scout-block/pattern-matcher.cjs +16 -1
  78. package/templates/hooks/scout-block/tests/{test-broad-pattern-detector.js → test-broad-pattern-detector.cjs} +1 -61
  79. package/templates/hooks/scout-block/tests/{test-build-command-allowlist.js → test-build-command-allowlist.cjs} +1 -1
  80. package/templates/hooks/scout-block/tests/{test-error-formatter.js → test-error-formatter.cjs} +1 -1
  81. package/templates/hooks/scout-block/tests/{test-full-flow-edge-cases.js → test-full-flow-edge-cases.cjs} +1 -1
  82. package/templates/hooks/scout-block/tests/{test-monorepo-scenarios.js → test-monorepo-scenarios.cjs} +1 -1
  83. package/templates/hooks/scout-block/tests/{test-path-extractor.js → test-path-extractor.cjs} +1 -1
  84. package/templates/hooks/scout-block/tests/{test-pattern-matcher.js → test-pattern-matcher.cjs} +1 -1
  85. package/templates/hooks/scout-block.cjs +100 -87
  86. package/templates/hooks/session-init.cjs +197 -330
  87. package/templates/hooks/skill-dedup.cjs +268 -0
  88. package/templates/hooks/subagent-init.cjs +75 -22
  89. package/templates/hooks/task-completed-handler.cjs +118 -0
  90. package/templates/hooks/team-context-inject.cjs +176 -0
  91. package/templates/hooks/teammate-idle-handler.cjs +121 -0
  92. package/templates/hooks/tests/scout-block/broad-pattern-detector.test.cjs +231 -0
  93. package/templates/hooks/tests/scout-block/fixtures/ckignore-custom.txt +6 -0
  94. package/templates/hooks/tests/scout-block/fixtures/ckignore-default.txt +13 -0
  95. package/templates/hooks/tests/scout-block/fixtures/ckignore-negation.txt +8 -0
  96. package/templates/hooks/tests/scout-block/path-extractor.test.cjs +527 -0
  97. package/templates/hooks/tests/scout-block/pattern-matcher.test.cjs +293 -0
  98. package/templates/hooks/tests/scout-block/scout-checker.test.cjs +741 -0
  99. package/templates/hooks/tests/{test-ckignore.js → test-ckignore.cjs} +0 -0
  100. package/templates/hooks/tests/{test-modularization-hook.js → test-modularization-hook.cjs} +0 -0
  101. package/templates/hooks/tests/{test-privacy-block.js → test-privacy-block.cjs} +1 -1
  102. package/templates/hooks/tests/test-scout-block.cjs +315 -0
  103. package/templates/hooks/usage-context-awareness.cjs +179 -0
  104. package/templates/metadata.json +104 -0
  105. package/templates/{workflows → rules}/development-rules.md +12 -53
  106. package/templates/rules/orchestration-protocol.md +43 -0
  107. package/templates/{workflows → rules}/primary-workflow.md +16 -4
  108. package/templates/rules/team-coordination-rules.md +90 -0
  109. package/templates/schemas/ck-config.schema.json +381 -0
  110. package/templates/scripts/README.md +94 -198
  111. package/templates/scripts/ck-help.py +19 -855
  112. package/templates/scripts/commands_data.yaml +3 -621
  113. package/templates/scripts/fix-shebang-permissions.sh +50 -0
  114. package/templates/scripts/generate_catalogs.py +37 -8
  115. package/templates/scripts/resolve_env.py +0 -0
  116. package/templates/scripts/scan_commands.py +14 -96
  117. package/templates/scripts/scan_skills.py +59 -19
  118. package/templates/scripts/set-active-plan.cjs +8 -3
  119. package/templates/scripts/skills_data.yaml +2 -596
  120. package/templates/scripts/test-ck-help.py +15 -0
  121. package/templates/scripts/test_ck_help.py +139 -0
  122. package/templates/scripts/test_ck_help_integration.py +72 -0
  123. package/templates/scripts/validate-docs.cjs +342 -0
  124. package/templates/scripts/win_compat.py +0 -0
  125. package/templates/scripts/worktree.cjs +4 -652
  126. package/templates/scripts/worktree.test.cjs +5 -330
  127. package/templates/settings.json +104 -239
  128. package/templates/skills/README.md +95 -255
  129. package/templates/skills/THIRD_PARTY_NOTICES.md +405 -0
  130. package/templates/skills/agent-browser/SKILL.md +294 -0
  131. package/templates/skills/agent-browser/references/.gitkeep +0 -0
  132. package/templates/skills/agent-browser/references/agent-browser-vs-chrome-devtools.md +112 -0
  133. package/templates/skills/agent-browser/references/browserbase-cloud-setup.md +161 -0
  134. package/templates/skills/ai-artist/SKILL.md +103 -56
  135. package/templates/skills/ai-artist/data/awesome-prompts.csv +3592 -0
  136. package/templates/skills/ai-artist/data/lighting.csv +19 -0
  137. package/templates/skills/ai-artist/data/nano-banana-templates.csv +17 -0
  138. package/templates/skills/ai-artist/data/platforms.csv +11 -0
  139. package/templates/skills/ai-artist/data/styles.csv +26 -0
  140. package/templates/skills/ai-artist/data/techniques.csv +19 -0
  141. package/templates/skills/ai-artist/data/use-cases.csv +16 -0
  142. package/templates/skills/ai-artist/references/awesome-nano-banana-pro-prompts.md +8575 -0
  143. package/templates/skills/ai-artist/references/nano-banana.md +78 -1
  144. package/templates/skills/ai-artist/references/validation-workflow.md +117 -0
  145. package/templates/skills/ai-artist/scripts/core.py +197 -0
  146. package/templates/skills/ai-artist/scripts/extract_prompts.py +102 -0
  147. package/templates/skills/ai-artist/scripts/generate.py +370 -0
  148. package/templates/skills/ai-artist/scripts/search.py +147 -0
  149. package/templates/skills/ai-multimodal/SKILL.md +4 -3
  150. package/templates/skills/ai-multimodal/scripts/check_setup.py +12 -2
  151. package/templates/skills/ai-multimodal/scripts/document_converter.py +0 -0
  152. package/templates/skills/ai-multimodal/scripts/gemini_batch_process.py +3 -2
  153. package/templates/skills/ai-multimodal/scripts/media_optimizer.py +0 -0
  154. package/templates/skills/ask/SKILL.md +58 -0
  155. package/templates/skills/backend-development/SKILL.md +3 -2
  156. package/templates/skills/better-auth/SKILL.md +3 -2
  157. package/templates/skills/better-auth/scripts/better_auth_init.py +3 -3
  158. package/templates/skills/bootstrap/SKILL.md +101 -0
  159. package/templates/skills/bootstrap/references/shared-phases.md +59 -0
  160. package/templates/skills/bootstrap/references/workflow-auto.md +52 -0
  161. package/templates/skills/bootstrap/references/workflow-fast.md +50 -0
  162. package/templates/skills/bootstrap/references/workflow-full.md +60 -0
  163. package/templates/skills/bootstrap/references/workflow-parallel.md +59 -0
  164. package/templates/{commands/brainstorm.md → skills/brainstorm/SKILL.md} +21 -18
  165. package/templates/skills/chrome-devtools/SKILL.md +221 -68
  166. package/templates/skills/chrome-devtools/scripts/README.md +18 -0
  167. package/templates/skills/chrome-devtools/scripts/__tests__/error-handling.test.js +102 -0
  168. package/templates/skills/chrome-devtools/scripts/aria-snapshot.js +2 -1
  169. package/templates/skills/chrome-devtools/scripts/click.js +2 -1
  170. package/templates/skills/chrome-devtools/scripts/connect-chrome.js +146 -0
  171. package/templates/skills/chrome-devtools/scripts/console.js +3 -1
  172. package/templates/skills/chrome-devtools/scripts/evaluate.js +6 -3
  173. package/templates/skills/chrome-devtools/scripts/fill.js +2 -1
  174. package/templates/skills/chrome-devtools/scripts/import-cookies.js +205 -0
  175. package/templates/skills/chrome-devtools/scripts/inject-auth.js +2 -1
  176. package/templates/skills/chrome-devtools/scripts/install-deps.sh +0 -0
  177. package/templates/skills/chrome-devtools/scripts/install.sh +0 -0
  178. package/templates/skills/chrome-devtools/scripts/lib/browser.js +60 -4
  179. package/templates/skills/chrome-devtools/scripts/navigate.js +86 -2
  180. package/templates/skills/chrome-devtools/scripts/network.js +3 -1
  181. package/templates/skills/chrome-devtools/scripts/performance.js +3 -1
  182. package/templates/skills/chrome-devtools/scripts/screenshot.js +2 -1
  183. package/templates/skills/chrome-devtools/scripts/select-ref.js +2 -1
  184. package/templates/skills/chrome-devtools/scripts/snapshot.js +2 -1
  185. package/templates/skills/chrome-devtools/scripts/ws-debug.js +44 -0
  186. package/templates/skills/chrome-devtools/scripts/ws-full-debug.js +107 -0
  187. package/templates/skills/ck-help/SKILL.md +102 -0
  188. package/templates/skills/ck-help/scripts/ck-help.py +1321 -0
  189. package/templates/skills/ck-help/scripts/commands_data.yaml +3 -0
  190. package/templates/skills/ck-help/scripts/skills_data.yaml +593 -0
  191. package/templates/skills/code-review/SKILL.md +97 -93
  192. package/templates/skills/code-review/references/code-review-reception.md +113 -209
  193. package/templates/skills/code-review/references/codebase-scan-workflow.md +29 -0
  194. package/templates/skills/code-review/references/edge-case-scouting.md +119 -0
  195. package/templates/skills/code-review/references/parallel-review-workflow.md +69 -0
  196. package/templates/skills/code-review/references/requesting-code-review.md +115 -104
  197. package/templates/skills/code-review/references/task-management-reviews.md +140 -0
  198. package/templates/skills/code-review/references/verification-before-completion.md +138 -138
  199. package/templates/skills/coding-level/SKILL.md +56 -0
  200. package/templates/skills/common/README.md +120 -0
  201. package/templates/skills/common/api_key_helper.py +411 -0
  202. package/templates/skills/common/api_key_rotator.py +248 -0
  203. package/templates/skills/context-engineering/SKILL.md +108 -0
  204. package/templates/skills/context-engineering/references/context-compression.md +84 -0
  205. package/templates/skills/context-engineering/references/context-degradation.md +93 -0
  206. package/templates/skills/context-engineering/references/context-fundamentals.md +75 -0
  207. package/templates/skills/context-engineering/references/context-optimization.md +82 -0
  208. package/templates/skills/context-engineering/references/evaluation.md +89 -0
  209. package/templates/skills/context-engineering/references/memory-systems.md +88 -0
  210. package/templates/skills/context-engineering/references/multi-agent-patterns.md +90 -0
  211. package/templates/skills/context-engineering/references/project-development.md +97 -0
  212. package/templates/skills/context-engineering/references/runtime-awareness.md +202 -0
  213. package/templates/skills/context-engineering/references/tool-design.md +86 -0
  214. package/templates/skills/context-engineering/scripts/compression_evaluator.py +349 -0
  215. package/templates/skills/context-engineering/scripts/context_analyzer.py +317 -0
  216. package/templates/skills/context-engineering/scripts/tests/test_edge_cases.py +246 -0
  217. package/templates/skills/cook/README.md +86 -0
  218. package/templates/skills/cook/SKILL.md +113 -0
  219. package/templates/skills/cook/references/intent-detection.md +101 -0
  220. package/templates/skills/cook/references/review-cycle.md +75 -0
  221. package/templates/skills/cook/references/subagent-patterns.md +75 -0
  222. package/templates/skills/cook/references/workflow-steps.md +172 -0
  223. package/templates/skills/copywriting/SKILL.md +94 -0
  224. package/templates/skills/copywriting/references/copy-formulas.md +150 -0
  225. package/templates/skills/copywriting/references/cta-patterns.md +168 -0
  226. package/templates/skills/copywriting/references/email-copy.md +193 -0
  227. package/templates/skills/copywriting/references/headline-templates.md +140 -0
  228. package/templates/skills/copywriting/references/landing-page-copy.md +175 -0
  229. package/templates/skills/copywriting/references/power-words.md +189 -0
  230. package/templates/skills/copywriting/references/social-media-copy.md +222 -0
  231. package/templates/skills/copywriting/references/workflow-cro.md +83 -0
  232. package/templates/skills/copywriting/references/workflow-enhance.md +32 -0
  233. package/templates/skills/copywriting/references/workflow-fast.md +29 -0
  234. package/templates/skills/copywriting/references/workflow-good.md +39 -0
  235. package/templates/skills/copywriting/references/writing-styles.md +247 -0
  236. package/templates/skills/copywriting/scripts/extract-writing-styles.py +308 -0
  237. package/templates/skills/copywriting/templates/copy-brief.md +49 -0
  238. package/templates/skills/databases/SKILL.md +7 -155
  239. package/templates/skills/databases/analytics.md +198 -0
  240. package/templates/skills/databases/db-design.md +188 -0
  241. package/templates/skills/databases/incremental-etl.md +213 -0
  242. package/templates/skills/databases/scripts/db_backup.py +0 -0
  243. package/templates/skills/databases/scripts/db_migrate.py +3 -2
  244. package/templates/skills/databases/scripts/db_performance_check.py +3 -2
  245. package/templates/skills/databases/stacks/bigquery.md +231 -0
  246. package/templates/skills/databases/stacks/d1_cloudflare.md +137 -0
  247. package/templates/skills/databases/stacks/mysql.md +216 -0
  248. package/templates/skills/databases/stacks/postgres.md +235 -0
  249. package/templates/skills/databases/stacks/sqlite.md +244 -0
  250. package/templates/skills/databases/transactional.md +176 -0
  251. package/templates/skills/debug/SKILL.md +121 -0
  252. package/templates/skills/debug/references/frontend-verification.md +103 -0
  253. package/templates/skills/debug/references/investigation-methodology.md +101 -0
  254. package/templates/skills/debug/references/log-and-ci-analysis.md +97 -0
  255. package/templates/skills/debug/references/performance-diagnostics.md +113 -0
  256. package/templates/skills/debug/references/reporting-standards.md +122 -0
  257. package/templates/skills/debug/references/task-management-debugging.md +155 -0
  258. package/templates/skills/devops/SKILL.md +65 -253
  259. package/templates/skills/devops/references/kubernetes-basics.md +99 -0
  260. package/templates/skills/devops/references/kubernetes-helm-advanced.md +75 -0
  261. package/templates/skills/devops/references/kubernetes-helm.md +81 -0
  262. package/templates/skills/devops/references/kubernetes-kubectl.md +74 -0
  263. package/templates/skills/devops/references/kubernetes-security-advanced.md +98 -0
  264. package/templates/skills/devops/references/kubernetes-security.md +95 -0
  265. package/templates/skills/devops/references/kubernetes-troubleshooting-advanced.md +74 -0
  266. package/templates/skills/devops/references/kubernetes-troubleshooting.md +49 -0
  267. package/templates/skills/devops/references/kubernetes-workflows-advanced.md +75 -0
  268. package/templates/skills/devops/references/kubernetes-workflows.md +78 -0
  269. package/templates/skills/devops/scripts/cloudflare_deploy.py +0 -0
  270. package/templates/skills/devops/scripts/docker_optimize.py +3 -2
  271. package/templates/skills/docs/SKILL.md +55 -0
  272. package/templates/skills/docs/references/init-workflow.md +32 -0
  273. package/templates/skills/docs/references/summarize-workflow.md +18 -0
  274. package/templates/skills/docs/references/update-workflow.md +59 -0
  275. package/templates/skills/docs-seeker/SKILL.md +3 -2
  276. package/templates/skills/docs-seeker/scripts/analyze-llms-txt.js +0 -0
  277. package/templates/skills/docs-seeker/scripts/detect-topic.js +0 -0
  278. package/templates/skills/docs-seeker/scripts/fetch-docs.js +0 -0
  279. package/templates/skills/docs-seeker/scripts/tests/run-tests.js +0 -0
  280. package/templates/skills/docs-seeker/scripts/tests/test-analyze-llms.js +0 -0
  281. package/templates/skills/docs-seeker/scripts/tests/test-detect-topic.js +0 -0
  282. package/templates/skills/docs-seeker/scripts/tests/test-fetch-docs.js +0 -0
  283. package/templates/skills/docs-seeker/scripts/utils/env-loader.js +0 -0
  284. package/templates/skills/document-skills/docx/SKILL.md +2 -2
  285. package/templates/skills/document-skills/docx/ooxml/scripts/pack.py +0 -0
  286. package/templates/skills/document-skills/docx/ooxml/scripts/unpack.py +0 -0
  287. package/templates/skills/document-skills/docx/ooxml/scripts/validate.py +0 -0
  288. package/templates/skills/document-skills/docx/scripts/document.py +0 -0
  289. package/templates/skills/document-skills/docx/scripts/utilities.py +0 -0
  290. package/templates/skills/document-skills/pdf/SKILL.md +2 -2
  291. package/templates/skills/document-skills/pptx/SKILL.md +2 -2
  292. package/templates/skills/document-skills/pptx/ooxml/scripts/pack.py +0 -0
  293. package/templates/skills/document-skills/pptx/ooxml/scripts/unpack.py +0 -0
  294. package/templates/skills/document-skills/pptx/ooxml/scripts/validate.py +0 -0
  295. package/templates/skills/document-skills/pptx/scripts/inventory.py +0 -0
  296. package/templates/skills/document-skills/pptx/scripts/rearrange.py +0 -0
  297. package/templates/skills/document-skills/pptx/scripts/replace.py +0 -0
  298. package/templates/skills/document-skills/pptx/scripts/thumbnail.py +0 -0
  299. package/templates/skills/document-skills/xlsx/SKILL.md +2 -2
  300. package/templates/skills/document-skills/xlsx/recalc.py +3 -2
  301. package/templates/skills/find-skills/SKILL.md +134 -0
  302. package/templates/skills/fix/SKILL.md +111 -0
  303. package/templates/skills/fix/references/complexity-assessment.md +72 -0
  304. package/templates/skills/fix/references/mode-selection.md +46 -0
  305. package/templates/skills/fix/references/parallel-exploration.md +100 -0
  306. package/templates/skills/fix/references/review-cycle.md +77 -0
  307. package/templates/skills/fix/references/skill-activation-matrix.md +78 -0
  308. package/templates/skills/fix/references/task-orchestration.md +103 -0
  309. package/templates/skills/fix/references/workflow-ci.md +28 -0
  310. package/templates/skills/fix/references/workflow-deep.md +122 -0
  311. package/templates/skills/fix/references/workflow-logs.md +72 -0
  312. package/templates/skills/fix/references/workflow-quick.md +59 -0
  313. package/templates/skills/fix/references/workflow-standard.md +111 -0
  314. package/templates/skills/fix/references/workflow-test.md +75 -0
  315. package/templates/skills/fix/references/workflow-types.md +33 -0
  316. package/templates/skills/fix/references/workflow-ui.md +75 -0
  317. package/templates/skills/frontend-design/SKILL.md +78 -91
  318. package/templates/skills/frontend-design/references/ai-multimodal-overview.md +6 -6
  319. package/templates/skills/frontend-design/references/animejs.md +395 -395
  320. package/templates/skills/frontend-design/references/asset-generation.md +4 -4
  321. package/templates/skills/frontend-design/references/visual-analysis-overview.md +1 -1
  322. package/templates/skills/frontend-design/references/workflow-3d.md +102 -0
  323. package/templates/skills/frontend-design/references/workflow-describe.md +87 -0
  324. package/templates/skills/frontend-design/references/workflow-immersive.md +87 -0
  325. package/templates/skills/frontend-design/references/workflow-quick.md +57 -0
  326. package/templates/skills/frontend-design/references/workflow-screenshot.md +63 -0
  327. package/templates/skills/frontend-design/references/workflow-video.md +74 -0
  328. package/templates/skills/frontend-development/SKILL.md +4 -3
  329. package/templates/skills/git/SKILL.md +114 -0
  330. package/templates/skills/git/references/branch-management.md +88 -0
  331. package/templates/skills/git/references/commit-standards.md +46 -0
  332. package/templates/skills/git/references/gh-cli-guide.md +109 -0
  333. package/templates/skills/git/references/safety-protocols.md +69 -0
  334. package/templates/skills/git/references/workflow-commit.md +58 -0
  335. package/templates/skills/git/references/workflow-merge.md +48 -0
  336. package/templates/skills/git/references/workflow-pr.md +58 -0
  337. package/templates/skills/git/references/workflow-push.md +52 -0
  338. package/templates/skills/gkg/SKILL.md +91 -0
  339. package/templates/skills/gkg/references/cli-commands.md +106 -0
  340. package/templates/skills/gkg/references/http-api.md +102 -0
  341. package/templates/skills/gkg/references/language-support.md +57 -0
  342. package/templates/skills/gkg/references/mcp-tools.md +99 -0
  343. package/templates/skills/google-adk-python/SKILL.md +91 -195
  344. package/templates/skills/google-adk-python/references/agent-types-and-architecture.md +128 -0
  345. package/templates/skills/google-adk-python/references/callbacks-plugins-observability.md +117 -0
  346. package/templates/skills/google-adk-python/references/deployment-cloud-run-vertex-gke.md +138 -0
  347. package/templates/skills/google-adk-python/references/evaluation-testing-cli.md +112 -0
  348. package/templates/skills/google-adk-python/references/multi-agent-and-a2a-protocol.md +145 -0
  349. package/templates/skills/google-adk-python/references/sessions-state-memory-artifacts.md +131 -0
  350. package/templates/skills/google-adk-python/references/tools-and-mcp-integration.md +146 -0
  351. package/templates/skills/install.ps1 +130 -26
  352. package/templates/skills/install.sh +383 -63
  353. package/templates/{commands/journal.md → skills/journal/SKILL.md} +5 -1
  354. package/templates/skills/kanban/SKILL.md +99 -0
  355. package/templates/skills/markdown-novel-viewer/SKILL.md +314 -0
  356. package/templates/skills/markdown-novel-viewer/assets/directory-browser.css +215 -0
  357. package/templates/skills/markdown-novel-viewer/assets/favicon.png +0 -0
  358. package/templates/skills/markdown-novel-viewer/assets/novel-theme.css +16 -0
  359. package/templates/skills/markdown-novel-viewer/assets/reader.js +838 -0
  360. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-base.css +54 -0
  361. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-components.css +180 -0
  362. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-content.css +176 -0
  363. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-header.css +217 -0
  364. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-mermaid.css +153 -0
  365. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-overlays.css +202 -0
  366. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-responsive.css +285 -0
  367. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-sidebar.css +359 -0
  368. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-variables.css +56 -0
  369. package/templates/skills/markdown-novel-viewer/assets/template.html +149 -0
  370. package/templates/skills/markdown-novel-viewer/bun.lock +38 -0
  371. package/templates/skills/markdown-novel-viewer/package.json +15 -0
  372. package/templates/skills/markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
  373. package/templates/skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +335 -0
  374. package/templates/skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs +571 -0
  375. package/templates/skills/markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
  376. package/templates/skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
  377. package/templates/skills/markdown-novel-viewer/scripts/server.cjs +411 -0
  378. package/templates/skills/markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
  379. package/templates/skills/markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
  380. package/templates/skills/markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
  381. package/templates/skills/markdown-novel-viewer/tests/http-server.test.cjs +271 -0
  382. package/templates/skills/markdown-novel-viewer/tests/run-tests.cjs +51 -0
  383. package/templates/skills/markdown-novel-viewer/tests/test-framework.cjs +154 -0
  384. package/templates/skills/markdown-novel-viewer/tests/verify-xss.cjs +90 -0
  385. package/templates/skills/mcp-builder/SKILL.md +3 -2
  386. package/templates/skills/mcp-builder/scripts/evaluation.py +9 -1
  387. package/templates/skills/mcp-management/SKILL.md +8 -7
  388. package/templates/skills/mcp-management/references/gemini-cli-integration.md +16 -10
  389. package/templates/skills/mcp-management/scripts/cli.ts +0 -0
  390. package/templates/skills/mcp-management/scripts/dist/analyze-tools.js +0 -0
  391. package/templates/skills/mcp-management/scripts/dist/cli.js +0 -0
  392. package/templates/skills/mcp-management/scripts/dist/mcp-client.js +0 -0
  393. package/templates/skills/mcp-management/scripts/mcp-client.ts +0 -0
  394. package/templates/skills/media-processing/SKILL.md +3 -2
  395. package/templates/skills/media-processing/scripts/batch-remove-background.sh +0 -0
  396. package/templates/skills/media-processing/scripts/batch_resize.py +0 -0
  397. package/templates/skills/media-processing/scripts/media_convert.py +0 -0
  398. package/templates/skills/media-processing/scripts/remove-background.sh +0 -0
  399. package/templates/skills/media-processing/scripts/remove-bg-node.js +0 -0
  400. package/templates/skills/media-processing/scripts/tests/test_batch_resize.py +0 -0
  401. package/templates/skills/media-processing/scripts/tests/test_media_convert.py +0 -0
  402. package/templates/skills/media-processing/scripts/tests/test_video_optimize.py +0 -0
  403. package/templates/skills/media-processing/scripts/video_optimize.py +0 -0
  404. package/templates/skills/mermaidjs-v11/SKILL.md +116 -0
  405. package/templates/skills/mermaidjs-v11/references/cli-usage.md +228 -0
  406. package/templates/skills/mermaidjs-v11/references/configuration.md +232 -0
  407. package/templates/skills/mermaidjs-v11/references/diagram-types.md +315 -0
  408. package/templates/skills/mermaidjs-v11/references/examples.md +344 -0
  409. package/templates/skills/mermaidjs-v11/references/integration.md +310 -0
  410. package/templates/skills/mintlify/SKILL.md +121 -0
  411. package/templates/skills/mintlify/references/ai-features-and-integrations-reference.md +756 -0
  412. package/templates/skills/mintlify/references/api-documentation-components-reference.md +873 -0
  413. package/templates/skills/mintlify/references/deployment-and-continuous-integration-reference.md +674 -0
  414. package/templates/skills/mintlify/references/docs-json-configuration-reference.md +724 -0
  415. package/templates/skills/mintlify/references/mdx-components-reference.md +551 -0
  416. package/templates/skills/mintlify/references/navigation-structure-and-organization-reference.md +775 -0
  417. package/templates/skills/mobile-development/SKILL.md +3 -2
  418. package/templates/skills/payment-integration/README.md +44 -12
  419. package/templates/skills/payment-integration/SKILL.md +82 -97
  420. package/templates/skills/payment-integration/references/creem/api.md +139 -0
  421. package/templates/skills/payment-integration/references/creem/checkouts.md +99 -0
  422. package/templates/skills/payment-integration/references/creem/licensing.md +136 -0
  423. package/templates/skills/payment-integration/references/creem/overview.md +65 -0
  424. package/templates/skills/payment-integration/references/creem/sdk.md +161 -0
  425. package/templates/skills/payment-integration/references/creem/subscriptions.md +129 -0
  426. package/templates/skills/payment-integration/references/creem/webhooks.md +120 -0
  427. package/templates/skills/payment-integration/references/implementation-workflows.md +43 -0
  428. package/templates/skills/payment-integration/references/multi-provider-order-management-patterns.md +821 -0
  429. package/templates/skills/payment-integration/references/paddle/api.md +116 -0
  430. package/templates/skills/payment-integration/references/paddle/best-practices.md +130 -0
  431. package/templates/skills/payment-integration/references/paddle/overview.md +57 -0
  432. package/templates/skills/payment-integration/references/paddle/paddle-js.md +106 -0
  433. package/templates/skills/payment-integration/references/paddle/sdk.md +131 -0
  434. package/templates/skills/payment-integration/references/paddle/subscriptions.md +118 -0
  435. package/templates/skills/payment-integration/references/paddle/webhooks.md +112 -0
  436. package/templates/skills/payment-integration/references/polar/best-practices.md +781 -361
  437. package/templates/skills/payment-integration/references/sepay/best-practices.md +870 -268
  438. package/templates/skills/payment-integration/references/stripe/stripe-best-practices.md +32 -0
  439. package/templates/skills/payment-integration/references/stripe/stripe-cli.md +148 -0
  440. package/templates/skills/payment-integration/references/stripe/stripe-js.md +116 -0
  441. package/templates/skills/payment-integration/references/stripe/stripe-sdks.md +84 -0
  442. package/templates/skills/payment-integration/references/stripe/stripe-upgrade.md +175 -0
  443. package/templates/skills/payment-integration/scripts/checkout-helper.js +0 -0
  444. package/templates/skills/payment-integration/scripts/polar-webhook-verify.js +0 -0
  445. package/templates/skills/payment-integration/scripts/sepay-webhook-verify.js +0 -0
  446. package/templates/skills/payment-integration/scripts/test-scripts.js +0 -0
  447. package/templates/skills/plan/SKILL.md +137 -0
  448. package/templates/skills/plan/references/archive-workflow.md +53 -0
  449. package/templates/skills/{planning → plan}/references/codebase-understanding.md +1 -1
  450. package/templates/skills/{planning → plan}/references/output-standards.md +15 -1
  451. package/templates/skills/{planning → plan}/references/plan-organization.md +12 -19
  452. package/templates/skills/plan/references/red-team-personas.md +69 -0
  453. package/templates/skills/plan/references/red-team-workflow.md +77 -0
  454. package/templates/skills/{planning → plan}/references/research-phase.md +2 -2
  455. package/templates/skills/plan/references/task-management.md +132 -0
  456. package/templates/skills/plan/references/validate-question-framework.md +80 -0
  457. package/templates/skills/plan/references/validate-workflow.md +65 -0
  458. package/templates/skills/plan/references/workflow-modes.md +145 -0
  459. package/templates/skills/plans-kanban/SKILL.md +167 -0
  460. package/templates/skills/plans-kanban/assets/dashboard-template.html +119 -0
  461. package/templates/skills/plans-kanban/assets/dashboard.css +1594 -0
  462. package/templates/skills/plans-kanban/assets/dashboard.js +596 -0
  463. package/templates/skills/plans-kanban/assets/favicon.png +0 -0
  464. package/templates/skills/plans-kanban/package.json +13 -0
  465. package/templates/skills/plans-kanban/scripts/lib/dashboard-renderer.cjs +884 -0
  466. package/templates/skills/plans-kanban/scripts/lib/http-server.cjs +310 -0
  467. package/templates/skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs +489 -0
  468. package/templates/skills/plans-kanban/scripts/lib/plan-parser.cjs +175 -0
  469. package/templates/skills/plans-kanban/scripts/lib/plan-scanner.cjs +272 -0
  470. package/templates/skills/plans-kanban/scripts/lib/port-finder.cjs +48 -0
  471. package/templates/skills/plans-kanban/scripts/lib/process-mgr.cjs +128 -0
  472. package/templates/skills/plans-kanban/scripts/server.cjs +260 -0
  473. package/templates/skills/preview/SKILL.md +75 -0
  474. package/templates/skills/preview/references/generation-modes.md +95 -0
  475. package/templates/skills/preview/references/view-mode.md +42 -0
  476. package/templates/skills/problem-solving/SKILL.md +3 -2
  477. package/templates/skills/project-management/SKILL.md +122 -0
  478. package/templates/skills/project-management/references/documentation-triggers.md +60 -0
  479. package/templates/skills/project-management/references/hydration-workflow.md +85 -0
  480. package/templates/skills/project-management/references/progress-tracking.md +96 -0
  481. package/templates/skills/project-management/references/reporting-patterns.md +94 -0
  482. package/templates/skills/project-management/references/task-operations.md +85 -0
  483. package/templates/skills/react-best-practices/AGENTS.md +2249 -0
  484. package/templates/skills/react-best-practices/README.md +123 -0
  485. package/templates/skills/react-best-practices/SKILL.md +122 -0
  486. package/templates/skills/react-best-practices/metadata.json +15 -0
  487. package/templates/skills/react-best-practices/rules/_sections.md +46 -0
  488. package/templates/skills/react-best-practices/rules/_template.md +28 -0
  489. package/templates/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  490. package/templates/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  491. package/templates/skills/react-best-practices/rules/async-api-routes.md +38 -0
  492. package/templates/skills/react-best-practices/rules/async-defer-await.md +80 -0
  493. package/templates/skills/react-best-practices/rules/async-dependencies.md +36 -0
  494. package/templates/skills/react-best-practices/rules/async-parallel.md +28 -0
  495. package/templates/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  496. package/templates/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  497. package/templates/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  498. package/templates/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  499. package/templates/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  500. package/templates/skills/react-best-practices/rules/bundle-preload.md +50 -0
  501. package/templates/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  502. package/templates/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  503. package/templates/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  504. package/templates/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  505. package/templates/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  506. package/templates/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  507. package/templates/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  508. package/templates/skills/react-best-practices/rules/js-early-exit.md +50 -0
  509. package/templates/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  510. package/templates/skills/react-best-practices/rules/js-index-maps.md +37 -0
  511. package/templates/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  512. package/templates/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  513. package/templates/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  514. package/templates/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  515. package/templates/skills/react-best-practices/rules/rendering-activity.md +26 -0
  516. package/templates/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  517. package/templates/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  518. package/templates/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  519. package/templates/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  520. package/templates/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  521. package/templates/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  522. package/templates/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  523. package/templates/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  524. package/templates/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  525. package/templates/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  526. package/templates/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  527. package/templates/skills/react-best-practices/rules/rerender-memo.md +44 -0
  528. package/templates/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  529. package/templates/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  530. package/templates/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  531. package/templates/skills/react-best-practices/rules/server-cache-react.md +26 -0
  532. package/templates/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  533. package/templates/skills/react-best-practices/rules/server-serialization.md +38 -0
  534. package/templates/skills/remotion/SKILL.md +44 -0
  535. package/templates/skills/remotion/rules/3d.md +86 -0
  536. package/templates/skills/remotion/rules/animations.md +29 -0
  537. package/templates/skills/remotion/rules/assets/charts-bar-chart.tsx +173 -0
  538. package/templates/skills/remotion/rules/assets/text-animations-typewriter.tsx +100 -0
  539. package/templates/skills/remotion/rules/assets/text-animations-word-highlight.tsx +108 -0
  540. package/templates/skills/remotion/rules/assets.md +78 -0
  541. package/templates/skills/remotion/rules/audio.md +172 -0
  542. package/templates/skills/remotion/rules/calculate-metadata.md +104 -0
  543. package/templates/skills/remotion/rules/can-decode.md +75 -0
  544. package/templates/skills/remotion/rules/charts.md +58 -0
  545. package/templates/skills/remotion/rules/compositions.md +146 -0
  546. package/templates/skills/remotion/rules/display-captions.md +126 -0
  547. package/templates/skills/remotion/rules/extract-frames.md +229 -0
  548. package/templates/skills/remotion/rules/fonts.md +152 -0
  549. package/templates/skills/remotion/rules/get-audio-duration.md +58 -0
  550. package/templates/skills/remotion/rules/get-video-dimensions.md +68 -0
  551. package/templates/skills/remotion/rules/get-video-duration.md +58 -0
  552. package/templates/skills/remotion/rules/gifs.md +138 -0
  553. package/templates/skills/remotion/rules/images.md +130 -0
  554. package/templates/skills/remotion/rules/import-srt-captions.md +67 -0
  555. package/templates/skills/remotion/rules/lottie.md +68 -0
  556. package/templates/skills/remotion/rules/measuring-dom-nodes.md +35 -0
  557. package/templates/skills/remotion/rules/measuring-text.md +143 -0
  558. package/templates/skills/remotion/rules/sequencing.md +106 -0
  559. package/templates/skills/remotion/rules/tailwind.md +11 -0
  560. package/templates/skills/remotion/rules/text-animations.md +20 -0
  561. package/templates/skills/remotion/rules/timing.md +179 -0
  562. package/templates/skills/remotion/rules/transcribe-captions.md +19 -0
  563. package/templates/skills/remotion/rules/transitions.md +122 -0
  564. package/templates/skills/remotion/rules/trimming.md +53 -0
  565. package/templates/skills/remotion/rules/videos.md +171 -0
  566. package/templates/skills/repomix/SKILL.md +3 -2
  567. package/templates/skills/repomix/scripts/repomix_batch.py +0 -0
  568. package/templates/skills/research/SKILL.md +9 -6
  569. package/templates/skills/scout/SKILL.md +89 -0
  570. package/templates/skills/scout/references/external-scouting.md +140 -0
  571. package/templates/skills/scout/references/internal-scouting.md +119 -0
  572. package/templates/skills/scout/references/task-management-scouting.md +125 -0
  573. package/templates/skills/sequential-thinking/SKILL.md +3 -2
  574. package/templates/skills/sequential-thinking/scripts/format-thought.js +0 -0
  575. package/templates/skills/sequential-thinking/scripts/process-thought.js +0 -0
  576. package/templates/skills/shader/SKILL.md +113 -0
  577. package/templates/skills/shader/references/glsl-cellular-voronoi-worley-noise-patterns.md +142 -0
  578. package/templates/skills/shader/references/glsl-colors-rgb-hsb-gradients-mixing-color-spaces.md +143 -0
  579. package/templates/skills/shader/references/glsl-fbm-fractional-brownian-motion-turbulence-octaves.md +146 -0
  580. package/templates/skills/shader/references/glsl-fundamentals-data-types-vectors-precision-coordinates.md +104 -0
  581. package/templates/skills/shader/references/glsl-noise-random-perlin-simplex-cellular-voronoi.md +115 -0
  582. package/templates/skills/shader/references/glsl-pattern-symmetry-truchet-domain-warping.md +134 -0
  583. package/templates/skills/shader/references/glsl-patterns-tiling-fract-matrices-transformations.md +133 -0
  584. package/templates/skills/shader/references/glsl-procedural-textures-clouds-marble-wood-terrain.md +144 -0
  585. package/templates/skills/shader/references/glsl-shader-builtin-functions-complete-api-reference.md +112 -0
  586. package/templates/skills/shader/references/glsl-shapes-polygon-star-polar-sdf-combinations.md +124 -0
  587. package/templates/skills/shader/references/glsl-shapes-sdf-circles-rectangles-polar-distance-fields.md +106 -0
  588. package/templates/skills/shader/references/glsl-shaping-functions-step-smoothstep-curves-interpolation.md +141 -0
  589. package/templates/skills/shopify/SKILL.md +3 -2
  590. package/templates/skills/shopify/scripts/shopify_init.py +5 -5
  591. package/templates/skills/skill-creator/SKILL.md +91 -238
  592. package/templates/skills/skill-creator/references/benchmark-optimization-guide.md +86 -0
  593. package/templates/skills/skill-creator/references/distribution-guide.md +79 -0
  594. package/templates/skills/skill-creator/references/mcp-skills-integration.md +71 -0
  595. package/templates/skills/skill-creator/references/metadata-quality-criteria.md +76 -0
  596. package/templates/skills/skill-creator/references/plugin-marketplace-hosting.md +104 -0
  597. package/templates/skills/skill-creator/references/plugin-marketplace-overview.md +89 -0
  598. package/templates/skills/skill-creator/references/plugin-marketplace-schema.md +93 -0
  599. package/templates/skills/skill-creator/references/plugin-marketplace-sources.md +103 -0
  600. package/templates/skills/skill-creator/references/plugin-marketplace-troubleshooting.md +76 -0
  601. package/templates/skills/skill-creator/references/script-quality-criteria.md +106 -0
  602. package/templates/skills/skill-creator/references/skill-anatomy-and-requirements.md +76 -0
  603. package/templates/skills/skill-creator/references/skill-creation-workflow.md +95 -0
  604. package/templates/skills/skill-creator/references/skill-design-patterns.md +75 -0
  605. package/templates/skills/skill-creator/references/skillmark-benchmark-criteria.md +102 -0
  606. package/templates/skills/skill-creator/references/structure-organization-criteria.md +114 -0
  607. package/templates/skills/skill-creator/references/testing-and-iteration.md +78 -0
  608. package/templates/skills/skill-creator/references/token-efficiency-criteria.md +74 -0
  609. package/templates/skills/skill-creator/references/troubleshooting-guide.md +80 -0
  610. package/templates/skills/skill-creator/references/validation-checklist.md +83 -0
  611. package/templates/skills/skill-creator/references/writing-effective-instructions.md +88 -0
  612. package/templates/skills/skill-creator/references/yaml-frontmatter-reference.md +91 -0
  613. package/templates/skills/skill-creator/scripts/debug.zip +0 -0
  614. package/templates/skills/skill-creator/scripts/encoding_utils.py +36 -0
  615. package/templates/skills/skill-creator/scripts/init_skill.py +9 -4
  616. package/templates/skills/skill-creator/scripts/package_skill.py +5 -0
  617. package/templates/skills/skill-creator/scripts/quick_validate.py +6 -2
  618. package/templates/skills/tanstack/SKILL.md +141 -0
  619. package/templates/skills/tanstack/references/tanstack-ai.md +97 -0
  620. package/templates/skills/tanstack/references/tanstack-form.md +125 -0
  621. package/templates/skills/tanstack/references/tanstack-start.md +100 -0
  622. package/templates/skills/team/SKILL.md +285 -0
  623. package/templates/skills/team/references/agent-teams-controls-and-modes.md +107 -0
  624. package/templates/skills/team/references/agent-teams-examples-and-best-practices.md +182 -0
  625. package/templates/skills/team/references/agent-teams-official-docs.md +175 -0
  626. package/templates/skills/template-skill/SKILL.md +1 -1
  627. package/templates/skills/test/SKILL.md +109 -0
  628. package/templates/skills/test/references/report-format.md +58 -0
  629. package/templates/skills/test/references/test-execution-workflow.md +103 -0
  630. package/templates/skills/test/references/ui-testing-workflow.md +65 -0
  631. package/templates/skills/threejs/SKILL.md +106 -53
  632. package/templates/skills/threejs/data/api-reference.csv +61 -0
  633. package/templates/skills/threejs/data/categories.csv +14 -0
  634. package/templates/skills/threejs/data/examples-all.csv +557 -0
  635. package/templates/skills/threejs/data/use-cases.csv +21 -0
  636. package/templates/skills/threejs/references/00-fundamentals.md +487 -0
  637. package/templates/skills/threejs/references/11-materials-advanced.md +1 -1
  638. package/templates/skills/threejs/references/11-materials.md +519 -0
  639. package/templates/skills/threejs/references/17-shader.md +641 -0
  640. package/templates/skills/threejs/references/18-geometry.md +547 -0
  641. package/templates/skills/threejs/scripts/core.py +236 -0
  642. package/templates/skills/threejs/scripts/extract_examples.py +688 -0
  643. package/templates/skills/threejs/scripts/generate_csv_from_json.py +135 -0
  644. package/templates/skills/threejs/scripts/search.py +77 -0
  645. package/templates/skills/ui-styling/SKILL.md +3 -2
  646. package/templates/skills/ui-styling/scripts/shadcn_add.py +0 -0
  647. package/templates/skills/ui-styling/scripts/tailwind_config_gen.py +1 -1
  648. package/templates/skills/ui-ux-pro-max/SKILL.md +69 -32
  649. package/templates/skills/ui-ux-pro-max/data/charts.csv +25 -25
  650. package/templates/skills/ui-ux-pro-max/data/colors.csv +96 -96
  651. package/templates/skills/ui-ux-pro-max/data/landing.csv +30 -30
  652. package/templates/skills/ui-ux-pro-max/data/products.csv +96 -96
  653. package/templates/skills/ui-ux-pro-max/data/prompts.csv +20 -20
  654. package/templates/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  655. package/templates/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  656. package/templates/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  657. package/templates/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  658. package/templates/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  659. package/templates/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  660. package/templates/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  661. package/templates/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  662. package/templates/skills/ui-ux-pro-max/data/styles.csv +58 -58
  663. package/templates/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  664. package/templates/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  665. package/templates/skills/ui-ux-pro-max/scripts/design_system.py +494 -0
  666. package/templates/skills/ui-ux-pro-max/scripts/search.py +84 -61
  667. package/templates/skills/use-mcp/SKILL.md +42 -0
  668. package/templates/skills/watzup/SKILL.md +12 -0
  669. package/templates/skills/web-design-guidelines/SKILL.md +36 -0
  670. package/templates/skills/web-frameworks/SKILL.md +4 -3
  671. package/templates/skills/web-frameworks/scripts/nextjs_init.py +13 -13
  672. package/templates/skills/web-frameworks/scripts/turborepo_migrate.py +0 -0
  673. package/templates/skills/web-testing/SKILL.md +97 -0
  674. package/templates/skills/web-testing/references/accessibility-testing.md +84 -0
  675. package/templates/skills/web-testing/references/api-testing.md +78 -0
  676. package/templates/skills/web-testing/references/ci-cd-testing-workflows.md +121 -0
  677. package/templates/skills/web-testing/references/component-testing.md +94 -0
  678. package/templates/skills/web-testing/references/contract-testing.md +146 -0
  679. package/templates/skills/web-testing/references/cross-browser-checklist.md +72 -0
  680. package/templates/skills/web-testing/references/database-testing.md +139 -0
  681. package/templates/skills/web-testing/references/e2e-testing-playwright.md +119 -0
  682. package/templates/skills/web-testing/references/functional-testing-checklist.md +88 -0
  683. package/templates/skills/web-testing/references/interactive-testing-patterns.md +89 -0
  684. package/templates/skills/web-testing/references/load-testing-k6.md +93 -0
  685. package/templates/skills/web-testing/references/mobile-gesture-testing.md +85 -0
  686. package/templates/skills/web-testing/references/performance-core-web-vitals.md +124 -0
  687. package/templates/skills/web-testing/references/playwright-component-testing.md +115 -0
  688. package/templates/skills/web-testing/references/pre-release-checklist.md +75 -0
  689. package/templates/skills/web-testing/references/security-checklists.md +81 -0
  690. package/templates/skills/web-testing/references/security-testing-overview.md +92 -0
  691. package/templates/skills/web-testing/references/shadow-dom-testing.md +70 -0
  692. package/templates/skills/web-testing/references/test-data-management.md +131 -0
  693. package/templates/skills/web-testing/references/test-flakiness-mitigation.md +86 -0
  694. package/templates/skills/web-testing/references/testing-pyramid-strategy.md +76 -0
  695. package/templates/skills/web-testing/references/unit-integration-testing.md +138 -0
  696. package/templates/skills/web-testing/references/visual-regression.md +92 -0
  697. package/templates/skills/web-testing/references/vulnerability-payloads.md +93 -0
  698. package/templates/skills/web-testing/scripts/analyze-test-results.js +280 -0
  699. package/templates/skills/web-testing/scripts/init-playwright.js +233 -0
  700. package/templates/skills/worktree/SKILL.md +96 -0
  701. package/templates/skills/worktree/scripts/worktree.cjs +916 -0
  702. package/templates/skills/worktree/scripts/worktree.test.cjs +792 -0
  703. package/templates/statusline.cjs +477 -244
  704. package/templates/statusline.ps1 +0 -1
  705. package/templates/statusline.sh +0 -1
  706. package/templates/agents/README.md +0 -172
  707. package/templates/agents/copywriter.md +0 -113
  708. package/templates/agents/database-admin.md +0 -97
  709. package/templates/agents/scout-external.md +0 -146
  710. package/templates/agents/scout.md +0 -260
  711. package/templates/commands/README.md +0 -251
  712. package/templates/commands/bootstrap/auto/fast.md +0 -111
  713. package/templates/commands/bootstrap/auto/parallel.md +0 -66
  714. package/templates/commands/bootstrap/auto.md +0 -115
  715. package/templates/commands/bootstrap.md +0 -137
  716. package/templates/commands/build.md +0 -39
  717. package/templates/commands/checkpoint.md +0 -156
  718. package/templates/commands/code/auto.md +0 -170
  719. package/templates/commands/code/no-test.md +0 -158
  720. package/templates/commands/code/parallel.md +0 -55
  721. package/templates/commands/code-simplifier.md +0 -71
  722. package/templates/commands/code.md +0 -176
  723. package/templates/commands/compact.md +0 -57
  724. package/templates/commands/content/cro.md +0 -43
  725. package/templates/commands/content/enhance.md +0 -14
  726. package/templates/commands/content/fast.md +0 -13
  727. package/templates/commands/content/good.md +0 -16
  728. package/templates/commands/context.md +0 -48
  729. package/templates/commands/cook/auto/fast.md +0 -26
  730. package/templates/commands/cook/auto/parallel.md +0 -49
  731. package/templates/commands/cook/auto.md +0 -15
  732. package/templates/commands/cook/fast.md +0 -47
  733. package/templates/commands/cook/hard.md +0 -80
  734. package/templates/commands/cook/parallel.md +0 -90
  735. package/templates/commands/cook.md +0 -105
  736. package/templates/commands/create-feature.md +0 -48
  737. package/templates/commands/db-migrate.md +0 -52
  738. package/templates/commands/debug.md +0 -13
  739. package/templates/commands/design/3d.md +0 -83
  740. package/templates/commands/design/describe.md +0 -23
  741. package/templates/commands/design/fast.md +0 -31
  742. package/templates/commands/design/good.md +0 -35
  743. package/templates/commands/design/screenshot.md +0 -34
  744. package/templates/commands/design/video.md +0 -34
  745. package/templates/commands/docs/init.md +0 -39
  746. package/templates/commands/docs/summarize.md +0 -31
  747. package/templates/commands/docs/update.md +0 -57
  748. package/templates/commands/feature.md +0 -62
  749. package/templates/commands/fix/ci.md +0 -17
  750. package/templates/commands/fix/fast.md +0 -19
  751. package/templates/commands/fix/hard.md +0 -39
  752. package/templates/commands/fix/logs.md +0 -26
  753. package/templates/commands/fix/parallel.md +0 -54
  754. package/templates/commands/fix/test.md +0 -20
  755. package/templates/commands/fix/types.md +0 -9
  756. package/templates/commands/fix/ui.md +0 -48
  757. package/templates/commands/fix-issue.md +0 -177
  758. package/templates/commands/fix.md +0 -43
  759. package/templates/commands/generate-dto.md +0 -67
  760. package/templates/commands/git/cm.md +0 -5
  761. package/templates/commands/git/cp.md +0 -4
  762. package/templates/commands/git/merge.md +0 -40
  763. package/templates/commands/git/pr.md +0 -48
  764. package/templates/commands/integrate/polar.md +0 -28
  765. package/templates/commands/integrate/sepay.md +0 -28
  766. package/templates/commands/investigate.md +0 -324
  767. package/templates/commands/lint.md +0 -47
  768. package/templates/commands/migration.md +0 -111
  769. package/templates/commands/performance.md +0 -110
  770. package/templates/commands/plan/ci.md +0 -33
  771. package/templates/commands/plan/cro.md +0 -69
  772. package/templates/commands/plan/fast.md +0 -86
  773. package/templates/commands/plan/hard.md +0 -103
  774. package/templates/commands/plan/parallel.md +0 -152
  775. package/templates/commands/plan/preview.md +0 -40
  776. package/templates/commands/plan/two.md +0 -52
  777. package/templates/commands/plan/validate.md +0 -132
  778. package/templates/commands/plan.md +0 -36
  779. package/templates/commands/pr.md +0 -49
  780. package/templates/commands/preview.md +0 -87
  781. package/templates/commands/release-notes.md +0 -144
  782. package/templates/commands/review/post-task.md +0 -157
  783. package/templates/commands/review-changes.md +0 -46
  784. package/templates/commands/review.md +0 -56
  785. package/templates/commands/scout/ext.md +0 -35
  786. package/templates/commands/scout.md +0 -283
  787. package/templates/commands/security.md +0 -119
  788. package/templates/commands/skill/add.md +0 -36
  789. package/templates/commands/skill/create.md +0 -29
  790. package/templates/commands/skill/fix-logs.md +0 -22
  791. package/templates/commands/skill/optimize/auto.md +0 -25
  792. package/templates/commands/skill/optimize.md +0 -34
  793. package/templates/commands/skill/plan.md +0 -45
  794. package/templates/commands/worktree.md +0 -126
  795. package/templates/hooks/.python-cache.json +0 -1
  796. package/templates/hooks/README.md +0 -246
  797. package/templates/hooks/backend-csharp-context.cjs +0 -223
  798. package/templates/hooks/design-system-context.cjs +0 -185
  799. package/templates/hooks/frontend-typescript-context.cjs +0 -233
  800. package/templates/hooks/lib/ck-paths.cjs +0 -110
  801. package/templates/hooks/lib/context-tracker.cjs +0 -335
  802. package/templates/hooks/notify-waiting.js +0 -117
  803. package/templates/hooks/post-edit-prettier.cjs +0 -189
  804. package/templates/hooks/post-task-review.cjs +0 -142
  805. package/templates/hooks/scss-styling-context.cjs +0 -213
  806. package/templates/hooks/session-end.cjs +0 -35
  807. package/templates/hooks/tests/test-context-tracker.cjs +0 -454
  808. package/templates/hooks/tests/test-scout-block.js +0 -163
  809. package/templates/hooks/workflow-router.cjs +0 -326
  810. package/templates/hooks/write-compact-marker.cjs +0 -159
  811. package/templates/memory/session-log.md +0 -186
  812. package/templates/router/README.md +0 -294
  813. package/templates/router/agents-guide.md +0 -38
  814. package/templates/router/commands-guide.md +0 -122
  815. package/templates/router/decision-flow.md +0 -92
  816. package/templates/router/skills-guide.md +0 -127
  817. package/templates/router/workflows-guide.md +0 -68
  818. package/templates/scripts/__pycache__/win_compat.cpython-312.pyc +0 -0
  819. package/templates/scripts/plan-preview.cjs +0 -921
  820. package/templates/skills/arch-cross-service-integration/SKILL.md +0 -48
  821. package/templates/skills/arch-performance-optimization/SKILL.md +0 -306
  822. package/templates/skills/arch-security-review/SKILL.md +0 -344
  823. package/templates/skills/branch-comparison/SKILL.md +0 -150
  824. package/templates/skills/bug-diagnosis/SKILL.md +0 -309
  825. package/templates/skills/claude-code/references/advanced-features.md +0 -399
  826. package/templates/skills/claude-code/references/agent-skills.md +0 -399
  827. package/templates/skills/claude-code/references/api-reference.md +0 -498
  828. package/templates/skills/claude-code/references/best-practices.md +0 -447
  829. package/templates/skills/claude-code/references/cicd-integration.md +0 -428
  830. package/templates/skills/claude-code/references/common-workflows.md +0 -119
  831. package/templates/skills/claude-code/references/configuration.md +0 -480
  832. package/templates/skills/claude-code/references/enterprise-features.md +0 -472
  833. package/templates/skills/claude-code/references/getting-started.md +0 -252
  834. package/templates/skills/claude-code/references/hooks-and-plugins.md +0 -444
  835. package/templates/skills/claude-code/references/hooks-comprehensive.md +0 -622
  836. package/templates/skills/claude-code/references/ide-integration.md +0 -316
  837. package/templates/skills/claude-code/references/mcp-integration.md +0 -386
  838. package/templates/skills/claude-code/references/slash-commands.md +0 -489
  839. package/templates/skills/claude-code/references/troubleshooting.md +0 -456
  840. package/templates/skills/claude-code/skill.md +0 -60
  841. package/templates/skills/debugging/SKILL.md +0 -84
  842. package/templates/skills/developer-growth-analysis/SKILL.md +0 -322
  843. package/templates/skills/documentation/SKILL.md +0 -134
  844. package/templates/skills/domain-name-brainstormer/SKILL.md +0 -212
  845. package/templates/skills/dual-pass-review/SKILL.md +0 -249
  846. package/templates/skills/feature-docs/SKILL.md +0 -294
  847. package/templates/skills/feature-implementation/SKILL.md +0 -262
  848. package/templates/skills/feature-investigation/SKILL.md +0 -346
  849. package/templates/skills/frontend-design-pro/SKILL.md +0 -58
  850. package/templates/skills/package-upgrade/SKILL.md +0 -189
  851. package/templates/skills/plan-analysis/SKILL.md +0 -191
  852. package/templates/skills/planning/SKILL.md +0 -115
  853. package/templates/skills/planning-with-files/SKILL.md +0 -160
  854. package/templates/skills/planning-with-files/examples.md +0 -202
  855. package/templates/skills/planning-with-files/reference.md +0 -110
  856. package/templates/skills/project-index/SKILL.md +0 -97
  857. package/templates/skills/project-index/scripts/scan-structure.js +0 -417
  858. package/templates/skills/project-index/scripts/scan_structure.py +0 -450
  859. package/templates/skills/readme-improvement/SKILL.md +0 -177
  860. package/templates/skills/skill-share/SKILL.md +0 -80
  861. package/templates/skills/tasks-code-review/SKILL.md +0 -298
  862. package/templates/skills/tasks-documentation/SKILL.md +0 -328
  863. package/templates/skills/tasks-spec-update/SKILL.md +0 -318
  864. package/templates/skills/tasks-test-generation/SKILL.md +0 -433
  865. package/templates/skills/test-generation/SKILL.md +0 -203
  866. package/templates/skills/webapp-testing/LICENSE.txt +0 -202
  867. package/templates/skills/webapp-testing/SKILL.md +0 -96
  868. package/templates/skills/webapp-testing/examples/console_logging.py +0 -35
  869. package/templates/skills/webapp-testing/examples/element_discovery.py +0 -40
  870. package/templates/skills/webapp-testing/examples/static_html_automation.py +0 -33
  871. package/templates/skills/webapp-testing/scripts/with_server.py +0 -106
  872. package/templates/workflows/README.md +0 -241
  873. package/templates/workflows/orchestration-protocol.md +0 -16
  874. /package/templates/{commands → command-archive}/coding-level.md +0 -0
  875. /package/templates/{commands → command-archive}/review/codebase.md +0 -0
  876. /package/templates/{commands → command-archive}/test.md +0 -0
  877. /package/templates/{commands → command-archive}/watzup.md +0 -0
  878. /package/templates/hooks/scout-block/vendor/{ignore.js → ignore.cjs} +0 -0
  879. /package/templates/{workflows → rules}/documentation-management.md +0 -0
  880. /package/templates/skills/{debugging → debug}/references/defense-in-depth.md +0 -0
  881. /package/templates/skills/{debugging → debug}/references/root-cause-tracing.md +0 -0
  882. /package/templates/skills/{debugging → debug}/references/systematic-debugging.md +0 -0
  883. /package/templates/skills/{debugging → debug}/references/verification.md +0 -0
  884. /package/templates/skills/{debugging → debug}/scripts/find-polluter.sh +0 -0
  885. /package/templates/skills/{debugging → debug}/scripts/find-polluter.test.md +0 -0
  886. /package/templates/skills/{planning → plan}/references/solution-design.md +0 -0
@@ -2,305 +2,538 @@
2
2
  'use strict';
3
3
 
4
4
  /**
5
- * Custom Claude Code statusline for Node.js
5
+ * Custom Claude Code statusline for Node.js - Multi-line Edition
6
6
  * Cross-platform support: Windows, macOS, Linux
7
- * Theme: detailed | Features: directory, git, model, usage, session, tokens
7
+ * Features: ANSI colors, tool/agent/todo tracking, context window, session timer
8
8
  * No external dependencies - uses only Node.js built-in modules
9
- *
10
- * Context Window Calculation:
11
- * - 100% = compaction threshold (not model limit)
12
- * - Self-calibrates via PreCompact hook
13
- * - Falls back to smart defaults based on window size
14
9
  */
15
10
 
16
11
  const { stdin, env } = require('process');
17
- const { execSync } = require('child_process');
18
12
  const os = require('os');
19
13
  const fs = require('fs');
20
14
  const path = require('path');
21
15
 
22
- // Use modularized context tracker with 3-layer self-healing detection
23
- const { trackContext } = require('./hooks/lib/context-tracker.cjs');
16
+ // Import modular components
17
+ const { green, yellow, red, cyan, magenta, dim, coloredBar, RESET, shouldUseColor } = require('./hooks/lib/colors.cjs');
18
+ const { parseTranscript } = require('./hooks/lib/transcript-parser.cjs');
19
+ const { countConfigs } = require('./hooks/lib/config-counter.cjs');
20
+ const { loadConfig } = require('./hooks/lib/ck-config-utils.cjs');
21
+ const { getGitInfo } = require('./hooks/lib/git-info-cache.cjs');
24
22
 
23
+ // Buffer constant matching /context output (22.5% of 200k)
24
+ const AUTOCOMPACT_BUFFER = 45000;
25
25
 
26
26
  /**
27
- * Safe command execution wrapper
27
+ * Expand home directory to ~
28
28
  */
29
- function exec(cmd) {
30
- try {
31
- return execSync(cmd, {
32
- encoding: 'utf8',
33
- stdio: ['pipe', 'pipe', 'ignore'],
34
- windowsHide: true
35
- }).trim();
36
- } catch (err) {
37
- return '';
38
- }
29
+ function expandHome(filePath) {
30
+ const homeDir = os.homedir();
31
+ return filePath.startsWith(homeDir) ? filePath.replace(homeDir, '~') : filePath;
39
32
  }
40
33
 
41
34
  /**
42
- * Format epoch timestamp as HH:mm
35
+ * Get terminal width with fallback chain
36
+ * Piped context (statusline) needs alternative detection
43
37
  */
44
- function formatTimeHM(epoch) {
45
- try {
46
- const date = new Date(epoch * 1000);
47
- const hours = date.getHours().toString().padStart(2, '0');
48
- const minutes = date.getMinutes().toString().padStart(2, '0');
49
- return `${hours}:${minutes}`;
50
- } catch (err) {
51
- return '00:00';
52
- }
38
+ function getTerminalWidth() {
39
+ // Try multiple sources - stderr might still be TTY even when stdout is piped
40
+ if (process.stderr.columns) return process.stderr.columns;
41
+ if (env.COLUMNS) {
42
+ const parsed = parseInt(env.COLUMNS, 10);
43
+ if (!isNaN(parsed) && parsed > 0) return parsed;
44
+ }
45
+ return 120; // Safe default
53
46
  }
54
47
 
55
- // Context tracking functions moved to ./hooks/lib/context-tracker.cjs
56
- // Provides 3-layer self-healing detection:
57
- // - Layer 1: Session ID change detection
58
- // - Layer 2: Token drop detection (50% threshold)
59
- // - Layer 3: Hook marker system (SessionStart/SessionEnd)
48
+ /**
49
+ * Calculate visible string length (strip ANSI codes, account for emoji width)
50
+ * Emojis typically render as 2 columns in terminals
51
+ */
52
+ function visibleLength(str) {
53
+ if (!str || typeof str !== 'string') return 0;
54
+ // Strip ANSI escape codes
55
+ const noAnsi = str.replace(/\x1b\[[0-9;]*m/g, '');
56
+ // Count emojis (they render as ~2 cols) - common emoji ranges
57
+ const emojiMatches = noAnsi.match(/[\u{1F300}-\u{1F9FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/gu) || [];
58
+ return noAnsi.length + emojiMatches.length; // +1 per emoji (base length + 1 = 2 cols)
59
+ }
60
60
 
61
61
  /**
62
- * Generate Unicode progress bar (horizontal rectangles)
63
- * Uses smooth block characters for consistent rendering
64
- *
65
- * @param {number} percent - 0-100 percentage
66
- * @param {number} width - bar width in characters (default 12)
67
- * @returns {string} Unicode progress bar like ▰▰▰▰▰▱▱▱▱▱▱▱
62
+ * Format elapsed time from start to end (or now)
68
63
  */
69
- function progressBar(percent, width = 12) {
70
- const clamped = Math.max(0, Math.min(100, percent));
71
- const filled = Math.round(clamped * width / 100);
72
- const empty = width - filled;
73
- // (U+25B0) filled, (U+25B1) empty - smooth horizontal rectangles
74
- return '▰'.repeat(filled) + ''.repeat(empty);
64
+ function formatElapsed(startTime, endTime) {
65
+ if (!startTime) return '0s';
66
+ const start = startTime instanceof Date ? startTime.getTime() : new Date(startTime).getTime();
67
+ if (isNaN(start)) return '0s';
68
+ const end = endTime ? (endTime instanceof Date ? endTime.getTime() : new Date(endTime).getTime()) : Date.now();
69
+ if (isNaN(end)) return '0s';
70
+ const ms = end - start;
71
+ if (ms < 0 || ms < 1000) return '<1s';
72
+ if (ms < 60000) return `${Math.round(ms / 1000)}s`;
73
+ const mins = Math.floor(ms / 60000);
74
+ const secs = Math.round((ms % 60000) / 1000);
75
+ return `${mins}m ${secs}s`;
75
76
  }
76
77
 
77
78
  /**
78
- * Get severity emoji based on percentage (no color codes)
79
- *
80
- * @param {number} percent - 0-100 percentage
81
- * @returns {string} Emoji indicator
79
+ * Read stdin asynchronously
82
80
  */
83
- function getSeverityEmoji(percent) {
84
- if (percent >= 90) return '🔴'; // Critical
85
- if (percent >= 70) return '🟡'; // Warning
86
- return '🟢'; // Healthy
81
+ async function readStdin() {
82
+ return new Promise((resolve, reject) => {
83
+ const chunks = [];
84
+ stdin.setEncoding('utf8');
85
+ stdin.on('data', chunk => chunks.push(chunk));
86
+ stdin.on('end', () => resolve(chunks.join('')));
87
+ stdin.on('error', reject);
88
+ });
87
89
  }
88
90
 
91
+ // ============================================================================
92
+ // LINE RENDERERS
93
+ // ============================================================================
94
+
89
95
  /**
90
- * Expand home directory to ~
96
+ * Build usage time string with optional percentage
97
+ * @returns {string|null} Formatted usage string or null if unavailable
91
98
  */
92
- function expandHome(filePath) {
93
- const homeDir = os.homedir();
94
- if (filePath.startsWith(homeDir)) {
95
- return filePath.replace(homeDir, '~');
99
+ function buildUsageString(ctx) {
100
+ if (!ctx.sessionText || ctx.sessionText === 'N/A') return null;
101
+ let str = ctx.sessionText.replace(' until reset', ' left');
102
+ if (ctx.usagePercent != null) str += ` (${Math.round(ctx.usagePercent)}%)`;
103
+ return str;
104
+ }
105
+
106
+ /**
107
+ * Render session lines with multi-level responsive wrapping
108
+ * Combines parts based on content length vs terminal width
109
+ * Tries to minimize lines while keeping content readable
110
+ */
111
+ function renderSessionLines(ctx) {
112
+ const lines = [];
113
+ const termWidth = getTerminalWidth();
114
+ const threshold = Math.floor(termWidth * 0.85);
115
+
116
+ // Build all atomic parts for flexible composition (no colors on static text)
117
+ const dirPart = `📁 ${ctx.currentDir}`;
118
+
119
+ let branchPart = '';
120
+ if (ctx.gitBranch) {
121
+ branchPart = `🌿 ${ctx.gitBranch}`;
122
+ // Build git status indicators: (unstaged, +staged, ahead↑, behind↓)
123
+ const gitIndicators = [];
124
+ if (ctx.gitUnstaged > 0) gitIndicators.push(`${ctx.gitUnstaged}`);
125
+ if (ctx.gitStaged > 0) gitIndicators.push(`+${ctx.gitStaged}`);
126
+ if (ctx.gitAhead > 0) gitIndicators.push(`${ctx.gitAhead}↑`);
127
+ if (ctx.gitBehind > 0) gitIndicators.push(`${ctx.gitBehind}↓`);
128
+ if (gitIndicators.length > 0) {
129
+ branchPart += ` ${yellow(`(${gitIndicators.join(', ')})`)}`;
96
130
  }
97
- return filePath;
131
+ }
132
+
133
+ // Active plan indicator (disabled for now - code preserved)
134
+ // const planPart = ctx.activePlan ? `📋 ${ctx.activePlan}` : '';
135
+ const planPart = '';
136
+
137
+ // Combined location (dir + branch + plan)
138
+ let locationPart = branchPart ? `${dirPart} ${branchPart}` : dirPart;
139
+ if (planPart) locationPart += ` ${planPart}`;
140
+
141
+ // Build session part: 🤖 model contextBar% ⌛ time left (usage%)
142
+ let sessionPart = `🤖 ${ctx.modelName}`;
143
+ if (ctx.contextPercent > 0) {
144
+ sessionPart += ` ${coloredBar(ctx.contextPercent, 12)} ${ctx.contextPercent}%`;
145
+ }
146
+ // Add usage/reset info to session part (stays on line 1 with model - Claude Code only reads line 1)
147
+ const usageStr = buildUsageString(ctx);
148
+ if (usageStr) {
149
+ sessionPart += ` ⌛ ${usageStr.replace(/\)$/, ' used)')}`;
150
+ }
151
+
152
+ // Build stats part (only lines changed now)
153
+ const statsItems = [];
154
+ // if (ctx.costText) statsItems.push(`💵 ${ctx.costText.replace(/(\.\d{2})\d+/, '$1')}`);
155
+ if (ctx.linesAdded > 0 || ctx.linesRemoved > 0) {
156
+ statsItems.push(`📝 ${green(`+${ctx.linesAdded}`)} ${red(`-${ctx.linesRemoved}`)}`);
157
+ }
158
+ const statsPart = statsItems.join(' ');
159
+
160
+ // Calculate lengths for layout decisions
161
+ const locationLen = visibleLength(locationPart);
162
+ const sessionLen = visibleLength(sessionPart);
163
+ const statsLen = visibleLength(statsPart);
164
+
165
+ // Layout priority: SESSION FIRST (Claude Code only reads line 1)
166
+ // Line 1: model + context + usage (most important for Claude Code)
167
+ // Line 2+: location, git, stats
168
+ const allOneLine = `${sessionPart} ${locationPart} ${statsPart}`;
169
+ const sessionLocation = `${sessionPart} ${locationPart}`;
170
+ const sessionStats = `${sessionPart} ${statsPart}`;
171
+
172
+ if (visibleLength(allOneLine) <= threshold && statsLen > 0) {
173
+ // Ultra-wide: everything on one line (session first)
174
+ lines.push(allOneLine);
175
+ } else if (visibleLength(sessionLocation) <= threshold) {
176
+ // Wide: session+location on line 1 | stats on line 2
177
+ lines.push(sessionLocation);
178
+ if (statsLen > 0) lines.push(statsPart);
179
+ } else if (sessionLen <= threshold) {
180
+ // Medium: session on line 1 | location on line 2 | stats on line 3
181
+ lines.push(sessionPart);
182
+ lines.push(locationPart);
183
+ if (statsLen > 0) lines.push(statsPart);
184
+ } else {
185
+ // Narrow: session | dir | branch | stats (each on own line)
186
+ lines.push(sessionPart);
187
+ lines.push(dirPart);
188
+ if (branchPart) lines.push(branchPart);
189
+ if (planPart) lines.push(planPart);
190
+ if (statsLen > 0) lines.push(statsPart);
191
+ }
192
+
193
+ return lines;
98
194
  }
99
195
 
100
196
  /**
101
- * Read stdin asynchronously
197
+ * Safe date parsing - returns epoch ms or 0 for invalid dates
102
198
  */
103
- async function readStdin() {
104
- return new Promise((resolve, reject) => {
105
- const chunks = [];
106
- stdin.setEncoding('utf8');
107
-
108
- stdin.on('data', (chunk) => {
109
- chunks.push(chunk);
110
- });
111
-
112
- stdin.on('end', () => {
113
- resolve(chunks.join(''));
114
- });
115
-
116
- stdin.on('error', (err) => {
117
- reject(err);
118
- });
119
- });
199
+ function safeGetTime(dateValue) {
200
+ if (!dateValue) return 0;
201
+ const time = new Date(dateValue).getTime();
202
+ return isNaN(time) ? 0 : time;
120
203
  }
121
204
 
122
205
  /**
123
- * Main function
206
+ * Render agents lines as compact chronological flow with duplicate collapsing
207
+ * Format: ○ type ×N → ● type (N done)
208
+ * ▸ description (elapsed)
209
+ * @returns {string[]} Array of lines (flow line + optional task line)
124
210
  */
125
- async function main() {
126
- try {
127
- // Read and parse JSON input
128
- const input = await readStdin();
129
- if (!input.trim()) {
130
- console.error('No input provided');
131
- process.exit(1);
132
- }
211
+ function renderAgentsLines(transcript) {
212
+ const { agents } = transcript;
213
+ if (!agents || agents.length === 0) return [];
214
+
215
+ const running = agents.filter(a => a.status === 'running');
216
+ const completed = agents.filter(a => a.status === 'completed');
217
+
218
+ // Sort all by startTime (safe NaN handling)
219
+ const allAgents = [...running, ...completed];
220
+ allAgents.sort((a, b) => safeGetTime(a.startTime) - safeGetTime(b.startTime));
221
+
222
+ if (allAgents.length === 0) return [];
223
+
224
+ // Collapse consecutive duplicate types FIRST (before slicing)
225
+ const collapsed = [];
226
+ for (const agent of allAgents) {
227
+ const type = agent.type || 'agent'; // fallback for missing type
228
+ const last = collapsed[collapsed.length - 1];
229
+ if (last && last.type === type && last.status === agent.status) {
230
+ last.count++;
231
+ last.agents.push(agent);
232
+ } else {
233
+ collapsed.push({ type, status: agent.status, count: 1, agents: [agent] });
234
+ }
235
+ }
236
+
237
+ // THEN slice to show last 4 collapsed groups
238
+ const toShow = collapsed.slice(-4);
239
+
240
+ // Build compact flow line with dots and ×N for duplicates
241
+ const flowParts = toShow.map(group => {
242
+ const icon = group.status === 'running' ? yellow('●') : dim('○');
243
+ const suffix = group.count > 1 ? ` ×${group.count}` : '';
244
+ return `${icon} ${group.type}${suffix}`;
245
+ });
246
+
247
+ const lines = [];
248
+ const completedCount = agents.filter(a => a.status === 'completed').length;
249
+ const flowSuffix = completedCount > 2 ? ` ${dim(`(${completedCount} done)`)}` : '';
250
+ lines.push(flowParts.join(' → ') + flowSuffix);
251
+
252
+ // Add indented task description for running agent, or last completed if none running
253
+ const runningAgent = running[0];
254
+ const lastCompleted = completed[completed.length - 1];
255
+ const detailAgent = runningAgent || lastCompleted;
256
+
257
+ if (detailAgent && detailAgent.description) {
258
+ const desc = detailAgent.description.length > 50
259
+ ? detailAgent.description.slice(0, 47) + '...'
260
+ : detailAgent.description;
261
+ const elapsed = formatElapsed(detailAgent.startTime, detailAgent.endTime);
262
+ const icon = detailAgent.status === 'running' ? yellow('▸') : dim('▸');
263
+ lines.push(` ${icon} ${desc} ${dim(`(${elapsed})`)}`);
264
+ }
265
+
266
+ return lines;
267
+ }
133
268
 
134
- const data = JSON.parse(input);
269
+ /**
270
+ * Render todos line (if todos exist)
271
+ * In-progress task with activeForm + detailed progress (done/pending)
272
+ */
273
+ function renderTodosLine(transcript) {
274
+ const { todos } = transcript;
275
+ if (!todos || todos.length === 0) return null;
276
+
277
+ const inProgress = todos.find(t => t.status === 'in_progress');
278
+ const completedCount = todos.filter(t => t.status === 'completed').length;
279
+ const pendingCount = todos.filter(t => t.status === 'pending').length;
280
+ const total = todos.length;
281
+
282
+ if (!inProgress) {
283
+ if (completedCount === total && total > 0) {
284
+ return `${green('✓')} All ${total} todos complete`;
285
+ }
286
+ // Show pending if no in_progress
287
+ if (pendingCount > 0) {
288
+ const nextPending = todos.find(t => t.status === 'pending');
289
+ const nextTask = nextPending?.content || 'Next task';
290
+ const display = nextTask.length > 40 ? nextTask.slice(0, 37) + '...' : nextTask;
291
+ return `${dim('○')} Next: ${display} ${dim(`(${completedCount} done, ${pendingCount} pending)`)}`;
292
+ }
293
+ return null;
294
+ }
135
295
 
136
- // Extract basic information
137
- let currentDir = 'unknown';
138
- if (data.workspace?.current_dir) {
139
- currentDir = data.workspace.current_dir;
140
- } else if (data.cwd) {
141
- currentDir = data.cwd;
142
- }
143
- currentDir = expandHome(currentDir);
144
-
145
- const modelName = data.model?.display_name || 'Claude';
146
- const modelVersion = data.model?.version && data.model.version !== 'null' ? data.model.version : '';
147
-
148
- // Git branch detection
149
- let gitBranch = '';
150
- const gitCheck = exec('git rev-parse --git-dir');
151
- if (gitCheck) {
152
- gitBranch = exec('git branch --show-current');
153
- if (!gitBranch) {
154
- gitBranch = exec('git rev-parse --short HEAD');
155
- }
156
- }
296
+ // Show activeForm (present continuous) if available, else content
297
+ const displayText = inProgress.activeForm || inProgress.content;
298
+ const display = displayText.length > 50 ? displayText.slice(0, 47) + '...' : displayText;
299
+ return `${yellow('▸')} ${display} ${dim(`(${completedCount} done, ${pendingCount} pending)`)}`;
300
+ }
157
301
 
158
- // Native Claude Code data integration
159
- let sessionText = '';
160
- let costUSD = '';
161
- let linesAdded = 0;
162
- let linesRemoved = 0;
163
- let contextPercent = 0;
164
- let contextText = '';
165
- const billingMode = env.CLAUDE_BILLING_MODE || 'api';
166
-
167
- // Extract native cost data from Claude Code
168
- costUSD = data.cost?.total_cost_usd || '';
169
- linesAdded = data.cost?.total_lines_added || 0;
170
- linesRemoved = data.cost?.total_lines_removed || 0;
171
-
172
- // Extract context window usage (Claude Code v2.0.65+)
173
- // Uses 3-layer self-healing detection from context-tracker module:
174
- // - Layer 1: Session ID change detection
175
- // - Layer 2: Token drop detection (50% threshold)
176
- // - Layer 3: Hook marker system (SessionStart/SessionEnd)
177
- const contextInput = data.context_window?.total_input_tokens || 0;
178
- const contextOutput = data.context_window?.total_output_tokens || 0;
179
- const contextSize = data.context_window?.context_window_size || 0;
180
-
181
- if (contextSize > 0) {
182
- const result = trackContext({
183
- sessionId: data.session_id,
184
- contextInput,
185
- contextOutput,
186
- contextWindowSize: contextSize
187
- });
188
-
189
- contextPercent = result.percentage;
190
-
191
- if (result.showCompactIndicator) {
192
- // First render after compaction - show indicator once
193
- contextText = `🔄 ▱▱▱▱▱▱▱▱▱▱▱▱`;
194
- } else {
195
- const emoji = getSeverityEmoji(contextPercent);
196
- const bar = progressBar(contextPercent, 12);
197
- contextText = `${emoji} ${bar} ${contextPercent}%`;
198
- }
199
- }
302
+ /**
303
+ * Render minimal mode - single line with emojis, no progress bar
304
+ * Format: "🤖 opus 4.5 🔋 50% ⏰ 2h 16m (38%) 🌿 branch 📁 ~/path"
305
+ */
306
+ function renderMinimal(ctx) {
307
+ const parts = [`🤖 ${ctx.modelName}`];
308
+ if (ctx.contextPercent > 0) {
309
+ const batteryIcon = ctx.contextPercent > 70 ? red('🔋') : '🔋';
310
+ parts.push(`${batteryIcon} ${ctx.contextPercent}%`);
311
+ }
312
+ const usageStr = buildUsageString(ctx);
313
+ if (usageStr) parts.push(`⏰ ${usageStr}`);
314
+ if (ctx.gitBranch) parts.push(`🌿 ${ctx.gitBranch}`);
315
+ parts.push(`📁 ${ctx.currentDir}`);
316
+ console.log(parts.join(' '));
317
+ }
200
318
 
201
- // Session timer - parse local transcript JSONL (zero external dependencies)
202
- const transcriptPath = data.transcript_path;
203
-
204
- if (transcriptPath) {
205
- try {
206
- if (fs.existsSync(transcriptPath)) {
207
- const content = fs.readFileSync(transcriptPath, 'utf8');
208
- const lines = content.split('\n').filter(l => l.trim());
209
-
210
- // Find first API call with usage data
211
- let firstApiCall = null;
212
- for (const line of lines) {
213
- try {
214
- const entry = JSON.parse(line);
215
- if (entry.usage && entry.timestamp) {
216
- firstApiCall = entry.timestamp;
217
- break;
218
- }
219
- } catch (e) {
220
- continue;
221
- }
222
- }
223
-
224
- if (firstApiCall) {
225
- // Calculate 5-hour billing block (Anthropic windows)
226
- const now = new Date();
227
- const currentUtcHour = now.getUTCHours();
228
- const blockStart = Math.floor(currentUtcHour / 5) * 5;
229
- let blockEnd = blockStart + 5;
230
-
231
- // Handle day wraparound
232
- let blockEndDate = new Date(now);
233
- if (blockEnd >= 24) {
234
- blockEnd -= 24;
235
- blockEndDate.setUTCDate(blockEndDate.getUTCDate() + 1);
236
- }
237
- blockEndDate.setUTCHours(blockEnd, 0, 0, 0);
238
-
239
- const nowSec = Math.floor(Date.now() / 1000);
240
- const blockEndSec = Math.floor(blockEndDate.getTime() / 1000);
241
- const remaining = blockEndSec - nowSec;
242
-
243
- if (remaining > 0 && remaining < 18000) {
244
- const rh = Math.floor(remaining / 3600);
245
- const rm = Math.floor((remaining % 3600) / 60);
246
- const blockEndLocal = formatTimeHM(blockEndSec);
247
- sessionText = `${rh}h ${rm}m until reset at ${blockEndLocal}`;
248
- }
249
- }
250
- }
251
- } catch (err) {
252
- // Silent fail - transcript not readable
253
- }
254
- }
319
+ /**
320
+ * Render compact mode - 2 lines: session info + location (branch + dir)
321
+ */
322
+ function renderCompact(ctx) {
323
+ // Line 1: Session info (model + context + usage)
324
+ let line1 = `🤖 ${ctx.modelName}`;
325
+ if (ctx.contextPercent > 0) {
326
+ line1 += ` ${coloredBar(ctx.contextPercent, 12)} ${ctx.contextPercent}%`;
327
+ }
328
+ const usageStr = buildUsageString(ctx);
329
+ if (usageStr) line1 += ` ⌛ ${usageStr}`;
330
+ console.log(line1.replace(/ /g, '\u00A0'));
331
+
332
+ // Line 2: Location (branch + directory)
333
+ let line2 = `📁 ${ctx.currentDir}`;
334
+ if (ctx.gitBranch) line2 += ` 🌿 ${ctx.gitBranch}`;
335
+ console.log(line2.replace(/ /g, '\u00A0'));
336
+ }
255
337
 
256
- // Render statusline (no ANSI colors - emoji only for indicators)
257
- let output = '';
338
+ /**
339
+ * Main render function - outputs all lines
340
+ * Falls back to single line if multi-line fails
341
+ */
342
+ function render(ctx, singleLineMode = false) {
343
+ const lines = [];
344
+
345
+ // Session lines (cleaner multi-line layout)
346
+ const sessionLines = renderSessionLines(ctx);
347
+ lines.push(...sessionLines);
348
+
349
+ if (!singleLineMode) {
350
+ // Agents lines (one per agent for clarity)
351
+ const agentsLines = renderAgentsLines(ctx.transcript);
352
+ lines.push(...agentsLines);
353
+
354
+ // Todos line (if exist)
355
+ const todosLine = renderTodosLine(ctx.transcript);
356
+ if (todosLine) lines.push(todosLine);
357
+ }
358
+
359
+ // Output all lines with non-breaking spaces for alignment
360
+ for (const line of lines) {
361
+ const outputLine = shouldUseColor ? `${RESET}${line.replace(/ /g, '\u00A0')}` : line;
362
+ console.log(outputLine);
363
+ }
364
+ }
258
365
 
259
- // Directory
260
- output += `📁 ${currentDir}`;
366
+ // ============================================================================
367
+ // MAIN
368
+ // ============================================================================
261
369
 
262
- // Git branch
263
- if (gitBranch) {
264
- output += ` 🌿 ${gitBranch}`;
265
- }
370
+ async function main() {
371
+ try {
372
+ const input = await readStdin();
373
+ if (!input.trim()) {
374
+ console.error('No input provided');
375
+ process.exit(1);
376
+ }
266
377
 
267
- // Model
268
- output += ` 🤖 ${modelName}`;
378
+ const data = JSON.parse(input);
269
379
 
270
- // Model version
271
- if (modelVersion) {
272
- output += ` ${modelVersion}`;
273
- }
380
+ // Extract basic information
381
+ let currentDir = data.workspace?.current_dir || data.cwd || 'unknown';
382
+ currentDir = expandHome(currentDir);
274
383
 
275
- // Session time
276
- if (sessionText) {
277
- output += ` ⌛ ${sessionText}`;
278
- }
384
+ const modelName = data.model?.display_name || 'Claude';
279
385
 
280
- // Cost (only show for API billing mode)
281
- if (billingMode === 'api' && costUSD && /^\d+(\.\d+)?$/.test(costUSD.toString())) {
282
- const costUSDNum = parseFloat(costUSD);
283
- output += ` 💵 $${costUSDNum.toFixed(4)}`;
284
- }
386
+ // Git detection using batched cache
387
+ const rawDir = data.workspace?.current_dir || data.cwd || process.cwd();
388
+ const gitInfo = getGitInfo(rawDir);
389
+ const gitBranch = gitInfo?.branch || '';
390
+ const gitUnstaged = gitInfo?.unstaged || 0;
391
+ const gitStaged = gitInfo?.staged || 0;
392
+ const gitAhead = gitInfo?.ahead || 0;
393
+ const gitBehind = gitInfo?.behind || 0;
285
394
 
286
- // Lines changed
287
- if ((linesAdded > 0 || linesRemoved > 0)) {
288
- output += ` 📝 +${linesAdded} -${linesRemoved}`;
395
+ // Active plan detection - read from session temp file
396
+ let activePlan = '';
397
+ try {
398
+ const sessionId = data.session_id;
399
+ if (sessionId) {
400
+ const sessionPath = path.join(os.tmpdir(), `ck-session-${sessionId}.json`);
401
+ if (fs.existsSync(sessionPath)) {
402
+ const session = JSON.parse(fs.readFileSync(sessionPath, 'utf8'));
403
+ const planPath = session.activePlan?.trim();
404
+ if (planPath) {
405
+ // Extract slug from path like "plans/260106-1554-statusline-visual"
406
+ const match = planPath.match(/plans\/\d+-\d+-(.+?)(?:\/|$)/);
407
+ activePlan = match ? match[1] : planPath.split('/').pop();
408
+ }
289
409
  }
410
+ }
411
+ } catch {}
412
+
413
+ // Context window - use current_usage fields with AUTOCOMPACT_BUFFER
414
+ const usage = data.context_window?.current_usage || {};
415
+ const contextSize = data.context_window?.context_window_size || 0;
416
+ let contextPercent = 0;
417
+ let totalTokens = 0;
418
+
419
+ if (contextSize > 0 && contextSize > AUTOCOMPACT_BUFFER) {
420
+ totalTokens = (usage.input_tokens ?? 0) +
421
+ (usage.cache_creation_input_tokens ?? 0) +
422
+ (usage.cache_read_input_tokens ?? 0);
423
+
424
+ // Add buffer to match /context calculation
425
+ contextPercent = Math.min(100, Math.round(((totalTokens + AUTOCOMPACT_BUFFER) / contextSize) * 100));
426
+ }
290
427
 
291
- // Context window usage (Claude Code v2.0.65+)
292
- if (contextText) {
293
- output += ` ${contextText}`;
294
- }
428
+ // Write context data to temp file for hooks to read
429
+ const sessionId = data.session_id;
430
+ if (sessionId && contextSize > 0) {
431
+ try {
432
+ const contextDataPath = path.join(os.tmpdir(), `ck-context-${sessionId}.json`);
433
+ fs.writeFileSync(contextDataPath, JSON.stringify({
434
+ percent: contextPercent,
435
+ tokens: totalTokens,
436
+ size: contextSize,
437
+ usage: usage,
438
+ timestamp: Date.now()
439
+ }));
440
+ } catch {}
441
+ }
442
+
443
+ // Session timer - read actual reset time from usage limits cache
444
+ let sessionText = '';
445
+ const transcriptPath = data.transcript_path;
295
446
 
296
- console.log(output);
297
- } catch (err) {
298
- console.error('Error:', err.message);
299
- process.exit(1);
447
+ // Parse transcript for tools/agents/todos
448
+ const transcript = transcriptPath ? await parseTranscript(transcriptPath) : { tools: [], agents: [], todos: [], sessionStart: null };
449
+
450
+ // Read actual reset time and utilization from usage limits cache (written by usage-context-awareness hook)
451
+ let usagePercent = null;
452
+ try {
453
+ const usageCachePath = path.join(os.tmpdir(), 'ck-usage-limits-cache.json');
454
+ if (fs.existsSync(usageCachePath)) {
455
+ const cache = JSON.parse(fs.readFileSync(usageCachePath, 'utf8'));
456
+
457
+ // Check status flag for fallback (non-OAuth scenarios)
458
+ if (cache.status === 'unavailable') {
459
+ sessionText = 'N/A';
460
+ } else {
461
+ const fiveHour = cache.data?.five_hour;
462
+ usagePercent = fiveHour?.utilization ?? null;
463
+ const resetAt = fiveHour?.resets_at;
464
+ if (resetAt) {
465
+ const resetTime = new Date(resetAt);
466
+ const remaining = Math.floor(resetTime.getTime() / 1000) - Math.floor(Date.now() / 1000);
467
+ if (remaining > 0 && remaining < 18000) {
468
+ const rh = Math.floor(remaining / 3600);
469
+ const rm = Math.floor((remaining % 3600) / 60);
470
+ sessionText = `${rh}h ${rm}m until reset`;
471
+ }
472
+ }
473
+ }
474
+ }
475
+ } catch {}
476
+
477
+ // Cost and lines changed
478
+ const billingMode = env.CLAUDE_BILLING_MODE || 'api';
479
+ const costUSD = data.cost?.total_cost_usd;
480
+ const costText = billingMode === 'api' && costUSD && /^\d+(\.\d+)?$/.test(String(costUSD))
481
+ ? `$${parseFloat(costUSD).toFixed(4)}`
482
+ : null;
483
+ const linesAdded = data.cost?.total_lines_added || 0;
484
+ const linesRemoved = data.cost?.total_lines_removed || 0;
485
+
486
+ // Config counts
487
+ const configs = countConfigs(rawDir);
488
+
489
+ // Build render context
490
+ const ctx = {
491
+ modelName,
492
+ currentDir,
493
+ gitBranch,
494
+ gitUnstaged,
495
+ gitStaged,
496
+ gitAhead,
497
+ gitBehind,
498
+ activePlan,
499
+ contextPercent,
500
+ sessionText,
501
+ usagePercent,
502
+ costText,
503
+ linesAdded,
504
+ linesRemoved,
505
+ configs,
506
+ transcript
507
+ };
508
+
509
+ // Load config and get statusline mode
510
+ const config = loadConfig({ includeProject: false, includeAssertions: false, includeLocale: false });
511
+ const statuslineMode = config.statusline || 'full';
512
+
513
+ // Render based on mode
514
+ switch (statuslineMode) {
515
+ case 'none':
516
+ console.log('');
517
+ break;
518
+ case 'minimal':
519
+ renderMinimal(ctx);
520
+ break;
521
+ case 'compact':
522
+ renderCompact(ctx);
523
+ break;
524
+ case 'full':
525
+ default:
526
+ render(ctx, false);
527
+ break;
300
528
  }
529
+
530
+ } catch (err) {
531
+ // Fallback: output minimal single line on any error
532
+ console.log('📁 ' + (process.cwd() || 'unknown'));
533
+ }
301
534
  }
302
535
 
303
- main().catch(err => {
304
- console.error('Fatal error:', err);
305
- process.exit(1);
536
+ main().catch(() => {
537
+ console.log('📁 error');
538
+ process.exit(1);
306
539
  });