feat: v2.6.0 — Chat UI composer (+ menu, project files, activity panel, permission mode, Stop), git on a workspace's extra folders (#70), long paste as a file (#68), S3 server mode (experimental)

Chat UI:
- Each Claude/Codex session keeps its own chat/terminal view; Settings only
  sets how new sessions open.
- Composer + menu: upload, project files and folders (#54, also dragged from
  the Files/Changes tree), context files, recent uploads, skills, plugins.
- Activity side panel (progress, outputs, files read, uploads, memory,
  skills, connectors) with a file preview; edited-file counts per turn.
- Permission-mode chip (Shift+Tab steps, read back from the pane:
  server/lib/pane-mode.js, GET|POST /api/run/:id/permission-mode).
- Stop (Esc) while the main agent works; the status is checked per agent
  (with session_id /api/agents ignores its status filter) and re-read every
  5 s while Stop shows.
- Dropped images shown in the conversation (GET /api/run/drop/:name, the
  requester's own drop dir), full-size viewer.
- A plain-text paste over 5,000 characters is attached as pasted-text.txt,
  so no prompt reaches tmux/argv limits (#68).

Changes panel: every /api/lanes/:id/git* route takes ?source=<lane_sources
id> (sourceFolder; ENOSOURCE otherwise) and a folder picker switches the
whole panel to a workspace's extra folder (#70).

Server mode S3 (one Linux user per account) — experimental, verified with
fake sudo plus a P6 managed-settings spike on a test account:
- member tmux listing runs in the background (cached, 15 s => unknown);
- transcript snapshot copy is async, chunked, temp file + rename;
- Express Layer patch only on Express 4;
- tmux capturePane/sendKey go to the member's own server.

Docs: the multi-user design moved in as docs/plans/server-mode/README.md
(the AgentHub-Server repo is gone); S3-PLAN P6 result; LANES/API/openapi.
This commit is contained in:
2026-10-09 15:51:19 +07:00
parent ce773a3f5a
commit fa156d6a59
114 changed files with 5831 additions and 885 deletions
+77 -3
View File
@@ -3,7 +3,7 @@
openapi: 3.0.3
info:
title: Agent Dashboard for Claude Code API
version: 2.5.13
version: 2.6.0
description: HTTP API for real-time Claude Code session monitoring, agent lifecycle tracking, analytics, pricing, hooks ingestion, and workflow intelligence.
contact:
name: Nguyễn Ngọc Trí Vĩ
@@ -504,12 +504,23 @@ components:
description: Tool output text when type === tool_result.
is_error:
type: boolean
diff:
type: object
description: 'On the tool_result of a Write/Edit/MultiEdit: the lines it added and removed (Claude Code''s structuredPatch; every line of a file it created).'
properties:
added:
type: integer
removed:
type: integer
TranscriptMessage:
type: object
required:
- type
- content
properties:
stop_reason:
type: string
description: 'Assistant lines only: why the model stopped — `end_turn` closes the turn, `tool_use` means a tool call (and more work) follows.'
type:
type: string
enum:
@@ -5203,6 +5214,64 @@ paths:
error:
code: NOT_FOUND
message: Session not found
/api/sessions/{id}/outline:
get:
tags:
- Sessions
summary: Get a session's plan, outputs and what it used
description: 'Read off the session''s successful tool calls (PostToolUse events) and its prompts: `progress` is its TaskCreate/TaskUpdate plan (a TodoWrite replaces it wholesale), `outputs` the paths it wrote or edited with Write/Edit/MultiEdit/NotebookEdit, `files` the paths it only read, `uploads` the files attached to its prompts through the composer (`/api/run/drop-*` paths), `memory` the Claude Code memory files (`.claude/**/memory/`) it read or wrote — the path lists newest first, a memory file in `memory` only —, `skills` the skills it invoked and `mcp` the MCP servers it called. Powers the activity panel of a Chat pane shown alone.'
operationId: getSessionOutline
parameters:
- $ref: '#/components/parameters/SessionIdPath'
responses:
'200':
description: The session's outline
content:
application/json:
schema:
type: object
properties:
progress:
type: array
items:
type: object
properties:
id:
type: string
subject:
type: string
status:
type: string
outputs:
type: array
items:
type: string
files:
type: array
items:
type: string
uploads:
type: array
items:
type: string
memory:
type: array
items:
type: string
skills:
type: array
items:
type: string
mcp:
type: array
items:
type: string
'404':
description: Session not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/sessions/{id}/transcripts:
get:
tags:
@@ -11735,7 +11804,7 @@ paths:
tags:
- Lanes
summary: Suggest a commit message for the staged changes
description: Runs the user's `claude` CLI (`-p --safe-mode --no-session-persistence --tools "" --model haiku`) on the STAGED diff of the lane's cwd (or `?session=` worktree), sent on stdin with the last ten commit subjects; a `settings.local.json` is never included. Reads only — nothing is staged or committed, no tool runs and no session is saved. Same-origin, since each call spends the user's Claude quota. 400 ENOSTAGED when nothing is staged, 400 ENOTOOL when `claude` is not on PATH, 502 EAI when the CLI fails, answers empty or runs past 120 s.
description: Runs the user's `claude` CLI (`-p --safe-mode --no-session-persistence --tools "" --model haiku`) on the STAGED diff of the lane's cwd (or `?session=` worktree, or `?source=` extra folder), sent on stdin with the last ten commit subjects; a `settings.local.json` is never included. Reads only — nothing is staged or committed, no tool runs and no session is saved. Same-origin, since each call spends the user's Claude quota. 400 ENOSTAGED when nothing is staged, 400 ENOTOOL when `claude` is not on PATH, 502 EAI when the CLI fails, answers empty or runs past 120 s.
operationId: suggestLaneCommitMessage
parameters:
- name: id
@@ -11748,6 +11817,11 @@ paths:
required: false
schema:
type: string
- name: source
in: query
required: false
schema:
type: integer
responses:
'200':
description: The suggested message
@@ -11765,7 +11839,7 @@ paths:
'403':
description: Cross-origin request refused
'404':
description: No such workspace
description: No such workspace, or ENOSOURCE
'502':
description: EAI — the claude CLI failed
/api/lanes/{id}/git/{action}: