@kendoo.agentdesk/agentdesk 0.28.4 → 0.29.1
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/CHANGELOG.md +19 -9
- package/cli/daemon.mjs +1 -1
- package/cli/engine/session.mjs +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,28 +8,38 @@ All user-facing changes to AgentDesk. Each entry is tagged:
|
|
|
8
8
|
|
|
9
9
|
Internal refactors, infrastructure changes, and architectural notes are not listed here.
|
|
10
10
|
|
|
11
|
-
## [
|
|
11
|
+
## [0.29.1] — 2026-09-20
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- `[Both]` Session token totals now update after each completed phase and survive cancellation, reconnects, and server restarts instead of displaying zero.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- `[UI]` The session feed now stays put while you're reading history: auto-scroll only follows new messages when you're already at the bottom. A "New messages" button appears otherwise, and jumps you down on click. Scroll position is preserved across session switches.
|
|
18
|
+
- `[UI]` The compact team bar's avatar hover now shows each agent's role, not just their name.
|
|
19
|
+
|
|
20
|
+
## [0.29.0] — 2026-09-20
|
|
12
21
|
|
|
13
22
|
### Fixed
|
|
14
23
|
- `[Both]` Daemon sessions now have a configurable concurrency limit (default 3), with excess requests queued. Cancellation during confirmation stays stopped; workspace quarantine survives cancellation and restart, including when processes outlive a successful session.
|
|
15
24
|
- `[Both]` Worktree Git commands ignore inherited Git config overrides, lock cleanup tolerates concurrent removal, runtime config healing is restored, handoff sessions remain open, and outcome branch validation includes the 300-character boundary.
|
|
16
25
|
- `[Both]` Session restoration checks persisted ownership; outcome capture tolerates diagnostic output and malformed receipts. Live outcomes survive dashboard loading races and appear on the mobile Run screen.
|
|
17
|
-
- `[Both]` Phase handoff JSON is captured automatically instead of repeated in chat; a fallback filter suppresses duplicate structured-output objects in agent messages.
|
|
18
|
-
- `[UI]` Internal helpers outside a session's declared team no longer appear in its roster or contribute SAY/ACT messages to the conversation feed.
|
|
19
|
-
- `[Both]` Cancellation now stops waiting after 30 seconds and quarantines worktrees with surviving processes. Daemon startup and periodic checks recover stale locks without deleting unfinished work.
|
|
20
|
-
- `[Both]` Session agents can no longer modify shared Git refs or hooks. Private Git state is published back only to the session branch, with conflict checks.
|
|
21
|
-
- `[Both]` Cancellation releases the workspace after child processes stop even if the agent connection stalls. Dashboard sessions retain their tracker links.
|
|
22
|
-
- `[CLI]` Conflicting resume and branch options now report an error.
|
|
23
|
-
- `[UI]` Daemon status counts sessions within the current account without scanning other accounts.
|
|
24
26
|
|
|
25
27
|
### Added
|
|
26
28
|
- `[Both]` Confirmed PR creation and final tracker replies are recorded during the session and shown separately from its status, surviving disconnects and later failures. Background outcome recovery remains deferred.
|
|
27
29
|
- `[UI]` The sidebar shows the 12 most recent past sessions by default, with a More control and automatic reveal of a selected older session.
|
|
28
|
-
- `[UI]` The docked team footer starts as a compact avatar/status row. Drag its handle upward for the full grid, or use arrow keys and Enter to resize it.
|
|
29
30
|
- `[Both]` New sessions use separate Git worktrees by default, so tasks can run concurrently on different branches in the same repository. Choose the starting branch, create or reuse a branch, or opt out to use the existing directory.
|
|
30
31
|
- `[Both]` Archived sessions automatically clean up clean, merged worktrees while retaining branches. Unfinished work stays available to resume, with a review reminder after 14 days and explicit confirmation before discarding files.
|
|
31
32
|
- `[UI]` A Worktrees panel shows session directories, cleanup status, and resume controls.
|
|
32
33
|
|
|
34
|
+
## [0.28.3] — 2026-09-19
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
- `[UI]` The docked team status bar now defaults to a compact one-line strip (avatars + current status) instead of the full grid, with a drag handle (and keyboard resize) to expand it.
|
|
38
|
+
- `[Both]` Session messages are filtered to the session's declared roster, so nested/ad-hoc subagents (e.g. a generic search delegate) no longer show their internal narration in the feed as if they were a team member.
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
- `[CLI]` Every phase (INTAKE, PLAN, EXECUTION, REVIEW, SUMMARY, SOLO) told the model to answer with the raw handoff JSON as its final chat reply, so the model printed that JSON into the session feed on top of the SDK's separate structured-output channel. Phase prompts no longer ask for that, and a code-side guard strips it if a model still echoes it.
|
|
42
|
+
|
|
33
43
|
## [0.28.2] — 2026-09-18
|
|
34
44
|
|
|
35
45
|
### Changed
|
package/cli/daemon.mjs
CHANGED
|
@@ -557,7 +557,7 @@ async function confirmIncomingSession({ project, taskId, prompt, signal }) {
|
|
|
557
557
|
return (event) => {
|
|
558
558
|
// Confirmed accomplishments may arrive during cancellation teardown.
|
|
559
559
|
// They do not revive the session or emit a second terminal event.
|
|
560
|
-
if (["session:outcome", "session:workspace"].includes(event.type)) { sendBuffered(sessionId, event); return; }
|
|
560
|
+
if (["session:outcome", "session:workspace", "session:usage"].includes(event.type)) { sendBuffered(sessionId, event); return; }
|
|
561
561
|
if (activeSessions.get(sessionId) !== activeSession) return;
|
|
562
562
|
// A cancelled session already sent its terminal event; the
|
|
563
563
|
// orchestrator's own unwind must not send a second one.
|
package/cli/engine/session.mjs
CHANGED
|
@@ -305,6 +305,7 @@ async function executeSession({
|
|
|
305
305
|
totals.inputTokens += summary.inputTokens;
|
|
306
306
|
totals.outputTokens += summary.outputTokens;
|
|
307
307
|
totals.costUsd += summary.costUsd;
|
|
308
|
+
emit({ type: "session:usage", inputTokens: totals.inputTokens, outputTokens: totals.outputTokens });
|
|
308
309
|
|
|
309
310
|
if (abortController.signal.aborted) { aborted = true; break; }
|
|
310
311
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kendoo.agentdesk/agentdesk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.1",
|
|
4
4
|
"description": "AI team orchestrator for Claude Code — run collaborative agent sessions from your terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"server": "node server/index.mjs",
|
|
23
23
|
"build": "vite build",
|
|
24
24
|
"preview": "vite preview",
|
|
25
|
-
"test": "node --test tests/server.test.mjs tests/agents.test.mjs tests/homepage.test.mjs tests/sessionUtils.test.mjs tests/tracker-url.test.mjs tests/session-preflight.test.mjs tests/access.test.mjs tests/project-ownership.test.mjs tests/random-hex.test.mjs tests/projects-registry.test.mjs tests/phase-loop.test.mjs tests/proc.test.mjs tests/crypto.test.mjs tests/dotenv.test.mjs tests/update-check.test.mjs tests/setup-helpers.test.mjs tests/project-key.test.mjs tests/tracker-project.test.mjs tests/tracker-check.test.mjs tests/config.test.mjs tests/engine-env.test.mjs tests/engine-events.test.mjs tests/engine-verdict.test.mjs tests/engine-hooks.test.mjs tests/engine-agents.test.mjs tests/session-isolation.test.mjs tests/engine-session.test.mjs tests/engine-prompts.test.mjs tests/engine-schemas.test.mjs tests/engine-claude-auth.test.mjs tests/worktrees.test.mjs tests/workspaces-api.test.mjs tests/engine-outcome.test.mjs tests/session-outcomes.test.mjs tests/outcome-hydration.test.mjs tests/mobile-outcomes.test.mjs tests/session-queue.test.mjs",
|
|
25
|
+
"test": "node --test tests/server.test.mjs tests/agents.test.mjs tests/homepage.test.mjs tests/sessionUtils.test.mjs tests/tracker-url.test.mjs tests/session-preflight.test.mjs tests/access.test.mjs tests/project-ownership.test.mjs tests/random-hex.test.mjs tests/projects-registry.test.mjs tests/phase-loop.test.mjs tests/proc.test.mjs tests/crypto.test.mjs tests/dotenv.test.mjs tests/update-check.test.mjs tests/setup-helpers.test.mjs tests/project-key.test.mjs tests/tracker-project.test.mjs tests/tracker-check.test.mjs tests/config.test.mjs tests/engine-env.test.mjs tests/engine-events.test.mjs tests/engine-verdict.test.mjs tests/engine-hooks.test.mjs tests/engine-agents.test.mjs tests/session-isolation.test.mjs tests/engine-session.test.mjs tests/engine-prompts.test.mjs tests/engine-schemas.test.mjs tests/engine-claude-auth.test.mjs tests/worktrees.test.mjs tests/workspaces-api.test.mjs tests/engine-outcome.test.mjs tests/session-outcomes.test.mjs tests/outcome-hydration.test.mjs tests/mobile-outcomes.test.mjs tests/session-queue.test.mjs tests/useFollowScroll.test.mjs tests/session-usage.test.mjs",
|
|
26
26
|
"test:coverage": "node --test --experimental-test-coverage --test-coverage-include='cli/**' --test-coverage-include='server/**' --test-coverage-lines=60 --test-coverage-branches=62 tests/*.test.mjs",
|
|
27
27
|
"lint": "eslint .",
|
|
28
28
|
"lint:fix": "eslint . --fix",
|