@folterung/project-memory 0.1.2 → 0.1.4

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.
@@ -8,10 +8,12 @@ services:
8
8
  - qdrant_storage:/qdrant/storage
9
9
  restart: unless-stopped
10
10
  healthcheck:
11
- test: ["CMD", "wget", "-q", "--spider", "http://localhost:6333/health"]
11
+ # v1.7.x returns 404 for /health and /readyz; root returns 200 when up
12
+ test: ["CMD", "wget", "-q", "--spider", "http://localhost:6333/"]
12
13
  interval: 5s
13
- timeout: 5s
14
- retries: 5
14
+ timeout: 10s
15
+ retries: 12
16
+ start_period: 30s
15
17
 
16
18
  volumes:
17
19
  qdrant_storage:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@folterung/project-memory",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "private": false,
5
5
  "description": "Local-first Project Memory: scoped indexing, embeddings, Cursor integration",
6
6
  "repository": "https://github.com/folterung/project-memory",
@@ -1,9 +1,11 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { existsSync } from "node:fs";
3
3
  import { join } from "node:path";
4
- const QDRANT_HEALTH_URL = "http://127.0.0.1:6333/health";
5
- const HEALTH_POLL_MS = 1000;
6
- const HEALTH_TIMEOUT_MS = 60_000;
4
+ /** Root and readiness URLs; v1.7.x returns 404 for /health and /readyz, root returns 200 when up */
5
+ const QDRANT_CHECK_URLS = ["http://127.0.0.1:6333/", "http://127.0.0.1:6333/readyz"];
6
+ const HEALTH_POLL_MS = 2000;
7
+ const HEALTH_INITIAL_DELAY_MS = 8000;
8
+ const HEALTH_TIMEOUT_MS = 120_000;
7
9
  function getComposeDir(cwd) {
8
10
  const atMem = join(cwd, ".mem", "docker-compose.yml");
9
11
  const atRoot = join(cwd, "docker-compose.yml");
@@ -38,6 +40,19 @@ export function dockerComposeDown(cwd) {
38
40
  const cmd = composeCmd(dir);
39
41
  execSync(`${cmd} down`, { stdio: "inherit", cwd: dir });
40
42
  }
43
+ async function checkQdrantUp() {
44
+ for (const url of QDRANT_CHECK_URLS) {
45
+ try {
46
+ const r = await fetch(url);
47
+ if (r.ok)
48
+ return true;
49
+ }
50
+ catch {
51
+ // try next URL
52
+ }
53
+ }
54
+ return false;
55
+ }
41
56
  export function waitForQdrantHealth(timeoutMs = HEALTH_TIMEOUT_MS) {
42
57
  const start = Date.now();
43
58
  return new Promise((resolve, reject) => {
@@ -46,16 +61,16 @@ export function waitForQdrantHealth(timeoutMs = HEALTH_TIMEOUT_MS) {
46
61
  reject(new Error("Qdrant health check timed out"));
47
62
  return;
48
63
  }
49
- fetch(QDRANT_HEALTH_URL)
50
- .then((r) => {
51
- if (r.ok)
64
+ checkQdrantUp()
65
+ .then((ok) => {
66
+ if (ok)
52
67
  resolve();
53
68
  else
54
69
  setTimeout(poll, HEALTH_POLL_MS);
55
70
  })
56
71
  .catch(() => setTimeout(poll, HEALTH_POLL_MS));
57
72
  }
58
- poll();
73
+ setTimeout(poll, HEALTH_INITIAL_DELAY_MS);
59
74
  });
60
75
  }
61
76
  export function checkDockerAvailable(cwd) {
@@ -68,8 +83,6 @@ export function checkDockerAvailable(cwd) {
68
83
  }
69
84
  }
70
85
  export function checkQdrantHealthy() {
71
- return fetch(QDRANT_HEALTH_URL)
72
- .then((r) => r.ok)
73
- .catch(() => false);
86
+ return checkQdrantUp();
74
87
  }
75
88
  //# sourceMappingURL=compose.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/docker/compose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/docker/compose.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,11 @@ import { execSync, spawn } from "node:child_process";
2
2
  import { existsSync } from "node:fs";
3
3
  import { join } from "node:path";
4
4
 
5
- const QDRANT_HEALTH_URL = "http://127.0.0.1:6333/health";
6
- const HEALTH_POLL_MS = 1000;
7
- const HEALTH_TIMEOUT_MS = 60_000;
5
+ /** Root and readiness URLs; v1.7.x returns 404 for /health and /readyz, root returns 200 when up */
6
+ const QDRANT_CHECK_URLS = ["http://127.0.0.1:6333/", "http://127.0.0.1:6333/readyz"];
7
+ const HEALTH_POLL_MS = 2000;
8
+ const HEALTH_INITIAL_DELAY_MS = 8000;
9
+ const HEALTH_TIMEOUT_MS = 120_000;
8
10
 
9
11
  function getComposeDir(cwd: string): string {
10
12
  const atMem = join(cwd, ".mem", "docker-compose.yml");
@@ -40,6 +42,18 @@ export function dockerComposeDown(cwd: string): void {
40
42
  execSync(`${cmd} down`, { stdio: "inherit", cwd: dir });
41
43
  }
42
44
 
45
+ async function checkQdrantUp(): Promise<boolean> {
46
+ for (const url of QDRANT_CHECK_URLS) {
47
+ try {
48
+ const r = await fetch(url);
49
+ if (r.ok) return true;
50
+ } catch {
51
+ // try next URL
52
+ }
53
+ }
54
+ return false;
55
+ }
56
+
43
57
  export function waitForQdrantHealth(timeoutMs: number = HEALTH_TIMEOUT_MS): Promise<void> {
44
58
  const start = Date.now();
45
59
  return new Promise((resolve, reject) => {
@@ -48,14 +62,14 @@ export function waitForQdrantHealth(timeoutMs: number = HEALTH_TIMEOUT_MS): Prom
48
62
  reject(new Error("Qdrant health check timed out"));
49
63
  return;
50
64
  }
51
- fetch(QDRANT_HEALTH_URL)
52
- .then((r) => {
53
- if (r.ok) resolve();
65
+ checkQdrantUp()
66
+ .then((ok) => {
67
+ if (ok) resolve();
54
68
  else setTimeout(poll, HEALTH_POLL_MS);
55
69
  })
56
70
  .catch(() => setTimeout(poll, HEALTH_POLL_MS));
57
71
  }
58
- poll();
72
+ setTimeout(poll, HEALTH_INITIAL_DELAY_MS);
59
73
  });
60
74
  }
61
75
 
@@ -69,7 +83,5 @@ export function checkDockerAvailable(cwd: string): boolean {
69
83
  }
70
84
 
71
85
  export function checkQdrantHealthy(): Promise<boolean> {
72
- return fetch(QDRANT_HEALTH_URL)
73
- .then((r) => r.ok)
74
- .catch(() => false);
86
+ return checkQdrantUp();
75
87
  }