tabminal 2.0.16 → 2.0.18
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/ACP_PLANING.md +249 -162
- package/AGENTS.md +59 -59
- package/README.md +3 -3
- package/package.json +1 -1
package/ACP_PLANING.md
CHANGED
|
@@ -1,184 +1,271 @@
|
|
|
1
|
-
# ACP
|
|
1
|
+
# ACP Planning
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Last updated: 2026-03-27
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
The web UI adds an Agent panel integrated into the existing workspace/editor
|
|
8
|
-
area and supports multiple concurrent agent tabs per host.
|
|
5
|
+
This file is no longer a pure implementation plan.
|
|
6
|
+
It is now the ACP status ledger for Tabminal:
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
- what shipped
|
|
9
|
+
- what is stable
|
|
10
|
+
- what remains open
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
practical.
|
|
15
|
-
- Keep lifecycle bounded: lazy start, reusable while tabs are open, and
|
|
16
|
-
cleaned up after inactivity.
|
|
17
|
-
- Host isolation remains strict: each agent runtime and tab belongs to one
|
|
18
|
-
host.
|
|
19
|
-
- MVP should be usable before advanced ACP capabilities are added.
|
|
12
|
+
Use `/Users/leask/Documents/Tabminal/AGENTS.md` as the broader engineering
|
|
13
|
+
handoff document. Use this file as the ACP-specific roadmap/status snapshot.
|
|
20
14
|
|
|
21
|
-
##
|
|
15
|
+
## 1) Goal
|
|
16
|
+
|
|
17
|
+
Integrate ACP-based coding agents into Tabminal without building custom agents
|
|
18
|
+
in-repo. Agents should run on the Tabminal host, be managed by the Tabminal
|
|
19
|
+
backend, and feel native inside the existing workspace/editor UI.
|
|
20
|
+
|
|
21
|
+
## 2) Current Architecture
|
|
22
22
|
|
|
23
23
|
### Backend
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Implemented:
|
|
26
|
+
|
|
27
|
+
- ACP supervisor in `/Users/leask/Documents/Tabminal/src/acp-manager.mjs`
|
|
28
|
+
- Built-in host-local agent definitions:
|
|
29
|
+
- Gemini CLI
|
|
30
|
+
- Codex CLI
|
|
31
|
+
- Claude Agent
|
|
32
|
+
- GitHub Copilot
|
|
33
|
+
- ACP Test Agent when `TABMINAL_ENABLE_TEST_AGENT=1`
|
|
34
|
+
- Lazy runtime startup
|
|
35
|
+
- Runtime reuse while tabs are active
|
|
36
|
+
- Idle cleanup
|
|
37
|
+
- ACP websocket fan-out to browser clients
|
|
38
|
+
- Session restore for ACP runtimes that support `loadSession`
|
|
39
|
+
- Per-agent saved config/env persistence
|
|
26
40
|
|
|
27
|
-
|
|
28
|
-
- List supported agent definitions available on the host.
|
|
29
|
-
- Start ACP runtimes on demand.
|
|
30
|
-
- Reuse ACP runtime processes while tabs/sessions are active.
|
|
31
|
-
- Create ACP sessions within a runtime.
|
|
32
|
-
- Bridge ACP events to browser clients over a dedicated WebSocket.
|
|
33
|
-
- Expose minimal approval surfaces later; MVP focuses on prompt/stream/cancel.
|
|
41
|
+
### Frontend
|
|
34
42
|
|
|
35
|
-
|
|
36
|
-
- Primary: stdio-launched ACP agents.
|
|
37
|
-
- Future: attach to TCP ACP servers for tools like GitHub Copilot CLI.
|
|
43
|
+
Implemented:
|
|
38
44
|
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
|
|
45
|
+
- Host-scoped agent dropdown from the sidebar
|
|
46
|
+
- Agent tabs inside the shared workspace tab strip
|
|
47
|
+
- Transcript rendering with message/tool/permission/plan history
|
|
48
|
+
- Composer with send/stop, slash-command suggestions, attachments, and keyboard
|
|
49
|
+
shortcuts
|
|
50
|
+
- Mode/model/thought-level/permission selectors
|
|
51
|
+
- Managed terminal summaries and `Jump in`
|
|
52
|
+
- Usage HUD
|
|
53
|
+
- Plan panel that archives into transcript history once complete
|
|
54
|
+
- Agent-specific workspace restore and focus behavior
|
|
44
55
|
|
|
45
|
-
|
|
56
|
+
## 3) Completed Scope
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
- Each agent tab streams conversation updates and supports prompt send/cancel.
|
|
55
|
-
|
|
56
|
-
MVP UI:
|
|
57
|
-
- Agent tabs render in the editor workspace.
|
|
58
|
-
- Transcript area with coalesced message stream.
|
|
59
|
-
- Prompt textarea + single send/stop button.
|
|
60
|
-
- Mode picker, new chat action, and slash-command chips when available.
|
|
61
|
-
- Status row with host, cwd, mode, and runtime/session status.
|
|
62
|
-
|
|
63
|
-
## Reuse Strategy
|
|
64
|
-
|
|
65
|
-
Use:
|
|
66
|
-
- `@agentclientprotocol/sdk` for protocol/client implementation.
|
|
67
|
-
- ACP Registry later for agent metadata discovery.
|
|
68
|
-
|
|
69
|
-
Do not directly embed:
|
|
70
|
-
- Chrome ACP web client.
|
|
71
|
-
- ACP UI desktop frontend.
|
|
72
|
-
|
|
73
|
-
Reason:
|
|
74
|
-
- They are standalone apps, not embeddable widgets.
|
|
75
|
-
- Tabminal needs native integration with existing host/session/workspace state.
|
|
76
|
-
|
|
77
|
-
## MVP Scope
|
|
78
|
-
|
|
79
|
-
### Phase 1
|
|
80
|
-
|
|
81
|
-
Status:
|
|
82
|
-
- Implemented on `acp` branch and usable with real browser smoke.
|
|
83
|
-
- Backend ACP supervisor, API, and WS fan-out are live.
|
|
84
|
-
- Frontend agent tabs, transcript rendering, prompt send/cancel, and
|
|
85
|
-
permission resolution are live.
|
|
86
|
-
- Agent tab metadata now persists on the backend and restores across backend
|
|
87
|
-
restart for ACP runtimes that support `loadSession`.
|
|
88
|
-
- Agent panel interaction polish is live:
|
|
89
|
-
- duplicate agent tabs auto-number as `#1`, `#2`, ...
|
|
90
|
-
- `Enter` sends
|
|
91
|
-
- `Esc` stops active runs
|
|
92
|
-
- `Ctrl+J` and `Shift+Enter` insert newlines
|
|
93
|
-
- mode switching and new-chat flows are available in-panel
|
|
94
|
-
- tool calls and permission requests render as structured cards
|
|
95
|
-
- Verified with:
|
|
96
|
-
- `npm run lint`
|
|
97
|
-
- `npm test`
|
|
98
|
-
- browser smoke against isolated local ACP test agent
|
|
99
|
-
- browser restart-restore validation against backend-persisted ACP tabs
|
|
100
|
-
- Current polish fixes already applied:
|
|
101
|
-
- Codex token stream is coalesced into a single assistant message instead of
|
|
102
|
-
one message per chunk.
|
|
103
|
-
- User prompts are no longer duplicated when an ACP runtime echoes
|
|
104
|
-
`user_message_chunk` updates after local optimistic insertion.
|
|
105
|
-
- Gemini definition availability is disabled with reason
|
|
106
|
-
`API key missing` when no key is configured.
|
|
107
|
-
- Agent panel typography has been reduced to align with the existing
|
|
108
|
-
workspace/editor density.
|
|
109
|
-
|
|
110
|
-
Backend:
|
|
111
|
-
- ACP supervisor module.
|
|
112
|
-
- Built-in agent definitions for Gemini CLI, Codex CLI adapter, Claude adapter,
|
|
113
|
-
and Copilot CLI ACP server descriptor.
|
|
114
|
-
- REST endpoints:
|
|
58
|
+
The following items are effectively shipped and usable.
|
|
59
|
+
|
|
60
|
+
### 3.1 Core ACP plumbing
|
|
61
|
+
|
|
62
|
+
- ACP dependency integrated
|
|
63
|
+
- Backend ACP supervisor live
|
|
64
|
+
- REST endpoints live:
|
|
115
65
|
- `GET /api/agents`
|
|
66
|
+
- `GET /api/agents/config`
|
|
67
|
+
- `PUT /api/agents/config/:agentId`
|
|
68
|
+
- `DELETE /api/agents/config/:agentId`
|
|
116
69
|
- `POST /api/agents/tabs`
|
|
117
70
|
- `POST /api/agents/tabs/:tabId/prompt`
|
|
118
71
|
- `POST /api/agents/tabs/:tabId/cancel`
|
|
119
72
|
- `POST /api/agents/tabs/:tabId/mode`
|
|
73
|
+
- `POST /api/agents/tabs/:tabId/config`
|
|
120
74
|
- `POST /api/agents/tabs/:tabId/permissions/:permissionId`
|
|
121
75
|
- `DELETE /api/agents/tabs/:tabId`
|
|
122
|
-
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
- Agent
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
|
|
135
|
-
###
|
|
136
|
-
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
-
|
|
141
|
-
-
|
|
142
|
-
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
76
|
+
- ACP websocket endpoint live
|
|
77
|
+
|
|
78
|
+
### 3.2 Agent tab UX
|
|
79
|
+
|
|
80
|
+
- Agent tabs coexist with file tabs and pinned terminal tabs
|
|
81
|
+
- Duplicate agent tabs auto-number
|
|
82
|
+
- `Enter` sends
|
|
83
|
+
- `Shift+Enter` and `Ctrl+J` insert newline
|
|
84
|
+
- `Esc` stops active runs
|
|
85
|
+
- `Ctrl+Shift+A` opens the agent menu
|
|
86
|
+
- Slash-command menu opens upward as floating overlay
|
|
87
|
+
- Keyboard navigation inside slash-command menu is implemented
|
|
88
|
+
|
|
89
|
+
### 3.3 Transcript and tool rendering
|
|
90
|
+
|
|
91
|
+
- Coalesced assistant message streaming
|
|
92
|
+
- Optimistic user message insertion
|
|
93
|
+
- De-duplication when runtime echoes user chunks
|
|
94
|
+
- Structured tool-call cards
|
|
95
|
+
- Structured permission cards
|
|
96
|
+
- Diff rendering
|
|
97
|
+
- Code/resource rendering
|
|
98
|
+
- Terminal output rendering inside tool cards
|
|
99
|
+
- Path link rendering
|
|
100
|
+
- Running-terminal activity summary
|
|
101
|
+
|
|
102
|
+
### 3.4 Managed terminal flow
|
|
103
|
+
|
|
104
|
+
- ACP tool calls can create managed terminal sessions
|
|
105
|
+
- `Jump in` switches to the real terminal session when still alive
|
|
106
|
+
- Focus-stealing bug after `Jump in` has been fixed
|
|
107
|
+
- Hidden pinned terminals no longer report bogus tiny sizes to the backend
|
|
108
|
+
|
|
109
|
+
### 3.5 Persistence and restore
|
|
110
|
+
|
|
111
|
+
- Agent tab metadata persists on backend
|
|
112
|
+
- Agent config persists on backend
|
|
113
|
+
- Transcript/tool/permission/plan state persists
|
|
114
|
+
- Restore works across backend restart for runtimes that support `loadSession`
|
|
115
|
+
- Restore no longer wrongly penalizes built-in agent availability on startup
|
|
116
|
+
|
|
117
|
+
### 3.6 Usage / status UI
|
|
118
|
+
|
|
119
|
+
- Usage HUD implemented
|
|
120
|
+
- CSS-only expanded HUD layout stabilized
|
|
121
|
+
- Plan panel implemented
|
|
122
|
+
- Completed plan moves into transcript history instead of permanently occupying
|
|
123
|
+
composer-adjacent UI
|
|
124
|
+
- Transcript auto-scroll logic now follows the correct “only pin if already at
|
|
125
|
+
bottom” rule
|
|
126
|
+
|
|
127
|
+
### 3.7 Test tooling
|
|
128
|
+
|
|
129
|
+
- ACP Test Agent supports real slash-command scenarios:
|
|
130
|
+
- `/demo`
|
|
131
|
+
- `/plan`
|
|
132
|
+
- `/diff`
|
|
133
|
+
- `/permission`
|
|
134
|
+
- `/cancel`
|
|
135
|
+
- `/stale`
|
|
136
|
+
- `/order`
|
|
137
|
+
- `/fail`
|
|
138
|
+
- ACP browser smoke covers current UI shape
|
|
139
|
+
- ACP manager tests cover restore, prompt attachments, config, availability, and
|
|
140
|
+
slash commands
|
|
141
|
+
|
|
142
|
+
## 4) Stable Contracts
|
|
143
|
+
|
|
144
|
+
These should now be treated as product contracts, not experiments.
|
|
145
|
+
|
|
146
|
+
- ACP agents are host-scoped.
|
|
147
|
+
- Agent tabs do not require the file tree to be open.
|
|
148
|
+
- Workspace tabs should remain visible if there is any file tab, agent tab, or
|
|
149
|
+
pinned terminal tab.
|
|
150
|
+
- `Jump in` is a management path, not a read-only preview, while the terminal is
|
|
151
|
+
still alive.
|
|
152
|
+
- Internal shell bootstrap commands such as `TABMINAL_SHELL_READY=1` must never
|
|
153
|
+
surface as user notifications.
|
|
154
|
+
- ACP availability should reflect the backend runtime environment, not only the
|
|
155
|
+
developer's interactive shell.
|
|
156
|
+
- On small screens, agent config selectors collapse to icon-only affordances.
|
|
157
|
+
|
|
158
|
+
## 5) Remaining Work
|
|
159
|
+
|
|
160
|
+
This is the actual remaining ACP backlog.
|
|
161
|
+
|
|
162
|
+
### 5.1 Still open
|
|
163
|
+
|
|
164
|
+
#### A) Registry-driven install/setup UX
|
|
165
|
+
|
|
166
|
+
Status: not done
|
|
167
|
+
|
|
168
|
+
Missing:
|
|
169
|
+
|
|
170
|
+
- guided install flow for agents that are unavailable
|
|
171
|
+
- first-class setup UX for installing required CLIs
|
|
172
|
+
- richer host diagnostics for why a definition is unavailable
|
|
173
|
+
|
|
174
|
+
Current state:
|
|
175
|
+
|
|
176
|
+
- availability reasons are shown
|
|
177
|
+
- some config/setup flows exist
|
|
178
|
+
- but this is not yet a complete install-onboarding UX
|
|
179
|
+
|
|
180
|
+
#### B) Explicit TCP ACP runtime support in the UI
|
|
181
|
+
|
|
182
|
+
Status: not done
|
|
183
|
+
|
|
184
|
+
Missing:
|
|
185
|
+
|
|
186
|
+
- user-visible workflow for attaching to TCP ACP servers
|
|
187
|
+
- transport selection UX
|
|
188
|
+
- connection lifecycle UX for non-stdio ACP runtimes
|
|
189
|
+
|
|
190
|
+
Current state:
|
|
191
|
+
|
|
192
|
+
- architecture originally allowed for this direction
|
|
193
|
+
- product currently operates around stdio-launched/local CLI definitions
|
|
194
|
+
|
|
195
|
+
#### C) Dedicated conversation history browser
|
|
196
|
+
|
|
197
|
+
Status: not done
|
|
198
|
+
|
|
199
|
+
Missing:
|
|
200
|
+
|
|
201
|
+
- independent history browser for ACP conversations
|
|
202
|
+
- browsing/searching old conversations outside the current terminal/workspace
|
|
203
|
+
session context
|
|
204
|
+
|
|
205
|
+
Current state:
|
|
206
|
+
|
|
207
|
+
- transcript restores with the tab
|
|
208
|
+
- completed plans archive into the transcript
|
|
209
|
+
- but there is no standalone conversation history surface
|
|
210
|
+
|
|
211
|
+
### 5.2 Nice-to-have follow-up work
|
|
212
|
+
|
|
213
|
+
These are not blockers, but they are logical next ACP improvements.
|
|
214
|
+
|
|
215
|
+
- stronger browser smoke coverage for touch/mobile-only ACP interactions
|
|
216
|
+
- clearer visual distinction between running, attention, and completed agent
|
|
217
|
+
states at scale
|
|
218
|
+
- broader multi-host ACP smoke scenarios
|
|
219
|
+
- richer availability/setup diagnostics in the UI
|
|
220
|
+
|
|
221
|
+
## 6) What Was Originally Deferred But Is Now Done
|
|
222
|
+
|
|
223
|
+
These items were previously listed as deferred and should no longer be treated
|
|
224
|
+
as open backlog:
|
|
225
|
+
|
|
226
|
+
- prompt/file attachments
|
|
227
|
+
- diff rendering in tool outputs
|
|
228
|
+
- code/resource rendering in tool outputs
|
|
229
|
+
- terminal execution transcript UI for ACP tool calls
|
|
230
|
+
|
|
231
|
+
## 7) Test and Verification Status
|
|
232
|
+
|
|
233
|
+
Current ACP verification surface:
|
|
234
|
+
|
|
171
235
|
- `npm run lint`
|
|
172
236
|
- `npm test`
|
|
173
|
-
-
|
|
174
|
-
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
237
|
+
- `npm run build`
|
|
238
|
+
- browser smoke via
|
|
239
|
+
`/Users/leask/Documents/Tabminal/scripts/acp-browser-smoke.mjs`
|
|
240
|
+
|
|
241
|
+
Recommended ACP manual spot-checks when behavior changes:
|
|
242
|
+
|
|
243
|
+
1. Start with `TABMINAL_ENABLE_TEST_AGENT=1`
|
|
244
|
+
2. Run `/demo`
|
|
245
|
+
3. Verify:
|
|
246
|
+
- agent menu
|
|
247
|
+
- slash-command menu
|
|
248
|
+
- plan panel
|
|
249
|
+
- usage HUD
|
|
250
|
+
- tool call cards
|
|
251
|
+
- managed terminal
|
|
252
|
+
- `Jump in`
|
|
253
|
+
- transcript scroll behavior
|
|
254
|
+
4. Run `/permission`
|
|
255
|
+
5. Run `/cancel`
|
|
256
|
+
6. Reload and verify restore
|
|
257
|
+
|
|
258
|
+
## 8) Recommendation
|
|
259
|
+
|
|
260
|
+
ACP is no longer in “MVP not landed” status.
|
|
261
|
+
It is in “shipped, actively polished, with a short remaining backlog” status.
|
|
262
|
+
|
|
263
|
+
Practical summary:
|
|
264
|
+
|
|
265
|
+
- Core ACP product: done
|
|
266
|
+
- ACP UI polish: largely done
|
|
267
|
+
- ACP infra/test surface: done
|
|
268
|
+
- Remaining strategic work: 3 real items
|
|
269
|
+
|
|
270
|
+
That remaining scope is small enough that this file should stay as a status
|
|
271
|
+
ledger, not a large speculative design doc.
|
package/AGENTS.md
CHANGED
|
@@ -10,14 +10,14 @@ ACP agent UX, or mobile ergonomics.
|
|
|
10
10
|
## 1) Project Snapshot
|
|
11
11
|
|
|
12
12
|
- Runtime: Node.js `>= 22`, ESM project.
|
|
13
|
-
- Backend entry:
|
|
14
|
-
- Frontend entry:
|
|
13
|
+
- Backend entry: `src/server.mjs`
|
|
14
|
+
- Frontend entry: `public/app.js`
|
|
15
15
|
- PWA shell:
|
|
16
|
-
-
|
|
17
|
-
-
|
|
16
|
+
- `public/index.html`
|
|
17
|
+
- `public/sw.js`
|
|
18
18
|
- Native app workspace:
|
|
19
|
-
-
|
|
20
|
-
-
|
|
19
|
+
- `apps/Apple`
|
|
20
|
+
- `apps/ghostty-vendor`
|
|
21
21
|
|
|
22
22
|
Current product shape:
|
|
23
23
|
|
|
@@ -46,8 +46,8 @@ Important persistence files under `~/.tabminal`:
|
|
|
46
46
|
- Do not merge runtime state across hosts.
|
|
47
47
|
|
|
48
48
|
Relevant code:
|
|
49
|
-
-
|
|
50
|
-
-
|
|
49
|
+
- `public/app.js`
|
|
50
|
+
- `public/modules/session-meta.js`
|
|
51
51
|
|
|
52
52
|
### 2.2 Auth model
|
|
53
53
|
|
|
@@ -57,7 +57,7 @@ Relevant code:
|
|
|
57
57
|
- Sub-hosts may require Cloudflare Access login without password change.
|
|
58
58
|
|
|
59
59
|
Relevant code:
|
|
60
|
-
-
|
|
60
|
+
- `public/app.js`
|
|
61
61
|
- `ServerClient.handleUnauthorized`
|
|
62
62
|
- `ServerClient.handleAccessRedirect`
|
|
63
63
|
|
|
@@ -72,8 +72,8 @@ Relevant code:
|
|
|
72
72
|
- Removing a host should also remove any stale local token keyed to that host.
|
|
73
73
|
|
|
74
74
|
Relevant code:
|
|
75
|
-
-
|
|
76
|
-
-
|
|
75
|
+
- `public/app.js`
|
|
76
|
+
- `src/persistence.mjs`
|
|
77
77
|
|
|
78
78
|
### 2.4 Host registry persistence
|
|
79
79
|
|
|
@@ -84,9 +84,9 @@ Relevant code:
|
|
|
84
84
|
- On page load, host list restores only after main-host auth succeeds.
|
|
85
85
|
|
|
86
86
|
Relevant code:
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
87
|
+
- `public/app.js`
|
|
88
|
+
- `src/server.mjs`
|
|
89
|
+
- `src/persistence.mjs`
|
|
90
90
|
|
|
91
91
|
### 2.5 Deduplication and self-host skip
|
|
92
92
|
|
|
@@ -98,8 +98,8 @@ Relevant code:
|
|
|
98
98
|
the current client assumptions.
|
|
99
99
|
|
|
100
100
|
Relevant code:
|
|
101
|
-
-
|
|
102
|
-
-
|
|
101
|
+
- `public/modules/url-auth.js`
|
|
102
|
+
- `public/app.js`
|
|
103
103
|
|
|
104
104
|
### 2.6 Session creation ownership
|
|
105
105
|
|
|
@@ -109,8 +109,8 @@ Relevant code:
|
|
|
109
109
|
- recreate one main-host session if user closes the last session
|
|
110
110
|
|
|
111
111
|
Relevant code:
|
|
112
|
-
-
|
|
113
|
-
-
|
|
112
|
+
- `public/app.js`
|
|
113
|
+
- `src/server.mjs`
|
|
114
114
|
|
|
115
115
|
### 2.7 Polling and heartbeat
|
|
116
116
|
|
|
@@ -119,7 +119,7 @@ Relevant code:
|
|
|
119
119
|
- Do not weaken these without measuring UX fallout.
|
|
120
120
|
|
|
121
121
|
Relevant code:
|
|
122
|
-
-
|
|
122
|
+
- `public/app.js`
|
|
123
123
|
|
|
124
124
|
### 2.8 Cloudflare Access handling
|
|
125
125
|
|
|
@@ -130,8 +130,8 @@ Relevant code:
|
|
|
130
130
|
- Reconnect UI may open the host root in a new tab for Access login.
|
|
131
131
|
|
|
132
132
|
Relevant code:
|
|
133
|
-
-
|
|
134
|
-
-
|
|
133
|
+
- `public/app.js`
|
|
134
|
+
- `public/modules/url-auth.js`
|
|
135
135
|
|
|
136
136
|
### 2.9 Runtime version and PWA coherence
|
|
137
137
|
|
|
@@ -141,10 +141,10 @@ Relevant code:
|
|
|
141
141
|
- Service worker is versioned the same way.
|
|
142
142
|
|
|
143
143
|
Relevant code:
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
147
|
-
-
|
|
144
|
+
- `src/server.mjs`
|
|
145
|
+
- `public/app.js`
|
|
146
|
+
- `public/index.html`
|
|
147
|
+
- `public/sw.js`
|
|
148
148
|
|
|
149
149
|
## 3) ACP Design Contracts
|
|
150
150
|
|
|
@@ -161,8 +161,8 @@ Relevant code:
|
|
|
161
161
|
- ACP Test Agent when `TABMINAL_ENABLE_TEST_AGENT=1`
|
|
162
162
|
|
|
163
163
|
Relevant code:
|
|
164
|
-
-
|
|
165
|
-
-
|
|
164
|
+
- `src/acp-manager.mjs`
|
|
165
|
+
- `src/acp-test-agent.mjs`
|
|
166
166
|
|
|
167
167
|
### 3.2 ACP workspace model
|
|
168
168
|
|
|
@@ -174,8 +174,8 @@ Relevant code:
|
|
|
174
174
|
tab, or pinned terminal tab.
|
|
175
175
|
|
|
176
176
|
Relevant code:
|
|
177
|
-
-
|
|
178
|
-
-
|
|
177
|
+
- `public/app.js`
|
|
178
|
+
- `public/styles.css`
|
|
179
179
|
|
|
180
180
|
### 3.3 Agent dropdown and toggle behavior
|
|
181
181
|
|
|
@@ -195,7 +195,7 @@ Relevant code:
|
|
|
195
195
|
- Agent sync must never steal focus back from a session the user jumped into.
|
|
196
196
|
|
|
197
197
|
Relevant code:
|
|
198
|
-
-
|
|
198
|
+
- `public/app.js`
|
|
199
199
|
|
|
200
200
|
### 3.5 Hidden terminal resize contract
|
|
201
201
|
|
|
@@ -206,7 +206,7 @@ Relevant code:
|
|
|
206
206
|
- This prevents broken sidebar previews caused by tiny hidden-layout sizes.
|
|
207
207
|
|
|
208
208
|
Relevant code:
|
|
209
|
-
-
|
|
209
|
+
- `public/app.js`
|
|
210
210
|
|
|
211
211
|
### 3.6 Shell ready noise filtering
|
|
212
212
|
|
|
@@ -214,9 +214,9 @@ Relevant code:
|
|
|
214
214
|
- They must not produce user notifications or visible execution-completed noise.
|
|
215
215
|
|
|
216
216
|
Relevant code:
|
|
217
|
-
-
|
|
218
|
-
-
|
|
219
|
-
-
|
|
217
|
+
- `shell/tabminal-bashrc`
|
|
218
|
+
- `src/terminal-session.mjs`
|
|
219
|
+
- `public/app.js`
|
|
220
220
|
|
|
221
221
|
### 3.7 Agent plan behavior
|
|
222
222
|
|
|
@@ -236,7 +236,7 @@ Relevant code:
|
|
|
236
236
|
back down.
|
|
237
237
|
|
|
238
238
|
Relevant code:
|
|
239
|
-
-
|
|
239
|
+
- `public/app.js`
|
|
240
240
|
|
|
241
241
|
### 3.9 Slash command menu contract
|
|
242
242
|
|
|
@@ -247,9 +247,9 @@ Relevant code:
|
|
|
247
247
|
- Current shortcut to open agent menu is `Ctrl+Shift+A`.
|
|
248
248
|
|
|
249
249
|
Relevant code:
|
|
250
|
-
-
|
|
251
|
-
-
|
|
252
|
-
-
|
|
250
|
+
- `public/app.js`
|
|
251
|
+
- `public/styles.css`
|
|
252
|
+
- `public/index.html`
|
|
253
253
|
|
|
254
254
|
### 3.10 Usage HUD contract
|
|
255
255
|
|
|
@@ -261,12 +261,12 @@ Relevant code:
|
|
|
261
261
|
updates.
|
|
262
262
|
|
|
263
263
|
Relevant code:
|
|
264
|
-
-
|
|
265
|
-
-
|
|
264
|
+
- `public/styles.css`
|
|
265
|
+
- `public/app.js`
|
|
266
266
|
|
|
267
267
|
## 4) ACP Status and Remaining Gaps
|
|
268
268
|
|
|
269
|
-
|
|
269
|
+
`ACP_PLANING.md` is partly stale.
|
|
270
270
|
|
|
271
271
|
Implemented from that plan:
|
|
272
272
|
|
|
@@ -297,39 +297,39 @@ Implication:
|
|
|
297
297
|
## 5) File Map for Fast Onboarding
|
|
298
298
|
|
|
299
299
|
Backend:
|
|
300
|
-
-
|
|
300
|
+
- `src/server.mjs`
|
|
301
301
|
- API routes, WS upgrade, auth, runtime boot id
|
|
302
|
-
-
|
|
302
|
+
- `src/config.mjs`
|
|
303
303
|
- merged config parser and validation
|
|
304
|
-
-
|
|
304
|
+
- `src/auth.mjs`
|
|
305
305
|
- password hashing and auth checks
|
|
306
|
-
-
|
|
306
|
+
- `src/persistence.mjs`
|
|
307
307
|
- sessions, cluster registry, ACP tab/config persistence
|
|
308
|
-
-
|
|
308
|
+
- `src/terminal-manager.mjs`
|
|
309
309
|
- PTY lifecycle and persistence
|
|
310
|
-
-
|
|
310
|
+
- `src/terminal-session.mjs`
|
|
311
311
|
- terminal stream parsing, shell AI path, execution model
|
|
312
|
-
-
|
|
312
|
+
- `src/acp-manager.mjs`
|
|
313
313
|
- ACP definitions, runtime supervision, ACP tab lifecycle
|
|
314
|
-
-
|
|
314
|
+
- `src/acp-test-agent.mjs`
|
|
315
315
|
- local ACP smoke agent with slash-command fixtures
|
|
316
316
|
|
|
317
317
|
Frontend:
|
|
318
|
-
-
|
|
318
|
+
- `public/app.js`
|
|
319
319
|
- nearly all UI orchestration lives here
|
|
320
|
-
-
|
|
320
|
+
- `public/modules/url-auth.js`
|
|
321
321
|
- URL normalization and auth helpers
|
|
322
|
-
-
|
|
322
|
+
- `public/modules/session-meta.js`
|
|
323
323
|
- host display and compact path formatting
|
|
324
|
-
-
|
|
324
|
+
- `public/styles.css`
|
|
325
325
|
- all current UI contracts and responsive rules
|
|
326
|
-
-
|
|
326
|
+
- `public/index.html`
|
|
327
327
|
- shell DOM, layout bootstrapping, shortcuts modal
|
|
328
328
|
|
|
329
329
|
Tests and smoke:
|
|
330
|
-
-
|
|
330
|
+
- `test/acp-manager.mjs`
|
|
331
331
|
- richest ACP coverage
|
|
332
|
-
-
|
|
332
|
+
- `scripts/acp-browser-smoke.mjs`
|
|
333
333
|
- browser ACP smoke against a real running app and real Chrome remote debug
|
|
334
334
|
|
|
335
335
|
## 6) Debug and Testing Guidance
|
|
@@ -367,7 +367,7 @@ Use these instead of inventing ad-hoc prompts when validating ACP UI.
|
|
|
367
367
|
|
|
368
368
|
Preferred browser smoke:
|
|
369
369
|
|
|
370
|
-
-
|
|
370
|
+
- `scripts/acp-browser-smoke.mjs`
|
|
371
371
|
|
|
372
372
|
It supports:
|
|
373
373
|
|
|
@@ -394,7 +394,7 @@ If an ACP agent appears inconsistently available:
|
|
|
394
394
|
- Restore failures should not temporarily mark built-in definitions unavailable.
|
|
395
395
|
|
|
396
396
|
Relevant code:
|
|
397
|
-
-
|
|
397
|
+
- `src/acp-manager.mjs`
|
|
398
398
|
|
|
399
399
|
### 6.5 Focus and session-debug tips
|
|
400
400
|
|
|
@@ -455,7 +455,7 @@ Expected behavior:
|
|
|
455
455
|
## 9) Deployment and Ops Notes
|
|
456
456
|
|
|
457
457
|
- Local helper script:
|
|
458
|
-
-
|
|
458
|
+
- `reploy.sh`
|
|
459
459
|
- It restarts one macOS launchctl node plus several Linux `pm2` nodes via SSH.
|
|
460
460
|
- It includes aggressive cleanup behavior on Linux nodes; use carefully.
|
|
461
461
|
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# `t>` Tabminal
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> `Tab(ter)minal`, a Cloud-Native terminal and ACP agent workspace for desktop, tablet, and phone.
|
|
4
4
|
|
|
5
5
|
`Tabminal` combines persistent server-side terminal sessions, a built-in
|
|
6
6
|
workspace, multi-host access, and Agent Client Protocol (ACP) integrations in
|
|
@@ -267,8 +267,8 @@ reliable.
|
|
|
267
267
|
|
|
268
268
|
## Architecture Snapshot
|
|
269
269
|
|
|
270
|
-
- Backend: `Node.js
|
|
271
|
-
- Frontend: [`Vanilla JS 😝`](http://vanilla-js.com/), `xterm.js
|
|
270
|
+
- Backend: [`Node.js`](https://nodejs.org/), [`utilitas`](https://github.com/leask/utilitas), [`Koa`](https://github.com/koajs/koa), [`node-pty`](https://github.com/Tyriar/node-pty), [`WebSocket`](https://github.com/websockets/ws), [`ACP SDK`](https://github.com/acp-kit/acp-sdk)
|
|
271
|
+
- Frontend: [`Vanilla JS 😝`](http://vanilla-js.com/), [`xterm.js`](https://github.com/xtermjs/xterm.js), [`Monaco Editor`](https://github.com/microsoft/monaco-editor)
|
|
272
272
|
- Persistence: host-local files under `~/.tabminal`
|
|
273
273
|
- Native clients and packaging work live under:
|
|
274
274
|
- `apps/Apple`
|