@towles/tool 0.0.109 → 0.0.110

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 (190) hide show
  1. package/package.json +9 -4
  2. package/{plugins/tt-agentboard → packages/agentboard}/README.md +1 -1
  3. package/{plugins/tt-agentboard → packages/agentboard}/apps/server/package.json +2 -1
  4. package/{plugins/tt-agentboard → packages/agentboard}/apps/server/src/main.ts +6 -20
  5. package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/package.json +4 -0
  6. package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/src/components/DetailPanel.tsx +3 -2
  7. package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/src/components/StatusBar.tsx +35 -0
  8. package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/src/constants.ts +1 -0
  9. package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/src/index.tsx +204 -225
  10. package/packages/agentboard/apps/tui/src/session-status.test.ts +70 -0
  11. package/packages/agentboard/apps/tui/src/session-status.ts +19 -0
  12. package/{plugins/tt-agentboard → packages/agentboard}/package.json +2 -6
  13. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/package.json +3 -0
  14. package/{plugins/tt-agentboard/packages/runtime/test → packages/agentboard/packages/runtime/src/agents}/tracker.test.ts +2 -2
  15. package/packages/agentboard/packages/runtime/src/agents/watchers/claude-code.test.ts +63 -0
  16. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/agents/watchers/claude-code.ts +26 -2
  17. package/packages/agentboard/packages/runtime/src/config.test.ts +107 -0
  18. package/packages/agentboard/packages/runtime/src/config.ts +80 -0
  19. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/index.ts +1 -1
  20. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/plugins/loader.ts +1 -33
  21. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/git-info.ts +3 -2
  22. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/index.ts +23 -37
  23. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/launcher.ts +6 -18
  24. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/pane-scanner.ts +6 -0
  25. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/shared.ts +2 -0
  26. package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/tsconfig.json +1 -1
  27. package/packages/shared/package.json +15 -0
  28. package/packages/shared/src/git/exec.ts +41 -0
  29. package/{src/utils → packages/shared/src}/git/gh-cli-wrapper.ts +13 -18
  30. package/packages/shared/src/index.ts +8 -0
  31. package/packages/shared/tsconfig.json +16 -0
  32. package/src/cli.ts +1 -1
  33. package/src/commands/agentboard.ts +42 -59
  34. package/src/{lib → commands}/auto-claude/claude-cli.ts +1 -1
  35. package/src/commands/auto-claude/config-init-helpers.ts +79 -0
  36. package/src/commands/auto-claude/config-init.test.ts +137 -0
  37. package/src/commands/auto-claude/config-init.ts +159 -0
  38. package/src/{lib → commands}/auto-claude/config.ts +4 -8
  39. package/src/{lib → commands}/auto-claude/e2e.test.ts +6 -6
  40. package/src/commands/auto-claude/explain.test.ts +58 -0
  41. package/src/commands/auto-claude/explain.ts +97 -0
  42. package/src/commands/auto-claude/index.ts +37 -14
  43. package/src/{lib → commands}/auto-claude/labels.ts +1 -1
  44. package/src/commands/auto-claude/list.ts +5 -4
  45. package/src/{lib → commands}/auto-claude/pipeline-execution.test.ts +1 -1
  46. package/src/{lib → commands}/auto-claude/pipeline.ts +1 -3
  47. package/src/commands/auto-claude/retry.test.ts +2 -2
  48. package/src/commands/auto-claude/retry.ts +5 -5
  49. package/src/commands/auto-claude/shell.ts +3 -0
  50. package/src/commands/auto-claude/status.test.ts +2 -2
  51. package/src/commands/auto-claude/status.ts +4 -4
  52. package/src/{lib → commands}/auto-claude/steps/create-pr.ts +1 -3
  53. package/src/{lib → commands}/auto-claude/steps/fetch-issues.ts +1 -1
  54. package/src/{lib → commands}/auto-claude/steps/implement.ts +1 -2
  55. package/src/{lib → commands}/auto-claude/utils-execution.test.ts +6 -6
  56. package/src/{lib → commands}/auto-claude/utils.ts +10 -4
  57. package/src/{lib/install → commands}/claude-settings.ts +1 -1
  58. package/src/commands/config/config.test.ts +129 -0
  59. package/src/commands/config/index.ts +11 -0
  60. package/src/commands/config/reset.ts +53 -0
  61. package/src/commands/config/schema.ts +19 -0
  62. package/src/commands/{config.ts → config/show.ts} +2 -2
  63. package/src/commands/config/validate.ts +51 -0
  64. package/src/commands/doctor/checks.ts +167 -0
  65. package/src/commands/doctor/format.test.ts +63 -0
  66. package/src/commands/doctor/format.ts +5 -0
  67. package/src/commands/doctor/history.test.ts +161 -0
  68. package/src/commands/doctor/history.ts +130 -0
  69. package/src/commands/doctor.ts +80 -151
  70. package/src/commands/gh/branch-clean.ts +4 -4
  71. package/src/commands/gh/branch.test.ts +4 -5
  72. package/src/commands/gh/branch.ts +10 -5
  73. package/src/commands/gh/pr.ts +6 -7
  74. package/src/{lib → commands}/graph/analyzer.test.ts +4 -4
  75. package/src/commands/graph/format.test.ts +130 -0
  76. package/src/commands/graph/format.ts +94 -0
  77. package/src/commands/graph/index.ts +69 -41
  78. package/src/{lib → commands}/graph/labels.ts +4 -4
  79. package/src/{lib → commands}/graph/server.ts +2 -2
  80. package/src/{lib → commands}/graph/types.ts +2 -0
  81. package/src/commands/graph.test.ts +1 -1
  82. package/src/commands/install.ts +6 -6
  83. package/src/commands/journal/daily-notes.ts +4 -7
  84. package/src/{lib → commands}/journal/fs.ts +1 -1
  85. package/src/commands/journal/index.ts +2 -0
  86. package/src/commands/journal/list.test.ts +174 -0
  87. package/src/commands/journal/list.ts +213 -0
  88. package/src/commands/journal/meeting.ts +4 -7
  89. package/src/commands/journal/note.ts +4 -7
  90. package/src/{lib → commands}/journal/paths.ts +1 -1
  91. package/src/commands/journal/search.test.ts +156 -0
  92. package/src/commands/journal/search.ts +256 -0
  93. package/src/{lib → commands}/journal/templates.ts +1 -1
  94. package/src/config/settings.ts +35 -26
  95. package/plugins/tt-agentboard/bun.lock +0 -444
  96. package/plugins/tt-agentboard/packages/runtime/src/config.ts +0 -70
  97. package/plugins/tt-agentboard/packages/runtime/test/config.test.ts +0 -83
  98. package/plugins/tt-auto-claude/.claude-plugin/plugin.json +0 -8
  99. package/plugins/tt-auto-claude/commands/create-issue.md +0 -20
  100. package/plugins/tt-auto-claude/commands/list.md +0 -21
  101. package/plugins/tt-auto-claude/skills/auto-claude/SKILL.md +0 -71
  102. package/plugins/tt-core/promptfooconfig.interview-me.yaml +0 -155
  103. package/plugins/tt-core/promptfooconfig.refine-text.yaml +0 -242
  104. package/plugins/tt-core/promptfooconfig.tdd.yaml +0 -144
  105. package/plugins/tt-core/promptfooconfig.write-prd.yaml +0 -145
  106. package/src/commands/config.test.ts +0 -9
  107. package/src/lib/auto-claude/index.ts +0 -15
  108. package/src/lib/auto-claude/shell.ts +0 -6
  109. package/src/lib/graph/index.ts +0 -24
  110. package/src/lib/journal/index.ts +0 -11
  111. package/src/utils/git/exec.ts +0 -18
  112. /package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/build.ts +0 -0
  113. /package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/bunfig.toml +0 -0
  114. /package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/scripts/sessionizer.sh +0 -0
  115. /package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/src/components/DiffStats.tsx +0 -0
  116. /package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/src/components/SessionCard.tsx +0 -0
  117. /package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/src/detail-panel-height.ts +0 -0
  118. /package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/src/mux-context.ts +0 -0
  119. /package/{plugins/tt-agentboard → packages/agentboard}/apps/tui/tsconfig.json +0 -0
  120. /package/{plugins/tt-agentboard → packages/agentboard}/packages/mux-tmux/package.json +0 -0
  121. /package/{plugins/tt-agentboard → packages/agentboard}/packages/mux-tmux/src/client.ts +0 -0
  122. /package/{plugins/tt-agentboard → packages/agentboard}/packages/mux-tmux/src/index.ts +0 -0
  123. /package/{plugins/tt-agentboard → packages/agentboard}/packages/mux-tmux/src/provider.ts +0 -0
  124. /package/{plugins/tt-agentboard → packages/agentboard}/packages/mux-tmux/tsconfig.json +0 -0
  125. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/agents/tracker.ts +0 -0
  126. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/agents/watchers/amp.ts +0 -0
  127. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/agents/watchers/codex.ts +0 -0
  128. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/agents/watchers/opencode.ts +0 -0
  129. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/contracts/agent-watcher.ts +0 -0
  130. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/contracts/agent.ts +0 -0
  131. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/contracts/index.ts +0 -0
  132. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/contracts/mux.ts +0 -0
  133. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/debug.ts +0 -0
  134. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/mux/detect.ts +0 -0
  135. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/mux/registry.ts +0 -0
  136. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/context.ts +0 -0
  137. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/metadata-store.ts +0 -0
  138. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/port-scanner.ts +0 -0
  139. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/session-order.ts +0 -0
  140. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/sidebar-manager.ts +0 -0
  141. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/server/sidebar-width-sync.ts +0 -0
  142. /package/{plugins/tt-agentboard → packages/agentboard}/packages/runtime/src/themes.ts +0 -0
  143. /package/{plugins/tt-agentboard → packages/agentboard}/tsconfig.json +0 -0
  144. /package/{plugins/tt-core → packages/core}/.claude-plugin/plugin.json +0 -0
  145. /package/{plugins/tt-core → packages/core}/README.md +0 -0
  146. /package/{plugins/tt-core → packages/core}/commands/improve-architecture.md +0 -0
  147. /package/{plugins/tt-core → packages/core}/commands/interview-me.md +0 -0
  148. /package/{plugins/tt-core → packages/core}/commands/prd-to-issues.md +0 -0
  149. /package/{plugins/tt-core → packages/core}/commands/refine-text.md +0 -0
  150. /package/{plugins/tt-core → packages/core}/commands/task.md +0 -0
  151. /package/{plugins/tt-core → packages/core}/commands/tdd.md +0 -0
  152. /package/{plugins/tt-core → packages/core}/commands/write-prd.md +0 -0
  153. /package/{plugins/tt-core → packages/core}/skills/towles-tool/SKILL.md +0 -0
  154. /package/{src/utils → packages/shared/src}/date-utils.test.ts +0 -0
  155. /package/{src/utils → packages/shared/src}/date-utils.ts +0 -0
  156. /package/{src/utils → packages/shared/src}/fs.ts +0 -0
  157. /package/{src/utils → packages/shared/src}/git/branch-name.test.ts +0 -0
  158. /package/{src/utils → packages/shared/src}/git/branch-name.ts +0 -0
  159. /package/{src/utils → packages/shared/src}/git/gh-cli-wrapper.test.ts +0 -0
  160. /package/{src/utils → packages/shared/src}/render.test.ts +0 -0
  161. /package/{src/utils → packages/shared/src}/render.ts +0 -0
  162. /package/src/{lib → commands}/auto-claude/config.test.ts +0 -0
  163. /package/src/{lib → commands}/auto-claude/labels.test.ts +0 -0
  164. /package/src/{lib → commands}/auto-claude/pipeline.test.ts +0 -0
  165. /package/src/{lib → commands}/auto-claude/prompt-templates/01_plan.prompt.md +0 -0
  166. /package/src/{lib → commands}/auto-claude/prompt-templates/02_implement.prompt.md +0 -0
  167. /package/src/{lib → commands}/auto-claude/prompt-templates/03_simplify.prompt.md +0 -0
  168. /package/src/{lib → commands}/auto-claude/prompt-templates/04_review.prompt.md +0 -0
  169. /package/src/{lib → commands}/auto-claude/prompt-templates/CLAUDE.md +0 -0
  170. /package/src/{lib → commands}/auto-claude/prompt-templates/index.test.ts +0 -0
  171. /package/src/{lib → commands}/auto-claude/prompt-templates/index.ts +0 -0
  172. /package/src/{lib → commands}/auto-claude/run-claude.test.ts +0 -0
  173. /package/src/{lib → commands}/auto-claude/spawn-claude.ts +0 -0
  174. /package/src/{lib → commands}/auto-claude/steps/simple-steps.ts +0 -0
  175. /package/src/{lib → commands}/auto-claude/steps/steps.test.ts +0 -0
  176. /package/src/{lib → commands}/auto-claude/stream-parser.test.ts +0 -0
  177. /package/src/{lib → commands}/auto-claude/stream-parser.ts +0 -0
  178. /package/src/{lib → commands}/auto-claude/templates.test.ts +0 -0
  179. /package/src/{lib → commands}/auto-claude/templates.ts +0 -0
  180. /package/src/{lib → commands}/auto-claude/test-helpers.ts +0 -0
  181. /package/src/{lib → commands}/auto-claude/utils.test.ts +0 -0
  182. /package/src/{lib → commands}/graph/analyzer.ts +0 -0
  183. /package/src/{lib → commands}/graph/graph-template.html +0 -0
  184. /package/src/{lib → commands}/graph/parser.test.ts +0 -0
  185. /package/src/{lib → commands}/graph/parser.ts +0 -0
  186. /package/src/{lib → commands}/graph/render.ts +0 -0
  187. /package/src/{lib → commands}/graph/sessions.ts +0 -0
  188. /package/src/{lib → commands}/graph/tools.ts +0 -0
  189. /package/src/{lib → commands}/graph/treemap.ts +0 -0
  190. /package/src/{lib → commands}/journal/editor.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@towles/tool",
3
- "version": "0.0.109",
3
+ "version": "0.0.110",
4
4
  "description": "One off quality of life scripts that I use on a daily basis.",
5
5
  "homepage": "https://github.com/ChrisTowles/towles-tool#readme",
6
6
  "bugs": {
@@ -19,10 +19,15 @@
19
19
  "towles-tool": "./bin/run.ts",
20
20
  "tt": "./bin/run.ts"
21
21
  },
22
+ "workspaces": [
23
+ "packages/*",
24
+ "packages/agentboard/apps/*",
25
+ "packages/agentboard/packages/*"
26
+ ],
22
27
  "files": [
23
28
  "bin",
29
+ "packages",
24
30
  "patches",
25
- "plugins",
26
31
  "src"
27
32
  ],
28
33
  "type": "module",
@@ -47,6 +52,7 @@
47
52
  "dependencies": {
48
53
  "@anthropic-ai/claude-code": "^2.1.4",
49
54
  "@anthropic-ai/sdk": "^0.56.0",
55
+ "@towles/shared": "workspace:*",
50
56
  "citty": "^0.1.6",
51
57
  "consola": "^3.4.2",
52
58
  "d3-hierarchy": "^3.1.2",
@@ -55,11 +61,10 @@
55
61
  "neverthrow": "^8.2.0",
56
62
  "picocolors": "^1.1.1",
57
63
  "prompts": "^2.4.2",
58
- "strip-ansi": "^7.1.0",
59
- "tinyexec": "^0.3.2",
60
64
  "zod": "^4.0.5"
61
65
  },
62
66
  "devDependencies": {
67
+ "@types/bun": "latest",
63
68
  "@types/d3-hierarchy": "^3.1.7",
64
69
  "@types/luxon": "^3.6.2",
65
70
  "@types/node": "^22.16.3",
@@ -40,7 +40,7 @@ tt agentboard setup
40
40
  | `x` | Kill session (with confirm) |
41
41
  | `r` | Refresh |
42
42
  | `u` | Show all sessions |
43
- | `n` / `c` | New session (fzf picker) |
43
+ | `n` | New session (fzf picker) |
44
44
  | `?` | Help overlay |
45
45
  | `q` | Quit |
46
46
 
@@ -11,7 +11,8 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@tt-agentboard/mux-tmux": "workspace:*",
14
- "@tt-agentboard/runtime": "workspace:*"
14
+ "@tt-agentboard/runtime": "workspace:*",
15
+ "consola": "^3.4.2"
15
16
  },
16
17
  "devDependencies": {
17
18
  "@types/bun": "latest",
@@ -8,7 +8,7 @@ import {
8
8
  startServer,
9
9
  } from "@tt-agentboard/runtime";
10
10
  import { TmuxProvider } from "@tt-agentboard/mux-tmux";
11
- import { join } from "node:path";
11
+ import consola from "consola";
12
12
 
13
13
  const config = loadConfig();
14
14
  const loader = new PluginLoader();
@@ -18,30 +18,16 @@ try {
18
18
  const provider = new TmuxProvider();
19
19
  loader.registerMux(provider);
20
20
  } catch (err) {
21
- console.error("Failed to initialize tmux provider:", err);
22
- }
23
-
24
- const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
25
- const pluginDir = join(home, ".config", "towles-tool", "agentboard", "plugins");
26
- const localPlugins = loader.loadDir(pluginDir);
27
- if (localPlugins.length > 0) {
28
- console.log(`Loaded local plugins: ${localPlugins.join(", ")}`);
29
- }
30
-
31
- if (config.plugins.length > 0) {
32
- const npmPlugins = loader.loadPackages(config.plugins);
33
- if (npmPlugins.length > 0) {
34
- console.log(`Loaded npm plugins: ${npmPlugins.join(", ")}`);
35
- }
21
+ consola.error("Failed to initialize tmux provider:", err);
36
22
  }
37
23
 
38
24
  const mux = loader.resolve(config.mux);
39
25
  if (!mux) {
40
- console.error(
26
+ consola.error(
41
27
  "No terminal multiplexer detected.\n" +
42
28
  `Registered providers: ${loader.registry.list().join(", ") || "(none)"}\n` +
43
29
  "$TMUX environment variable is not set — are you running inside a tmux session?\n" +
44
- "Set 'mux' in ~/.config/towles-tool/agentboard/config.json to override.",
30
+ "Set 'mux' in your towles-tool settings to override.",
45
31
  );
46
32
  process.exit(1);
47
33
  }
@@ -53,8 +39,8 @@ loader.registerWatcher(new OpenCodeAgentWatcher());
53
39
 
54
40
  const watchers = loader.getWatchers();
55
41
  if (watchers.length > 0) {
56
- console.log(`Agent watchers: ${watchers.map((watcher) => watcher.name).join(", ")}`);
42
+ consola.info(`Agent watchers: ${watchers.map((watcher) => watcher.name).join(", ")}`);
57
43
  }
58
44
 
59
- console.log(`Primary mux provider: ${mux.name}`);
45
+ consola.info(`Primary mux provider: ${mux.name}`);
60
46
  startServer(mux, [], watchers);
@@ -10,10 +10,14 @@
10
10
  "build": "bun run build.ts"
11
11
  },
12
12
  "dependencies": {
13
+ "@babel/core": "^7.28.0",
14
+ "@babel/preset-typescript": "^7.27.1",
13
15
  "@opentui/core": "^0.1.88",
14
16
  "@opentui/solid": "^0.1.88",
15
17
  "@tt-agentboard/mux-tmux": "workspace:*",
16
18
  "@tt-agentboard/runtime": "workspace:*",
19
+ "babel-plugin-module-resolver": "^5.0.2",
20
+ "babel-preset-solid": "^1.9.10",
17
21
  "solid-js": "^1.9.11"
18
22
  },
19
23
  "devDependencies": {
@@ -9,6 +9,7 @@ import {
9
9
  UNSEEN_ICON,
10
10
  BOLD,
11
11
  DIM,
12
+ DIVIDER,
12
13
  SPARK_BLOCKS,
13
14
  TONE_ICONS,
14
15
  toneColor,
@@ -135,7 +136,7 @@ export function DetailPanel(props: DetailPanelProps) {
135
136
  fg: props.isResizing ? P().blue : props.isResizeHover ? P().overlay1 : P().surface2,
136
137
  }}
137
138
  >
138
- {"─".repeat(200)}
139
+ {DIVIDER}
139
140
  </text>
140
141
  </box>
141
142
 
@@ -289,7 +290,7 @@ function AgentListItem(props: AgentListItemProps) {
289
290
  flexShrink={0}
290
291
  onMouseDown={(event) => {
291
292
  // Don't trigger focus if clicking the dismiss button
292
- if ((event.target as any)?.id === "dismiss") return;
293
+ if (event.target?.id === "dismiss") return;
293
294
  appendFileSync(
294
295
  TUI_AGENT_CLICK_LOG,
295
296
  `[${new Date().toISOString()}] clicked agent=${props.agent.agent} thread=${props.agent.threadName ?? "?"}\n`,
@@ -1,13 +1,21 @@
1
1
  import { Show } from "solid-js";
2
2
  import type { Accessor } from "solid-js";
3
3
  import type { Theme } from "@tt-agentboard/runtime";
4
+ import { STATUS_ICONS } from "@tt-agentboard/runtime";
4
5
  import { BOLD } from "../constants";
5
6
 
7
+ export interface SessionStatusCounts {
8
+ active: number;
9
+ error: number;
10
+ idle: number;
11
+ }
12
+
6
13
  export interface StatusBarProps {
7
14
  sessionCount: number;
8
15
  runningCount: number;
9
16
  errorCount: number;
10
17
  unseenCount: number;
18
+ sessionStatusCounts: SessionStatusCounts;
11
19
  theme: Accessor<Theme>;
12
20
  }
13
21
 
@@ -44,6 +52,33 @@ export function StatusBar(props: StatusBarProps) {
44
52
  </span>
45
53
  </Show>
46
54
  </text>
55
+ <Show
56
+ when={
57
+ props.sessionStatusCounts.active +
58
+ props.sessionStatusCounts.error +
59
+ props.sessionStatusCounts.idle >
60
+ 0
61
+ }
62
+ >
63
+ <text>
64
+ <span style={{ fg: P().overlay1 }}>{" "}</span>
65
+ <Show when={props.sessionStatusCounts.active > 0}>
66
+ <span style={{ fg: P().green }}>
67
+ {STATUS_ICONS.running} {props.sessionStatusCounts.active} active{" "}
68
+ </span>
69
+ </Show>
70
+ <Show when={props.sessionStatusCounts.error > 0}>
71
+ <span style={{ fg: P().red }}>
72
+ {STATUS_ICONS.error} {props.sessionStatusCounts.error} error{" "}
73
+ </span>
74
+ </Show>
75
+ <Show when={props.sessionStatusCounts.idle > 0}>
76
+ <span style={{ fg: P().surface2 }}>
77
+ {STATUS_ICONS.idle} {props.sessionStatusCounts.idle} idle
78
+ </span>
79
+ </Show>
80
+ </text>
81
+ </Show>
47
82
  </box>
48
83
  );
49
84
  }
@@ -8,6 +8,7 @@ export const UNSEEN_ICON = "●";
8
8
  export const BOLD = TextAttributes.BOLD;
9
9
  export const DIM = TextAttributes.DIM;
10
10
  export const SPARK_BLOCKS = [" ", "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"];
11
+ export const DIVIDER = "─".repeat(200);
11
12
 
12
13
  export const THEME_NAMES = Object.keys(BUILTIN_THEMES);
13
14
  export const DEFAULT_DETAIL_PANEL_HEIGHT = 10;