@kendoo.agentdesk/agentdesk 0.31.0 → 0.31.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 +5 -0
- package/cli/config.mjs +8 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,11 @@ 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
|
+
## [0.31.1] — 2026-09-21
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- `[Both]` Saving project settings without credentials (which the CLI's config sync does by design) no longer erases the stored Jira, Linear or GitHub credentials, and no longer resets settings the write did not mention. 0.31.0 made the CLI re-sync settings on every run, which wiped tracker credentials for affected projects — if pre-flight says your tracker email or token is missing, re-enter it once in project settings.
|
|
15
|
+
|
|
11
16
|
## [0.31.0] — 2026-09-21
|
|
12
17
|
|
|
13
18
|
### Changed
|
package/cli/config.mjs
CHANGED
|
@@ -134,13 +134,19 @@ export async function loadConfig(dir, opts = {}) {
|
|
|
134
134
|
// True when `local` has any non-null leaf that's null/missing on `server`.
|
|
135
135
|
// Walked recursively for nested blocks (linear, jira, github). Used to
|
|
136
136
|
// decide whether it's worth pushing a heal sync.
|
|
137
|
-
|
|
137
|
+
//
|
|
138
|
+
// Only fields the server actually accepts (SETTINGS_FIELDS) count at the top
|
|
139
|
+
// level: a local-only field such as teamProfile can never be "healed", and
|
|
140
|
+
// treating it as a gap made every run push a credential-free payload —
|
|
141
|
+
// which is what a heal push is, by design — forever.
|
|
142
|
+
function hasFieldsServerLacks(local, server, top = true) {
|
|
138
143
|
const isObj = v => v && typeof v === "object" && !Array.isArray(v);
|
|
139
144
|
for (const [key, v] of Object.entries(local || {})) {
|
|
145
|
+
if (top && !SETTINGS_FIELDS.includes(key)) continue;
|
|
140
146
|
if (v === null || v === undefined) continue;
|
|
141
147
|
const s = server?.[key];
|
|
142
148
|
if (isObj(v)) {
|
|
143
|
-
if (!isObj(s) || hasFieldsServerLacks(v, s)) return true;
|
|
149
|
+
if (!isObj(s) || hasFieldsServerLacks(v, s, false)) return true;
|
|
144
150
|
} else {
|
|
145
151
|
if (s === null || s === undefined) return true;
|
|
146
152
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kendoo.agentdesk/agentdesk",
|
|
3
|
-
"version": "0.31.
|
|
3
|
+
"version": "0.31.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 tests/useFollowScroll.test.mjs tests/session-usage.test.mjs tests/task-lookup.test.mjs tests/engine-evidence.test.mjs tests/engine-handoff.test.mjs tests/engine-team-profile.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 tests/task-lookup.test.mjs tests/engine-evidence.test.mjs tests/engine-handoff.test.mjs tests/engine-team-profile.test.mjs tests/project-settings.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",
|