@cat-factory/local-server 0.153.2 → 0.154.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.
@@ -3,7 +3,7 @@
3
3
  * `@cat-factory/deploy-harness`'s version (the value CI tags the published image with, and the same
4
4
  * tag `deploy/backend` pins) by the runner-image-tag sync — do not bump it by hand.
5
5
  */
6
- export declare const RECOMMENDED_DEPLOY_IMAGE = "ghcr.io/kibertoad/cat-factory-deploy:0.8.2";
6
+ export declare const RECOMMENDED_DEPLOY_IMAGE = "ghcr.io/kibertoad/cat-factory-deploy:0.8.4";
7
7
  /**
8
8
  * The effective deploy-harness image ref for `container` mode: an explicit `LOCAL_DEPLOY_IMAGE`
9
9
  * wins (a custom build, a different pin, or a private-registry mirror), else the backend-matched
@@ -21,7 +21,7 @@
21
21
  * `@cat-factory/deploy-harness`'s version (the value CI tags the published image with, and the same
22
22
  * tag `deploy/backend` pins) by the runner-image-tag sync — do not bump it by hand.
23
23
  */
24
- export const RECOMMENDED_DEPLOY_IMAGE = 'ghcr.io/kibertoad/cat-factory-deploy:0.8.2';
24
+ export const RECOMMENDED_DEPLOY_IMAGE = 'ghcr.io/kibertoad/cat-factory-deploy:0.8.4';
25
25
  /**
26
26
  * The effective deploy-harness image ref for `container` mode: an explicit `LOCAL_DEPLOY_IMAGE`
27
27
  * wins (a custom build, a different pin, or a private-registry mirror), else the backend-matched
@@ -1,4 +1,4 @@
1
- import type { GuidedReviewJob, GuidedReviewRunner, Logger } from '@cat-factory/kernel';
1
+ import type { GuidedReviewJob, GuidedReviewJobProgress, GuidedReviewRunner, Logger } from '@cat-factory/kernel';
2
2
  import type { SqliteGuidedReviewQueue } from './sqlite/guidedReviewQueue.js';
3
3
  export interface SqliteGuidedReviewRunnerOptions {
4
4
  /** How long a claim holds before a later drain may take the job over (a crash). */
@@ -12,7 +12,7 @@ export interface SqliteGuidedReviewRunnerOptions {
12
12
  }
13
13
  /** The slice of `GuidedReviewService` the runner drives. */
14
14
  export interface GuidedReviewJobDriver {
15
- runJob(workspaceId: string, job: GuidedReviewJob): Promise<void>;
15
+ runJob(workspaceId: string, job: GuidedReviewJob): Promise<GuidedReviewJobProgress>;
16
16
  abandonJob(workspaceId: string, job: GuidedReviewJob, detail: string): Promise<void>;
17
17
  }
18
18
  /**
@@ -28,6 +28,7 @@ export declare class SqliteGuidedReviewRunner implements GuidedReviewRunner {
28
28
  private driver?;
29
29
  private readonly running;
30
30
  private sweepTimer?;
31
+ private wakeTimer?;
31
32
  private stopped;
32
33
  constructor(queue: SqliteGuidedReviewQueue, opts: SqliteGuidedReviewRunnerOptions, log: Logger, now?: () => number);
33
34
  /** Bind the service once the container exists, recover orphans and start the periodic drain. */
@@ -36,6 +37,12 @@ export declare class SqliteGuidedReviewRunner implements GuidedReviewRunner {
36
37
  start(workspaceId: string, job: GuidedReviewJob): Promise<void>;
37
38
  private drain;
38
39
  private drive;
40
+ /**
41
+ * Wake again when the earliest held job comes due. Computed from the queue rather than set per
42
+ * re-queue, because a timer runs on a monotonic clock while due times are wall-clock, so a timer
43
+ * for exactly the delay can fire a millisecond early and leave the job waiting for the sweep.
44
+ */
45
+ private wakeAtNextDue;
39
46
  /**
40
47
  * Settle a given-up job's row as failed, or the mothership keeps it live and its thread reads as
41
48
  * busy forever. The queue row goes only once that lands: the mothership being unreachable is the
@@ -1 +1 @@
1
- {"version":3,"file":"guidedReviewRunner.d.ts","sourceRoot":"","sources":["../src/guidedReviewRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEtF,OAAO,KAAK,EAA0B,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAEpG,MAAM,WAAW,+BAA+B;IAC9C,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,4DAA4D;AAC5D,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrF;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;IAO/D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,OAAO,CAAC,MAAM,CAAC,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,UAAU,CAAC,CAAgC;IACnD,OAAO,CAAC,OAAO,CAAQ;IAEvB,YACmB,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,+BAA+B,EACrC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,MAAiB,EAC3C;IAEJ,gGAAgG;IAChG,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAWpD;IAED,IAAI,IAAI,IAAI,CAIX;IAEK,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;IAED,OAAO,CAAC,KAAK;YAwBC,KAAK;IAoBnB;;;;OAIG;YACW,OAAO;CAkBtB"}
1
+ {"version":3,"file":"guidedReviewRunner.d.ts","sourceRoot":"","sources":["../src/guidedReviewRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,MAAM,EACP,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAA0B,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAEpG,MAAM,WAAW,+BAA+B;IAC9C,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,4DAA4D;AAC5D,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACnF,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrF;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;IAQ/D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAVtB,OAAO,CAAC,MAAM,CAAC,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,UAAU,CAAC,CAAgC;IACnD,OAAO,CAAC,SAAS,CAAC,CAA+B;IACjD,OAAO,CAAC,OAAO,CAAQ;IAEvB,YACmB,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,+BAA+B,EACrC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,MAAiB,EAC3C;IAEJ,gGAAgG;IAChG,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAWpD;IAED,IAAI,IAAI,IAAI,CAKX;IAEK,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;IAED,OAAO,CAAC,KAAK;YA2BC,KAAK;IAyBnB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;OAIG;YACW,OAAO;CAkBtB"}
@@ -12,6 +12,7 @@ export class SqliteGuidedReviewRunner {
12
12
  driver;
13
13
  running = new Set();
14
14
  sweepTimer;
15
+ wakeTimer;
15
16
  stopped = false;
16
17
  constructor(queue, opts, log, now = Date.now) {
17
18
  this.queue = queue;
@@ -36,6 +37,8 @@ export class SqliteGuidedReviewRunner {
36
37
  }
37
38
  stop() {
38
39
  this.stopped = true;
40
+ if (this.wakeTimer)
41
+ clearTimeout(this.wakeTimer);
39
42
  if (this.sweepTimer)
40
43
  clearInterval(this.sweepTimer);
41
44
  this.sweepTimer = undefined;
@@ -59,16 +62,24 @@ export class SqliteGuidedReviewRunner {
59
62
  }
60
63
  while (this.running.size < this.opts.concurrency) {
61
64
  const claimed = this.queue.claim(this.now(), this.opts.leaseMs, this.running);
62
- if (!claimed)
65
+ if (!claimed) {
66
+ this.wakeAtNextDue();
63
67
  return;
68
+ }
64
69
  this.running.add(claimed.key);
65
70
  void this.drive(driver, claimed);
66
71
  }
67
72
  }
68
73
  async drive(driver, claimed) {
69
74
  try {
70
- await driver.runJob(claimed.workspaceId, claimed.job);
71
- this.queue.complete(claimed.key);
75
+ const progress = await driver.runJob(claimed.workspaceId, claimed.job);
76
+ if (progress.done) {
77
+ this.queue.complete(claimed.key);
78
+ }
79
+ else {
80
+ // A deep answer still working: re-queue it for its next poll rather than holding a slot.
81
+ this.queue.reschedule(claimed.key, this.now() + progress.pollAfterMs);
82
+ }
72
83
  }
73
84
  catch (error) {
74
85
  this.log.warn('guided-review job failed; retrying after backoff', {
@@ -83,6 +94,20 @@ export class SqliteGuidedReviewRunner {
83
94
  this.drain();
84
95
  }
85
96
  }
97
+ /**
98
+ * Wake again when the earliest held job comes due. Computed from the queue rather than set per
99
+ * re-queue, because a timer runs on a monotonic clock while due times are wall-clock, so a timer
100
+ * for exactly the delay can fire a millisecond early and leave the job waiting for the sweep.
101
+ */
102
+ wakeAtNextDue() {
103
+ const due = this.queue.nextDueAt();
104
+ if (due === null)
105
+ return;
106
+ if (this.wakeTimer)
107
+ clearTimeout(this.wakeTimer);
108
+ this.wakeTimer = setTimeout(() => this.drain(), Math.max(1, due - this.now() + 1));
109
+ this.wakeTimer.unref?.();
110
+ }
86
111
  /**
87
112
  * Settle a given-up job's row as failed, or the mothership keeps it live and its thread reads as
88
113
  * busy forever. The queue row goes only once that lands: the mothership being unreachable is the
@@ -1 +1 @@
1
- {"version":3,"file":"guidedReviewRunner.js","sourceRoot":"","sources":["../src/guidedReviewRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guidedReviewRunner.js","sourceRoot":"","sources":["../src/guidedReviewRunner.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * `@cat-factory/executor-harness`'s version (the value CI tags the published image with, and
4
4
  * the same tag `deploy/backend` pins). Bump it whenever the harness image bumps.
5
5
  */
6
- export declare const RECOMMENDED_HARNESS_IMAGE = "ghcr.io/kibertoad/cat-factory-executor:1.163.2";
6
+ export declare const RECOMMENDED_HARNESS_IMAGE = "ghcr.io/kibertoad/cat-factory-executor:1.163.4";
7
7
  /**
8
8
  * The UI-TESTER image this backend release is matched to: the same harness plus Playwright +
9
9
  * Chromium, pnpm/yarn, `serve` and a headless JRE + WireMock. It carries the executor harness's
@@ -12,7 +12,7 @@ export declare const RECOMMENDED_HARNESS_IMAGE = "ghcr.io/kibertoad/cat-factory-
12
12
  * A step declaring `image: 'ui'` (the browser-driven `tester-ui` kind) dispatches to its own
13
13
  * container on this image, alongside the run's ordinary one.
14
14
  */
15
- export declare const RECOMMENDED_UI_HARNESS_IMAGE = "ghcr.io/kibertoad/cat-factory-executor-ui:1.163.2";
15
+ export declare const RECOMMENDED_UI_HARNESS_IMAGE = "ghcr.io/kibertoad/cat-factory-executor-ui:1.163.4";
16
16
  /**
17
17
  * The effective harness image ref: an explicit `LOCAL_HARNESS_IMAGE` wins (a custom build, a
18
18
  * different pin, or a mutable tag), else the backend-matched {@link RECOMMENDED_HARNESS_IMAGE}.
@@ -23,7 +23,7 @@ import { isOffValue } from './envFlags.js';
23
23
  * `@cat-factory/executor-harness`'s version (the value CI tags the published image with, and
24
24
  * the same tag `deploy/backend` pins). Bump it whenever the harness image bumps.
25
25
  */
26
- export const RECOMMENDED_HARNESS_IMAGE = 'ghcr.io/kibertoad/cat-factory-executor:1.163.2';
26
+ export const RECOMMENDED_HARNESS_IMAGE = 'ghcr.io/kibertoad/cat-factory-executor:1.163.4';
27
27
  /**
28
28
  * The UI-TESTER image this backend release is matched to: the same harness plus Playwright +
29
29
  * Chromium, pnpm/yarn, `serve` and a headless JRE + WireMock. It carries the executor harness's
@@ -32,7 +32,7 @@ export const RECOMMENDED_HARNESS_IMAGE = 'ghcr.io/kibertoad/cat-factory-executor
32
32
  * A step declaring `image: 'ui'` (the browser-driven `tester-ui` kind) dispatches to its own
33
33
  * container on this image, alongside the run's ordinary one.
34
34
  */
35
- export const RECOMMENDED_UI_HARNESS_IMAGE = 'ghcr.io/kibertoad/cat-factory-executor-ui:1.163.2';
35
+ export const RECOMMENDED_UI_HARNESS_IMAGE = 'ghcr.io/kibertoad/cat-factory-executor-ui:1.163.4';
36
36
  /**
37
37
  * The effective harness image ref: an explicit `LOCAL_HARNESS_IMAGE` wins (a custom build, a
38
38
  * different pin, or a mutable tag), else the backend-matched {@link RECOMMENDED_HARNESS_IMAGE}.
@@ -22,6 +22,10 @@ export declare class SqliteGuidedReviewQueue {
22
22
  /** The drive finished: the job is settled on the mothership, so the intent is spent. */
23
23
  complete(key: string): void;
24
24
  /** The drive threw: hold the job off the queue until `notBefore` and count the failure. */
25
+ /** When the earliest held job becomes claimable, or null when none is waiting. */
26
+ nextDueAt(): number | null;
27
+ /** Hold a job that made progress until `notBefore`, clearing its failure count. */
28
+ reschedule(key: string, notBefore: number): void;
25
29
  deferFailure(key: string, notBefore: number): void;
26
30
  /**
27
31
  * Take the drivable jobs that failed `maxAttempts` times in a row off the drive path until
@@ -1 +1 @@
1
- {"version":3,"file":"guidedReviewQueue.d.ts","sourceRoot":"","sources":["../../src/sqlite/guidedReviewQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAuB9E,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,eAAe,CAAA;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAkBD,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAA/B,YAA6B,EAAE,EAAE,YAAY,EAAI;IAEjD,2EAA2E;IAC3E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQpE;IAED,sFAAsF;IACtF,YAAY,IAAI,MAAM,CAOrB;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,sBAAsB,GAAG,IAAI,CAc/F;IAED,wFAAwF;IACxF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE1B;IAED,2FAA2F;IAC3F,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOjD;IAED;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAgB3F;IAED,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CASxC;IAED,KAAK,IAAI,IAAI,CAEZ;CACF;AAED,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAE7E"}
1
+ {"version":3,"file":"guidedReviewQueue.d.ts","sourceRoot":"","sources":["../../src/sqlite/guidedReviewQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAuB9E,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,eAAe,CAAA;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAkBD,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAA/B,YAA6B,EAAE,EAAE,YAAY,EAAI;IAEjD,2EAA2E;IAC3E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQpE;IAED,sFAAsF;IACtF,YAAY,IAAI,MAAM,CAOrB;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,sBAAsB,GAAG,IAAI,CAc/F;IAED,wFAAwF;IACxF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE1B;IAED,2FAA2F;IAC3F,kFAAkF;IAClF,SAAS,IAAI,MAAM,GAAG,IAAI,CAMzB;IAED,mFAAmF;IACnF,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAO/C;IAED,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOjD;IAED;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAgB3F;IAED,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CASxC;IAED,KAAK,IAAI,IAAI,CAEZ;CACF;AAED,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAE7E"}
@@ -67,6 +67,18 @@ export class SqliteGuidedReviewQueue {
67
67
  this.db.prepare('DELETE FROM guided_review_queue WHERE job_key = ?').run(key);
68
68
  }
69
69
  /** The drive threw: hold the job off the queue until `notBefore` and count the failure. */
70
+ /** When the earliest held job becomes claimable, or null when none is waiting. */
71
+ nextDueAt() {
72
+ const row = queryOne(this.db, `SELECT MIN(lease_until) AS due FROM guided_review_queue WHERE state = 'active'`);
73
+ return row?.due ?? null;
74
+ }
75
+ /** Hold a job that made progress until `notBefore`, clearing its failure count. */
76
+ reschedule(key, notBefore) {
77
+ this.db
78
+ .prepare(`UPDATE guided_review_queue SET state = 'active', lease_until = ?, attempts = 0
79
+ WHERE job_key = ?`)
80
+ .run(notBefore, key);
81
+ }
70
82
  deferFailure(key, notBefore) {
71
83
  this.db
72
84
  .prepare(`UPDATE guided_review_queue SET state = 'active', lease_until = ?, attempts = attempts + 1
@@ -1 +1 @@
1
- {"version":3,"file":"guidedReviewQueue.js","sourceRoot":"","sources":["../../src/sqlite/guidedReviewQueue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guidedReviewQueue.js","sourceRoot":"","sources":["../../src/sqlite/guidedReviewQueue.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/local-server",
3
- "version": "0.153.2",
3
+ "version": "0.154.1",
4
4
  "description": "Local-mode runtime facade for the Agent Architecture Board: the @cat-factory/node-server stack with agent jobs run as local Docker/Podman containers and GitHub accessed via a personal access token — a developer can run the whole product on their own machine.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,26 +24,26 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@cat-factory/agents": "0.170.1",
28
- "@cat-factory/binary-generators": "0.3.61",
29
- "@cat-factory/contracts": "0.361.0",
30
- "@cat-factory/executor-harness": "1.163.2",
31
- "@cat-factory/gitlab": "0.23.24",
32
- "@cat-factory/integrations": "0.174.10",
33
- "@cat-factory/kernel": "0.354.2",
34
- "@cat-factory/node-server": "0.235.2",
35
- "@cat-factory/orchestration": "0.318.0",
36
- "@cat-factory/prompt-fragments": "1.1.57",
37
- "@cat-factory/server": "0.330.0",
38
- "@hono/node-server": "^2.1.1",
27
+ "@cat-factory/agents": "0.171.1",
28
+ "@cat-factory/binary-generators": "0.3.63",
29
+ "@cat-factory/contracts": "0.362.0",
30
+ "@cat-factory/executor-harness": "1.163.4",
31
+ "@cat-factory/gitlab": "0.23.26",
32
+ "@cat-factory/integrations": "0.174.12",
33
+ "@cat-factory/kernel": "0.356.0",
34
+ "@cat-factory/node-server": "0.236.1",
35
+ "@cat-factory/orchestration": "0.319.1",
36
+ "@cat-factory/prompt-fragments": "1.1.59",
37
+ "@cat-factory/server": "0.331.1",
38
+ "@hono/node-server": "^2.1.3",
39
39
  "drizzle-orm": "1.0.0-rc.4",
40
40
  "ws": "^8.22.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@cat-factory/conformance": "0.62.2",
44
- "@cat-factory/gates": "0.11.61",
45
- "@types/node": "^26.6.3",
46
- "@types/ws": "^8.18.1",
43
+ "@cat-factory/conformance": "0.63.1",
44
+ "@cat-factory/gates": "0.11.63",
45
+ "@types/node": "^26.6.4",
46
+ "@types/ws": "^8.18.2",
47
47
  "typescript": "7.0.2",
48
48
  "vitest": "^4.1.11"
49
49
  },