@kendoo.agentdesk/agentdesk 0.21.0 → 0.22.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 +39 -0
- package/README.md +28 -4
- package/cli/tracker-check.mjs +19 -7
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -13,6 +13,45 @@ Internal refactors, infrastructure changes, and architectural notes are not list
|
|
|
13
13
|
### Added
|
|
14
14
|
- `[UI]` Private-session sharing flow. When someone visits a session URL they don't own, they now see a friendly "Shh… this one's private" page with a one-click "Request access" button instead of a blank error. The session owner sees pending requests in a new header inbox and can grant viewer access for just that session or the whole project. Viewer-granted sessions show up in the teammate's sidebar tagged as a viewer.
|
|
15
15
|
|
|
16
|
+
### Changed
|
|
17
|
+
- `[Both]` Security improvements and hardening. No action required.
|
|
18
|
+
|
|
19
|
+
## [0.22.0] — 2026-05-23
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- `[CLI]` `agentdesk team` now defaults to phased mode so per-phase model overrides actually apply. Previously the whole session ran in a single process, which meant the model configured for INTAKE was silently overridden by EXECUTION's model (or vice versa). The fix routes each phase through its own Claude process, honoring per-phase model selection. Pass `--single-process` (or `--no-phased`) to opt back into single-process behavior.
|
|
23
|
+
- `[Both]` Daemon-cancelled sessions now report `status="stopped"` (terminal) instead of `"complete"`. The dashboard renders Stopped in red and surfaces Error and Canceled distinctly instead of collapsing them into a generic "Disconnected" badge.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- `[CLI]` New CLI-created tasks auto-assign to the connected user across Jira, Linear, and GitHub. No more "no assignee" tasks landing on the tracker after team kickoff.
|
|
27
|
+
- `[CLI]` Orchestrator prints the resolved model per phase to stderr — useful when verifying per-phase overrides are actually taking effect.
|
|
28
|
+
- `[CLI]` Stream parser detects phase markers per-line (canonical `# PHASE: <NAME>`, heading-style, and natural-language transitions) so the dashboard timeline doesn't get stuck on long-running phases.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- `[UI]` Daemon `heartbeat` now bumps `lastActivityAt` for the user's active sessions and revives stale ones — prevents misleading "CLI Offline" indicators during deep tool work when the CLI process is alive but Claude is busy in a long bash or edit run.
|
|
32
|
+
- `[UI]` `ProjectSettingsPage` copy reflects that per-phase models always apply now (was previously hedged from the days when single-process runs ignored the override).
|
|
33
|
+
|
|
34
|
+
## [0.21.0] — 2026-04-28
|
|
35
|
+
|
|
36
|
+
Mobile-design wave plus session-UI polish. Versions `0.20.4` through `0.20.6` were intermediate publishes during the same wave on the same day and are superseded by `0.21.0`.
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
- `[UI]` Full mobile design rolled out across the dashboard, Sessions list, Run screen, composer, and chat surfaces (AD-14 through AD-25). Includes hybrid design tokens, typography aligned with claude/design, mobile chat status bar, magazine-style Sessions header, and bigger chat text on mobile.
|
|
40
|
+
- `[UI]` Topbar mono breadcrumb and ⌘↵ hint on the Run Team page.
|
|
41
|
+
- `[UI]` Transcript run banner and completion footer with article-width body.
|
|
42
|
+
- `[UI]` Composer "›" prefix and a keyboard hint row surfacing the ⌘↵ binding.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
- `[UI]` Dashboard is now a 2-column layout (metric strip on top, team foot on bottom).
|
|
46
|
+
- `[UI]` `SessionList` restyle — sharper visuals, selected-only highlighting (no more "row hover lights up every other row").
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
- `[UI]` AgentDesk wordmark font no longer regresses to the wrong typeface after the design-token rollout.
|
|
50
|
+
- `[UI]` Settings form state now resets when you switch projects (was previously carrying stale fields from the prior project).
|
|
51
|
+
|
|
52
|
+
### Removed
|
|
53
|
+
- `[UI]` Unused `SessionStats` component.
|
|
54
|
+
|
|
16
55
|
## [0.20.3] — 2026-04-19
|
|
17
56
|
|
|
18
57
|
### Fixed
|
package/README.md
CHANGED
|
@@ -21,7 +21,31 @@ You can also add **custom agents** (e.g., a Security Engineer or DevOps speciali
|
|
|
21
21
|
|
|
22
22
|
## Getting Started
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
The fastest way to try AgentDesk is the **Claude Code plugin**. It runs the phased loop (intake → plan → execute → review → summary) entirely inside your existing Claude Code session — no signup, no daemon, no extra install.
|
|
25
|
+
|
|
26
|
+
### Quickstart — Claude Code plugin
|
|
27
|
+
|
|
28
|
+
Inside any Claude Code session:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
/plugin marketplace add anthropics/claude-plugins-community
|
|
32
|
+
/plugin install agentdesk@claude-community
|
|
33
|
+
/agentdesk <your task or tracker URL>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Five sub-agents run in sequence with a dedicated review pass before SUMMARY produces the final report. State persists in `.agentdesk/session-memory.md`.
|
|
37
|
+
|
|
38
|
+
**What the plugin covers:** the phased workflow, one task at a time, in your terminal. Zero-account, in-process.
|
|
39
|
+
|
|
40
|
+
**What needs the full CLI + dashboard (below):** session history, dashboard visibility, multi-session parallelism, team coordination, tracker integration (Jira/Linear/GitHub write-back), and the long-running daemon.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
### Full setup — CLI + dashboard
|
|
45
|
+
|
|
46
|
+
For session history, team workflows, and tracker integration, install the AgentDesk CLI and connect it to your `agentdesk.live` account.
|
|
47
|
+
|
|
48
|
+
#### 1. Install
|
|
25
49
|
|
|
26
50
|
```bash
|
|
27
51
|
npm i -g @kendoo.agentdesk/agentdesk
|
|
@@ -29,7 +53,7 @@ npm i -g @kendoo.agentdesk/agentdesk
|
|
|
29
53
|
|
|
30
54
|
Requires [Claude Code](https://claude.ai/code) and [Node.js](https://nodejs.org/) 18+.
|
|
31
55
|
|
|
32
|
-
|
|
56
|
+
#### 2. Sign in
|
|
33
57
|
|
|
34
58
|
```bash
|
|
35
59
|
agentdesk login
|
|
@@ -37,7 +61,7 @@ agentdesk login
|
|
|
37
61
|
|
|
38
62
|
Opens your browser to [agentdesk.live](https://agentdesk.live) where you sign up or log in (email/password or Google). Your API key is saved automatically.
|
|
39
63
|
|
|
40
|
-
|
|
64
|
+
#### 3. Set up your project
|
|
41
65
|
|
|
42
66
|
```bash
|
|
43
67
|
agentdesk init
|
|
@@ -71,7 +95,7 @@ All menus use arrow-key navigation with color highlighting; Ctrl-C exits cleanly
|
|
|
71
95
|
|
|
72
96
|
`.agentdesk.json` is kept in sync with the server: every CLI run fetches the authoritative config and rewrites the local file as a credential-free snapshot. Credentials live only on the server, encrypted. If a local edit disagreed with the server's value, a one-line warning lists the overridden fields.
|
|
73
97
|
|
|
74
|
-
|
|
98
|
+
#### 4. Run a team session
|
|
75
99
|
|
|
76
100
|
Work on an existing task:
|
|
77
101
|
|
package/cli/tracker-check.mjs
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// Verify tracker API permissions before starting a session
|
|
2
2
|
// Checks: read tasks, create tasks, update tasks
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { execFileSync } from "child_process";
|
|
5
|
+
|
|
6
|
+
// AD-29: any external string (repo name, ref, etc.) must be regex-validated
|
|
7
|
+
// before it goes into a child process. Even with execFile, an upstream caller
|
|
8
|
+
// passing "../../etc" or similar can trip path semantics in the called tool.
|
|
9
|
+
const GITHUB_REPO_RE = /^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/;
|
|
5
10
|
|
|
6
11
|
const LINEAR_API = "https://api.linear.app/graphql";
|
|
7
12
|
|
|
@@ -187,18 +192,25 @@ async function checkGitHub({ repo }, creds) {
|
|
|
187
192
|
const env = { ...process.env };
|
|
188
193
|
if (creds?.GITHUB_TOKEN) env.GH_TOKEN = creds.GITHUB_TOKEN;
|
|
189
194
|
|
|
190
|
-
//
|
|
195
|
+
// AD-29: refuse anything that isn't a clean owner/repo before going near a
|
|
196
|
+
// subprocess. `repo` comes from server-pushed project settings, which an
|
|
197
|
+
// attacker could control via a chained takeover.
|
|
198
|
+
if (!GITHUB_REPO_RE.test(repo)) {
|
|
199
|
+
return { ok: false, errors: [`Invalid GitHub repo format: ${JSON.stringify(repo)} (expected "owner/name")`] };
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Check if gh CLI is available. execFileSync (no shell) — argv is static.
|
|
191
203
|
try {
|
|
192
|
-
|
|
204
|
+
execFileSync("gh", ["--version"], { stdio: "pipe" });
|
|
193
205
|
} catch {
|
|
194
206
|
return { ok: false, errors: ["GitHub CLI (gh) is not installed — install it from https://cli.github.com"] };
|
|
195
207
|
}
|
|
196
208
|
|
|
197
209
|
// Check auth status and grab the authenticated login
|
|
198
210
|
try {
|
|
199
|
-
|
|
211
|
+
execFileSync("gh", ["auth", "status"], { stdio: "pipe", env });
|
|
200
212
|
try {
|
|
201
|
-
const who =
|
|
213
|
+
const who = execFileSync("gh", ["api", "user", "--jq", "{login: .login, name: .name}"], { stdio: "pipe", encoding: "utf-8", env }).trim();
|
|
202
214
|
const j = JSON.parse(who);
|
|
203
215
|
identity = { name: j.name || j.login, login: j.login };
|
|
204
216
|
} catch {}
|
|
@@ -206,9 +218,9 @@ async function checkGitHub({ repo }, creds) {
|
|
|
206
218
|
return { ok: false, errors: ["GitHub CLI is not authenticated — run 'gh auth login', or paste a GITHUB_TOKEN"] };
|
|
207
219
|
}
|
|
208
220
|
|
|
209
|
-
// Check repo access and permissions
|
|
221
|
+
// Check repo access and permissions — argv form, no shell, repo already validated.
|
|
210
222
|
try {
|
|
211
|
-
const result =
|
|
223
|
+
const result = execFileSync("gh", ["api", `repos/${repo}`, "--jq", ".permissions"], { stdio: "pipe", encoding: "utf-8", env });
|
|
212
224
|
const perms = JSON.parse(result.trim());
|
|
213
225
|
|
|
214
226
|
if (!perms.pull) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kendoo.agentdesk/agentdesk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.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",
|
|
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",
|
|
26
26
|
"lint:changelog": "node scripts/lint-changelog.mjs",
|
|
27
27
|
"prepublishOnly": "node scripts/lint-changelog.mjs"
|
|
28
28
|
},
|