codedeck 0.3.0 → 0.4.0

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.
Files changed (75) hide show
  1. package/dist/cli/charts/bar-chart.js +104 -0
  2. package/dist/cli/charts/bar-chart.js.map +1 -0
  3. package/dist/cli/charts/sparkline.js +18 -0
  4. package/dist/cli/charts/sparkline.js.map +1 -0
  5. package/dist/cli/charts/stacked-bar.js +59 -0
  6. package/dist/cli/charts/stacked-bar.js.map +1 -0
  7. package/dist/cli/commands/models.js +4 -4
  8. package/dist/cli/commands/models.js.map +1 -1
  9. package/dist/cli/commands/open.js +218 -57
  10. package/dist/cli/commands/open.js.map +1 -1
  11. package/dist/cli/commands/ps.js +1 -35
  12. package/dist/cli/commands/ps.js.map +1 -1
  13. package/dist/cli/commands/run.js +4 -3
  14. package/dist/cli/commands/run.js.map +1 -1
  15. package/dist/cli/commands/setup.js +604 -13
  16. package/dist/cli/commands/setup.js.map +1 -1
  17. package/dist/cli/commands/usage.js +171 -16
  18. package/dist/cli/commands/usage.js.map +1 -1
  19. package/dist/cli/commands/web.js +224 -0
  20. package/dist/cli/commands/web.js.map +1 -0
  21. package/dist/cli/index.js +3 -0
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/cli/ui.js +34 -0
  24. package/dist/cli/ui.js.map +1 -1
  25. package/dist/cli/usage/dashboard.js +330 -0
  26. package/dist/cli/usage/dashboard.js.map +1 -0
  27. package/dist/cli/usage/snapshot.js +112 -0
  28. package/dist/cli/usage/snapshot.js.map +1 -0
  29. package/dist/config/config.js +287 -5
  30. package/dist/config/config.js.map +1 -1
  31. package/dist/config/paths.js +20 -9
  32. package/dist/config/paths.js.map +1 -1
  33. package/dist/core/autocompact.js +77 -0
  34. package/dist/core/autocompact.js.map +1 -0
  35. package/dist/core/driver.js.map +1 -1
  36. package/dist/core/models.js +166 -3
  37. package/dist/core/models.js.map +1 -1
  38. package/dist/core/pricing.js +18 -0
  39. package/dist/core/pricing.js.map +1 -1
  40. package/dist/core/session.js +14 -1
  41. package/dist/core/session.js.map +1 -1
  42. package/dist/daemon/daemon.js +196 -5
  43. package/dist/daemon/daemon.js.map +1 -1
  44. package/dist/drivers/antigravity/driver.js +158 -0
  45. package/dist/drivers/antigravity/driver.js.map +1 -0
  46. package/dist/drivers/antigravity/parser.js +168 -0
  47. package/dist/drivers/antigravity/parser.js.map +1 -0
  48. package/dist/drivers/claude/driver.js +13 -3
  49. package/dist/drivers/claude/driver.js.map +1 -1
  50. package/dist/drivers/registry.js +2 -0
  51. package/dist/drivers/registry.js.map +1 -1
  52. package/dist/drivers/session-driver.js +6 -4
  53. package/dist/drivers/session-driver.js.map +1 -1
  54. package/dist/drivers/session-runtime.js +1 -1
  55. package/dist/drivers/session-runtime.js.map +1 -1
  56. package/dist/open/contract.js +16 -4
  57. package/dist/open/contract.js.map +1 -1
  58. package/dist/open/injection.js +1 -0
  59. package/dist/open/injection.js.map +1 -1
  60. package/dist/open/launchers/claude.js +4 -1
  61. package/dist/open/launchers/claude.js.map +1 -1
  62. package/dist/open/launchers/opencode.js +37 -2
  63. package/dist/open/launchers/opencode.js.map +1 -1
  64. package/dist/open/runtime.js +43 -8
  65. package/dist/open/runtime.js.map +1 -1
  66. package/dist/plugin/agents/orchestrator-edit.md +1 -3
  67. package/dist/plugin/agents/orchestrator-read.md +1 -3
  68. package/dist/plugin/agents/orchestrator.md +2 -4
  69. package/dist/store/database.js +36 -15
  70. package/dist/store/database.js.map +1 -1
  71. package/dist/store/sessions.js +220 -3
  72. package/dist/store/sessions.js.map +1 -1
  73. package/dist/web/canvas-page.js +921 -0
  74. package/dist/web/canvas-page.js.map +1 -0
  75. package/package.json +1 -1
@@ -17,14 +17,25 @@ export function loadDiskModelsCache() {
17
17
  }
18
18
  }
19
19
  export function saveDiskModelsCache(models) {
20
+ let temporary;
20
21
  try {
21
22
  const p = getPaths();
22
23
  fs.mkdirSync(p.cacheDir, { recursive: true });
23
24
  const tmp = `${p.modelsCache}.${process.pid}.${Date.now()}.tmp`;
25
+ temporary = tmp;
24
26
  fs.writeFileSync(tmp, JSON.stringify(models, null, 2), "utf-8");
25
27
  fs.renameSync(tmp, p.modelsCache);
28
+ return true;
29
+ }
30
+ catch {
31
+ if (temporary !== undefined) {
32
+ try {
33
+ fs.unlinkSync(temporary);
34
+ }
35
+ catch { }
36
+ }
37
+ return false;
26
38
  }
27
- catch { }
28
39
  }
29
40
  export async function discoverHarnessModels(driver, options) {
30
41
  let install;
@@ -77,8 +88,12 @@ export async function discoverHarnessModels(driver, options) {
77
88
  }
78
89
  }
79
90
  export async function discoverAllModels(registry, options) {
80
- const drivers = options?.agent ? [registry.get(options.agent)] : registry.list();
81
- const results = await Promise.all(drivers.map((d) => discoverHarnessModels(d, { refresh: options?.refresh })));
91
+ const drivers = options?.agents
92
+ ? options.agents.map((agent) => registry.get(agent))
93
+ : options?.agent
94
+ ? [registry.get(options.agent)]
95
+ : registry.list();
96
+ const results = await Promise.all(drivers.map((d) => discoverHarnessModels(d, { refresh: options?.refresh, signal: options?.signal })));
82
97
  return results;
83
98
  }
84
99
  export async function getCachedOrDiscoverModels(registry, options) {
@@ -113,6 +128,154 @@ export async function getCachedOrDiscoverModels(registry, options) {
113
128
  saveDiskModelsCache(merged);
114
129
  return options?.agent ? freshResults : merged;
115
130
  }
131
+ function cacheAge(cachedAt, now) {
132
+ const parsed = cachedAt === undefined ? Number.NaN : new Date(cachedAt).getTime();
133
+ const age = now - parsed;
134
+ if (!Number.isFinite(age) || age < 0)
135
+ return { ageMs: CACHE_TTL_MS, fresh: false };
136
+ return { ageMs: age, fresh: age < CACHE_TTL_MS };
137
+ }
138
+ function uniqueHarnesses(models, agents) {
139
+ const byAgent = new Map();
140
+ for (const model of models) {
141
+ if (agents.includes(model.agent) && !byAgent.has(model.agent))
142
+ byAgent.set(model.agent, model);
143
+ }
144
+ return agents.flatMap((agent) => {
145
+ const model = byAgent.get(agent);
146
+ return model === undefined ? [] : [model];
147
+ });
148
+ }
149
+ function maxAge(entries) {
150
+ if (entries.length === 0)
151
+ return null;
152
+ return Math.max(...entries.map((entry) => entry.age.ageMs));
153
+ }
154
+ async function discoverWithTimeout(registry, request, discover) {
155
+ const discovery = Promise.resolve().then(() => discover(registry, request));
156
+ let timer;
157
+ const timeout = new Promise((_resolve, reject) => {
158
+ timer = setTimeout(() => {
159
+ reject(new Error(`model catalog discovery timed out after ${request.timeoutMs} ms`));
160
+ }, request.timeoutMs);
161
+ });
162
+ try {
163
+ return await Promise.race([discovery, timeout]);
164
+ }
165
+ finally {
166
+ if (timer !== undefined)
167
+ clearTimeout(timer);
168
+ }
169
+ }
170
+ /**
171
+ * Batch-only catalog access. It never writes the cache unless discovery was
172
+ * explicitly allowed and returned a complete result for the requested agents.
173
+ */
174
+ export async function getBatchModels(registry, options = {}) {
175
+ const requested = [...new Set(options.agents ?? registry.list().map((driver) => driver.id))];
176
+ const refresh = options.refresh === true;
177
+ const allowNetwork = options.allowNetwork === true;
178
+ const now = options.now ?? Date.now;
179
+ const disk = loadDiskModelsCache();
180
+ const currentTime = now();
181
+ const cached = requested.flatMap((agent) => {
182
+ const model = disk?.find((candidate) => candidate.agent === agent);
183
+ return model === undefined ? [] : [{ model, age: cacheAge(model.cachedAt, currentTime) }];
184
+ });
185
+ const completeCache = cached.length === requested.length;
186
+ const allFresh = completeCache && cached.every((entry) => entry.age.fresh);
187
+ if (!refresh && allFresh) {
188
+ return {
189
+ models: cached.map((entry) => entry.model),
190
+ status: "fresh",
191
+ source: "cache",
192
+ ageMs: maxAge(cached),
193
+ cacheWriteFailed: false,
194
+ };
195
+ }
196
+ if (!allowNetwork) {
197
+ return completeCache
198
+ ? {
199
+ models: cached.map((entry) => entry.model),
200
+ status: "offline",
201
+ source: "stale-cache",
202
+ ageMs: maxAge(cached),
203
+ cacheWriteFailed: false,
204
+ }
205
+ : {
206
+ models: cached.map((entry) => entry.model),
207
+ status: "unavailable",
208
+ source: "none",
209
+ ageMs: null,
210
+ cacheWriteFailed: false,
211
+ };
212
+ }
213
+ const controller = new AbortController();
214
+ const timeoutMs = options.timeoutMs ?? 12_000;
215
+ const discover = options.discover ?? ((selected, request) => discoverAllModels(selected, {
216
+ agents: request.agents,
217
+ refresh: request.refresh,
218
+ signal: request.signal,
219
+ }));
220
+ let discovered;
221
+ let discoveryError;
222
+ try {
223
+ options.onDiscoveryStart?.();
224
+ discovered = await discoverWithTimeout(registry, { agents: requested, refresh: true, signal: controller.signal, timeoutMs }, discover);
225
+ const unique = uniqueHarnesses(discovered, requested);
226
+ const hasMissing = unique.length !== requested.length;
227
+ const hasFailedCatalog = unique.some((model) => model.available && model.error);
228
+ if (hasMissing || hasFailedCatalog) {
229
+ discoveryError = hasMissing
230
+ ? "model discovery returned an incomplete catalog"
231
+ : unique.find((model) => model.available && model.error)?.error ?? "model discovery failed";
232
+ }
233
+ else {
234
+ const merged = (disk ?? [])
235
+ .filter((model) => !requested.includes(model.agent))
236
+ .concat(unique);
237
+ let cacheWriteFailed = false;
238
+ try {
239
+ const saved = (options.saveCache ?? saveDiskModelsCache)(merged);
240
+ cacheWriteFailed = saved === false;
241
+ }
242
+ catch {
243
+ cacheWriteFailed = true;
244
+ }
245
+ return {
246
+ models: unique,
247
+ status: "fresh",
248
+ source: "network",
249
+ ageMs: 0,
250
+ cacheWriteFailed,
251
+ };
252
+ }
253
+ }
254
+ catch (error) {
255
+ controller.abort();
256
+ discoveryError = error instanceof Error ? error.message : String(error);
257
+ }
258
+ controller.abort();
259
+ const fallback = cached.filter((entry) => !refresh || !entry.age.fresh);
260
+ if (fallback.length === requested.length) {
261
+ return {
262
+ models: fallback.map((entry) => entry.model),
263
+ status: "offline",
264
+ source: "stale-cache",
265
+ ageMs: maxAge(fallback),
266
+ ...(discoveryError === undefined ? {} : { discoveryError }),
267
+ cacheWriteFailed: false,
268
+ };
269
+ }
270
+ return {
271
+ models: fallback.map((entry) => entry.model),
272
+ status: "unavailable",
273
+ source: "none",
274
+ ageMs: null,
275
+ ...(discoveryError === undefined ? {} : { discoveryError }),
276
+ cacheWriteFailed: false,
277
+ };
278
+ }
116
279
  export function levenshtein(a, b) {
117
280
  const al = a.length;
118
281
  const bl = b.length;
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,24 @@ export const MODEL_PRICES = {
21
21
  "claude-sonnet-4-6": { input: 3, output: 15 },
22
22
  "claude-sonnet-5": { input: 3, output: 15 },
23
23
  "claude-haiku-4-5": { input: 0.8, output: 4 },
24
+ // Google Antigravity (Gemini) models.
25
+ "gemini-3.8-flash": { input: 0.1, output: 0.4, cached: 0.025 },
26
+ "gemini-3.8-flash-high": { input: 0.1, output: 0.4, cached: 0.025 },
27
+ "gemini-3.8-flash-medium": { input: 0.1, output: 0.4, cached: 0.025 },
28
+ "gemini-3.8-flash-low": { input: 0.1, output: 0.4, cached: 0.025 },
29
+ "gemini-3.7-flash": { input: 0.1, output: 0.4, cached: 0.025 },
30
+ "gemini-3.7-flash-high": { input: 0.1, output: 0.4, cached: 0.025 },
31
+ "gemini-3.7-flash-medium": { input: 0.1, output: 0.4, cached: 0.025 },
32
+ "gemini-3.7-flash-low": { input: 0.1, output: 0.4, cached: 0.025 },
33
+ "gemini-3.6-flash": { input: 0.075, output: 0.3, cached: 0.01875 },
34
+ "gemini-3.6-flash-high": { input: 0.075, output: 0.3, cached: 0.01875 },
35
+ "gemini-3.6-flash-medium": { input: 0.075, output: 0.3, cached: 0.01875 },
36
+ "gemini-3.6-flash-low": { input: 0.075, output: 0.3, cached: 0.01875 },
37
+ "gemini-3.1-pro": { input: 1.25, output: 5, cached: 0.3125 },
38
+ "gemini-3.1-pro-high": { input: 1.25, output: 5, cached: 0.3125 },
39
+ "gemini-3.1-pro-low": { input: 1.25, output: 5, cached: 0.3125 },
40
+ "gemini-2.5-flash": { input: 0.075, output: 0.3, cached: 0.01875 },
41
+ "gemini-2.5-pro": { input: 1.25, output: 5, cached: 0.3125 },
24
42
  };
25
43
  function isFiniteNumber(value) {
26
44
  return typeof value === "number" && Number.isFinite(value);
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,12 @@
1
- export const AGENT_IDS = ["claude", "codex", "opencode", "omp"];
1
+ export const AGENT_IDS = ["claude", "codex", "opencode", "omp", "antigravity"];
2
+ export function normalizeAgentId(value) {
3
+ if (typeof value !== "string")
4
+ return undefined;
5
+ const normalized = value.trim().toLowerCase();
6
+ if (normalized === "agy")
7
+ return "antigravity";
8
+ return isAgentId(normalized) ? normalized : undefined;
9
+ }
2
10
  /** Narrows a string read off disk or off a flag to a harness CodeDeck drives. */
3
11
  export function isAgentId(value) {
4
12
  return typeof value === "string" && AGENT_IDS.includes(value);
@@ -9,6 +17,11 @@ export function isTerminalStatus(status) {
9
17
  export function isActiveStatus(status) {
10
18
  return status === "starting" || status === "working" || status === "needs_input" || status === "idle";
11
19
  }
20
+ export function liveStatus(status, pid, alive) {
21
+ if (isActiveStatus(status) && pid != null && !alive)
22
+ return "dead";
23
+ return status;
24
+ }
12
25
  export function generateSessionId() {
13
26
  // 4-char hex like spec (a83f) but ensure uniqueness with 8 chars if needed
14
27
  // Use 8 hex chars, display first 4 but store full
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAU,CAAC;AAGzE,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,SAA+B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvF,CAAC;AAsED,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,aAAa,CAAC;AACpI,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,MAAM,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,2EAA2E;IAC3E,kDAAkD;IAClD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,cAAc;IACd,uDAAuD;IACvD,IAAI,CAAC;QACH,aAAa;QACb,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,SAAiB;IAChE,MAAM,KAAK,GAAG,IAAI;SACf,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;IAC1B,OAAO,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { ClaimsStore } from "../store/claims.js";
9
9
  import { getPaths, ensureDirs } from "../config/paths.js";
10
10
  import { createIpcServer } from "./ipc.js";
11
11
  import { getRegistry } from "../drivers/registry.js";
12
- import { isTerminalStatus } from "../core/session.js";
12
+ import { isTerminalStatus, liveStatus, normalizeAgentId } from "../core/session.js";
13
13
  import { parseSandbox } from "../core/driver.js";
14
14
  import { generateSessionId } from "../core/session.js";
15
15
  import { getGitInfo } from "../git/repository.js";
@@ -40,6 +40,15 @@ function resolveRequestSandbox(value) {
40
40
  return undefined;
41
41
  }
42
42
  }
43
+ // Read-boundary liveness: serve a corpse as "dead" (same rule `ps` shows)
44
+ // instead of the stale stored "working". Returns the same object when no
45
+ // correction applies, so callers can skip copies; never mutates the store.
46
+ function withLiveStatus(s) {
47
+ if (s.pid == null)
48
+ return s;
49
+ const status = liveStatus(s.status, s.pid, processAlive(s.pid));
50
+ return status === s.status ? s : { ...s, status: status };
51
+ }
43
52
  class Daemon {
44
53
  db;
45
54
  sessions;
@@ -135,6 +144,53 @@ class Daemon {
135
144
  // starting|working|needs_input|idle.
136
145
  if (s.status === "interrupted")
137
146
  continue;
147
+ if (s.origin === "open") {
148
+ if (s.pid == null) {
149
+ this.sessions.setStatus(s.id, "failed", { lastEvent: "open session terminated before patch" });
150
+ continue;
151
+ }
152
+ const currentStart = processStartTime(s.pid);
153
+ const processPresent = processAlive(s.pid);
154
+ const identityVerified = s.pidStartTime != null && currentStart === s.pidStartTime;
155
+ if (processPresent && identityVerified) {
156
+ // Head process still running interactively; remain working, no driver to attach
157
+ continue;
158
+ }
159
+ else if (!processPresent) {
160
+ // Closed normally while daemon was away
161
+ const ev = {
162
+ type: "session.completed",
163
+ sessionId: s.id,
164
+ timestamp: new Date().toISOString(),
165
+ reason: "closed while daemon was stopped",
166
+ };
167
+ this.events.append(s.id, ev);
168
+ this.sessions.setStatus(s.id, "completed", { lastEvent: "closed while daemon was stopped" });
169
+ continue;
170
+ }
171
+ else {
172
+ // PID recycled (processPresent is true but !identityVerified)
173
+ const failure = {
174
+ code: "HARNESS_CRASH",
175
+ blame: "harness",
176
+ retryable: false,
177
+ reason: "pid_reused",
178
+ detail: `PID ${s.pid} no longer identifies the head session`,
179
+ };
180
+ const detail = failure.detail ?? `PID ${s.pid} no longer identifies the head session`;
181
+ const event = {
182
+ type: "session.failed",
183
+ sessionId: s.id,
184
+ timestamp: new Date().toISOString(),
185
+ error: detail,
186
+ failure,
187
+ raw: { pid: s.pid, expectedStartTime: s.pidStartTime, currentStart },
188
+ };
189
+ this.events.append(s.id, event);
190
+ this.sessions.setStatus(s.id, "failed", { lastEvent: detail, failure });
191
+ continue;
192
+ }
193
+ }
138
194
  const driver = this.registry.get(s.agent);
139
195
  const metadata = readSessionProcessMetadata(s.id);
140
196
  const pid = metadata?.pid ?? s.pid;
@@ -246,7 +302,8 @@ class Daemon {
246
302
  }
247
303
  const cwdIn = p.cwd || process.cwd();
248
304
  const cfg = loadConfig();
249
- let agent = p.agent || cfg.defaultAgent || "claude";
305
+ const rawAgent = p.agent || cfg.defaultAgent || "claude";
306
+ let agent = (normalizeAgentId(rawAgent) ?? rawAgent);
250
307
  if (!this.registry.has(agent)) {
251
308
  send({ error: { code: "AGENT_NOT_FOUND", message: `Unknown agent ${agent}` } });
252
309
  return;
@@ -336,10 +393,128 @@ class Daemon {
336
393
  });
337
394
  break;
338
395
  }
396
+ case "session.adopt": {
397
+ const p = params;
398
+ const cwdIn = p.cwd || process.cwd();
399
+ const rawAgent = p.agent || "claude";
400
+ const agent = (normalizeAgentId(rawAgent) ?? rawAgent);
401
+ if (!this.registry.has(agent)) {
402
+ send({ error: { code: "AGENT_NOT_FOUND", message: `Unknown agent ${agent}` } });
403
+ return;
404
+ }
405
+ let sessionId = generateSessionId();
406
+ while (this.sessions.get(sessionId)) {
407
+ sessionId = generateSessionId();
408
+ }
409
+ const cwd = path.resolve(cwdIn);
410
+ let repository;
411
+ let baseCommit = p.baseCommit;
412
+ const gitInfo = await getGitInfo(cwd);
413
+ if (this.shuttingDown) {
414
+ send({ error: { code: "SERVICE_UNAVAILABLE", message: "daemon is shutting down" } });
415
+ return;
416
+ }
417
+ if (gitInfo) {
418
+ repository = gitInfo.root;
419
+ if (!baseCommit)
420
+ baseCommit = gitInfo.head;
421
+ }
422
+ const now = new Date();
423
+ const session = {
424
+ id: sessionId,
425
+ runId: sessionId,
426
+ origin: "open",
427
+ name: p.name,
428
+ agent,
429
+ model: p.model,
430
+ status: "working",
431
+ repository,
432
+ cwd,
433
+ worktree: p.worktree,
434
+ branch: p.branch,
435
+ baseCommit: baseCommit || undefined,
436
+ createdAt: now,
437
+ updatedAt: now,
438
+ };
439
+ this.sessions.create(session);
440
+ send({ result: { session } });
441
+ break;
442
+ }
443
+ case "session.patch": {
444
+ const p = params;
445
+ const s = this.sessions.get(p.id);
446
+ if (!s) {
447
+ send({ error: { code: "SESSION_NOT_FOUND", message: `Session ${p.id} not found` } });
448
+ return;
449
+ }
450
+ let pidStartTime = p.pidStartTime;
451
+ if (p.pid !== undefined && pidStartTime === undefined) {
452
+ pidStartTime = processStartTime(p.pid);
453
+ }
454
+ const updates = {};
455
+ if (p.pid !== undefined)
456
+ updates.pid = p.pid;
457
+ if (pidStartTime !== undefined)
458
+ updates.pidStartTime = pidStartTime;
459
+ if (p.worktree !== undefined)
460
+ updates.worktree = p.worktree;
461
+ if (p.branch !== undefined)
462
+ updates.branch = p.branch;
463
+ if (p.baseCommit !== undefined)
464
+ updates.baseCommit = p.baseCommit;
465
+ if (p.cwd !== undefined)
466
+ updates.cwd = p.cwd;
467
+ this.sessions.update(s.id, updates);
468
+ const updated = this.sessions.get(s.id);
469
+ send({ result: { session: updated } });
470
+ break;
471
+ }
472
+ case "session.release": {
473
+ const p = params;
474
+ const s = this.sessions.get(p.id);
475
+ if (!s) {
476
+ send({ error: { code: "SESSION_NOT_FOUND", message: `Session ${p.id} not found` } });
477
+ return;
478
+ }
479
+ if (isTerminalStatus(s.status)) {
480
+ send({ result: { session: s } });
481
+ return;
482
+ }
483
+ const targetStatus = p.status === "failed" ? "failed" : "completed";
484
+ const extra = {};
485
+ if (p.nativeSessionId !== undefined) {
486
+ extra.nativeSessionId = p.nativeSessionId;
487
+ }
488
+ if (targetStatus === "failed") {
489
+ extra.lastEvent = (p.error || "failed").slice(0, 200);
490
+ }
491
+ else {
492
+ extra.lastEvent = "released";
493
+ }
494
+ this.sessions.setStatus(s.id, targetStatus, extra);
495
+ const ev = targetStatus === "failed"
496
+ ? {
497
+ type: "session.failed",
498
+ sessionId: s.id,
499
+ timestamp: new Date().toISOString(),
500
+ error: p.error || "session failed",
501
+ }
502
+ : {
503
+ type: "session.completed",
504
+ sessionId: s.id,
505
+ timestamp: new Date().toISOString(),
506
+ reason: "released",
507
+ };
508
+ this.events.append(s.id, ev);
509
+ this.broadcast(s.id, ev);
510
+ const updated = this.sessions.get(s.id);
511
+ send({ result: { session: updated } });
512
+ break;
513
+ }
339
514
  case "session.list": {
340
515
  const p = params;
341
516
  const all = p?.all;
342
- const list = this.sessions.list(100, all);
517
+ const list = this.sessions.list(100, all).map(withLiveStatus);
343
518
  const hidden = all ? 0 : this.sessions.countHiddenByWindow();
344
519
  // Enrich with last event?
345
520
  send({ result: { sessions: list, hidden } });
@@ -347,11 +522,12 @@ class Daemon {
347
522
  }
348
523
  case "session.get": {
349
524
  const p = params;
350
- const s = this.sessions.get(p.id);
351
- if (!s) {
525
+ const stored = this.sessions.get(p.id);
526
+ if (!stored) {
352
527
  send({ error: { code: "SESSION_NOT_FOUND", message: `Session ${p.id} not found` } });
353
528
  return;
354
529
  }
530
+ const s = withLiveStatus(stored);
355
531
  const evCount = this.events.count(s.id);
356
532
  const recent = this.events.list(s.id, 10);
357
533
  send({ result: { session: s, events: recent, eventCount: evCount } });
@@ -379,6 +555,10 @@ class Daemon {
379
555
  send({ error: { code: "SESSION_NOT_FOUND", message: `Session ${p.id} not found` } });
380
556
  return;
381
557
  }
558
+ if (s.origin === "open") {
559
+ send({ error: { code: "CAPABILITY_NOT_SUPPORTED", message: `Session ${s.id} is an interactive head session and does not support headless prompt turns` } });
560
+ return;
561
+ }
382
562
  const driver = this.registry.get(s.agent);
383
563
  // Do not start a second harness while the current one is still live:
384
564
  // both runtimes would tail the same per-session file and duplicate
@@ -771,6 +951,17 @@ class Daemon {
771
951
  send({ result: aggregateRunUsage(p.runId, sessions) });
772
952
  break;
773
953
  }
954
+ case "usage.query": {
955
+ const p = (params || {});
956
+ try {
957
+ const result = this.sessions.queryUsage(p);
958
+ send({ result });
959
+ }
960
+ catch (error) {
961
+ send({ error: { code: "USAGE_QUERY_ERROR", message: error instanceof Error ? error.message : String(error) } });
962
+ }
963
+ break;
964
+ }
774
965
  case "daemon.stop": {
775
966
  send({ result: { ok: true } });
776
967
  void this.handleShutdown("daemon.stop").finally(() => process.exit(0));