@bastani/atomic 0.6.6 → 0.6.7
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.
- package/README.md +22 -16
- package/dist/sdk/components/compact-switcher.d.ts.map +1 -1
- package/dist/sdk/components/connectors.d.ts +1 -0
- package/dist/sdk/components/connectors.d.ts.map +1 -1
- package/dist/sdk/components/edge.d.ts +1 -1
- package/dist/sdk/components/edge.d.ts.map +1 -1
- package/dist/sdk/components/graph-theme.d.ts.map +1 -1
- package/dist/sdk/components/header.d.ts.map +1 -1
- package/dist/sdk/components/node-card.d.ts.map +1 -1
- package/dist/sdk/components/orchestrator-panel.d.ts +7 -1
- package/dist/sdk/components/orchestrator-panel.d.ts.map +1 -1
- package/dist/sdk/components/renderer-background.d.ts +9 -0
- package/dist/sdk/components/renderer-background.d.ts.map +1 -0
- package/dist/sdk/components/session-graph-panel.d.ts.map +1 -1
- package/dist/sdk/components/statusline.d.ts.map +1 -1
- package/dist/sdk/components/tui-diagnostics.d.ts +56 -0
- package/dist/sdk/components/tui-diagnostics.d.ts.map +1 -0
- package/dist/sdk/components/workflow-picker-panel.d.ts +2 -1
- package/dist/sdk/components/workflow-picker-panel.d.ts.map +1 -1
- package/dist/sdk/runtime/executor.d.ts.map +1 -1
- package/dist/sdk/runtime/theme.d.ts +4 -0
- package/dist/sdk/runtime/theme.d.ts.map +1 -1
- package/dist/theme/colors.d.ts +2 -0
- package/dist/theme/colors.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/cli.ts +3 -3
- package/src/commands/cli/management-commands.ts +4 -3
- package/src/commands/cli/session.test.ts +79 -6
- package/src/commands/cli/session.ts +65 -9
- package/src/completions/fish.ts +9 -3
- package/src/completions/powershell.ts +27 -3
- package/src/completions/zsh.ts +9 -2
- package/src/sdk/components/compact-switcher.tsx +10 -5
- package/src/sdk/components/connectors.ts +4 -0
- package/src/sdk/components/edge.tsx +5 -3
- package/src/sdk/components/graph-theme.ts +2 -3
- package/src/sdk/components/header.tsx +21 -9
- package/src/sdk/components/node-card.tsx +13 -7
- package/src/sdk/components/orchestrator-panel.tsx +47 -2
- package/src/sdk/components/renderer-background.ts +49 -0
- package/src/sdk/components/session-graph-panel.tsx +9 -2
- package/src/sdk/components/statusline.tsx +26 -22
- package/src/sdk/components/tui-diagnostics.ts +273 -0
- package/src/sdk/components/workflow-picker-panel.tsx +33 -22
- package/src/sdk/runtime/executor.ts +28 -1
- package/src/sdk/runtime/theme.ts +28 -36
- package/src/services/system/install-ui.ts +16 -17
- package/src/theme/colors.ts +14 -9
- package/src/theme/logo.ts +23 -12
package/README.md
CHANGED
|
@@ -283,7 +283,10 @@ Every chat and workflow runs inside an isolated [tmux](https://github.com/tmux/t
|
|
|
283
283
|
atomic session list # all sessions
|
|
284
284
|
atomic session connect # interactive fuzzy picker
|
|
285
285
|
atomic session connect <name> # by name
|
|
286
|
-
atomic session kill
|
|
286
|
+
atomic session kill # interactive multi-select
|
|
287
|
+
atomic session kill <name> # kill one session by name
|
|
288
|
+
atomic session kill --all # select all matching sessions, then confirm
|
|
289
|
+
atomic session kill --all --yes # kill all matching sessions without prompts
|
|
287
290
|
```
|
|
288
291
|
|
|
289
292
|
Session names follow `atomic-chat-<id>` or `atomic-wf-<workflow>-<id>`. Scope with `atomic chat session …` or `atomic workflow session …`.
|
|
@@ -1080,7 +1083,7 @@ During `atomic chat`, there is no Atomic-owned TUI — `atomic chat -a <agent>`
|
|
|
1080
1083
|
| `atomic workflow list` | List available workflows, grouped by source |
|
|
1081
1084
|
| `atomic session list` | List all running sessions on the atomic tmux socket |
|
|
1082
1085
|
| `atomic session connect [name]` | Attach to a session (interactive picker when no name given) |
|
|
1083
|
-
| `atomic session kill [name]` | Kill
|
|
1086
|
+
| `atomic session kill [name]` | Kill one session, or pick sessions interactively when no name is given |
|
|
1084
1087
|
| `atomic completions <shell>` | Output shell completion script (bash, zsh, fish, powershell) |
|
|
1085
1088
|
| `atomic config set <k> <v>` | Set configuration values (supports `telemetry` and `scm`) |
|
|
1086
1089
|
|
|
@@ -1096,19 +1099,19 @@ During `atomic chat`, there is no Atomic-owned TUI — `atomic chat -a <agent>`
|
|
|
1096
1099
|
|
|
1097
1100
|
Available at three levels — scoped or global:
|
|
1098
1101
|
|
|
1099
|
-
| Command | Description
|
|
1100
|
-
| ---------------------------------------- |
|
|
1101
|
-
| `atomic session list` | List all running sessions
|
|
1102
|
-
| `atomic session connect [name]` | Attach to a session (interactive picker when no name)
|
|
1103
|
-
| `atomic session kill [name]` | Kill
|
|
1104
|
-
| `atomic chat session list` | List running chat sessions only
|
|
1105
|
-
| `atomic chat session connect [name]` | Attach to a chat session
|
|
1106
|
-
| `atomic chat session kill [name]` | Kill
|
|
1107
|
-
| `atomic workflow session list` | List running workflow sessions only
|
|
1108
|
-
| `atomic workflow session connect [name]` | Attach to a workflow session
|
|
1109
|
-
| `atomic workflow session kill [name]` | Kill
|
|
1102
|
+
| Command | Description |
|
|
1103
|
+
| ---------------------------------------- | ------------------------------------------------------- |
|
|
1104
|
+
| `atomic session list` | List all running sessions |
|
|
1105
|
+
| `atomic session connect [name]` | Attach to a session (interactive picker when no name) |
|
|
1106
|
+
| `atomic session kill [name]` | Kill one session, or interactively pick sessions |
|
|
1107
|
+
| `atomic chat session list` | List running chat sessions only |
|
|
1108
|
+
| `atomic chat session connect [name]` | Attach to a chat session |
|
|
1109
|
+
| `atomic chat session kill [name]` | Kill one chat session, or interactively pick chat sessions |
|
|
1110
|
+
| `atomic workflow session list` | List running workflow sessions only |
|
|
1111
|
+
| `atomic workflow session connect [name]` | Attach to a workflow session |
|
|
1112
|
+
| `atomic workflow session kill [name]` | Kill one workflow session, or interactively pick workflow sessions |
|
|
1110
1113
|
|
|
1111
|
-
`list`, `connect`, and `kill` accept `-a <agent>` (repeatable) to filter by agent. `kill`
|
|
1114
|
+
`list`, `connect`, and `kill` accept `-a <agent>` (repeatable) to filter by agent. `kill` confirms before terminating sessions unless `-y` / `--yes` is passed. When no session name is given, `kill` opens a checkbox picker with an "All matching sessions" option; use `--all` to skip the picker and preselect every matching session.
|
|
1112
1115
|
|
|
1113
1116
|
```bash
|
|
1114
1117
|
atomic session list # all sessions
|
|
@@ -1117,8 +1120,11 @@ atomic session connect my-session # attach by name
|
|
|
1117
1120
|
atomic session connect # interactive picker
|
|
1118
1121
|
atomic chat session list -a copilot # chat sessions for Copilot only
|
|
1119
1122
|
atomic session kill my-session # kill one session by name
|
|
1120
|
-
atomic session kill #
|
|
1121
|
-
atomic
|
|
1123
|
+
atomic session kill # choose sessions with a multi-select picker
|
|
1124
|
+
atomic session kill --all # kill all sessions after confirmation
|
|
1125
|
+
atomic session kill --all --yes # kill all sessions without prompts
|
|
1126
|
+
atomic workflow session kill -a claude # choose Claude workflow sessions to kill
|
|
1127
|
+
atomic workflow session kill -a claude --all --yes
|
|
1122
1128
|
```
|
|
1123
1129
|
|
|
1124
1130
|
#### `atomic chat` Flags
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compact-switcher.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/compact-switcher.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;GAGG;AAMH,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,EAAE,aAAa,EAAE,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"compact-switcher.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/compact-switcher.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;GAGG;AAMH,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,EAAE,aAAa,EAAE,EAAE,oBAAoB,6BA+DtE"}
|
|
@@ -7,6 +7,7 @@ export interface ConnectorResult {
|
|
|
7
7
|
width: number;
|
|
8
8
|
height: number;
|
|
9
9
|
color: string;
|
|
10
|
+
backgroundColor: string;
|
|
10
11
|
}
|
|
11
12
|
/** Fan-out connector: one parent branching down to one or more tree children. */
|
|
12
13
|
export declare function buildConnector(parent: LayoutNode, rowH: Record<number, number>, theme: GraphTheme): ConnectorResult | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectors.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/connectors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"connectors.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/connectors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,KAAK,EAAE,UAAU,GAChB,eAAe,GAAG,IAAI,CAuExB;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACpC,KAAK,EAAE,UAAU,GAChB,eAAe,GAAG,IAAI,CA4DxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/** @jsxImportSource @opentui/react */
|
|
2
2
|
import type { ConnectorResult } from "./connectors.ts";
|
|
3
|
-
export declare function Edge({ text, col, row, width, height, color: edgeColor }: ConnectorResult): import("react").ReactNode;
|
|
3
|
+
export declare function Edge({ text, col, row, width, height, color: edgeColor, backgroundColor }: ConnectorResult): import("react").ReactNode;
|
|
4
4
|
//# sourceMappingURL=edge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/edge.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/edge.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,eAAe,6BAQzG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-theme.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/graph-theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"graph-theme.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/graph-theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,GAAG,UAAU,CAgB7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/header.tsx"],"names":[],"mappings":"AAAA,sCAAsC;
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/header.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AA8BtC,wBAAgB,MAAM,8BAsDrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-card.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/node-card.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,eAAO,MAAM,QAAQ,uEAKlB;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,
|
|
1
|
+
{"version":3,"file":"node-card.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/node-card.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,eAAO,MAAM,QAAQ,uEAKlB;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,qBAwEC,CAAC"}
|
|
@@ -9,6 +9,9 @@ export declare class OrchestratorPanel {
|
|
|
9
9
|
private store;
|
|
10
10
|
private renderer;
|
|
11
11
|
private destroyed;
|
|
12
|
+
private terminalBackgroundSynced;
|
|
13
|
+
private diagnostics;
|
|
14
|
+
private unsubscribeDiagnostics;
|
|
12
15
|
private constructor();
|
|
13
16
|
/**
|
|
14
17
|
* Create a new OrchestratorPanel with the default CLI renderer.
|
|
@@ -18,7 +21,9 @@ export declare class OrchestratorPanel {
|
|
|
18
21
|
*/
|
|
19
22
|
static create(options: PanelOptions): Promise<OrchestratorPanel>;
|
|
20
23
|
/** Create with an externally-provided renderer (e.g. a test renderer). */
|
|
21
|
-
static createWithRenderer(renderer: CliRenderer, options: PanelOptions
|
|
24
|
+
static createWithRenderer(renderer: CliRenderer, options: PanelOptions, { syncTerminalBackground }?: {
|
|
25
|
+
syncTerminalBackground?: boolean;
|
|
26
|
+
}): OrchestratorPanel;
|
|
22
27
|
/**
|
|
23
28
|
* Display the workflow overview in the TUI — name, agent, session graph,
|
|
24
29
|
* and the user prompt. Call once after construction before sessions start.
|
|
@@ -76,5 +81,6 @@ export declare class OrchestratorPanel {
|
|
|
76
81
|
completionReached: boolean;
|
|
77
82
|
sessions: readonly SessionData[];
|
|
78
83
|
};
|
|
84
|
+
private getDiagnosticSnapshot;
|
|
79
85
|
}
|
|
80
86
|
//# sourceMappingURL=orchestrator-panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-panel.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/orchestrator-panel.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;GAGG;AAEH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAOpE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator-panel.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/orchestrator-panel.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;GAGG;AAEH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAOpE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAU7F,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,wBAAwB,CAAU;IAC1C,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,OAAO;IAkDP;;;;;OAKG;WACU,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQtE,0EAA0E;IAC1E,MAAM,CAAC,kBAAkB,CACvB,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,YAAY,EACrB,EAAE,sBAA8B,EAAE,GAAE;QAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAO,GAC5E,iBAAiB;IAQpB;;;OAGG;IACH,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,MAAM,GACb,IAAI;IAIP,iDAAiD;IACjD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC,gEAAgE;IAChE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,8EAA8E;IAC9E,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,0DAA0D;IAC1D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAUjD,8EAA8E;IAC9E,qBAAqB,IAAI,IAAI;IAI7B,8EAA8E;IAC9E,sBAAsB,IAAI,IAAI;IAI9B,0EAA0E;IAC1E,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAInE,+CAA+C;IAC/C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B,yEAAyE;IACzE,OAAO,IAAI,IAAI;IAgBf;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAIrC;;;;;OAKG;IACH,WAAW,IAAI;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;KAClC;IAWD,OAAO,CAAC,qBAAqB;CAa9B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CliRenderer } from "@opentui/core";
|
|
2
|
+
export declare function setRendererBackground(renderer: CliRenderer, color: string, { syncTerminalDefault }?: {
|
|
3
|
+
syncTerminalDefault?: boolean;
|
|
4
|
+
}): void;
|
|
5
|
+
export declare function requestRendererBackgroundRepaint(renderer: CliRenderer): void;
|
|
6
|
+
export declare function resetRendererTerminalBackground(renderer: CliRenderer): void;
|
|
7
|
+
export declare function terminalBackgroundColorSequence(color: string): string;
|
|
8
|
+
export declare function wrapForTmuxIfNeeded(sequence: string): string;
|
|
9
|
+
//# sourceMappingURL=renderer-background.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-background.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/renderer-background.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,EAAE,mBAA2B,EAAE,GAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,IAAI,CAKN;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAM5E;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAO3E;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-graph-panel.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/session-graph-panel.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;GAGG;AAyCH,wBAAgB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"session-graph-panel.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/session-graph-panel.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;GAGG;AAyCH,wBAAgB,iBAAiB,8BAyahC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/statusline.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAItC,wBAAgB,UAAU,CAAC,EACzB,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;CACnB,
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/statusline.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAItC,wBAAgB,UAAU,CAAC,EACzB,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;CACnB,6BA2DA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { CliRenderer, OptimizedBuffer } from "@opentui/core";
|
|
2
|
+
import type { GraphTheme } from "./graph-theme.ts";
|
|
3
|
+
import type { SessionData } from "./orchestrator-panel-types.ts";
|
|
4
|
+
type BackgroundRun = {
|
|
5
|
+
x: number;
|
|
6
|
+
width: number;
|
|
7
|
+
color: string;
|
|
8
|
+
};
|
|
9
|
+
type BufferRowDiagnostic = {
|
|
10
|
+
y: number;
|
|
11
|
+
text: string;
|
|
12
|
+
backgrounds: BackgroundRun[];
|
|
13
|
+
};
|
|
14
|
+
type ColorCount = {
|
|
15
|
+
color: string;
|
|
16
|
+
count: number;
|
|
17
|
+
percent: number;
|
|
18
|
+
};
|
|
19
|
+
export type BufferDiagnostic = {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
topBackgrounds: ColorCount[];
|
|
23
|
+
yellowHueCells: number;
|
|
24
|
+
yellowHueSamples: Array<{
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
color: string;
|
|
28
|
+
char: string;
|
|
29
|
+
}>;
|
|
30
|
+
rows: BufferRowDiagnostic[];
|
|
31
|
+
};
|
|
32
|
+
export type WorkflowDiagnosticSnapshot = {
|
|
33
|
+
workflowName: string;
|
|
34
|
+
agent: string;
|
|
35
|
+
prompt: string;
|
|
36
|
+
fatalError: string | null;
|
|
37
|
+
completionReached: boolean;
|
|
38
|
+
sessions: readonly SessionData[];
|
|
39
|
+
backgroundTaskCount: number;
|
|
40
|
+
viewMode: string;
|
|
41
|
+
activeAgentId: string;
|
|
42
|
+
};
|
|
43
|
+
export type TuiDiagnostics = {
|
|
44
|
+
capture: (reason: string) => void;
|
|
45
|
+
dispose: () => void;
|
|
46
|
+
};
|
|
47
|
+
type TuiDiagnosticsOptions = {
|
|
48
|
+
renderer: CliRenderer;
|
|
49
|
+
graphTheme: GraphTheme;
|
|
50
|
+
getSnapshot: () => WorkflowDiagnosticSnapshot;
|
|
51
|
+
};
|
|
52
|
+
export declare function isTuiDiagnosticsEnabled(): boolean;
|
|
53
|
+
export declare function createTuiDiagnostics({ renderer, graphTheme, getSnapshot, }: TuiDiagnosticsOptions): TuiDiagnostics | null;
|
|
54
|
+
export declare function summarizeBuffer(buffer: OptimizedBuffer): BufferDiagnostic;
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=tui-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/tui-diagnostics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,KAAK,aAAa,GAAG;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,IAAI,EAAE,mBAAmB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,0BAA0B,CAAC;CAC/C,CAAC;AAKF,wBAAgB,uBAAuB,IAAI,OAAO,CAGjD;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,UAAU,EACV,WAAW,GACZ,EAAE,qBAAqB,GAAG,cAAc,GAAG,IAAI,CAkE/C;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CA+DzE"}
|
|
@@ -45,7 +45,7 @@ export interface PickerTheme {
|
|
|
45
45
|
border: string;
|
|
46
46
|
borderActive: string;
|
|
47
47
|
}
|
|
48
|
-
export declare function buildPickerTheme(base: TerminalTheme
|
|
48
|
+
export declare function buildPickerTheme(base: TerminalTheme): PickerTheme;
|
|
49
49
|
/** The payload the picker resolves with on successful submission. */
|
|
50
50
|
export interface WorkflowPickerResult {
|
|
51
51
|
/** The workflow the user committed to running. */
|
|
@@ -99,6 +99,7 @@ export declare class WorkflowPickerPanel {
|
|
|
99
99
|
private renderer;
|
|
100
100
|
private root;
|
|
101
101
|
private destroyed;
|
|
102
|
+
private terminalBackgroundSynced;
|
|
102
103
|
private resolveSelection;
|
|
103
104
|
private selectionPromise;
|
|
104
105
|
private constructor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-picker-panel.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/workflow-picker-panel.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-picker-panel.d.ts","sourceRoot":"","sources":["../../../src/sdk/components/workflow-picker-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/sdk/runtime/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,KAAK,EACV,kBAAkB,EAElB,aAAa,EAKb,SAAS,EAET,YAAY,EAEZ,kBAAkB,EAInB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AA+B9E,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,QAAS,CAAC;AA4C9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAa5C,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,iBAAiB;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAgB1D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAKtD;AAyBD;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAMhD;AAuBD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,SAAS,GAAE,iBAAsB,EACjC,cAAc,GAAE,MAAM,EAAO,GAC5B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAyDtD;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAqDjB;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAejC;AAMD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/sdk/runtime/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
import type { ThemeMode } from "@opentui/core";
|
|
10
10
|
export interface TerminalTheme {
|
|
11
11
|
bg: string;
|
|
12
|
+
backgroundPanel: string;
|
|
13
|
+
backgroundElement: string;
|
|
12
14
|
surface: string;
|
|
13
15
|
selection: string;
|
|
14
16
|
border: string;
|
|
15
17
|
borderDim: string;
|
|
16
18
|
accent: string;
|
|
17
19
|
text: string;
|
|
20
|
+
textMuted: string;
|
|
18
21
|
dim: string;
|
|
22
|
+
info: string;
|
|
19
23
|
success: string;
|
|
20
24
|
error: string;
|
|
21
25
|
warning: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/sdk/runtime/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/sdk/runtime/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AA+BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,aAAa,CAElE"}
|
package/dist/theme/colors.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ColorName } from "@catppuccin/palette";
|
|
1
2
|
export declare const COLORS: {
|
|
2
3
|
readonly bold: "\u001B[1m";
|
|
3
4
|
readonly dim: "\u001B[2m";
|
|
@@ -16,6 +17,7 @@ export declare const COLORS: {
|
|
|
16
17
|
readonly blue: "";
|
|
17
18
|
};
|
|
18
19
|
export type PaletteKey = "text" | "dim" | "accent" | "success" | "error" | "warning" | "mauve" | "info";
|
|
20
|
+
export declare function paletteRgb(name: ColorName): readonly [number, number, number];
|
|
19
21
|
export declare const PALETTE: Record<PaletteKey, readonly [number, number, number]>;
|
|
20
22
|
export interface PaintOptions {
|
|
21
23
|
bold?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/theme/colors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/theme/colors.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA0B9D,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CAA2C,CAAC;AAS/D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAExG,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAG7E;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CASzE,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC;AAEnF;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,KAAK,CA2BrC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/atomic",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.7",
|
|
4
4
|
"description": "Configuration management CLI and SDK for coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
},
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@anthropic-ai/claude-agent-sdk": "^0.2.126",
|
|
80
|
+
"@catppuccin/palette": "^1.8.0",
|
|
80
81
|
"@clack/prompts": "^1.3.0",
|
|
81
82
|
"@commander-js/extra-typings": "^14.0.0",
|
|
82
83
|
"@github/copilot-sdk": "^0.3.0",
|
package/src/cli.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* atomic workflow session connect <id> Attach to a session
|
|
16
16
|
* atomic session list List all running sessions
|
|
17
17
|
* atomic session connect [id] Interactive session picker
|
|
18
|
-
* atomic session kill [id] [-y]
|
|
18
|
+
* atomic session kill [id] [--all] [-y] Kill sessions; no id opens multi-select
|
|
19
19
|
* atomic config set <key> <value> Set configuration value
|
|
20
20
|
* atomic --version Show version
|
|
21
21
|
* atomic --help Show help
|
|
@@ -87,7 +87,7 @@ Examples:
|
|
|
87
87
|
$ atomic chat -a claude "fix the bug" Claude with initial prompt
|
|
88
88
|
$ atomic chat session list List running sessions
|
|
89
89
|
$ atomic chat session connect <id> Attach to a session
|
|
90
|
-
$ atomic chat session kill [id] Kill a chat session (
|
|
90
|
+
$ atomic chat session kill [id] Kill a chat session (multi-select when no id)`,
|
|
91
91
|
)
|
|
92
92
|
.action(async (localOpts, cmd) => {
|
|
93
93
|
const validAgents = Object.keys(AGENT_CONFIG);
|
|
@@ -156,7 +156,7 @@ Examples:
|
|
|
156
156
|
$ atomic workflow status <id> Query a single workflow's status
|
|
157
157
|
$ atomic workflow session list List running sessions
|
|
158
158
|
$ atomic workflow session connect <id> Attach to a session
|
|
159
|
-
$ atomic workflow session kill
|
|
159
|
+
$ atomic workflow session kill --all -y Kill all workflow sessions, no prompt`,
|
|
160
160
|
);
|
|
161
161
|
|
|
162
162
|
program.addCommand(workflowCommand);
|
|
@@ -67,14 +67,15 @@ export function addSessionSubcommand(
|
|
|
67
67
|
|
|
68
68
|
sessionCmd
|
|
69
69
|
.command("kill")
|
|
70
|
-
.description("Kill
|
|
71
|
-
.argument("[session_id]", "Session name to kill (omit
|
|
70
|
+
.description("Kill running sessions (interactive multi-select when no id given)")
|
|
71
|
+
.argument("[session_id]", "Session name to kill (omit for interactive multi-select)")
|
|
72
72
|
.option(
|
|
73
73
|
"-a, --agent <name>",
|
|
74
74
|
"Filter by agent backend (claude, copilot, opencode); repeatable",
|
|
75
75
|
collectAgent,
|
|
76
76
|
[] as string[],
|
|
77
77
|
)
|
|
78
|
+
.option("--all", "Select all matching sessions (kills immediately with --yes)")
|
|
78
79
|
.option("-y, --yes", "Skip the confirmation prompt (required for agent callers)")
|
|
79
80
|
.action(async (sessionId, localOpts) => {
|
|
80
81
|
const { sessionKillCommand } = await import("./session.ts");
|
|
@@ -83,7 +84,7 @@ export function addSessionSubcommand(
|
|
|
83
84
|
localOpts.agent,
|
|
84
85
|
scope,
|
|
85
86
|
undefined,
|
|
86
|
-
{ yes: localOpts.yes === true },
|
|
87
|
+
{ yes: localOpts.yes === true, all: localOpts.all === true },
|
|
87
88
|
);
|
|
88
89
|
process.exit(exitCode);
|
|
89
90
|
});
|
|
@@ -288,6 +288,8 @@ const tmuxMocks = {
|
|
|
288
288
|
spawnMuxAttach: mock(() => ({ exited: Promise.resolve(0) }) as never),
|
|
289
289
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
290
290
|
select: mock<(...args: any[]) => Promise<string | symbol>>(() => Promise.resolve("my-session")),
|
|
291
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
292
|
+
multiselect: mock<(...args: any[]) => Promise<string[] | symbol>>(() => Promise.resolve([])),
|
|
291
293
|
killSession: mock<(name: string) => void>(() => {}),
|
|
292
294
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
293
295
|
confirm: mock<(...args: any[]) => Promise<boolean | symbol>>(() => Promise.resolve(true)),
|
|
@@ -309,6 +311,7 @@ function resetTmuxMocks(): void {
|
|
|
309
311
|
tmuxMocks.detachAndAttachAtomic.mockReset();
|
|
310
312
|
tmuxMocks.spawnMuxAttach.mockReset().mockReturnValue({ exited: Promise.resolve(0) } as never);
|
|
311
313
|
tmuxMocks.select.mockReset().mockResolvedValue("my-session");
|
|
314
|
+
tmuxMocks.multiselect.mockReset().mockResolvedValue([]);
|
|
312
315
|
tmuxMocks.killSession.mockReset();
|
|
313
316
|
tmuxMocks.confirm.mockReset().mockResolvedValue(true);
|
|
314
317
|
}
|
|
@@ -628,24 +631,29 @@ describe("sessionKillCommand", () => {
|
|
|
628
631
|
}
|
|
629
632
|
});
|
|
630
633
|
|
|
631
|
-
// (h) omitted id, N sessions, user confirms → killSession called for
|
|
632
|
-
test("omitted id prompts and kills
|
|
634
|
+
// (h) omitted id, N sessions, user selects sessions and confirms → killSession called for selected, return 0
|
|
635
|
+
test("omitted id prompts with multiselect and kills selected sessions on confirm", async () => {
|
|
633
636
|
const now = new Date().toISOString();
|
|
634
637
|
tmuxMocks.listSessions.mockReturnValue([
|
|
635
638
|
{ name: "session-a", windows: 1, created: now, attached: false, type: "chat" as const, agent: "claude" },
|
|
636
639
|
{ name: "session-b", windows: 1, created: now, attached: false, type: "workflow" as const, agent: "opencode" },
|
|
637
640
|
{ name: "session-c", windows: 1, created: now, attached: false, type: "chat" as const, agent: "copilot" },
|
|
638
641
|
]);
|
|
642
|
+
tmuxMocks.multiselect.mockResolvedValue(["session-a", "session-c"]);
|
|
639
643
|
tmuxMocks.confirm.mockResolvedValue(true);
|
|
640
644
|
const origWrite = process.stdout.write;
|
|
641
645
|
process.stdout.write = (() => true) as typeof process.stdout.write;
|
|
642
646
|
try {
|
|
643
647
|
const code = await sessionKillCommand(undefined, [], "all", makeDeps());
|
|
644
648
|
expect(code).toBe(0);
|
|
645
|
-
expect(tmuxMocks.
|
|
649
|
+
expect(tmuxMocks.multiselect).toHaveBeenCalledTimes(1);
|
|
650
|
+
expect(tmuxMocks.multiselect).toHaveBeenCalledWith(expect.objectContaining({
|
|
651
|
+
message: "Select sessions to kill (Space toggles, Enter continues)",
|
|
652
|
+
}));
|
|
653
|
+
expect(tmuxMocks.killSession).toHaveBeenCalledTimes(2);
|
|
646
654
|
expect(tmuxMocks.killSession).toHaveBeenCalledWith("session-a");
|
|
647
|
-
expect(tmuxMocks.killSession).toHaveBeenCalledWith("session-b");
|
|
648
655
|
expect(tmuxMocks.killSession).toHaveBeenCalledWith("session-c");
|
|
656
|
+
expect(tmuxMocks.killSession).not.toHaveBeenCalledWith("session-b");
|
|
649
657
|
} finally {
|
|
650
658
|
process.stdout.write = origWrite;
|
|
651
659
|
}
|
|
@@ -658,6 +666,7 @@ describe("sessionKillCommand", () => {
|
|
|
658
666
|
{ name: "chat-session", windows: 1, created: now, attached: false, type: "chat" as const, agent: "claude" },
|
|
659
667
|
{ name: "wf-session", windows: 1, created: now, attached: false, type: "workflow" as const, agent: "opencode" },
|
|
660
668
|
]);
|
|
669
|
+
tmuxMocks.multiselect.mockResolvedValue(["chat-session"]);
|
|
661
670
|
tmuxMocks.confirm.mockResolvedValue(true);
|
|
662
671
|
const origWrite = process.stdout.write;
|
|
663
672
|
process.stdout.write = (() => true) as typeof process.stdout.write;
|
|
@@ -679,6 +688,7 @@ describe("sessionKillCommand", () => {
|
|
|
679
688
|
{ name: "chat-session", windows: 1, created: now, attached: false, type: "chat" as const, agent: "claude" },
|
|
680
689
|
{ name: "wf-session", windows: 1, created: now, attached: false, type: "workflow" as const, agent: "opencode" },
|
|
681
690
|
]);
|
|
691
|
+
tmuxMocks.multiselect.mockResolvedValue(["wf-session"]);
|
|
682
692
|
tmuxMocks.confirm.mockResolvedValue(true);
|
|
683
693
|
const origWrite = process.stdout.write;
|
|
684
694
|
process.stdout.write = (() => true) as typeof process.stdout.write;
|
|
@@ -700,6 +710,7 @@ describe("sessionKillCommand", () => {
|
|
|
700
710
|
{ name: "session-x", windows: 1, created: now, attached: false, type: "chat" as const },
|
|
701
711
|
{ name: "session-y", windows: 1, created: now, attached: false, type: "workflow" as const },
|
|
702
712
|
]);
|
|
713
|
+
tmuxMocks.multiselect.mockResolvedValue(["session-x", "session-y"]);
|
|
703
714
|
tmuxMocks.confirm.mockResolvedValue(false);
|
|
704
715
|
const origWrite = process.stdout.write;
|
|
705
716
|
process.stdout.write = (() => true) as typeof process.stdout.write;
|
|
@@ -736,19 +747,81 @@ describe("sessionKillCommand", () => {
|
|
|
736
747
|
}
|
|
737
748
|
});
|
|
738
749
|
|
|
739
|
-
// (m) -y on
|
|
740
|
-
test("yes flag skips the prompt
|
|
750
|
+
// (m) -y on omitted id: skip confirm after selection and kill selected sessions
|
|
751
|
+
test("yes flag skips the confirmation prompt after selecting sessions", async () => {
|
|
741
752
|
const now = new Date().toISOString();
|
|
742
753
|
tmuxMocks.listSessions.mockReturnValue([
|
|
743
754
|
{ name: "session-a", windows: 1, created: now, attached: false, type: "chat" as const, agent: "claude" },
|
|
744
755
|
{ name: "session-b", windows: 1, created: now, attached: false, type: "workflow" as const, agent: "opencode" },
|
|
745
756
|
]);
|
|
757
|
+
tmuxMocks.multiselect.mockResolvedValue(["session-b"]);
|
|
746
758
|
const origWrite = process.stdout.write;
|
|
747
759
|
process.stdout.write = (() => true) as typeof process.stdout.write;
|
|
748
760
|
try {
|
|
749
761
|
const code = await sessionKillCommand(undefined, [], "all", makeDeps(), { yes: true });
|
|
750
762
|
expect(code).toBe(0);
|
|
751
763
|
expect(tmuxMocks.confirm).not.toHaveBeenCalled();
|
|
764
|
+
expect(tmuxMocks.killSession).toHaveBeenCalledTimes(1);
|
|
765
|
+
expect(tmuxMocks.killSession).toHaveBeenCalledWith("session-b");
|
|
766
|
+
} finally {
|
|
767
|
+
process.stdout.write = origWrite;
|
|
768
|
+
}
|
|
769
|
+
});
|
|
770
|
+
|
|
771
|
+
test("selecting the all option kills every matching session after confirmation", async () => {
|
|
772
|
+
const now = new Date().toISOString();
|
|
773
|
+
tmuxMocks.listSessions.mockReturnValue([
|
|
774
|
+
{ name: "session-a", windows: 1, created: now, attached: false, type: "chat" as const, agent: "claude" },
|
|
775
|
+
{ name: "session-b", windows: 1, created: now, attached: false, type: "workflow" as const, agent: "opencode" },
|
|
776
|
+
]);
|
|
777
|
+
tmuxMocks.multiselect.mockResolvedValue(["__atomic_select_all_sessions__"]);
|
|
778
|
+
tmuxMocks.confirm.mockResolvedValue(true);
|
|
779
|
+
const origWrite = process.stdout.write;
|
|
780
|
+
process.stdout.write = (() => true) as typeof process.stdout.write;
|
|
781
|
+
try {
|
|
782
|
+
const code = await sessionKillCommand(undefined, [], "all", makeDeps());
|
|
783
|
+
expect(code).toBe(0);
|
|
784
|
+
expect(tmuxMocks.killSession).toHaveBeenCalledTimes(2);
|
|
785
|
+
expect(tmuxMocks.killSession).toHaveBeenCalledWith("session-a");
|
|
786
|
+
expect(tmuxMocks.killSession).toHaveBeenCalledWith("session-b");
|
|
787
|
+
} finally {
|
|
788
|
+
process.stdout.write = origWrite;
|
|
789
|
+
}
|
|
790
|
+
});
|
|
791
|
+
|
|
792
|
+
test("all flag skips multiselect and confirms every matching session", async () => {
|
|
793
|
+
const now = new Date().toISOString();
|
|
794
|
+
tmuxMocks.listSessions.mockReturnValue([
|
|
795
|
+
{ name: "session-a", windows: 1, created: now, attached: false, type: "chat" as const, agent: "claude" },
|
|
796
|
+
{ name: "session-b", windows: 1, created: now, attached: false, type: "workflow" as const, agent: "opencode" },
|
|
797
|
+
]);
|
|
798
|
+
tmuxMocks.confirm.mockResolvedValue(true);
|
|
799
|
+
const origWrite = process.stdout.write;
|
|
800
|
+
process.stdout.write = (() => true) as typeof process.stdout.write;
|
|
801
|
+
try {
|
|
802
|
+
const code = await sessionKillCommand(undefined, [], "all", makeDeps(), { all: true });
|
|
803
|
+
expect(code).toBe(0);
|
|
804
|
+
expect(tmuxMocks.multiselect).not.toHaveBeenCalled();
|
|
805
|
+
expect(tmuxMocks.confirm).toHaveBeenCalledTimes(1);
|
|
806
|
+
expect(tmuxMocks.killSession).toHaveBeenCalledTimes(2);
|
|
807
|
+
} finally {
|
|
808
|
+
process.stdout.write = origWrite;
|
|
809
|
+
}
|
|
810
|
+
});
|
|
811
|
+
|
|
812
|
+
test("all and yes flags kill every matching session without prompts", async () => {
|
|
813
|
+
const now = new Date().toISOString();
|
|
814
|
+
tmuxMocks.listSessions.mockReturnValue([
|
|
815
|
+
{ name: "session-a", windows: 1, created: now, attached: false, type: "chat" as const, agent: "claude" },
|
|
816
|
+
{ name: "session-b", windows: 1, created: now, attached: false, type: "workflow" as const, agent: "opencode" },
|
|
817
|
+
]);
|
|
818
|
+
const origWrite = process.stdout.write;
|
|
819
|
+
process.stdout.write = (() => true) as typeof process.stdout.write;
|
|
820
|
+
try {
|
|
821
|
+
const code = await sessionKillCommand(undefined, [], "all", makeDeps(), { all: true, yes: true });
|
|
822
|
+
expect(code).toBe(0);
|
|
823
|
+
expect(tmuxMocks.multiselect).not.toHaveBeenCalled();
|
|
824
|
+
expect(tmuxMocks.confirm).not.toHaveBeenCalled();
|
|
752
825
|
expect(tmuxMocks.killSession).toHaveBeenCalledTimes(2);
|
|
753
826
|
} finally {
|
|
754
827
|
process.stdout.write = origWrite;
|