@juanibiapina/pi-powerbar 0.11.0 → 0.11.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 (55) hide show
  1. package/node_modules/@marckrenn/pi-sub-core/CHANGELOG.md +154 -0
  2. package/node_modules/@marckrenn/pi-sub-core/README.md +178 -0
  3. package/node_modules/@marckrenn/pi-sub-core/index.ts +540 -0
  4. package/node_modules/@marckrenn/pi-sub-core/package.json +35 -0
  5. package/node_modules/@marckrenn/pi-sub-core/src/cache.ts +489 -0
  6. package/node_modules/@marckrenn/pi-sub-core/src/config.ts +35 -0
  7. package/node_modules/@marckrenn/pi-sub-core/src/dependencies.ts +37 -0
  8. package/node_modules/@marckrenn/pi-sub-core/src/errors.ts +71 -0
  9. package/node_modules/@marckrenn/pi-sub-core/src/paths.ts +55 -0
  10. package/node_modules/@marckrenn/pi-sub-core/src/provider.ts +66 -0
  11. package/node_modules/@marckrenn/pi-sub-core/src/providers/detection.ts +51 -0
  12. package/node_modules/@marckrenn/pi-sub-core/src/providers/impl/anthropic.ts +174 -0
  13. package/node_modules/@marckrenn/pi-sub-core/src/providers/impl/antigravity.ts +226 -0
  14. package/node_modules/@marckrenn/pi-sub-core/src/providers/impl/codex.ts +186 -0
  15. package/node_modules/@marckrenn/pi-sub-core/src/providers/impl/copilot.ts +176 -0
  16. package/node_modules/@marckrenn/pi-sub-core/src/providers/impl/gemini.ts +130 -0
  17. package/node_modules/@marckrenn/pi-sub-core/src/providers/impl/kiro.ts +92 -0
  18. package/node_modules/@marckrenn/pi-sub-core/src/providers/impl/zai.ts +120 -0
  19. package/node_modules/@marckrenn/pi-sub-core/src/providers/index.ts +5 -0
  20. package/node_modules/@marckrenn/pi-sub-core/src/providers/metadata.ts +16 -0
  21. package/node_modules/@marckrenn/pi-sub-core/src/providers/registry.ts +54 -0
  22. package/node_modules/@marckrenn/pi-sub-core/src/providers/settings.ts +109 -0
  23. package/node_modules/@marckrenn/pi-sub-core/src/providers/status.ts +25 -0
  24. package/node_modules/@marckrenn/pi-sub-core/src/settings/behavior.ts +58 -0
  25. package/node_modules/@marckrenn/pi-sub-core/src/settings/menu.ts +83 -0
  26. package/node_modules/@marckrenn/pi-sub-core/src/settings/tools.ts +38 -0
  27. package/node_modules/@marckrenn/pi-sub-core/src/settings/ui.ts +450 -0
  28. package/node_modules/@marckrenn/pi-sub-core/src/settings-types.ts +95 -0
  29. package/node_modules/@marckrenn/pi-sub-core/src/settings-ui.ts +1 -0
  30. package/node_modules/@marckrenn/pi-sub-core/src/settings.ts +137 -0
  31. package/node_modules/@marckrenn/pi-sub-core/src/status.ts +245 -0
  32. package/node_modules/@marckrenn/pi-sub-core/src/storage/lock.ts +60 -0
  33. package/node_modules/@marckrenn/pi-sub-core/src/storage.ts +61 -0
  34. package/node_modules/@marckrenn/pi-sub-core/src/types.ts +33 -0
  35. package/node_modules/@marckrenn/pi-sub-core/src/ui/keybindings.ts +92 -0
  36. package/node_modules/@marckrenn/pi-sub-core/src/ui/settings-list.ts +290 -0
  37. package/node_modules/@marckrenn/pi-sub-core/src/usage/controller.ts +250 -0
  38. package/node_modules/@marckrenn/pi-sub-core/src/usage/fetch.ts +215 -0
  39. package/node_modules/@marckrenn/pi-sub-core/src/usage/types.ts +5 -0
  40. package/node_modules/@marckrenn/pi-sub-core/src/utils.ts +158 -0
  41. package/node_modules/@marckrenn/pi-sub-core/test/all.test.ts +8 -0
  42. package/node_modules/@marckrenn/pi-sub-core/test/cache.test.ts +96 -0
  43. package/node_modules/@marckrenn/pi-sub-core/test/controller.test.ts +101 -0
  44. package/node_modules/@marckrenn/pi-sub-core/test/detection.test.ts +24 -0
  45. package/node_modules/@marckrenn/pi-sub-core/test/helpers.ts +48 -0
  46. package/node_modules/@marckrenn/pi-sub-core/test/keybindings.test.ts +59 -0
  47. package/node_modules/@marckrenn/pi-sub-core/test/lock.test.ts +42 -0
  48. package/node_modules/@marckrenn/pi-sub-core/test/prioritize.test.ts +81 -0
  49. package/node_modules/@marckrenn/pi-sub-core/test/providers.test.ts +385 -0
  50. package/node_modules/@marckrenn/pi-sub-core/test/status.test.ts +70 -0
  51. package/node_modules/@marckrenn/pi-sub-core/tsconfig.json +5 -0
  52. package/node_modules/@marckrenn/pi-sub-shared/README.md +58 -0
  53. package/node_modules/@marckrenn/pi-sub-shared/index.ts +224 -0
  54. package/node_modules/@marckrenn/pi-sub-shared/package.json +23 -0
  55. package/package.json +4 -1
@@ -0,0 +1,154 @@
1
+ # @marckrenn/pi-sub-core
2
+
3
+ ## 1.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#56](https://github.com/marckrenn/pi-sub/pull/56) [`864cc1b`](https://github.com/marckrenn/pi-sub/commit/864cc1bbc91897d934c0545a29f508862231963c) - Prioritize usage windows that match the active model before emitting `sub-core:update-current`, so compact status clients show the correct quota windows (including Codex Spark and Antigravity model-specific windows).
8
+
9
+ Also make settings list navigation compatible with both old and new `@mariozechner/pi-tui` keybinding APIs, preventing crashes in submenus on older Pi runtimes where `getEditorKeybindings()` is unavailable.
10
+
11
+ Thanks [@dnouri](https://github.com/dnouri) for [#54](https://github.com/marckrenn/pi-sub/pull/54).
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [[`864cc1b`](https://github.com/marckrenn/pi-sub/commit/864cc1bbc91897d934c0545a29f508862231963c)]:
16
+ - @marckrenn/pi-sub-shared@1.5.0
17
+
18
+ ## 1.4.0
19
+
20
+ ### Minor Changes
21
+
22
+ - [#51](https://github.com/marckrenn/pi-sub/pull/51) [`477ee48`](https://github.com/marckrenn/pi-sub/commit/477ee480ae1a3841808f1e46b0541e11adcf0651) Thanks [@marckrenn](https://github.com/marckrenn)! - Align `sub-bar`, `sub-core`, and `sub-shared` to `1.4.0` in lockstep.
23
+
24
+ No functional changes in this bump; this release normalizes package versions after the previous publish.
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies [[`477ee48`](https://github.com/marckrenn/pi-sub/commit/477ee480ae1a3841808f1e46b0541e11adcf0651)]:
29
+ - @marckrenn/pi-sub-shared@1.4.0
30
+
31
+ ## 1.3.1
32
+
33
+ ### Patch Changes
34
+
35
+ - Updated dependencies []:
36
+ - @marckrenn/pi-sub-shared@1.3.1
37
+
38
+ ## 1.3.0
39
+
40
+ ### Minor Changes
41
+
42
+ - [#42](https://github.com/marckrenn/pi-sub/pull/42) [`8bf29f3`](https://github.com/marckrenn/pi-sub/commit/8bf29f34c8f9418284cf30631a3325799c3e0f48) Thanks [@marckrenn](https://github.com/marckrenn)! - - Added an optional `showContextBar` setting (default: off), as introduced in [#10](https://github.com/marckrenn/pi-sub/pull/10) by [@pasky](https://github.com/pasky), to render the current context usage as an optional leftmost `Ctx` bar in sub-bar usage output.
43
+ - Support for Codex Spark usage (auto-selected for `gpt-5.3-codex-spark`), including model-specific window labeling behavior.
44
+ - OpenAI Status provider now surfaces the Codex-specific status endpoint instead of the generic status summary when available.
45
+ - [`80b49b1`](https://github.com/marckrenn/pi-sub/commit/80b49b16c20c942135764bcf6c4cd0516e868ce2) Fixed API key auth format handling for the z.ai provider.
46
+
47
+ ### Patch Changes
48
+
49
+ - Updated dependencies [[`8bf29f3`](https://github.com/marckrenn/pi-sub/commit/8bf29f34c8f9418284cf30631a3325799c3e0f48)]:
50
+ - @marckrenn/pi-sub-shared@1.3.0
51
+
52
+ ## 1.2.0
53
+
54
+ ### Patch Changes
55
+
56
+ - Fixed tool registration execute signature order for compatibility with the latest Pi tool API.
57
+
58
+ ### Updated dependencies:
59
+
60
+ - @marckrenn/pi-sub-shared@1.2.0
61
+
62
+ ## 1.1.0
63
+
64
+ ### Patch Changes
65
+
66
+ - [`7ce2a92`](https://github.com/marckrenn/pi-sub/commit/7ce2a92b15e766fd85a4b7eb85d6fc5c5aa32dca) Thanks [@marckrenn](https://github.com/marckrenn)! - Support providing credentials via environment variables for the usage providers (Anthropic, Copilot, Gemini, Antigravity, Codex, z.ai).
67
+
68
+ - Updated dependencies []:
69
+ - @marckrenn/pi-sub-shared@1.1.0
70
+
71
+ ## 1.0.6
72
+
73
+ ### Patch Changes
74
+
75
+ - Watch `~/.pi/agent/pi-sub-core-settings.json` for changes and hot-reload settings (with `fs.watch` + polling fallback).
76
+
77
+ - Updated dependencies []:
78
+ - @marckrenn/pi-sub-shared@1.0.6
79
+
80
+ ## 1.0.5
81
+
82
+ ### Patch Changes
83
+
84
+ - [#35](https://github.com/marckrenn/pi-sub/pull/35) [`59e2b45`](https://github.com/marckrenn/pi-sub/commit/59e2b456e0e5c41479dccedcef93f9175cc4aa55) Thanks [@marckrenn](https://github.com/marckrenn)! - Improve startup responsiveness by deferring refreshes and watchers, skipping headless UI work, and unref-ing long-lived timers so pi CLI commands exit cleanly.
85
+
86
+ - Updated dependencies [[`59e2b45`](https://github.com/marckrenn/pi-sub/commit/59e2b456e0e5c41479dccedcef93f9175cc4aa55)]:
87
+ - @marckrenn/pi-sub-shared@1.0.5
88
+
89
+ ## 1.0.4
90
+
91
+ ### Patch Changes
92
+
93
+ - [#30](https://github.com/marckrenn/pi-sub/pull/30) [`af0828a`](https://github.com/marckrenn/pi-sub/commit/af0828a8d2e529497a1acff95e388a0a3eabb90e) Thanks [@marckrenn](https://github.com/marckrenn)! - Store the shared cache and lock files in the agent directory so all sub-core instances share a single cache.
94
+
95
+ - [#22](https://github.com/marckrenn/pi-sub/pull/22) [`3e5a026`](https://github.com/marckrenn/pi-sub/commit/3e5a026ea3dc113561ff32466a8aa03b91c6d876) Thanks [@marckrenn](https://github.com/marckrenn)! - Store sub-core and sub-bar settings in agent-level JSON files so updates no longer overwrite user configuration. Legacy extension `settings.json` files are migrated into the new files and removed after a successful migration.
96
+
97
+ Manual migration (if you want to do it yourself before updating):
98
+
99
+ ```
100
+ cp ~/.pi/agent/extensions/sub-core/settings.json ~/.pi/agent/pi-sub-core-settings.json
101
+ cp ~/.pi/agent/extensions/sub-bar/settings.json ~/.pi/agent/pi-sub-bar-settings.json
102
+ ```
103
+
104
+ Existing users should move legacy settings from the extension folders to:
105
+ - `~/.pi/agent/pi-sub-core-settings.json`
106
+ - `~/.pi/agent/pi-sub-bar-settings.json`
107
+
108
+ - [`a6c0d33`](https://github.com/marckrenn/pi-sub/commit/a6c0d33c8d19d2876a4a8a1a0a69302a3c63f5e8) Thanks [@marckrenn](https://github.com/marckrenn)! - Move the shared cache/lock files under `~/.pi/agent/cache/sub-core` so all clients share a single cache directory.
109
+
110
+ - [`7da1e08`](https://github.com/marckrenn/pi-sub/commit/7da1e082e634f4e4dee2560b4d490527d1543ade) Thanks [@marckrenn](https://github.com/marckrenn)! - Add a minimum refresh interval setting to cap refresh frequency even when refresh is triggered every turn.
111
+
112
+ - [`1f5e451`](https://github.com/marckrenn/pi-sub/commit/1f5e45173b9868b0d6645ae35a084142a0ac56a5) Thanks [@marckrenn](https://github.com/marckrenn)! - Gate tool registration behind `tools.usageTool` and `tools.allUsageTool` (default off) in sub-core settings.
113
+
114
+ - [`35eb185`](https://github.com/marckrenn/pi-sub/commit/35eb18590f369db4cda931b8e11099d0f3ddb4ec) Thanks [@marckrenn](https://github.com/marckrenn)! - Add usage tool aliases `get_current_usage` and `get_all_usage`.
115
+
116
+ - Updated dependencies [[`7da1e08`](https://github.com/marckrenn/pi-sub/commit/7da1e082e634f4e4dee2560b4d490527d1543ade)]:
117
+ - @marckrenn/pi-sub-shared@1.0.4
118
+
119
+ ## 1.0.3
120
+
121
+ ### Patch Changes
122
+
123
+ - [`6fa2736`](https://github.com/marckrenn/pi-sub/commit/6fa27363573f34c38a372a6d7b8b74e756716724) Thanks [@marckrenn](https://github.com/marckrenn)! - Update extension tool execute signature order for compatibility with latest Pi API.
124
+
125
+ - Updated dependencies [[`6fa2736`](https://github.com/marckrenn/pi-sub/commit/6fa27363573f34c38a372a6d7b8b74e756716724)]:
126
+ - @marckrenn/pi-sub-shared@1.0.3
127
+
128
+ ## 1.0.2
129
+
130
+ ### Patch Changes
131
+
132
+ - [#3](https://github.com/marckrenn/pi-sub/pull/3) [`4ceb5ad`](https://github.com/marckrenn/pi-sub/commit/4ceb5ad133166237652d197ba9296ad1589a813c) Thanks [@marckrenn](https://github.com/marckrenn)! - Bundle sub-core with sub-bar, refresh Antigravity quotas + settings, and update UI copy/controls.
133
+
134
+ - Updated dependencies [[`4ceb5ad`](https://github.com/marckrenn/pi-sub/commit/4ceb5ad133166237652d197ba9296ad1589a813c)]:
135
+ - @marckrenn/pi-sub-shared@1.0.2
136
+
137
+ ## 1.0.1
138
+
139
+ ### Patch Changes
140
+
141
+ - Align repo version with npm publish.
142
+ - Updated dependencies:
143
+ - @marckrenn/pi-sub-shared@1.0.1
144
+
145
+ ## 1.0.0
146
+
147
+ ### Major Changes
148
+
149
+ - [`9bedd80`](https://github.com/marckrenn/pi-sub/commit/9bedd80b0037b723e70f0376019fff59a617e7cb) Thanks [@marckrenn](https://github.com/marckrenn)! - Initial 1.0.0 release.
150
+
151
+ ### Patch Changes
152
+
153
+ - Updated dependencies [[`9bedd80`](https://github.com/marckrenn/pi-sub/commit/9bedd80b0037b723e70f0376019fff59a617e7cb)]:
154
+ - @marckrenn/pi-sub-shared@1.0.0
@@ -0,0 +1,178 @@
1
+ # sub-core
2
+
3
+ Shared usage data core for pi extensions. Sub-core owns fetching, caching, provider selection, and emits usage updates via `pi.events` for the wider `sub-*` ecosystem (UI and non-UI clients).
4
+
5
+ ## Overview
6
+
7
+ - Fetches usage + status data from providers
8
+ - Deduplicates requests via shared cache/lock
9
+ - Emits updates for display-focused extensions (e.g. `sub-bar`) and non-UI tooling extensions
10
+ - Supports Antigravity usage via auth.json (`google-antigravity`)
11
+
12
+ ## Installation
13
+
14
+ Install via the pi package manager (recommended):
15
+
16
+ ```bash
17
+ pi install npm:@marckrenn/pi-sub-core
18
+ ```
19
+
20
+ Use `-l` to install into project settings instead of global:
21
+
22
+ ```bash
23
+ pi install -l npm:@marckrenn/pi-sub-core
24
+ ```
25
+
26
+ For a UI, also install a display extension like `sub-bar` from the same repo (see the root README for the full setup).
27
+
28
+ Manual install (local development):
29
+
30
+ ```bash
31
+ git clone https://github.com/marckrenn/pi-sub.git
32
+ ln -s /path/to/pi-sub/packages/sub-core ~/.pi/agent/extensions/sub-core
33
+ ```
34
+
35
+ Alternative (no symlink): add it to `~/.pi/agent/settings.json`:
36
+
37
+ ```json
38
+ {
39
+ "extensions": ["/path/to/pi-sub/packages/sub-core/index.ts"]
40
+ }
41
+ ```
42
+
43
+ ## Tool Access
44
+
45
+ Tool registration is gated by `tools` in `~/.pi/agent/pi-sub-core-settings.json`.
46
+ By default, both tools are **off**. To enable them, set:
47
+
48
+ ```json
49
+ {
50
+ "tools": {
51
+ "usageTool": true,
52
+ "allUsageTool": true
53
+ }
54
+ }
55
+ ```
56
+
57
+ Then run `/reload` (tool registration only happens on load). You can also toggle these in `/sub-core:settings` → Tool Settings.
58
+
59
+ When enabled, `sub-core` registers tools to expose usage snapshots to Pi:
60
+
61
+ - `sub_get_usage` / `get_current_usage` – refreshes usage (forced by default) and returns `{ provider, usage }`.
62
+ - `sub_get_all_usage` / `get_all_usage` – refreshes and returns all enabled provider entries (auto-enabled providers require credentials).
63
+
64
+ ## Settings
65
+
66
+ Use `sub-core:settings` to configure shared provider settings plus **Usage Refresh Settings** and **Status Refresh Settings**. Provider enablement supports `auto` (default), `on`, and `off` — `auto` enables a provider only when credentials are detected.
67
+
68
+ Usage refresh controls cache/usage updates, while status refresh controls incident polling (you can keep status on a slower interval). The Minimum Refresh Interval caps how often refresh triggers can fetch new data even if you refresh every turn.
69
+
70
+ Antigravity usage requires an OAuth token in `~/.pi/agent/auth.json` under the `google-antigravity` key.
71
+
72
+ Anthropic extra usage formatting is controlled in Provider Settings (currency symbol + decimal separator).
73
+
74
+ Settings are stored in `~/.pi/agent/pi-sub-core-settings.json` (migrated from the legacy extension `settings.json` when present; the legacy file is removed after a successful migration).
75
+
76
+ **Settings migrations:** settings are merged with defaults on load, but renames/removals are not migrated automatically. When adding new settings or changing schema, update the defaults/merge logic and provide a migration (or instruct users to reset `pi-sub-core-settings.json`).
77
+
78
+ ## Cache
79
+
80
+ Sub-core stores a shared cache and lock file:
81
+
82
+ - `~/.pi/agent/cache/sub-core/cache.json`
83
+ - `~/.pi/agent/cache/sub-core/cache.lock`
84
+
85
+ Legacy cache files next to the extension entry or in the agent root are migrated to the cache directory and removed on first run.
86
+
87
+ ## Security notes
88
+
89
+ - Keep `~/.pi/agent/auth.json` readable only by your user (e.g. `chmod 600 ~/.pi/agent/auth.json`).
90
+ - Avoid logging token-bearing headers or auth config when troubleshooting provider calls.
91
+
92
+ ## Provider comparison
93
+
94
+ | Provider | Usage Data | Status Page | Notes |
95
+ |----------|-----------|-------------|-------|
96
+ | Anthropic (Claude) | 5h/Week windows, extra usage | ✅ | Extra usage on/off state |
97
+ | GitHub Copilot | Monthly quota, requests | ✅ | Request multiplier support |
98
+ | Google Gemini | Pro/Flash quotas | ✅ | Aggregated by model family |
99
+ | Antigravity | Model quotas | ✅ | Sandbox Cloud Code Assist quotas (tested) |
100
+ | OpenAI Codex | Primary/secondary windows | ✅ | Credits not yet supported (PRs welcome!) |
101
+ | AWS Kiro | Credits | - | Credits not yet supported (PRs welcome!) |
102
+ | z.ai | Tokens/monthly limits | - | API quota limits |
103
+
104
+ ## Development
105
+
106
+ ### Packaging notes (pi install compatibility)
107
+
108
+ Pi packages use a `pi` field in `package.json` plus the `pi-package` keyword for discoverability. This repo already declares `pi.extensions`, so you can install via:
109
+
110
+ ```bash
111
+ pi install npm:@marckrenn/pi-sub-core
112
+ ```
113
+
114
+ Manual paths/symlinks still work for local development as documented above.
115
+
116
+ ### Tested providers
117
+
118
+ Tested so far: Anthropic (Claude), OpenAI Codex, GitHub Copilot. Other providers are implemented but not yet verified in production.
119
+
120
+ ### Adding a Provider
121
+
122
+ You need to update both **sub-core** (fetch layer) and **sub-bar** (display layer).
123
+
124
+ ### Feature placement (core vs UI)
125
+
126
+ - **sub-core**: fetching, caching, provider detection/selection, status polling, tools/events, and shared settings.
127
+ - **sub-bar**: formatting, widget layout, UI-only toggles, and display-specific behavior.
128
+ - **sub-shared**: shared types/constants for anything referenced by both layers.
129
+
130
+ See the root README “Developer guide” for the decision checklist and examples.
131
+
132
+ #### sub-core (fetch + status)
133
+ 1. Add provider name to `src/types.ts` (`PROVIDERS`, `ProviderName`).
134
+ 2. Implement fetcher in `src/providers/impl/<provider>.ts`.
135
+ 3. Register provider in `src/providers/registry.ts`.
136
+ 4. Add detection + status config in `src/providers/metadata.ts`.
137
+ 5. Add provider settings defaults in `src/settings-types.ts`.
138
+
139
+ #### sub-bar (display + UI)
140
+ 1. Add provider name to `src/types.ts`.
141
+ 2. Add display rules + labels in `src/providers/metadata.ts`.
142
+ 3. Add window visibility in `src/providers/windows.ts`.
143
+ 4. Add extras in `src/providers/extras.ts` (if needed).
144
+ 5. Add settings UI + defaults in `src/providers/settings.ts` and `src/settings-types.ts`.
145
+
146
+ ### Events (public contract)
147
+
148
+ Sub-core uses `pi.events` as an in-process pub/sub bus. Any `sub-*` extension can subscribe to updates (UI or headless). Sub-core is the source of truth for provider selection and refresh behavior; clients observe state and optionally request changes.
149
+
150
+ #### Broadcasts
151
+ - `sub-core:ready` → `{ state, settings }` (first load)
152
+ - `sub-core:update-current` → `{ state }` (cache hit or fresh fetch)
153
+ - `sub-core:update-all` → `{ state }` (cached entries + current provider)
154
+ - `sub-core:settings:updated` → `{ settings }`
155
+
156
+ `update-current` state is `{ provider, usage }`.
157
+ `update-all` state is `{ provider, entries }`, where entries are cached provider snapshots.
158
+
159
+ #### Requests (pull current state)
160
+ - `sub-core:request` → `{ reply, includeSettings? }`
161
+ - `sub-core:request` → `{ type: "entries", reply, force? }` (bulk usage entries)
162
+
163
+ The `reply` callback receives `{ state }` or `{ entries }` immediately if available.
164
+
165
+ #### Actions (mutate core state)
166
+ - `sub-core:settings:patch` → `{ patch }` (updates refresh interval/provider settings and persists)
167
+ - `sub-core:action` → `{ type: "refresh" | "cycleProvider", force? }`
168
+
169
+ After an action, sub-core emits `sub-core:update-current` with the new state.
170
+
171
+ ## Credits
172
+
173
+ - Hannes Januschka ([barts](https://github.com/hjanuschka/shitty-extensions?tab=readme-ov-file#usage-barts), [@hjanuschka](https://x.com/hjanuschka))
174
+ - Peter Steinberger ([CodexBar](https://github.com/steipete/CodexBar), [@steipete](https://x.com/steipete))
175
+
176
+ ## Status
177
+
178
+ Active. Used by `sub-bar` for display.