提交

225 次代码提交

作者 SHA1 备注 提交日期
Matthew Breedlove 497b30e0bf Version bump, README cleanup
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
v2.2.8
2026-04-08 13:21:35 -04:00
Matthew Breedlove ad51a8762c fix: walk process tree for terminal width detection
Closes #262
2026-04-08 03:36:46 -04:00
hangie 70d1d5261f feat: add git status, git remote, worktree, and custom symbol widgets (#257)
* feat: add git status, git remote, worktree, and custom symbol widgets

Add 19 new widgets split out from PR #255 per reviewer request:

- Git status widgets (addresses #20): git-status, git-staged,
  git-unstaged, git-untracked, git-ahead-behind, git-conflicts, git-sha
- Git remote widgets: git-origin-owner, git-origin-repo,
  git-origin-owner-repo, git-upstream-owner, git-upstream-repo,
  git-upstream-owner-repo, git-is-fork
- Worktree widgets: worktree-mode, worktree-name, worktree-branch,
  worktree-original-branch
- Custom symbol widget

Supporting changes:
- Add git command cache and status functions to git.ts
- Add git-remote utilities for fork detection and URL parsing
- Add customSymbol, hide, getNumericValue to Widget types
- Add worktree field to StatusJSON
- Add gitData field to RenderContext

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: correct git status detection for unstaged changes and merge conflicts

Fixed three issues in git status parsing:

1. Unstaged pattern was incomplete - only detected M/D, missed merge conflicts
   (UU, AU, DU, AA, UA, UD) and other status codes (R, C, T)
2. Added -z flag for NUL-terminated output to properly handle filenames with
   special characters
3. Changed trim() to trimEnd() to preserve significant leading spaces in git
   porcelain format (e.g., ' M file.txt' for unstaged modifications)

Added comprehensive test coverage with 20 new test cases covering all merge
conflict scenarios, rename/copy/type-change detection, and edge cases.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* feat: add conflict detection to git status widget

Added '!' indicator to GitStatus widget to show merge conflicts with priority
ordering: !+*? (conflicts, staged, unstaged, untracked).

Conflicts are shown first as they're blocking - work cannot proceed until
resolved. The priority ordering reflects urgency: blocking issues, intentional
work, unsaved changes, then undecided files.

Added conflict detection for all merge conflict states: DD, AU, UD, UA, DU, AA, UU
Added test coverage for DD (both deleted) case and mixed status with conflicts

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix(git-widgets): refine worktree naming and git parsing

Tighten the git widget plumbing and align the new worktree widgets with the Git naming scheme.

- parse nested namespace remotes correctly for both SCP-style and URL-based git remotes
- ignore rename and copy source-path entries when reading porcelain -z status output
- keep the git utility regression coverage aligned with the parser changes
- rename Worktree* widget files and classes to GitWorktree* and update display names
- preserve the existing worktree widget type ids while rewiring exports and manifest entries

* fix(git-widgets): correct conflict rendering and upstream resolution

Improve git widget behavior in preview and runtime rendering.

- treat text-presentation pictographs like the warning symbol as narrow unless explicitly emoji-style

- keep git conflicts visible at zero and return numeric raw values for the conflict count

- add regression coverage for glyph width handling and conflict widget rendering

- resolve git-upstream widgets through the branch tracking remote when no literal upstream remote exists

- cover tracked-upstream fallback behavior in git remote utility tests

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-04-08 03:20:42 -04:00
Matthew Breedlove dfe05312bd refactor(cache): move PR cache files to pr subdirectory 2026-04-08 00:28:37 -04:00
Forbes Avila e87ce2e815 feat(widgets): add Claude account email widget (#295)
* Add Claude account email widget for ccswitch integration

* feat(widgets): add Claude account email widget

Adds a new ClaudeAccountEmail widget in the Session category that displays
the user's email by reading from git config user.email or falling back to
common environment variables (GIT_AUTHOR_EMAIL, GIT_COMMITTER_EMAIL, EMAIL, USER_EMAIL).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(widgets): read Claude account email from ~/.claude.json

Replaces the git config approach with reading oauthAccount.emailAddress
directly from ~/.claude.json — the actual Claude account credentials file.
Respects CLAUDE_CONFIG_DIR environment variable. No external tools required.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: Remove unnecessary package-lock.json as this repo uses bun.lock

* fix(widgets): label claude account email output

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-04-08 00:19:44 -04:00
Matthew Breedlove 00ee862200 feat(powerline): continue theme colors across lines
Closes #288
2026-04-07 23:55:14 -04:00
Matthew Breedlove 315cd1128d docs: add localization section for community fork
Closes #281
2026-04-07 23:37:14 -04:00
Tien Nguyen Minh 23ac1f795c docs: remove invalid winget packages and replace with valid ones (#215) 2026-04-07 23:26:28 -04:00
Chris Tracey 88003245e7 feat: add a global minimalist mode that defaults widgets to raw mode (#227)
* feat: add a global minimalist mode that defaults widgets to raw mode

Adds the foundational plumbing for a global minimalist mode toggle:
- RenderContext.minimalist flag (optional boolean)
- Settings.minimalistMode field (default false, Zod-managed)
- Threads the flag from settings into RenderContext at render time in
  both piped mode (ccstatusline.ts) and TUI preview (StatusLinePreview.tsx)

Adds an (m) keybind to the Global Overrides TUI menu to toggle minimalist
mode on/off. The setting is persisted immediately via onUpdate, and the
preview reflects the change in real time via the RenderContext flag.

When minimalist mode is active, the renderer forces rawValue: true on all
widgets before calling render(), stripping decorative labels and prefixes
globally. No per-widget changes needed.

* fix: keep strict settings literals for minimalist mode

---------

Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-04-07 23:22:16 -04:00
dependabot[bot] 02c4eecca3 chore(deps-dev): bump globals from 14.0.0 to 17.3.0 (#240)
Bumps [globals](https://github.com/sindresorhus/globals) from 14.0.0 to 17.3.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v14.0.0...v17.3.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.3.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-07 23:01:09 -04:00
dependabot[bot] 1206479145 chore(deps-dev): bump the dev-dependencies group across 1 directory with 5 updates (#269)
* chore(deps-dev): bump the dev-dependencies group across 1 directory with 5 updates

Bumps the dev-dependencies group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@types/bun](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/bun) | `1.3.10` | `1.3.11` |
| [eslint](https://github.com/eslint/eslint) | `10.0.3` | `10.1.0` |
| [typedoc](https://github.com/TypeStrong/TypeDoc) | `0.28.17` | `0.28.18` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.57.0` | `8.57.2` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.0` | `4.1.2` |



Updates `@types/bun` from 1.3.10 to 1.3.11
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/bun)

Updates `eslint` from 10.0.3 to 10.1.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v10.0.3...v10.1.0)

Updates `typedoc` from 0.28.17 to 0.28.18
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Changelog](https://github.com/TypeStrong/typedoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.28.17...v0.28.18)

Updates `typescript-eslint` from 8.57.0 to 8.57.2
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.2/packages/typescript-eslint)

Updates `vitest` from 4.1.0 to 4.1.2
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.2/packages/vitest)

---
updated-dependencies:
- dependency-name: "@types/bun"
  dependency-version: 1.3.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: eslint
  dependency-version: 10.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: typedoc
  dependency-version: 0.28.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: typescript-eslint
  dependency-version: 8.57.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: vitest
  dependency-version: 4.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: satisfy updated ColorMenu linting

Remove the redundant useState type argument in the color menu so the dependency bump branch passes the newer typescript-eslint rule set without changing runtime behavior.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-04-07 22:57:57 -04:00
YuLaiZ f0cffeb619 fix: prevent UserPromptSubmit regex from matching Unix paths as skill names (#274) 2026-04-07 22:49:34 -04:00
1K2S aed41dc410 feat: fzf when adding widgets (#293)
* feat: fzf when adding widgets

Adds fuzzy matching to the widget picker as a fallback when the query
has no exact substring match anywhere.

Characters must appear in order but need not be adjacent; matches are
scored by span, consecutive runs, and word boundaries, and ranked below
all exact matches.

Selection now resets to the top-ranked result on every keystroke instead
of staying pinned to the previously-selected widget type.

Matched characters are highlighted in the picker list: yellow-bold for
unselected rows, green-bold for the selected row.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: prefer widget picker initialisms over incidental matches

Give display-name initialism matches their own ranking path so abbreviation searches like tw, tc, ti, and to select the intended widget instead of description or type fallbacks. Keep picker highlighting aligned with the ranking logic and add regressions for the reported fuzzy-match cases.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-04-07 22:34:38 -04:00
vincent-k2026 4af5d780bc chore: Add codachi to Related Projects (#284) 2026-04-07 21:46:49 -04:00
Jonathan Yang 7a2f032037 feat(widgets): add git-pr widget (#250)
* feat(widgets): add git-pr widget

* fix git-pr cache invalidation and test isolation

* fix gh-pr cache test matcher

---------

Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-04-07 21:46:07 -04:00
Matthew Breedlove 8d8819af73 Version bump
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
v2.2.7
2026-03-20 14:58:01 -04:00
Jaakko 3ff7cb7502 feat: use native rate_limits field from Claude Code 2.1.80 (#253)
* feat: use native rate_limits field from Claude Code 2.1.80

Claude Code 2.1.80 now sends rate_limits in the statusline JSON input
with five_hour and seven_day windows (used_percentage + resets_at).
When present, usage widgets consume this data directly instead of
fetching from the Anthropic API. Falls back to the API fetch for
older Claude Code versions that don't send rate_limits.

Also updates the example payload to match the real 2.1.80 format.

* fix: revert example payload to use placeholder values

* chore: align test values with example payload

* fix: Fallback to API usage query if any of the rate limit fields are missing

---------

Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-20 14:56:00 -04:00
Matthew Breedlove e31c7908cd chore: Version bump and README update
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
v2.2.6
2026-03-15 02:42:43 -04:00
Ereli d916afc2ec feat: add hyperlink support to GitBranch and GitRootDir widgets (#224)
* feat: add hyperlink support to GitBranch and GitRootDir widgets

- GitBranch: toggle (l)ink wraps branch name in OSC 8 link to
  github.com/owner/repo/tree/<branch>; only activates for GitHub
  remotes, falls back to plain text otherwise
- GitRootDir: toggle (l)ink wraps project root name in OSC 8
  cursor://file/<path> link to open the directory in Cursor
- Add shared src/utils/hyperlink.ts with renderOsc8Link and
  parseGitHubBaseUrl helpers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Improve git and IDE hyperlink handling

- encode GitHub branch refs so reserved characters do not break branch links
- accept ssh:// and credentialed GitHub remotes when building GitHub URLs
- replace the Cursor-only repo root toggle with IDE link modes for VS Code and Cursor
- build IDE file links from encoded paths so Windows, spaces, #, and UNC paths work
- reuse the shared OSC-8 hyperlink renderer from the Link widget
- add focused coverage for hyperlink parsing and the updated git widgets

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-15 01:44:56 -04:00
Matthew Breedlove e31a78add1 chore: Add vim widget to README
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
v2.2.5
2026-03-15 01:22:57 -04:00
Matthew Breedlove 687de09eb4 chore: Version bump and README update 2026-03-15 01:05:56 -04:00
Jiabao Ji 823c45f054 feat: add vim-mode widget (#237)
* feat: add vim-mode widget

Adds a new status line widget that displays the current vim mode when
Claude Code's vim mode is enabled.

Claude Code includes a `vim` field in the status hook JSON when vim mode
is active. The widget reads this field and renders a compact indicator.
When vim mode is not enabled, the widget returns null and hides itself.

Five display formats are supported via metadata.format:
- icon-dash-letter (default): -N / -I
- icon-letter:  N /  I
- icon: icon only
- letter: N / I
- word: NORMAL / INSERT

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix vim mode defaults and editor toggles

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-15 00:59:02 -04:00
Matthew Breedlove 5b49868de7 Fix macOS usage token keychain fallback
Closes #236

Closes #218
2026-03-15 00:31:02 -04:00
Jaakko d1e35aa832 fix(timer): show days in formatUsageDuration for durations >= 24h (#228)
* fix(timer): show days in formatUsageDuration for durations >= 24h

Durations of 24+ hours now display a days component instead of
raw hours (e.g. "1d 12hr 30m" instead of "36hr 30m"). Applies to
both normal and compact formats. Fixes #210.

* refactor(timer): simplify formatUsageDuration and show 0m for zero duration

Unify compact/normal branches into a single code path differing only
in hour label and separator. Zero duration now displays "0m" instead
of "0hr"/"0h".

* Add weekly reset hours toggle

Default weekly reset timers to day-based formatting while adding an hours-only toggle and keeping preview text aligned with live rendering.

Also move custom keybind visibility back into widgets and clear disabled toggle metadata when those options become unavailable in the editor.

  Supersedes #235
  Closes #235

---------

Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-14 23:06:44 -04:00
Matthew Breedlove 1e69ae6898 Fixes for ESLint 10 2026-03-14 22:14:31 -04:00
Matthew Breedlove a9e4e3ea2d Merge remote-tracking branch 'origin/dependabot/bun/eslint/js-10.0.1' 2026-03-14 22:02:37 -04:00
Matthew Breedlove 01766b79e5 Merge remote-tracking branch 'origin/dependabot/bun/eslint-10.0.0' 2026-03-14 22:01:28 -04:00
Matthew Breedlove abb8038c12 Merge branch 'dependabot/bun/ink-gradient-4.0.0' 2026-03-14 21:57:34 -04:00
Matthew Breedlove fcc5734b8d fix: Fix broken ThinkingEffort widget
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
v2.2.4
2026-03-10 02:45:34 -04:00
elliotllliu 49c1750c19 feat: add ThinkingEffort widget to display thinking effort level (#217)
Adds a new "thinking-effort" widget that shows the current
thinking effort level (low, medium, high) in the status bar.

Data source priority:
1. StatusJSON "thinking.effort" field (from Claude Code status hook)
2. "thinkingMode" key in ~/.claude/settings.json (user fallback)

Usage in config:
  { "type": "thinking-effort", "color": "magenta" }

Closes #209

Changes:
- src/types/StatusJSON.ts: add optional "thinking" field
- src/widgets/ThinkingEffort.ts: new widget implementation
- src/widgets/index.ts: export ThinkingEffortWidget
- src/utils/widget-manifest.ts: register "thinking-effort" type
- src/widgets/__tests__/ThinkingEffort.test.ts: 13 unit tests

Co-authored-by: GitHub User <user@example.com>
2026-03-10 02:09:28 -04:00
dependabot[bot] d1634c113c chore(deps-dev): bump ink-gradient from 3.0.0 to 4.0.0
Bumps [ink-gradient](https://github.com/sindresorhus/ink-gradient) from 3.0.0 to 4.0.0.
- [Release notes](https://github.com/sindresorhus/ink-gradient/releases)
- [Commits](https://github.com/sindresorhus/ink-gradient/compare/v3.0.0...v4.0.0)

---
updated-dependencies:
- dependency-name: ink-gradient
  dependency-version: 4.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 08:57:02 +00:00
dependabot[bot] 36a6169f4e chore(deps-dev): bump @eslint/js from 9.39.3 to 10.0.1
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.39.3 to 10.0.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v10.0.1/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 10.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 08:56:55 +00:00
dependabot[bot] 60bf9b8c50 chore(deps-dev): bump eslint from 9.39.3 to 10.0.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.39.3 to 10.0.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.3...v10.0.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 08:56:49 +00:00
Matthew Breedlove dfa009e7df Handle usage API 429 backoff
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
Closes #204
v2.2.3
2026-03-08 01:11:47 -05:00
Matthew Breedlove db950f3f7a fix: install menu escape navigation 2026-03-06 17:49:58 -05:00
j3r0lin fe9cc15818 feat(timer): add compact time format option for timer widgets (#203)
* feat(timer): add compact time format option for timer widgets

Add an optional compact display mode (s key) to BlockTimer, BlockResetTimer,
and WeeklyResetTimer that renders durations as '5h30m' instead of '5hr 30m'.

- Add `compact` boolean parameter to `formatUsageDuration`
- Add `isUsageCompact` / `toggleUsageCompact` helpers in usage-display.ts
- Add `toggle-compact` action and `s` keybind across all three timer widgets
- Preview text reflects compact format when flag is set
- Editor modifier text shows 'compact' when flag is enabled
- Tests cover compact format output, keybind exposure, and toggle behavior

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix compact timer widget editor state

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-06 17:24:52 -05:00
Jack Allen 34fa512778 feat(list): add custom list component (#60)
* feat(list): add custom list component

* feat(list): add sublabel and disabled options for list items

* Refactor TUI menu screens onto shared List component

Replace the remaining menu-style terminal and powerline screens with the shared List component so they share navigation, descriptions, back-row behavior, disabled states, and confirm dialog rendering.

This migrates TerminalOptionsMenu, TerminalWidthMenu, PowerlineSetup, PowerlineThemeSelector, and ConfirmDialog, and adds focused tests for the extracted menu builders and Ink-level regressions.

It also fixes two regressions uncovered during manual testing: PowerlineThemeSelector now memoizes theme data and List selection callbacks so live theme preview no longer triggers a maximum update depth loop, and TerminalWidthMenu now restores focus to the active full-until-compact row after returning from threshold entry instead of resetting to the first item.

---------

Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-06 02:19:29 -05:00
Matthew Breedlove e63591492a feat: add usage API HTTPS_PROXY support
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
v2.2.2
2026-03-05 18:07:10 -05:00
Matthew Breedlove 7a0b979b01 test: isolate config test Claude config dir 2026-03-05 14:35:43 -05:00
Matthew Breedlove eaab442794 chore: standardize lint scripts and CI 2026-03-05 14:31:46 -05:00
Bap 78d6dcc28c feat: Add Skills widget with cross-platform hook framework (#201)
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
* feat: Add Skills widget with cross-platform hook framework

Replaces bash/jq hook with a built-in --hook CLI handler that works
on all platforms. Widgets can declare hooks via getHooks() which are
auto-synced to Claude settings when the statusline config is saved.

* feat: tighten hook lifecycle and upgrade skills widget

Notes:\n- Hook sync now follows saved-state semantics: installing statusline syncs hooks from saved ccstatusline settings on disk, and uninstall always removes all ccstatusline-managed hooks.\n- syncWidgetHooks always strips managed hooks first, including when statusline.command is missing, then persists cleanup.\n- Skills metrics storage path is now ~/.cache/ccstatusline/skills/skills-<sessionId>.jsonl.\n- Skills unique list ordering is now most-recent-first.\n- Skills widget updates: view toggle on (v), hide-when-empty toggle on (h), explicit empty outputs when not hidden, and new list-only (l)imit editor option where 0 means unlimited (default).\n- Added list-limit custom editor flow and list-only keybind visibility in ItemsEditor.\n- Maintained Node 14 compatibility by avoiding Array.prototype.at in skills metrics parsing.\n- Added/updated regression tests for hook sync/install/uninstall behavior, skills metrics path/order, Skills widget rendering/editing, and items-editor custom keybind handling.

* chore: bump version to 2.2.1 and update release notes

---------

Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
v2.2.1
2026-03-05 01:35:37 -05:00
Matthew Breedlove 53c8200c5a chore: sync available widgets list in README 2026-03-04 22:08:08 -05:00
olion500 7ca953400c feat: Add token speed widgets (InputSpeed, OutputSpeed, TotalSpeed) (#141)
CI / Lint & Type Check (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled
* Add token speed widgets (InputSpeed, OutputSpeed, TotalSpeed)

- Add SpeedMetrics type for tracking token throughput
- Implement speed calculation utilities in speed-metrics.ts
- Add InputSpeed, OutputSpeed, TotalSpeed widgets
- Extend jsonl.ts to extract timing data for speed calculation
- Inject speedMetrics into RenderContext for widget access
- Add unit tests for speed widgets

* Add widget-gated subagent speed aggregation with parallel reads

* Fix subagent speed parsing for session-directory transcript layout

* Consolidate speed windows into core speed widgets

* Bump to v2.2.0 and document new speed widgets

---------

Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
v2.2.0
2026-03-04 20:03:36 -05:00
Matthew Breedlove 591cb60459 ci: drop invalid cache input from setup-bun v2
Remove unsupported 'cache' input from oven-sh/setup-bun@v2 steps to eliminate GitHub Actions warnings about unexpected inputs.
2026-03-04 18:15:10 -05:00
Kanon c4d0f4b5ad refactor: improve main manu option (#170)
* chore: resolve eslint error

Signed-off-by: ysknsid25 <kengo071225@gmail.com>

* refactor: improve menu value handing

Signed-off-by: ysknsid25 <kengo071225@gmail.com>

* refactor: keep minimal typed main-menu options

Co-authored-by: Kanon <kengo071225@gmail.com>

* refactor: minimize typed menu diff against main

Co-authored-by: Kanon <kengo071225@gmail.com>

---------

Signed-off-by: ysknsid25 <kengo071225@gmail.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-04 18:10:39 -05:00
dependabot[bot] 97d7491c12 chore(deps-dev): bump vitest from 3.2.4 to 4.0.18 (#198)
* chore(deps-dev): bump vitest from 3.2.4 to 4.0.18

Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.2.4 to 4.0.18.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.18/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.0.18
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: type console spy in config test for vitest 4 lint

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-04 13:17:20 -05:00
dependabot[bot] 8049e28667 chore(deps-dev): bump the dev-dependencies group with 14 updates (#196)
* chore(deps-dev): bump the dev-dependencies group with 14 updates

Bumps the dev-dependencies group with 14 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.33.0` | `9.39.3` |
| [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin) | `5.2.3` | `5.9.0` |
| [chalk](https://github.com/chalk/chalk) | `5.5.0` | `5.6.2` |
| [eslint](https://github.com/eslint/eslint) | `9.33.0` | `9.39.3` |
| [eslint-plugin-import-newlines](https://github.com/SeinopSys/eslint-plugin-import-newlines) | `1.4.0` | `1.4.1` |
| [ink](https://github.com/vadimdemedes/ink) | `6.2.0` | `6.8.0` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.1.1` | `19.2.4` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.1.10` | `19.2.14` |
| [strip-ansi](https://github.com/chalk/strip-ansi) | `7.1.0` | `7.1.2` |
| [tinyglobby](https://github.com/SuperchupuDev/tinyglobby) | `0.2.14` | `0.2.15` |
| [typedoc](https://github.com/TypeStrong/TypeDoc) | `0.28.12` | `0.28.17` |
| [typescript](https://github.com/microsoft/TypeScript) | `5.9.2` | `5.9.3` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.39.1` | `8.56.1` |
| [zod](https://github.com/colinhacks/zod) | `4.0.17` | `4.3.6` |


Updates `@eslint/js` from 9.33.0 to 9.39.3
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v9.39.3/packages/js)

Updates `@stylistic/eslint-plugin` from 5.2.3 to 5.9.0
- [Release notes](https://github.com/eslint-stylistic/eslint-stylistic/releases)
- [Changelog](https://github.com/eslint-stylistic/eslint-stylistic/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-stylistic/eslint-stylistic/commits/v5.9.0/packages/eslint-plugin)

Updates `chalk` from 5.5.0 to 5.6.2
- [Release notes](https://github.com/chalk/chalk/releases)
- [Commits](https://github.com/chalk/chalk/compare/v5.5.0...v5.6.2)

Updates `eslint` from 9.33.0 to 9.39.3
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.33.0...v9.39.3)

Updates `eslint-plugin-import-newlines` from 1.4.0 to 1.4.1
- [Release notes](https://github.com/SeinopSys/eslint-plugin-import-newlines/releases)
- [Commits](https://github.com/SeinopSys/eslint-plugin-import-newlines/compare/v1.4.0...v1.4.1)

Updates `ink` from 6.2.0 to 6.8.0
- [Release notes](https://github.com/vadimdemedes/ink/releases)
- [Commits](https://github.com/vadimdemedes/ink/compare/v6.2.0...v6.8.0)

Updates `react` from 19.1.1 to 19.2.4
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.4/packages/react)

Updates `@types/react` from 19.1.10 to 19.2.14
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `strip-ansi` from 7.1.0 to 7.1.2
- [Release notes](https://github.com/chalk/strip-ansi/releases)
- [Commits](https://github.com/chalk/strip-ansi/compare/v7.1.0...v7.1.2)

Updates `tinyglobby` from 0.2.14 to 0.2.15
- [Release notes](https://github.com/SuperchupuDev/tinyglobby/releases)
- [Changelog](https://github.com/SuperchupuDev/tinyglobby/blob/main/CHANGELOG.md)
- [Commits](https://github.com/SuperchupuDev/tinyglobby/compare/0.2.14...0.2.15)

Updates `typedoc` from 0.28.12 to 0.28.17
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Changelog](https://github.com/TypeStrong/typedoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.28.12...v0.28.17)

Updates `typescript` from 5.9.2 to 5.9.3
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.9.2...v5.9.3)

Updates `typescript-eslint` from 8.39.1 to 8.56.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.1/packages/typescript-eslint)

Updates `zod` from 4.0.17 to 4.3.6
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Commits](https://github.com/colinhacks/zod/compare/v4.0.17...v4.3.6)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.39.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: "@stylistic/eslint-plugin"
  dependency-version: 5.9.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: chalk
  dependency-version: 5.6.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: eslint
  dependency-version: 9.39.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: eslint-plugin-import-newlines
  dependency-version: 1.4.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: ink
  dependency-version: 6.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: react
  dependency-version: 19.2.4
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: "@types/react"
  dependency-version: 19.2.14
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: strip-ansi
  dependency-version: 7.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: tinyglobby
  dependency-version: 0.2.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: typedoc
  dependency-version: 0.28.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: typescript
  dependency-version: 5.9.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: typescript-eslint
  dependency-version: 8.56.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: zod
  dependency-version: 4.3.6
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: pin ink 6.2.0 and fix lint formatting

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matthew Breedlove <sirmalloc@gmail.com>
2026-03-04 13:10:40 -05:00
dependabot[bot] a056183a67 chore(deps-dev): bump eslint-plugin-react-hooks from 5.2.0 to 7.0.1 (#199)
Bumps [eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks) from 5.2.0 to 7.0.1.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/HEAD/packages/eslint-plugin-react-hooks)

---
updated-dependencies:
- dependency-name: eslint-plugin-react-hooks
  dependency-version: 7.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 12:45:32 -05:00
dependabot[bot] fceab59ec6 chore(deps-dev): bump react-devtools-core from 6.1.5 to 7.0.1 (#197)
Bumps [react-devtools-core](https://github.com/facebook/react/tree/HEAD/packages/react-devtools-core) from 6.1.5 to 7.0.1.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/HEAD/packages/react-devtools-core)

---
updated-dependencies:
- dependency-name: react-devtools-core
  dependency-version: 7.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 12:44:28 -05:00
dependabot[bot] 19eb83fb24 chore(deps): bump actions/checkout from 4 to 6 (#195)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 12:37:23 -05:00