@claudexor/daemon 1.0.0 → 2.1.2

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 (105) hide show
  1. package/dist/client.d.ts +29 -1
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +24 -4
  4. package/dist/client.js.map +1 -1
  5. package/dist/command-authority.d.ts +11 -0
  6. package/dist/command-authority.d.ts.map +1 -0
  7. package/dist/command-authority.js +15 -0
  8. package/dist/command-authority.js.map +1 -0
  9. package/dist/command-retention.d.ts +5 -0
  10. package/dist/command-retention.d.ts.map +1 -0
  11. package/dist/command-retention.js +18 -0
  12. package/dist/command-retention.js.map +1 -0
  13. package/dist/command-store.d.ts +41 -0
  14. package/dist/command-store.d.ts.map +1 -0
  15. package/dist/command-store.js +197 -0
  16. package/dist/command-store.js.map +1 -0
  17. package/dist/events.d.ts +2 -3
  18. package/dist/events.d.ts.map +1 -1
  19. package/dist/events.js +2 -3
  20. package/dist/events.js.map +1 -1
  21. package/dist/index.d.ts +13 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +13 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/interactions.d.ts +32 -22
  26. package/dist/interactions.d.ts.map +1 -1
  27. package/dist/interactions.js +183 -56
  28. package/dist/interactions.js.map +1 -1
  29. package/dist/journal-events.d.ts +4 -0
  30. package/dist/journal-events.d.ts.map +1 -0
  31. package/dist/journal-events.js +23 -0
  32. package/dist/journal-events.js.map +1 -0
  33. package/dist/journal-manager.d.ts +72 -0
  34. package/dist/journal-manager.d.ts.map +1 -0
  35. package/dist/journal-manager.js +463 -0
  36. package/dist/journal-manager.js.map +1 -0
  37. package/dist/journal-projection.d.ts +11 -0
  38. package/dist/journal-projection.d.ts.map +1 -0
  39. package/dist/journal-projection.js +2 -0
  40. package/dist/journal-projection.js.map +1 -0
  41. package/dist/journal-recovery-files.d.ts +27 -0
  42. package/dist/journal-recovery-files.d.ts.map +1 -0
  43. package/dist/journal-recovery-files.js +209 -0
  44. package/dist/journal-recovery-files.js.map +1 -0
  45. package/dist/operator-decisions.d.ts +30 -0
  46. package/dist/operator-decisions.d.ts.map +1 -0
  47. package/dist/operator-decisions.js +137 -0
  48. package/dist/operator-decisions.js.map +1 -0
  49. package/dist/project-partitions.d.ts +167 -0
  50. package/dist/project-partitions.d.ts.map +1 -0
  51. package/dist/project-partitions.js +365 -0
  52. package/dist/project-partitions.js.map +1 -0
  53. package/dist/projects.d.ts +29 -0
  54. package/dist/projects.d.ts.map +1 -0
  55. package/dist/projects.js +180 -0
  56. package/dist/projects.js.map +1 -0
  57. package/dist/quota-registry.d.ts +75 -0
  58. package/dist/quota-registry.d.ts.map +1 -0
  59. package/dist/quota-registry.js +208 -0
  60. package/dist/quota-registry.js.map +1 -0
  61. package/dist/resource-store.d.ts +22 -0
  62. package/dist/resource-store.d.ts.map +1 -0
  63. package/dist/resource-store.js +272 -0
  64. package/dist/resource-store.js.map +1 -0
  65. package/dist/run-events.d.ts +15 -0
  66. package/dist/run-events.d.ts.map +1 -0
  67. package/dist/run-events.js +29 -0
  68. package/dist/run-events.js.map +1 -0
  69. package/dist/server.d.ts +33 -33
  70. package/dist/server.d.ts.map +1 -1
  71. package/dist/server.js +231 -238
  72. package/dist/server.js.map +1 -1
  73. package/dist/spec-sessions.d.ts +72 -0
  74. package/dist/spec-sessions.d.ts.map +1 -0
  75. package/dist/spec-sessions.js +301 -0
  76. package/dist/spec-sessions.js.map +1 -0
  77. package/dist/terminate.d.ts +52 -0
  78. package/dist/terminate.d.ts.map +1 -0
  79. package/dist/terminate.js +111 -0
  80. package/dist/terminate.js.map +1 -0
  81. package/dist/thread-head-ping.d.ts +35 -0
  82. package/dist/thread-head-ping.d.ts.map +1 -0
  83. package/dist/thread-head-ping.js +67 -0
  84. package/dist/thread-head-ping.js.map +1 -0
  85. package/dist/thread-lifecycle.d.ts +5 -0
  86. package/dist/thread-lifecycle.d.ts.map +1 -0
  87. package/dist/thread-lifecycle.js +57 -0
  88. package/dist/thread-lifecycle.js.map +1 -0
  89. package/dist/thread-store-support.d.ts +37 -0
  90. package/dist/thread-store-support.d.ts.map +1 -0
  91. package/dist/thread-store-support.js +94 -0
  92. package/dist/thread-store-support.js.map +1 -0
  93. package/dist/threads.d.ts +59 -13
  94. package/dist/threads.d.ts.map +1 -1
  95. package/dist/threads.js +254 -141
  96. package/dist/threads.js.map +1 -1
  97. package/dist/token.d.ts +13 -4
  98. package/dist/token.d.ts.map +1 -1
  99. package/dist/token.js +134 -29
  100. package/dist/token.js.map +1 -1
  101. package/dist/writer-lease.d.ts +21 -0
  102. package/dist/writer-lease.d.ts.map +1 -0
  103. package/dist/writer-lease.js +94 -0
  104. package/dist/writer-lease.js.map +1 -0
  105. package/package.json +5 -4
package/dist/threads.js CHANGED
@@ -1,7 +1,8 @@
1
- import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
1
  import { SCHEMA_VERSION, Session as SessionSchema, Thread as ThreadSchema, ThreadTurn as ThreadTurnSchema, } from "@claudexor/schema";
4
2
  import { newId, nowIso, redactSecrets } from "@claudexor/util";
3
+ import { reduceThreadLifecycle } from "./thread-lifecycle.js";
4
+ import { assertUnique, idempotencyConflict, parseMutation, threadCreationIdempotency, turnIdempotency, upsert, } from "./thread-store-support.js";
5
+ const UPSERTED = "thread.entities_upserted";
5
6
  /**
6
7
  * Thread routing invariant: a sticky primary harness must be a member of a
7
8
  * NON-EMPTY eligible pool (an empty pool = engine auto-pool, so it constrains
@@ -14,91 +15,109 @@ function coercePrimaryToPool(primary, pool) {
14
15
  return null;
15
16
  return primary;
16
17
  }
17
- /**
18
- * Durable thread/session registry (chat/session-first SSOT). The Thread is
19
- * the Claudexor-owned conversation; Sessions are re-hostable pointers to each
20
- * harness's native CLI session. Persisted as one JSON file with atomic writes
21
- * (temp + rename), mirroring the daemon job registry's durability contract.
22
- */
18
+ /** Journal-backed thread/session projection. Returned mutations are fsynced. */
23
19
  export class ThreadStore {
24
- path;
20
+ journal;
21
+ headPing;
25
22
  state = { threads: [], sessions: [], turns: [] };
26
- constructor(path) {
27
- this.path = path;
28
- this.load();
23
+ turnIdByKey = new Map();
24
+ threadIdByKey = new Map();
25
+ constructor(journal, headPing) {
26
+ this.journal = journal;
27
+ this.headPing = headPing;
28
+ this.replay();
29
29
  }
30
- load() {
31
- if (!existsSync(this.path))
32
- return;
33
- let raw;
34
- try {
35
- raw = JSON.parse(readFileSync(this.path, "utf8"));
30
+ validateProjection() {
31
+ for (const thread of this.state.threads)
32
+ ThreadSchema.parse(thread);
33
+ for (const session of this.state.sessions)
34
+ SessionSchema.parse(session);
35
+ for (const turn of this.state.turns)
36
+ ThreadTurnSchema.parse(turn);
37
+ assertUnique(this.state.threads, "thread");
38
+ assertUnique(this.state.sessions, "session");
39
+ assertUnique(this.state.turns, "turn");
40
+ for (const value of this.turnIdByKey.values()) {
41
+ if (!this.getTurn(value.turnId))
42
+ throw new Error("thread idempotency index is dangling");
36
43
  }
37
- catch {
38
- // A corrupt store must not brick the daemon; threads are recoverable
39
- // from run artifacts, so start empty rather than crash-looping.
40
- this.state = { threads: [], sessions: [], turns: [] };
41
- return;
44
+ for (const value of this.threadIdByKey.values()) {
45
+ if (!this.getThread(value.threadId))
46
+ throw new Error("thread creation idempotency index is dangling");
42
47
  }
43
- // Per-record leniency: ONE invalid record must not wipe the whole history.
44
- // A record stamped by a different schema_version is forward-migrated first
45
- // (additive fields are covered by zod defaults); only a genuinely
46
- // unparseable record is dropped — and then the original file is backed up
47
- // and the loss is logged, so a schema change never SILENTLY erases history.
48
- let dropped = 0;
49
- const keep = (items, schema) => (items ?? []).flatMap((item) => {
50
- let parsed = schema.safeParse(item);
51
- if (!parsed.success && item && typeof item === "object") {
52
- // Forward-migrate: bump schema_version AND coerce retired enum values
53
- // (Thread.state "blocked" -> "active", ThreadTurnKind "orchestrate"
54
- // -> "followup", SessionResumeKind "resume_latest"/"rehost" -> the
55
- // values the daemon actually stamps) so an old record is migrated,
56
- // not dropped.
57
- const rec = item;
58
- const migrated = { ...rec, schema_version: SCHEMA_VERSION };
59
- if (migrated["state"] === "blocked")
60
- migrated["state"] = "active";
61
- if (migrated["kind"] === "orchestrate")
62
- migrated["kind"] = "followup";
63
- if (migrated["resume_kind"] === "resume_latest")
64
- migrated["resume_kind"] = "resume_by_id";
65
- if (migrated["resume_kind"] === "rehost") {
66
- // "rehost" meant "continued on a DIFFERENT harness — native resume
67
- // impossible". resumeMap keys on state==="live" + native id, so the
68
- // state must flip to "rebound" too or a stale live rehost record
69
- // would still resume natively despite its own retirement semantics.
70
- migrated["resume_kind"] = "none";
71
- migrated["state"] = "rebound";
72
- }
73
- parsed = schema.safeParse(migrated);
74
- }
75
- if (parsed.success && parsed.data !== undefined)
76
- return [parsed.data];
77
- dropped++;
78
- return [];
79
- });
80
- this.state = {
81
- threads: keep(raw.threads, ThreadSchema),
82
- sessions: keep(raw.sessions, SessionSchema),
83
- turns: keep(raw.turns, ThreadTurnSchema),
84
- };
85
- if (dropped > 0) {
86
- try {
87
- writeFileSync(`${this.path}.bak`, JSON.stringify(raw, null, 2), { mode: 0o600 });
88
- console.error(`[claudexor] threads store: ${dropped} record(s) unparseable after migration; original backed up to ${this.path}.bak`);
48
+ }
49
+ replay() {
50
+ for (const record of this.journal.records()) {
51
+ if (record.type === UPSERTED)
52
+ this.apply(parseMutation(record.payload));
53
+ }
54
+ this.validateProjection();
55
+ }
56
+ commit(mutation) {
57
+ const parsed = parseMutation(mutation);
58
+ this.journal.append(UPSERTED, parsed);
59
+ this.apply(parsed);
60
+ // Every PERSISTED mutation invalidates the touched threads' summaries
61
+ // pinging here (the single writer) covers create/rename/archive/turn-add/
62
+ // enqueue-error/session/worktree without per-call-site wiring, so a future
63
+ // mutation path cannot forget the ping. Replay never pings (it goes
64
+ // through apply(), not commit()); the run-terminal path pings via
65
+ // pingHead() directly because no store mutation happens at terminal.
66
+ const touched = new Set([
67
+ ...(parsed.threads ?? []).map((thread) => thread.id),
68
+ ...(parsed.turns ?? []).map((turn) => turn.thread_id),
69
+ ...(parsed.sessions ?? []).map((session) => session.thread_id),
70
+ ]);
71
+ for (const threadId of touched)
72
+ this.pingHead(threadId);
73
+ }
74
+ /**
75
+ * Emit the content-free head-invalidation ping for one thread. The owning
76
+ * partition name is this store's journal partition — the single source of
77
+ * the thread->project mapping.
78
+ */
79
+ pingHead(threadId) {
80
+ const partition = this.journal.options.partition;
81
+ const projectId = partition.startsWith("project:") ? partition.slice("project:".length) : null;
82
+ this.headPing?.({ threadId, projectId });
83
+ }
84
+ apply(mutation) {
85
+ for (const thread of mutation.threads ?? [])
86
+ upsert(this.state.threads, thread);
87
+ for (const session of mutation.sessions ?? [])
88
+ upsert(this.state.sessions, session);
89
+ for (const turn of mutation.turns ?? [])
90
+ upsert(this.state.turns, turn);
91
+ if (mutation.idempotency) {
92
+ const { keyDigest, requestDigest, turnId } = mutation.idempotency;
93
+ const prior = this.turnIdByKey.get(keyDigest);
94
+ if (prior && (prior.turnId !== turnId || prior.requestDigest !== requestDigest)) {
95
+ throw new Error("conflicting thread idempotency history");
89
96
  }
90
- catch {
91
- /* best-effort backup */
97
+ this.turnIdByKey.set(keyDigest, { turnId, requestDigest });
98
+ }
99
+ if (mutation.threadCreation) {
100
+ const { keyDigest, requestDigest, threadId } = mutation.threadCreation;
101
+ const prior = this.threadIdByKey.get(keyDigest);
102
+ if (prior && (prior.threadId !== threadId || prior.requestDigest !== requestDigest)) {
103
+ throw new Error("conflicting thread creation idempotency history");
92
104
  }
105
+ this.threadIdByKey.set(keyDigest, { threadId, requestDigest });
93
106
  }
94
107
  }
95
- persist() {
96
- mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 });
97
- const tmp = join(dirname(this.path), `.threads-${process.pid}.tmp`);
98
- writeFileSync(tmp, JSON.stringify(this.state, null, 2), { mode: 0o600 });
99
- renameSync(tmp, this.path);
100
- }
101
108
  createThread(input) {
109
+ const creation = threadCreationIdempotency(this.journal.options.partition, input.idempotency);
110
+ if (creation) {
111
+ const prior = this.threadIdByKey.get(creation.keyDigest);
112
+ if (prior) {
113
+ if (prior.requestDigest !== creation.requestDigest)
114
+ throw idempotencyConflict();
115
+ const existing = this.getThread(prior.threadId);
116
+ if (!existing)
117
+ throw new Error(`idempotency record points to missing thread ${prior.threadId}`);
118
+ return existing;
119
+ }
120
+ }
102
121
  const now = nowIso();
103
122
  // Same invariant as updateThread: a sticky primary must be a member of a
104
123
  // non-empty eligible pool. Enforce it at CREATE too (the create request carries
@@ -118,13 +137,19 @@ export class ThreadStore {
118
137
  mode: input.mode ?? (input.repoRoot ? "agent" : "ask"),
119
138
  // An isolated workspace needs a git project for its worktree; a no-project
120
139
  // thread is always in_place (review #6 — never persist a doomed config).
121
- workspace: { mode: input.repoRoot ? input.workspace ?? "in_place" : "in_place", worktree_path: null, base_sha: null },
140
+ workspace: {
141
+ mode: input.repoRoot ? (input.workspace ?? "in_place") : "in_place",
142
+ worktree_path: null,
143
+ base_sha: null,
144
+ },
122
145
  auth_preference: input.authPreference ?? "auto",
146
+ credential_profile_id: input.credentialProfileId ?? null,
123
147
  primary_harness: primary,
124
148
  eligible_harnesses: eligible,
125
149
  });
126
- this.state.threads.push(thread);
127
- this.persist();
150
+ if (creation)
151
+ creation.threadId = thread.id;
152
+ this.commit({ threads: [thread], ...(creation ? { threadCreation: creation } : {}) });
128
153
  return thread;
129
154
  }
130
155
  /** Rename and/or open/close (archive) a thread. */
@@ -132,35 +157,75 @@ export class ThreadStore {
132
157
  const thread = this.getThread(id);
133
158
  if (!thread)
134
159
  throw Object.assign(new Error(`no such thread: ${id}`), { status: 404 });
135
- if (patch.title !== undefined)
136
- thread.title = patch.title;
137
- if (patch.state !== undefined)
138
- thread.state = patch.state;
139
- if (patch.primaryHarness !== undefined)
140
- thread.primary_harness = patch.primaryHarness;
141
- if (patch.eligibleHarnesses !== undefined)
142
- thread.eligible_harnesses = patch.eligibleHarnesses;
160
+ if (thread.state === "trashed" || thread.state === "purged") {
161
+ throw Object.assign(new Error(`thread ${id} is ${thread.state}`), {
162
+ status: 409,
163
+ code: `thread_${thread.state}`,
164
+ });
165
+ }
166
+ const next = ThreadSchema.parse({
167
+ ...thread,
168
+ ...(patch.title !== undefined ? { title: patch.title } : {}),
169
+ ...(patch.state !== undefined ? { state: patch.state } : {}),
170
+ ...(patch.primaryHarness !== undefined ? { primary_harness: patch.primaryHarness } : {}),
171
+ ...(patch.credentialProfileId !== undefined
172
+ ? { credential_profile_id: patch.credentialProfileId }
173
+ : {}),
174
+ ...(patch.eligibleHarnesses !== undefined
175
+ ? { eligible_harnesses: patch.eligibleHarnesses }
176
+ : {}),
177
+ updated_at: nowIso(),
178
+ });
143
179
  // Invariant (thread.ts contract): a sticky primary must be a member of a non-empty
144
180
  // eligible pool. If a PATCH leaves the primary outside the pool — e.g. the user
145
181
  // removed the primary harness from the pool — clear it to null (Auto) rather than
146
182
  // persist an incoherent state that the UI would show as "X answers in chat" while
147
183
  // the engine silently drops X. (An empty pool = auto, so it imposes no constraint.)
148
- thread.primary_harness = coercePrimaryToPool(thread.primary_harness, thread.eligible_harnesses);
149
- thread.updated_at = nowIso();
150
- this.persist();
151
- return thread;
184
+ next.primary_harness = coercePrimaryToPool(next.primary_harness, next.eligible_harnesses);
185
+ this.commit({ threads: [next] });
186
+ return next;
187
+ }
188
+ trashThread(id) {
189
+ return this.changeLifecycle(id, "trash");
190
+ }
191
+ restoreThread(id) {
192
+ return this.changeLifecycle(id, "restore");
193
+ }
194
+ purgeThread(id) {
195
+ return this.changeLifecycle(id, "purge");
196
+ }
197
+ changeLifecycle(id, action) {
198
+ const thread = this.getThread(id);
199
+ if (!thread)
200
+ throw Object.assign(new Error(`no such thread: ${id}`), { status: 404 });
201
+ const next = reduceThreadLifecycle(thread, action);
202
+ if (next !== thread)
203
+ this.commit({ threads: [next] });
204
+ return next;
152
205
  }
153
206
  /** Persist the resolved isolated worktree path + base sha for a thread. */
154
- setThreadWorktree(id, worktreePath, baseSha) {
207
+ setThreadWorktree(id, worktreePath, baseSha, deliveredThroughRunId) {
155
208
  const thread = this.getThread(id);
156
209
  if (!thread)
157
210
  return;
158
- thread.workspace = { ...thread.workspace, worktree_path: worktreePath, base_sha: baseSha };
159
- thread.updated_at = nowIso();
160
- this.persist();
211
+ const next = ThreadSchema.parse({
212
+ ...thread,
213
+ workspace: {
214
+ ...thread.workspace,
215
+ worktree_path: worktreePath,
216
+ base_sha: baseSha,
217
+ ...(deliveredThroughRunId !== undefined
218
+ ? { delivered_through_run_id: deliveredThroughRunId }
219
+ : {}),
220
+ },
221
+ updated_at: nowIso(),
222
+ });
223
+ this.commit({ threads: [next] });
161
224
  }
162
225
  listThreads() {
163
- return [...this.state.threads].sort((a, b) => (a.updated_at < b.updated_at ? 1 : -1));
226
+ return this.state.threads
227
+ .filter((thread) => thread.state !== "purged")
228
+ .sort((a, b) => (a.updated_at < b.updated_at ? 1 : -1));
164
229
  }
165
230
  getThread(id) {
166
231
  return this.state.threads.find((t) => t.id === id);
@@ -192,7 +257,9 @@ export class ThreadStore {
192
257
  // workspace/session context from one thread while advancing another
193
258
  // thread's lineage. A turn also never rides without its thread id.
194
259
  if (!threadId) {
195
- throw Object.assign(new Error(`turnId ${turnId} requires its threadId`), { code: "unbound_turn" });
260
+ throw Object.assign(new Error(`turnId ${turnId} requires its threadId`), {
261
+ code: "unbound_turn",
262
+ });
196
263
  }
197
264
  if (turn.thread_id !== threadId) {
198
265
  throw Object.assign(new Error(`turn ${turnId} belongs to thread ${turn.thread_id}, not ${threadId}`), { code: "foreign_turn" });
@@ -204,11 +271,16 @@ export class ThreadStore {
204
271
  return this.state.sessions.filter((s) => s.thread_id === threadId);
205
272
  }
206
273
  /** Native resume map for a thread: harnessId -> native session id (live sessions only). */
207
- resumeMap(threadId) {
274
+ resumeMap(threadId, profileId = null) {
208
275
  const map = {};
209
276
  for (const s of this.sessionsForThread(threadId)) {
210
- if (s.state === "live" && s.native_session_id)
211
- map[s.harness_id] = s.native_session_id;
277
+ // INV-135: resume never crosses credential profiles — a session recorded
278
+ // under one profile (or the null engine default) is eligible ONLY for a
279
+ // turn running as exactly that profile. The entry CARRIES its profile so
280
+ // the engine boundary re-verifies against the RESOLVED profile (which
281
+ // preflight rotation may have changed after this map was built).
282
+ if (s.state === "live" && s.native_session_id && (s.profile_id ?? null) === profileId)
283
+ map[s.harness_id] = { sessionId: s.native_session_id, profileId: s.profile_id ?? null };
212
284
  }
213
285
  return map;
214
286
  }
@@ -221,9 +293,27 @@ export class ThreadStore {
221
293
  * concurrent turns cannot both claim the same stale head.
222
294
  */
223
295
  createTurn(threadId, prompt, input = {}) {
296
+ const idempotency = turnIdempotency(this.journal.options.partition, threadId, input.idempotency);
297
+ if (idempotency) {
298
+ const prior = this.turnIdByKey.get(idempotency.keyDigest);
299
+ if (prior) {
300
+ if (prior.requestDigest !== idempotency.requestDigest)
301
+ throw idempotencyConflict();
302
+ const existing = this.getTurn(prior.turnId);
303
+ if (!existing)
304
+ throw new Error(`idempotency record points to missing turn ${prior.turnId}`);
305
+ return existing;
306
+ }
307
+ }
224
308
  const thread = this.getThread(threadId);
225
309
  if (!thread)
226
310
  throw Object.assign(new Error(`no such thread: ${threadId}`), { status: 404 });
311
+ if (thread.state === "trashed" || thread.state === "purged") {
312
+ throw Object.assign(new Error(`thread ${threadId} is ${thread.state}`), {
313
+ status: 409,
314
+ code: `thread_${thread.state}`,
315
+ });
316
+ }
227
317
  // Count TURNS, not run_ids: run_ids is only filled at bindTurnRun (which lags
228
318
  // the runner), so a second turn created before the first binds would also see
229
319
  // an empty run_ids and wrongly claim "initial" (review #5).
@@ -237,17 +327,20 @@ export class ThreadStore {
237
327
  plan_run_id: input.planRunId ?? null,
238
328
  kind,
239
329
  // The durable conversation store is read back into UIs: redact at the
240
- // persist boundary exactly like jobs.json / events.jsonl do.
330
+ // persistence boundary exactly like other durable state projections do.
241
331
  prompt: redactSecrets(prompt),
242
332
  attachments: input.attachments ?? [],
243
333
  created_at: nowIso(),
244
334
  });
245
- this.state.turns.push(turn);
246
335
  // First prompt names the thread (no LLM): cheap, honest, editable via rename.
247
- if (!thread.title)
248
- thread.title = turn.prompt.split("\n")[0].slice(0, 60);
249
- thread.updated_at = nowIso();
250
- this.persist();
336
+ const nextThread = ThreadSchema.parse({
337
+ ...thread,
338
+ title: thread.title || turn.prompt.split("\n")[0].slice(0, 60),
339
+ updated_at: nowIso(),
340
+ });
341
+ if (idempotency)
342
+ idempotency.turnId = turn.id;
343
+ this.commit({ threads: [nextThread], turns: [turn], ...(idempotency ? { idempotency } : {}) });
251
344
  return turn;
252
345
  }
253
346
  /** Bind a started run to its turn and advance the thread head (runner-owned). */
@@ -255,18 +348,20 @@ export class ThreadStore {
255
348
  const turn = this.state.turns.find((t) => t.id === turnId);
256
349
  if (!turn)
257
350
  return;
258
- turn.run_id = runId;
351
+ const nextTurn = ThreadTurnSchema.parse({ ...turn, run_id: runId, enqueue_error: null });
259
352
  // A binding run supersedes any recorded refusal (the retry path): the
260
353
  // turn is no longer an orphan, so the stale error must not linger.
261
- turn.enqueue_error = null;
262
354
  const thread = this.getThread(turn.thread_id);
355
+ let nextThread;
263
356
  if (thread) {
264
- if (!thread.run_ids.includes(runId))
265
- thread.run_ids.push(runId);
266
- thread.head_run_id = runId;
267
- thread.updated_at = nowIso();
357
+ nextThread = ThreadSchema.parse({
358
+ ...thread,
359
+ run_ids: thread.run_ids.includes(runId) ? thread.run_ids : [...thread.run_ids, runId],
360
+ head_run_id: runId,
361
+ updated_at: nowIso(),
362
+ });
268
363
  }
269
- this.persist();
364
+ this.commit({ turns: [nextTurn], ...(nextThread ? { threads: [nextThread] } : {}) });
270
365
  }
271
366
  /**
272
367
  * Persist the reason a turn's run could NOT be enqueued/started (trust
@@ -282,41 +377,59 @@ export class ThreadStore {
282
377
  const turn = this.state.turns.find((t) => t.id === turnId);
283
378
  if (!turn || turn.run_id)
284
379
  return;
285
- turn.enqueue_error = { message: redactSecrets(message), code, retryable, failed_at: nowIso() };
380
+ const nextTurn = ThreadTurnSchema.parse({
381
+ ...turn,
382
+ enqueue_error: { message: redactSecrets(message), code, retryable, failed_at: nowIso() },
383
+ });
286
384
  const thread = this.getThread(turn.thread_id);
287
- if (thread)
288
- thread.updated_at = nowIso();
289
- this.persist();
385
+ const nextThread = thread ? ThreadSchema.parse({ ...thread, updated_at: nowIso() }) : undefined;
386
+ this.commit({ turns: [nextTurn], ...(nextThread ? { threads: [nextThread] } : {}) });
290
387
  }
291
- /** Record/refresh the native CLI session a harness emitted for this thread. */
292
- recordSession(threadId, harnessId, nativeSessionId, observedModel) {
293
- const existing = this.state.sessions.find((s) => s.thread_id === threadId && s.harness_id === harnessId);
388
+ /** Record/refresh the native CLI session a harness emitted for this thread.
389
+ * Keyed by (thread, harness, PROFILE) — resume eligibility is
390
+ * profile-specific (release wave round-16 #3), so profile B's session must
391
+ * never overwrite profile A's row: an A→B→A sequence resumes A's own native
392
+ * conversation (the null engine default is its own row too). */
393
+ recordSession(threadId, harnessId, nativeSessionId, observedModel, profileId = null) {
394
+ const existing = this.state.sessions.find((s) => s.thread_id === threadId &&
395
+ s.harness_id === harnessId &&
396
+ (s.profile_id ?? null) === (profileId ?? null));
294
397
  const now = nowIso();
295
- if (existing) {
296
- existing.native_session_id = nativeSessionId;
297
- existing.state = "live";
298
- existing.resume_kind = "resume_by_id";
299
- if (observedModel)
300
- existing.last_observed_model = observedModel;
301
- existing.updated_at = now;
302
- }
303
- else {
304
- this.state.sessions.push(SessionSchema.parse({
398
+ const session = SessionSchema.parse({
399
+ ...(existing ?? {
305
400
  id: newId("se"),
306
401
  thread_id: threadId,
307
402
  harness_id: harnessId,
308
- native_session_id: nativeSessionId,
309
- last_observed_model: observedModel ?? null,
310
- resume_kind: "resume_by_id",
311
- state: "live",
312
403
  created_at: now,
313
- updated_at: now,
314
- }));
315
- }
404
+ }),
405
+ profile_id: profileId,
406
+ native_session_id: nativeSessionId,
407
+ last_observed_model: observedModel || existing?.last_observed_model || null,
408
+ resume_kind: "resume_by_id",
409
+ state: "live",
410
+ updated_at: now,
411
+ });
316
412
  const thread = this.getThread(threadId);
317
- if (thread)
318
- thread.updated_at = now;
319
- this.persist();
413
+ const nextThread = thread ? ThreadSchema.parse({ ...thread, updated_at: now }) : undefined;
414
+ this.commit({ sessions: [session], ...(nextThread ? { threads: [nextThread] } : {}) });
320
415
  }
416
+ relinkProjectRoot(root) {
417
+ const threads = this.state.threads
418
+ .filter((thread) => thread.repo && thread.repo.root !== root)
419
+ .map((thread) => ThreadSchema.parse({
420
+ ...thread,
421
+ repo: { ...thread.repo, root },
422
+ updated_at: nowIso(),
423
+ }));
424
+ if (threads.length > 0)
425
+ this.commit({ threads });
426
+ }
427
+ }
428
+ export function threadProjection(headPing) {
429
+ return {
430
+ name: "threads",
431
+ create: (journal) => new ThreadStore(journal, headPing),
432
+ validate: (store) => store.validateProjection(),
433
+ };
321
434
  }
322
435
  //# sourceMappingURL=threads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"threads.js","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"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"}
package/dist/token.d.ts CHANGED
@@ -1,11 +1,20 @@
1
1
  export declare function daemonDir(): string;
2
+ /**
3
+ * Prove every daemon-owned root component before any token/log/lock writer is
4
+ * allowed to touch it. On first launch the default `~/.claudexor` parent may
5
+ * not exist yet, so create that one owned root before proving the v2 subtree.
6
+ * A custom root must still have a canonical parent supplied by its operator.
7
+ */
8
+ export declare function ensureDaemonRuntimeRoot(): string;
2
9
  export declare function defaultSocketPath(): string;
3
10
  export declare function logPath(): string;
4
- /** Read or generate a per-user local auth token (0600). */
11
+ /** Read or generate a per-user local auth token (0600), never through links. */
5
12
  export declare function ensureToken(): string;
6
13
  export declare function readToken(): string | null;
7
- /** Rotate the local auth token: a fresh random token replaces the
8
- * old one (0600). Existing daemon sessions keep their in-memory token, so
9
- * rotation takes effect on the next daemon start the CLI surface says so. */
14
+ /**
15
+ * Rotate only a proven owner-controlled token inode. The caller already fences
16
+ * a live daemon; this writer adds no compatibility path that would chmod or
17
+ * overwrite a symlink/hardlink/foreign file.
18
+ */
10
19
  export declare function rotateToken(): string;
11
20
  //# sourceMappingURL=token.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,IAAI,MAAM,CAkBpC;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAOzC;AAED;;+EAE+E;AAC/E,wBAAgB,WAAW,IAAI,MAAM,CAYpC"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAmBA,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAShD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,gFAAgF;AAChF,wBAAgB,WAAW,IAAI,MAAM,CAgCpC;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAOzC;AAiBD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAgCpC"}