tabby-tabbyspaces 0.0.1 → 0.1.0
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/.claude/settings.local.json +28 -2
- package/CHANGELOG.md +46 -20
- package/CLAUDE.md +163 -15
- package/README.md +71 -61
- package/RELEASE.md +91 -0
- package/TEST_MCP.md +176 -0
- package/TODO.md +72 -0
- package/cdp-click.js +22 -0
- package/cdp-test.js +28 -0
- package/dist/components/paneEditor.component.d.ts +6 -1
- package/dist/components/paneEditor.component.d.ts.map +1 -1
- package/dist/components/splitPreview.component.d.ts +22 -7
- package/dist/components/splitPreview.component.d.ts.map +1 -1
- package/dist/components/workspaceEditor.component.d.ts +30 -4
- package/dist/components/workspaceEditor.component.d.ts.map +1 -1
- package/dist/components/workspaceList.component.d.ts +21 -9
- package/dist/components/workspaceList.component.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +1 -1
- package/dist/index.js.map +1 -1
- package/dist/models/workspace.model.d.ts +4 -2
- package/dist/models/workspace.model.d.ts.map +1 -1
- package/dist/package.json +26 -0
- package/dist/providers/settings.provider.d.ts.map +1 -1
- package/dist/providers/toolbar.provider.d.ts +4 -1
- package/dist/providers/toolbar.provider.d.ts.map +1 -1
- package/dist/services/startupCommand.service.d.ts +20 -0
- package/dist/services/startupCommand.service.d.ts.map +1 -0
- package/dist/services/workspaceEditor.service.d.ts +11 -3
- package/dist/services/workspaceEditor.service.d.ts.map +1 -1
- package/docs/marketing_status.md +92 -0
- package/package.json +2 -7
- package/screenshots/editor.png +0 -0
- package/screenshots/pane-edit.png +0 -0
- package/scripts/build-prod.js +39 -0
- package/src/components/paneEditor.component.pug +2 -2
- package/src/components/paneEditor.component.ts +19 -1
- package/src/components/splitPreview.component.pug +45 -5
- package/src/components/splitPreview.component.scss +79 -22
- package/src/components/splitPreview.component.ts +91 -16
- package/src/components/workspaceEditor.component.pug +130 -70
- package/src/components/workspaceEditor.component.scss +205 -120
- package/src/components/workspaceEditor.component.ts +193 -6
- package/src/components/workspaceList.component.pug +31 -20
- package/src/components/workspaceList.component.scss +12 -6
- package/src/components/workspaceList.component.ts +116 -34
- package/src/index.ts +2 -0
- package/src/models/workspace.model.ts +33 -6
- package/src/providers/settings.provider.ts +2 -2
- package/src/providers/toolbar.provider.ts +41 -10
- package/src/services/startupCommand.service.ts +142 -0
- package/src/services/workspaceEditor.service.ts +70 -38
- package/test_cdp.py +50 -0
- package/RELEASE_PLAN.md +0 -161
- package/screenshots/workspace-edit.png +0 -0
|
@@ -9,7 +9,33 @@
|
|
|
9
9
|
"WebFetch(domain:github.com)",
|
|
10
10
|
"Bash(npm run build:dev:*)",
|
|
11
11
|
"Bash(wc:*)",
|
|
12
|
-
"
|
|
12
|
+
"WebFetch(domain:docs.tabby.sh)",
|
|
13
|
+
"WebFetch(domain:raw.githubusercontent.com)",
|
|
14
|
+
"WebFetch(domain:api.github.com)",
|
|
15
|
+
"Bash(ls -la \"C:\\\\Users\\\\halil\\\\tabbyspaces\\\\dist\"\" | grep -E \"package)",
|
|
16
|
+
"Bash(.json \")",
|
|
17
|
+
"Bash(dir /s /b \"C:\\\\Users\\\\halil\\\\AppData\\\\Local\\\\Programs\\\\tabby\")",
|
|
18
|
+
"WebFetch(domain:localhost)",
|
|
19
|
+
"Bash(curl:*)",
|
|
20
|
+
"mcp__tabby__query",
|
|
21
|
+
"mcp__tabby__execute_js",
|
|
22
|
+
"Bash(start \"\" \"C:\\\\Program Files \\(x86\\)\\\\Tabby\\\\Tabby.exe\" --remote-debugging-port=9222)",
|
|
23
|
+
"mcp__tabby__list_targets",
|
|
24
|
+
"Bash(tree:*)",
|
|
25
|
+
"Bash(dir \"C:\\\\Users\\\\halil\\\\tabbyspaces\\\\node_modules\" /B)",
|
|
26
|
+
"Bash(findstr:*)",
|
|
27
|
+
"mcp__tabby__screenshot",
|
|
28
|
+
"Bash(python:*)",
|
|
29
|
+
"Bash(cmd /c \"dir /A %APPDATA%\\\\tabby\\\\plugins\\\\node_modules\")",
|
|
30
|
+
"Bash(cmd /c \"dir %APPDATA%\\\\tabby\\\\plugins\")",
|
|
31
|
+
"Bash(git log:*)",
|
|
32
|
+
"Bash(ls -la \"C:\\\\Users\\\\halil\\\\tabbyspaces\\\\screenshots\"\" 2>nul || echo \"Directory not found \")",
|
|
33
|
+
"Bash(dir:*)",
|
|
34
|
+
"Bash(cmd.exe /c start \"\" \"C:\\\\Program Files \\(x86\\)\\\\Tabby\\\\Tabby.exe\" --remote-debugging-port=9222)"
|
|
13
35
|
]
|
|
14
|
-
}
|
|
36
|
+
},
|
|
37
|
+
"enableAllProjectMcpServers": true,
|
|
38
|
+
"enabledMcpjsonServers": [
|
|
39
|
+
"tabby"
|
|
40
|
+
]
|
|
15
41
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,20 +1,46 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## [0.0
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.1.0] - 2026-01-13
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Inline workspace editor (replaces modal dialog)
|
|
8
|
+
- Layout editing toolbar with pane selection system
|
|
9
|
+
- Startup command support per pane
|
|
10
|
+
- Launch on startup supports multiple workspaces
|
|
11
|
+
- Distinct icons for DEV vs PROD versions
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
- Fix delete/save race conditions with async/await
|
|
16
|
+
- Fix native split re-running startup command
|
|
17
|
+
- Fix async change detection and profile cleanup timing
|
|
18
|
+
|
|
19
|
+
### UX Improvements
|
|
20
|
+
|
|
21
|
+
- Pane title format: shows base profile when no custom title
|
|
22
|
+
- Toolbar UI polish
|
|
23
|
+
- Settings panel max-width override (1024px)
|
|
24
|
+
|
|
25
|
+
### Technical
|
|
26
|
+
|
|
27
|
+
- Remove profile persistence (cleaner architecture - no generated profiles)
|
|
28
|
+
- Watch mode for dev workflow (`npm run watch:dev`)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## [0.0.1] - 2026-01-03
|
|
33
|
+
|
|
34
|
+
Initial release.
|
|
35
|
+
|
|
36
|
+
### Features
|
|
37
|
+
|
|
38
|
+
- Workspace list with create, edit, duplicate, delete
|
|
39
|
+
- Visual split-layout editor (horizontal/vertical, any nesting depth)
|
|
40
|
+
- Pane configuration: base profile, working directory, startup command, custom title
|
|
41
|
+
- Toolbar button for quick workspace launch
|
|
42
|
+
- Icon and color customization per workspace
|
|
43
|
+
|
|
44
|
+
### Technical
|
|
45
|
+
|
|
46
|
+
- Full dev/prod build isolation for parallel development
|
package/CLAUDE.md
CHANGED
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
Visual split-layout workspace editor for Tabby.
|
|
4
4
|
|
|
5
|
+
## Git Workflow
|
|
6
|
+
|
|
7
|
+
- **main** - Stable releases only. Do not commit directly.
|
|
8
|
+
- **dev** - Active development. All work happens here.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# Normal workflow
|
|
12
|
+
git checkout dev # Work on dev
|
|
13
|
+
# ... make changes ...
|
|
14
|
+
git commit
|
|
15
|
+
|
|
16
|
+
# Release workflow
|
|
17
|
+
git checkout main
|
|
18
|
+
git merge dev
|
|
19
|
+
git tag v0.x.0
|
|
20
|
+
git push --tags
|
|
21
|
+
git checkout dev # Back to work
|
|
22
|
+
```
|
|
23
|
+
|
|
5
24
|
## Tech Stack
|
|
6
25
|
|
|
7
26
|
- **Framework**: Angular 15 (Tabby uses Angular 15)
|
|
@@ -15,10 +34,21 @@ Visual split-layout workspace editor for Tabby.
|
|
|
15
34
|
```
|
|
16
35
|
src/
|
|
17
36
|
├── index.ts # NgModule entry point
|
|
37
|
+
├── build-config.ts # Build-time constants (CONFIG_KEY, DISPLAY_NAME)
|
|
18
38
|
├── models/ # TypeScript interfaces
|
|
39
|
+
│ └── workspace.model.ts
|
|
19
40
|
├── services/ # Business logic
|
|
20
|
-
├──
|
|
41
|
+
│ ├── workspaceEditor.service.ts
|
|
42
|
+
│ └── startupCommand.service.ts
|
|
43
|
+
├── providers/ # Tabby config/settings/toolbar providers
|
|
44
|
+
│ ├── config.provider.ts
|
|
45
|
+
│ ├── settings.provider.ts
|
|
46
|
+
│ └── toolbar.provider.ts
|
|
21
47
|
└── components/ # Angular components (.ts, .pug, .scss)
|
|
48
|
+
├── workspaceList # Main settings UI
|
|
49
|
+
├── workspaceEditor # Single workspace editor
|
|
50
|
+
├── paneEditor # Pane configuration
|
|
51
|
+
└── splitPreview # Visual split preview
|
|
22
52
|
```
|
|
23
53
|
|
|
24
54
|
## Build
|
|
@@ -37,7 +67,7 @@ Debug: `Ctrl+Shift+I` in Tabby opens DevTools.
|
|
|
37
67
|
### package.json (required)
|
|
38
68
|
```json
|
|
39
69
|
{
|
|
40
|
-
"keywords": ["tabby-plugin"],
|
|
70
|
+
"keywords": ["tabby", "tabby-plugin"],
|
|
41
71
|
"main": "dist/index.js",
|
|
42
72
|
"tabbyPlugin": {
|
|
43
73
|
"name": "tabbyspaces",
|
|
@@ -79,20 +109,45 @@ export default class MyModule {}
|
|
|
79
109
|
|
|
80
110
|
## Data Model
|
|
81
111
|
|
|
82
|
-
- `Workspace` - Main object with name, icon, color, root split
|
|
112
|
+
- `Workspace` - Main object with name, icon, color, root split, launchOnStartup
|
|
83
113
|
- `WorkspaceSplit` - Recursive structure with orientation, ratios, children
|
|
84
|
-
- `WorkspacePane` - Leaf node with profileId, cwd, startupCommand, title
|
|
114
|
+
- `WorkspacePane` - Leaf node with profileId (reference to existing Tabby profile), cwd, startupCommand, title
|
|
85
115
|
|
|
86
|
-
|
|
116
|
+
### Workspace Fields
|
|
117
|
+
| Field | Type | Description |
|
|
118
|
+
|-------|------|-------------|
|
|
119
|
+
| `id` | string | UUID |
|
|
120
|
+
| `name` | string | Display name |
|
|
121
|
+
| `icon` | string | FontAwesome icon name (without fa- prefix) |
|
|
122
|
+
| `color` | string | Hex color |
|
|
123
|
+
| `root` | WorkspaceSplit | Root split node |
|
|
124
|
+
| `launchOnStartup` | boolean | Auto-open when Tabby starts (multiple allowed) |
|
|
87
125
|
|
|
88
|
-
|
|
126
|
+
## Architecture
|
|
89
127
|
|
|
90
|
-
|
|
128
|
+
### Storage
|
|
129
|
+
Plugin stores workspaces in `config.store.tabbyspaces.workspaces`. No profiles are generated in `config.store.profiles`.
|
|
91
130
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
131
|
+
### Opening Workspaces
|
|
132
|
+
1. Generate temporary `split-layout` recovery token from workspace model (includes `options.cwd`)
|
|
133
|
+
2. Open via `ProfilesService.openNewTabForProfile()`
|
|
134
|
+
3. `StartupCommandService` listens for `tabOpened$` events
|
|
135
|
+
4. Match terminal tabs by pane ID (passed via `tabCustomTitle`)
|
|
136
|
+
5. Send startup command via `sendInput()` (if defined)
|
|
137
|
+
|
|
138
|
+
### CWD Handling
|
|
139
|
+
CWD is set via native `options.cwd` in the recovery token. The shell spawns directly in the target directory - no visible `cd` commands.
|
|
140
|
+
|
|
141
|
+
### Profile Support
|
|
142
|
+
Plugin supports both user-defined profiles (`type: 'local'`) and built-in shells (`type: 'local:cmd'`, `'local:powershell'`, `'local:wsl'`, etc.). Profile lookup uses a two-stage approach:
|
|
143
|
+
1. First checks user profiles in `config.store.profiles`
|
|
144
|
+
2. Falls back to cached profiles from `profilesService.getProfiles()` (includes built-ins)
|
|
145
|
+
|
|
146
|
+
### Launch on Startup
|
|
147
|
+
Workspaces with `launchOnStartup: true` are automatically opened when Tabby starts. Multiple workspaces can be marked. Logic is in `toolbar.provider.ts` constructor with 500ms delay to ensure Tabby is ready.
|
|
148
|
+
|
|
149
|
+
### Migration
|
|
150
|
+
`cleanupOrphanedProfiles()` removes any leftover profiles from previous plugin versions (prefix `split-layout:tabbyspaces:`).
|
|
96
151
|
|
|
97
152
|
## References
|
|
98
153
|
|
|
@@ -111,10 +166,20 @@ Linux: ~/.config/tabby/plugins
|
|
|
111
166
|
|
|
112
167
|
### Production install
|
|
113
168
|
```bash
|
|
169
|
+
# Via Tabby Plugin Manager (Settings → Plugins → search "tabbyspaces")
|
|
170
|
+
# Or via npm:
|
|
114
171
|
cd <plugins-folder>
|
|
115
172
|
npm install tabby-tabbyspaces
|
|
116
173
|
```
|
|
117
174
|
|
|
175
|
+
### Production uninstall
|
|
176
|
+
```bash
|
|
177
|
+
# Via Tabby Plugin Manager
|
|
178
|
+
# Or via npm:
|
|
179
|
+
cd <plugins-folder>
|
|
180
|
+
npm uninstall tabby-tabbyspaces
|
|
181
|
+
```
|
|
182
|
+
|
|
118
183
|
## Development
|
|
119
184
|
|
|
120
185
|
### Dev install (once)
|
|
@@ -122,16 +187,24 @@ npm install tabby-tabbyspaces
|
|
|
122
187
|
npm run build:dev
|
|
123
188
|
cd %APPDATA%\tabby\plugins
|
|
124
189
|
npm install "<path-to-repo>/dist-dev"
|
|
190
|
+
# Restart Tabby
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Dev uninstall
|
|
194
|
+
```bash
|
|
195
|
+
cd %APPDATA%\tabby\plugins
|
|
196
|
+
npm uninstall tabby-tabbyspaces-dev
|
|
197
|
+
# Restart Tabby
|
|
125
198
|
```
|
|
126
199
|
|
|
127
200
|
### Dev workflow (after install)
|
|
128
201
|
```bash
|
|
129
|
-
npm run build:dev #
|
|
202
|
+
npm run build:dev # Rebuild
|
|
130
203
|
npm run watch:dev # Watch mode - rebuilds on file changes
|
|
131
|
-
#
|
|
204
|
+
# Restart Tabby after each rebuild
|
|
132
205
|
```
|
|
133
206
|
|
|
134
|
-
npm
|
|
207
|
+
npm creates symlinks for local packages, so each build is immediately available.
|
|
135
208
|
|
|
136
209
|
### Dev vs Prod Isolation
|
|
137
210
|
|
|
@@ -140,13 +213,88 @@ npm auto-creates symlinks for local packages, so each build is immediately avail
|
|
|
140
213
|
| Package | `tabby-tabbyspaces` | `tabby-tabbyspaces-dev` |
|
|
141
214
|
| Config | `config.store.tabbyspaces` | `config.store.tabbyspaces_dev` |
|
|
142
215
|
| Display | "TabbySpaces" | "TabbySpaces DEV" |
|
|
216
|
+
| Toolbar icon | Grid (4 squares) | ⚡ Bolt |
|
|
217
|
+
| Settings icon | `th-large` | `bolt` |
|
|
143
218
|
|
|
144
219
|
Both plugins can be installed simultaneously.
|
|
145
220
|
|
|
221
|
+
## CDP Debugging (via tabby-mcp)
|
|
222
|
+
|
|
223
|
+
Automatizovan način za testiranje plugina kroz Chrome DevTools Protocol.
|
|
224
|
+
|
|
225
|
+
### Workflow
|
|
226
|
+
1. **Pokreni Tabby** sa remote debugging:
|
|
227
|
+
```bash
|
|
228
|
+
cmd.exe /c start "" "C:\Program Files (x86)\Tabby\Tabby.exe" --remote-debugging-port=9222
|
|
229
|
+
```
|
|
230
|
+
2. **Izlistaj targets** sa `mcp__tabby__list_targets`
|
|
231
|
+
3. **Identifikuj target** - oba imaju isti URL, ali:
|
|
232
|
+
- Target 0 = Tvoj radni Tabby (Claude Code session)
|
|
233
|
+
- Target 1 = Debug Tabby instance (pokrenut sa --remote-debugging-port)
|
|
234
|
+
4. **Debug** sa `query`, `execute_js`, `screenshot`
|
|
235
|
+
|
|
236
|
+
**VAŽNO:** Debug-uj NOVI Tabby instance (target 1), ne onaj u kojem radiš!
|
|
237
|
+
|
|
238
|
+
### MCP Tools
|
|
239
|
+
| Tool | Opis |
|
|
240
|
+
|------|------|
|
|
241
|
+
| `mcp__tabby__list_targets` | Lista CDP targets sa index, title, URL, WebSocket |
|
|
242
|
+
| `mcp__tabby__query` | CSS selector → lista elemenata |
|
|
243
|
+
| `mcp__tabby__execute_js` | Izvrši JS (fresh scope, async/await support) |
|
|
244
|
+
| `mcp__tabby__screenshot` | Screenshot Tabby prozora |
|
|
245
|
+
|
|
246
|
+
### Identifikacija DEV verzije
|
|
247
|
+
|
|
248
|
+
DEV verzija ima ⚡ bolt ikonicu (umesto grid-a):
|
|
249
|
+
- **Toolbar**: SVG bolt ikonica u gornjem desnom uglu
|
|
250
|
+
- **Settings sidebar**: FontAwesome `fa-bolt` pored "TabbySpaces DEV"
|
|
251
|
+
|
|
252
|
+
```javascript
|
|
253
|
+
// Proveri da li je DEV verzija aktivna u settings
|
|
254
|
+
document.querySelector('.nav-link .fa-bolt') // DEV
|
|
255
|
+
document.querySelector('.nav-link .fa-th-large') // PROD
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### CSS Selektori Reference
|
|
259
|
+
|
|
260
|
+
| Selektor | Element |
|
|
261
|
+
|----------|---------|
|
|
262
|
+
| `.preview-pane` | Pane u split preview-u |
|
|
263
|
+
| `.preview-pane.selected` | Selektovan pane |
|
|
264
|
+
| `.toolbar-btn` | Toolbar dugmad |
|
|
265
|
+
| `.toolbar-btn[title="Edit pane"]` | Specifično dugme po title-u |
|
|
266
|
+
| `.pane-editor-modal` | Edit pane modal |
|
|
267
|
+
| `.context-menu` | Context menu (desni klik) |
|
|
268
|
+
| `.workspace-item` | Workspace u listi |
|
|
269
|
+
| `.nav-link .fa-bolt` | DEV settings tab ikonica |
|
|
270
|
+
| `.nav-link .fa-th-large` | PROD settings tab ikonica |
|
|
271
|
+
|
|
272
|
+
### Primeri
|
|
273
|
+
```javascript
|
|
274
|
+
// Query elemente
|
|
275
|
+
mcp__tabby__query(target: 1, selector: '.preview-pane')
|
|
276
|
+
|
|
277
|
+
// Klikni na pane i proveri toolbar
|
|
278
|
+
document.querySelectorAll('.preview-pane')[0].click();
|
|
279
|
+
return Array.from(document.querySelectorAll('.toolbar-btn'))
|
|
280
|
+
.map(b => ({title: b.title, disabled: b.disabled}));
|
|
281
|
+
|
|
282
|
+
// Split pane i vrati novi count
|
|
283
|
+
const before = document.querySelectorAll('.preview-pane').length;
|
|
284
|
+
document.querySelectorAll('.preview-pane')[0].click();
|
|
285
|
+
document.querySelector('.toolbar-btn[title="Split Horizontal"]').click();
|
|
286
|
+
return { before, after: document.querySelectorAll('.preview-pane').length };
|
|
287
|
+
|
|
288
|
+
// Async primer - sačekaj Angular change detection
|
|
289
|
+
document.querySelectorAll('.preview-pane')[0].click();
|
|
290
|
+
await new Promise(r => setTimeout(r, 100));
|
|
291
|
+
return document.querySelectorAll('.preview-pane.selected').length;
|
|
292
|
+
```
|
|
293
|
+
|
|
146
294
|
## Known Issues
|
|
147
295
|
|
|
148
296
|
### YAML escape sequences in config.yaml
|
|
149
|
-
If a base profile in Tabby config uses double-quoted strings with wrong escape sequences (e.g., `\t` instead of `\\t`),
|
|
297
|
+
If a base profile in Tabby config uses double-quoted strings with wrong escape sequences (e.g., `\t` instead of `\\t`), shell detection will fail and CWD commands may not work correctly.
|
|
150
298
|
|
|
151
299
|
```yaml
|
|
152
300
|
# WRONG - \t becomes TAB character
|
package/README.md
CHANGED
|
@@ -1,61 +1,71 @@
|
|
|
1
|
-
# TabbySpaces
|
|
2
|
-
|
|
3
|
-
Visual workspace editor for [Tabby](https://tabby.sh). Create split-layout terminal workspaces without touching config files.
|
|
4
|
-
|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
## What it does
|
|
8
|
-
|
|
9
|
-
- Visual editor for split layouts (horizontal/vertical, nested, any depth)
|
|
10
|
-
- Per-pane configuration: profile, working directory, startup command, title
|
|
11
|
-
- One-click workspace launch from toolbar
|
|
12
|
-
-
|
|
13
|
-
- Works with any shell (Bash, Zsh, PowerShell, Nushell, etc.)
|
|
14
|
-
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
1
|
+
# TabbySpaces
|
|
2
|
+
|
|
3
|
+
Visual workspace editor for [Tabby](https://tabby.sh). Create split-layout terminal workspaces without touching config files.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
- Visual editor for split layouts (horizontal/vertical, nested, any depth)
|
|
10
|
+
- Per-pane configuration: profile, working directory, startup command, title
|
|
11
|
+
- One-click workspace launch from toolbar
|
|
12
|
+
- Launch on startup (auto-open workspaces when Tabby starts)
|
|
13
|
+
- Works with any shell (Bash, Zsh, PowerShell, Nushell, etc.)
|
|
14
|
+
|
|
15
|
+
## About this project
|
|
16
|
+
|
|
17
|
+
This plugin was written 100% by [Claude Code](https://claude.ai/code).
|
|
18
|
+
|
|
19
|
+
Igor Halilović had the idea and provided product direction. He hates Angular so much (19 years of web dev, wrote his own TypeScript framework) that he didn't look at this code. Not once. He told Claude Code what he wanted, Claude Code built it.
|
|
20
|
+
|
|
21
|
+
Human provides the *what* and *why*. AI handles the *how*.
|
|
22
|
+
|
|
23
|
+
Here's the fun part: to test this plugin, we built [tabby-mcp](https://github.com/halilc4/tabby-mcp) - an MCP server that lets Claude Code interact with Tabby via CDP. So the AI that built TabbySpaces can now test it too. Full circle.
|
|
24
|
+
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
**From Tabby Plugin Manager:**
|
|
28
|
+
Settings → Plugins → Search "tabbyspaces" → Install
|
|
29
|
+
|
|
30
|
+
**Manual:**
|
|
31
|
+
```bash
|
|
32
|
+
cd ~/.config/tabby/plugins # or %APPDATA%\tabby\plugins on Windows
|
|
33
|
+
npm install tabby-tabbyspaces
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Restart Tabby after installation.
|
|
37
|
+
|
|
38
|
+
## Usage
|
|
39
|
+
|
|
40
|
+
1. Open Settings → TabbySpaces
|
|
41
|
+
2. Create a workspace
|
|
42
|
+
3. Design your split layout visually
|
|
43
|
+
4. Configure each pane (profile, cwd, startup command)
|
|
44
|
+
5. Save and launch from the toolbar
|
|
45
|
+
|
|
46
|
+
### Pane configuration
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
50
|
+
## Roadmap
|
|
51
|
+
|
|
52
|
+
- Hotkey support for quick workspace switching
|
|
53
|
+
- Pane presets (saved configurations for quick adding)
|
|
54
|
+
- Resize panes in editor (adjust split ratios)
|
|
55
|
+
- Drag and drop panes (reorganize layout by dragging)
|
|
56
|
+
|
|
57
|
+
## Tech
|
|
58
|
+
|
|
59
|
+
- Angular 15 (Tabby's framework)
|
|
60
|
+
- TypeScript 4.9
|
|
61
|
+
- Webpack 5
|
|
62
|
+
- Pug templates, SCSS styles
|
|
63
|
+
|
|
64
|
+
## Community
|
|
65
|
+
|
|
66
|
+
- [Discussions](https://github.com/halilc4/tabbyspaces/discussions) - Questions, ideas, show your setup
|
|
67
|
+
- [Issues](https://github.com/halilc4/tabbyspaces/issues) - Bug reports
|
|
68
|
+
|
|
69
|
+
## License
|
|
70
|
+
|
|
71
|
+
MIT
|
package/RELEASE.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Release Workflow
|
|
2
|
+
|
|
3
|
+
## Trenutno stanje
|
|
4
|
+
- **Dev branch**: 15 commit-a ispred main-a
|
|
5
|
+
- **Verzija**: 0.0.1
|
|
6
|
+
- **Tagovi**: Nema
|
|
7
|
+
- **PROD instalacija**: Lokalni symlink (za testiranje)
|
|
8
|
+
- **Status**: U toku testiranja (2026-01-13)
|
|
9
|
+
|
|
10
|
+
## Instalacije u Tabby plugins
|
|
11
|
+
```json
|
|
12
|
+
// %APPDATA%\tabby\plugins\package.json
|
|
13
|
+
{
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"tabby-tabbyspaces": "file:../../../../tabbyspaces/dist", // LOKALNI SYMLINK (za testiranje)
|
|
16
|
+
"tabby-tabbyspaces-dev": "file:../../../../tabbyspaces/dist-dev"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
| Verzija | Config key | Ikonica | Update |
|
|
22
|
+
|---------|------------|---------|--------|
|
|
23
|
+
| PROD | `tabbyspaces` | Grid (`th-large`) | `npm run build` + restart |
|
|
24
|
+
| DEV | `tabbyspaces_dev` | Bolt (`bolt`) | `npm run build:dev` + restart |
|
|
25
|
+
|
|
26
|
+
## Testiranje (ručno)
|
|
27
|
+
|
|
28
|
+
### Funkcionalnosti za testirati
|
|
29
|
+
- [x] Plugin se pojavljuje u Settings sidebar (ikonica `th-large`, ne `bolt`)
|
|
30
|
+
- [x] Toolbar dugme (grid ikonica)
|
|
31
|
+
- [x] Kreiranje novog workspace-a
|
|
32
|
+
- [x] Split layout editing (horizontal/vertical)
|
|
33
|
+
- [x] Pane selection i editing
|
|
34
|
+
- [x] Startup command
|
|
35
|
+
- [x] Launch on startup
|
|
36
|
+
- [x] Čuvanje u `config.store.tabbyspaces`
|
|
37
|
+
|
|
38
|
+
### Install/Uninstall
|
|
39
|
+
- [x] Uninstall PROD (`npm uninstall tabby-tabbyspaces`)
|
|
40
|
+
- [x] Install lokalni symlink (`npm install dist`)
|
|
41
|
+
- [x] Reinstall sa npm registry (`npm install tabby-tabbyspaces`)
|
|
42
|
+
|
|
43
|
+
### Napomene iz testiranja
|
|
44
|
+
- Na prvi pogled funkcionalno radi
|
|
45
|
+
- (dodaj napomene tokom testiranja)
|
|
46
|
+
|
|
47
|
+
### Iterativno testiranje
|
|
48
|
+
```bash
|
|
49
|
+
# Napravi promenu → build → restart Tabby
|
|
50
|
+
npm run build
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Release (kad bude spremno)
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 1. Bump verziju u package.json (npr. "0.1.0")
|
|
57
|
+
|
|
58
|
+
# 2. Final build
|
|
59
|
+
npm run build
|
|
60
|
+
|
|
61
|
+
# 3. Commit
|
|
62
|
+
git add package.json
|
|
63
|
+
git commit -m "Bump version to 0.1.0"
|
|
64
|
+
|
|
65
|
+
# 4. Merge u main
|
|
66
|
+
git checkout main
|
|
67
|
+
git merge dev
|
|
68
|
+
|
|
69
|
+
# 5. Tag
|
|
70
|
+
git tag v0.1.0
|
|
71
|
+
|
|
72
|
+
# 6. Push
|
|
73
|
+
git push origin main
|
|
74
|
+
git push --tags
|
|
75
|
+
|
|
76
|
+
# 7. Publish na npm
|
|
77
|
+
cd dist
|
|
78
|
+
npm publish
|
|
79
|
+
|
|
80
|
+
# 8. Vrati se na dev
|
|
81
|
+
git checkout dev
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Posle testiranja (opciono)
|
|
85
|
+
|
|
86
|
+
Vrati PROD na npm registry verziju:
|
|
87
|
+
```bash
|
|
88
|
+
cd %APPDATA%\tabby\plugins
|
|
89
|
+
npm uninstall tabby-tabbyspaces
|
|
90
|
+
npm install tabby-tabbyspaces
|
|
91
|
+
```
|