@claudexor/daemon 1.0.1 → 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
@@ -0,0 +1,29 @@
1
+ import { RunEvent } from "@claudexor/schema";
2
+ const RECORDED = "run.event";
3
+ /** Writes typed run events into their owning global/project journal partition. */
4
+ export class RunEventStore {
5
+ journal;
6
+ constructor(journal) {
7
+ this.journal = journal;
8
+ this.validateProjection();
9
+ }
10
+ record(value) {
11
+ const event = RunEvent.parse(value);
12
+ this.journal.append(RECORDED, event);
13
+ return event;
14
+ }
15
+ validateProjection() {
16
+ for (const entry of this.journal.records()) {
17
+ if (entry.type === RECORDED)
18
+ RunEvent.parse(entry.payload);
19
+ }
20
+ }
21
+ }
22
+ export function runEventProjection() {
23
+ return {
24
+ name: "run-events",
25
+ create: (journal) => new RunEventStore(journal),
26
+ validate: (store) => store.validateProjection(),
27
+ };
28
+ }
29
+ //# sourceMappingURL=run-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-events.js","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkC,MAAM,mBAAmB,CAAC;AAE7E,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,kFAAkF;AAClF,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAClD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAoB;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC;QAC/D,QAAQ,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;KAC/D,CAAC;AACJ,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,7 +1,6 @@
1
- /** Context the daemon supplies to the runner so a job can be observed and cancelled. */
1
+ import { type CommandAuthority } from "./command-authority.js";
2
2
  export interface RunContext {
3
3
  signal: AbortSignal;
4
- /** Called by the runner once the run id/dir are known (lets a client tail events.jsonl). */
5
4
  onRunStart: (info: {
6
5
  runId: string;
7
6
  taskId: string;
@@ -13,24 +12,28 @@ export interface DaemonOptions {
13
12
  socketPath: string;
14
13
  token: string;
15
14
  runner: RunnerFn;
16
- /** Max concurrently-running jobs (parallel projects/runs). Default 4. */
17
15
  maxConcurrent?: number;
18
- /** Optional JSON file to persist the job registry across restarts (durable run list). */
19
- persistPath?: string;
20
- /** Max retained terminal jobs (older ones are pruned to bound memory/disk). Default 500. */
16
+ commands: CommandAuthority;
21
17
  maxHistory?: number;
18
+ idempotencyRetentionMs?: number;
19
+ now?: () => Date;
22
20
  /** Called when a job reaches a terminal state (any path) with its runId —
23
21
  * used to drop pending interactions so a dead run never advertises
24
22
  * waiting_on_user. */
25
- onRunTerminal?: (runId: string) => void;
23
+ onRunTerminal?: (runId: string, threadId?: string) => void;
26
24
  /** Called when a job that carried a pre-created thread turn (params.turnId)
27
25
  * settles failure-shaped WITHOUT ever binding a run — i.e. the refusal
28
26
  * happened before the run materialized (trust gate, preflight validation).
29
27
  * The observer persists the reason on the turn so it is never a silent
30
28
  * orphan bubble. `code` is the typed throw's machine code (null if none). */
31
29
  onTurnEnqueueFailed?: (turnId: string, error: string, code: string | null) => void;
30
+ /** Composition-root shutdown hook. When present, RPC shutdown must drain
31
+ * every daemon-owned subsystem, not only this socket queue. */
32
+ onShutdownRequested?: () => Promise<void>;
33
+ /** Test-only barriers around command authority acquisition. */
34
+ startupBarrier?: (barrier: "before_registry_load" | "after_registry_load") => void | Promise<void>;
32
35
  }
33
- export declare const JOB_STATES: readonly ["queued", "running", "blocked", "succeeded", "no_op", "ungated", "review_not_run", "failed", "cancelled", "interrupted", "exhausted", "not_converged", "stuck_no_progress"];
36
+ export declare const JOB_STATES: readonly ["queued", "running", "blocked", "succeeded", "no_op", "ungated", "review_not_run", "failed", "cancelled", "interrupted_unknown", "cost_unverifiable", "exhausted_overshoot", "exhausted", "not_converged", "stuck_no_progress"];
34
37
  export type JobState = (typeof JOB_STATES)[number];
35
38
  export interface JobRecord {
36
39
  id: string;
@@ -42,33 +45,41 @@ export interface JobRecord {
42
45
  * trust_full_access_required) — lets surfaces key remedies on the CODE,
43
46
  * never on substring-matching the human message. */
44
47
  errorCode?: string;
48
+ /** HTTP status carried by a typed throw (400-599). Refusal semantics are
49
+ * born AT THE THROW (trust=403, requirements=400, journal recovery=503) —
50
+ * a bare errno-style `code` without a status is an infra failure and must
51
+ * not masquerade as a client-actionable 4xx. */
52
+ errorStatus?: number;
45
53
  createdAt: string;
46
- /** Surfaced as soon as the run starts so a client can tail .claudexor/runs/<runId>/events.jsonl. */
54
+ /** Surfaced as soon as the run starts so a client can tail the external run's events.jsonl. */
47
55
  runId?: string;
48
56
  taskId?: string;
49
57
  runDir?: string;
50
58
  startedAt?: string;
51
59
  finishedAt?: string;
52
60
  }
53
- /**
54
- * Local daemon: Unix-socket JSON-RPC with token auth + a bounded-concurrency
55
- * worker pool (up to maxConcurrent jobs in parallel) backed by an optional
56
- * durable, atomically-written job registry. It does NOT contain a second
57
- * scheduler — it calls the injected runner (the same Orchestrator the CLI uses).
58
- */
61
+ /** Unix-socket worker pool; scheduling stays in the injected Orchestrator. */
59
62
  export declare class DaemonServer {
60
63
  private readonly opts;
61
64
  private server?;
65
+ private readonly sockets;
62
66
  private readonly queue;
63
- private readonly records;
64
67
  private readonly cancelled;
65
68
  private readonly controllers;
69
+ private readonly activeTasks;
70
+ private readonly taskFailures;
66
71
  private active;
67
72
  private readonly startedAt;
68
- private onClosed?;
73
+ private stopping;
74
+ private startPromise?;
75
+ private stopPromise?;
76
+ private resolveShutdown;
77
+ private readonly shutdownPromise;
69
78
  constructor(opts: DaemonOptions);
70
79
  start(): Promise<void>;
80
+ private startOnce;
71
81
  stop(): Promise<void>;
82
+ private stopOnce;
72
83
  /** Resolves when the daemon is shut down via RPC. */
73
84
  waitForShutdown(): Promise<void>;
74
85
  private onConnection;
@@ -76,22 +87,12 @@ export declare class DaemonServer {
76
87
  private handle;
77
88
  private dispatch;
78
89
  private get maxConcurrent();
79
- /**
80
- * Best-effort durable persistence of the job registry. Writes atomically
81
- * (temp file + rename) so a crash mid-write cannot corrupt/drop the registry.
82
- * The raw run `result` is intentionally NOT persisted: canonical output lives
83
- * in .claudexor/runs (redacted), and result.summary can contain raw model text —
84
- * keeping it out of jobs.json upholds the redaction-at-persistence invariant.
85
- */
86
- private persist;
87
- /** Bound memory/disk: prune the oldest terminal jobs beyond maxHistory.
88
- * `blocked` runs are NEVER pruned — they are the needs-human inbox awaiting an
89
- * operator decision; dropping one would silently lose a pending action. */
90
+ private stoppingError;
90
91
  private pruneHistory;
91
- /** Reload the registry on startup; a fresh process cannot resume in-memory runs. */
92
- private load;
93
- /** Preserve the raw bytes of a damaged registry and report the loss loudly. */
94
- private backupCorruptRegistry;
92
+ private acceptCommand;
93
+ private allRecords;
94
+ private getRecord;
95
+ private updateRecord;
95
96
  private threadIdOf;
96
97
  /**
97
98
  * Schedule queued jobs up to the concurrency limit (non-blocking).
@@ -106,7 +107,6 @@ export declare class DaemonServer {
106
107
  private drain;
107
108
  private runJob;
108
109
  }
109
- /** True when something is actively accepting connections on the socket path. */
110
110
  /** Is a daemon already listening on this socket? Exported so the claudexord
111
111
  * entrypoint can refuse BEFORE running crash GC — a second daemon must never
112
112
  * reap the live daemon's children or sweep envelopes its jobs still own. */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}