@better-openclaw/core 1.0.24 → 1.0.26
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.
- package/dist/addon-stack.cjs +725 -0
- package/dist/addon-stack.cjs.map +1 -0
- package/dist/addon-stack.d.cts +23 -0
- package/dist/addon-stack.d.cts.map +1 -0
- package/dist/addon-stack.d.mts +23 -0
- package/dist/addon-stack.d.mts.map +1 -0
- package/dist/addon-stack.mjs +723 -0
- package/dist/addon-stack.mjs.map +1 -0
- package/dist/addon-stack.test.cjs +461 -0
- package/dist/addon-stack.test.cjs.map +1 -0
- package/dist/addon-stack.test.d.cts +1 -0
- package/dist/addon-stack.test.d.mts +1 -0
- package/dist/addon-stack.test.mjs +461 -0
- package/dist/addon-stack.test.mjs.map +1 -0
- package/dist/bare-metal-partition.test.cjs +20 -20
- package/dist/bare-metal-partition.test.cjs.map +1 -1
- package/dist/bare-metal-partition.test.mjs +2 -2
- package/dist/compose-validation.test.cjs +1 -1
- package/dist/composer.cjs +5 -1
- package/dist/composer.cjs.map +1 -1
- package/dist/composer.d.cts +24 -1
- package/dist/composer.d.cts.map +1 -1
- package/dist/composer.d.mts +24 -1
- package/dist/composer.d.mts.map +1 -1
- package/dist/composer.mjs +1 -1
- package/dist/composer.mjs.map +1 -1
- package/dist/composer.snapshot.test.cjs +20 -20
- package/dist/composer.snapshot.test.cjs.map +1 -1
- package/dist/composer.snapshot.test.mjs +2 -2
- package/dist/composer.test.cjs +54 -54
- package/dist/composer.test.cjs.map +1 -1
- package/dist/composer.test.mjs +2 -2
- package/dist/deployers/strip-host-ports.cjs +1 -1
- package/dist/deployers/strip-host-ports.test.cjs +26 -26
- package/dist/deployers/strip-host-ports.test.cjs.map +1 -1
- package/dist/deployers/strip-host-ports.test.mjs +1 -1
- package/dist/generate.cjs +3 -3
- package/dist/generate.mjs +3 -3
- package/dist/generate.test.cjs +56 -56
- package/dist/generate.test.cjs.map +1 -1
- package/dist/generate.test.mjs +1 -1
- package/dist/generators/bare-metal-install.test.cjs +18 -18
- package/dist/generators/bare-metal-install.test.cjs.map +1 -1
- package/dist/generators/bare-metal-install.test.mjs +1 -1
- package/dist/generators/caddy.test.cjs +13 -13
- package/dist/generators/caddy.test.cjs.map +1 -1
- package/dist/generators/caddy.test.mjs +1 -1
- package/dist/generators/clone-repos.test.cjs +27 -27
- package/dist/generators/clone-repos.test.cjs.map +1 -1
- package/dist/generators/clone-repos.test.mjs +1 -1
- package/dist/generators/env.cjs +1 -1
- package/dist/generators/env.test.cjs +17 -17
- package/dist/generators/env.test.cjs.map +1 -1
- package/dist/generators/env.test.mjs +1 -1
- package/dist/generators/health-check.test.cjs +39 -39
- package/dist/generators/health-check.test.cjs.map +1 -1
- package/dist/generators/health-check.test.mjs +1 -1
- package/dist/generators/postgres-init.cjs +5 -0
- package/dist/generators/postgres-init.cjs.map +1 -1
- package/dist/generators/postgres-init.d.cts.map +1 -1
- package/dist/generators/postgres-init.d.mts.map +1 -1
- package/dist/generators/postgres-init.mjs +5 -0
- package/dist/generators/postgres-init.mjs.map +1 -1
- package/dist/generators/scripts.test.cjs +39 -39
- package/dist/generators/scripts.test.cjs.map +1 -1
- package/dist/generators/scripts.test.mjs +1 -1
- package/dist/generators/skills.cjs +1 -1
- package/dist/generators/skills.d.cts.map +1 -1
- package/dist/generators/skills.d.mts.map +1 -1
- package/dist/generators/skills.mjs +141 -0
- package/dist/generators/skills.mjs.map +1 -1
- package/dist/generators/traefik.test.cjs +32 -32
- package/dist/generators/traefik.test.cjs.map +1 -1
- package/dist/generators/traefik.test.mjs +1 -1
- package/dist/index.cjs +21 -5
- package/dist/index.d.cts +5 -4
- package/dist/index.d.mts +5 -4
- package/dist/index.mjs +7 -6
- package/dist/migrations.test.cjs +16 -16
- package/dist/migrations.test.cjs.map +1 -1
- package/dist/migrations.test.mjs +1 -1
- package/dist/presets/presets.test.cjs +1 -1
- package/dist/presets/registry.test.cjs +14 -14
- package/dist/presets/registry.test.cjs.map +1 -1
- package/dist/presets/registry.test.mjs +1 -1
- package/dist/resolver.test.cjs +95 -95
- package/dist/resolver.test.cjs.map +1 -1
- package/dist/resolver.test.mjs +1 -1
- package/dist/{schema-eX44HhRp.d.mts → schema-BQnZrcw8.d.cts} +300 -2
- package/dist/schema-BQnZrcw8.d.cts.map +1 -0
- package/dist/{schema-tn5RK8CM.d.cts → schema-SBpL0bdI.d.mts} +300 -2
- package/dist/schema-SBpL0bdI.d.mts.map +1 -0
- package/dist/schema.cjs +148 -2
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +2 -2
- package/dist/schema.d.mts +2 -2
- package/dist/schema.mjs +139 -2
- package/dist/schema.mjs.map +1 -1
- package/dist/schema.test.cjs +86 -86
- package/dist/schema.test.cjs.map +1 -1
- package/dist/schema.test.mjs +1 -1
- package/dist/services/definitions/browserless.cjs +4 -1
- package/dist/services/definitions/browserless.cjs.map +1 -1
- package/dist/services/definitions/browserless.mjs +4 -1
- package/dist/services/definitions/browserless.mjs.map +1 -1
- package/dist/services/definitions/burnlink.cjs +142 -0
- package/dist/services/definitions/burnlink.cjs.map +1 -0
- package/dist/services/definitions/burnlink.d.cts +7 -0
- package/dist/services/definitions/burnlink.d.cts.map +1 -0
- package/dist/services/definitions/burnlink.d.mts +7 -0
- package/dist/services/definitions/burnlink.d.mts.map +1 -0
- package/dist/services/definitions/burnlink.mjs +141 -0
- package/dist/services/definitions/burnlink.mjs.map +1 -0
- package/dist/services/definitions/convex.cjs +43 -1
- package/dist/services/definitions/convex.cjs.map +1 -1
- package/dist/services/definitions/convex.mjs +43 -1
- package/dist/services/definitions/convex.mjs.map +1 -1
- package/dist/services/definitions/grafana.cjs +11 -1
- package/dist/services/definitions/grafana.cjs.map +1 -1
- package/dist/services/definitions/grafana.mjs +11 -1
- package/dist/services/definitions/grafana.mjs.map +1 -1
- package/dist/services/definitions/hindsight.cjs +130 -0
- package/dist/services/definitions/hindsight.cjs.map +1 -0
- package/dist/services/definitions/hindsight.d.cts +7 -0
- package/dist/services/definitions/hindsight.d.cts.map +1 -0
- package/dist/services/definitions/hindsight.d.mts +7 -0
- package/dist/services/definitions/hindsight.d.mts.map +1 -0
- package/dist/services/definitions/hindsight.mjs +129 -0
- package/dist/services/definitions/hindsight.mjs.map +1 -0
- package/dist/services/definitions/index.cjs +9 -0
- package/dist/services/definitions/index.cjs.map +1 -1
- package/dist/services/definitions/index.d.cts +4 -1
- package/dist/services/definitions/index.d.cts.map +1 -1
- package/dist/services/definitions/index.d.mts +4 -1
- package/dist/services/definitions/index.d.mts.map +1 -1
- package/dist/services/definitions/index.mjs +7 -1
- package/dist/services/definitions/index.mjs.map +1 -1
- package/dist/services/definitions/meilisearch.cjs +11 -1
- package/dist/services/definitions/meilisearch.cjs.map +1 -1
- package/dist/services/definitions/meilisearch.mjs +11 -1
- package/dist/services/definitions/meilisearch.mjs.map +1 -1
- package/dist/services/definitions/minio.cjs +3 -1
- package/dist/services/definitions/minio.cjs.map +1 -1
- package/dist/services/definitions/minio.mjs +3 -1
- package/dist/services/definitions/minio.mjs.map +1 -1
- package/dist/services/definitions/n8n.cjs +11 -1
- package/dist/services/definitions/n8n.cjs.map +1 -1
- package/dist/services/definitions/n8n.mjs +11 -1
- package/dist/services/definitions/n8n.mjs.map +1 -1
- package/dist/services/definitions/ollama.cjs +3 -1
- package/dist/services/definitions/ollama.cjs.map +1 -1
- package/dist/services/definitions/ollama.mjs +3 -1
- package/dist/services/definitions/ollama.mjs.map +1 -1
- package/dist/services/definitions/opensandbox.cjs +149 -0
- package/dist/services/definitions/opensandbox.cjs.map +1 -0
- package/dist/services/definitions/opensandbox.d.cts +7 -0
- package/dist/services/definitions/opensandbox.d.cts.map +1 -0
- package/dist/services/definitions/opensandbox.d.mts +7 -0
- package/dist/services/definitions/opensandbox.d.mts.map +1 -0
- package/dist/services/definitions/opensandbox.mjs +148 -0
- package/dist/services/definitions/opensandbox.mjs.map +1 -0
- package/dist/services/definitions/qdrant.cjs +3 -1
- package/dist/services/definitions/qdrant.cjs.map +1 -1
- package/dist/services/definitions/qdrant.mjs +3 -1
- package/dist/services/definitions/qdrant.mjs.map +1 -1
- package/dist/services/definitions/searxng.cjs +8 -1
- package/dist/services/definitions/searxng.cjs.map +1 -1
- package/dist/services/definitions/searxng.mjs +8 -1
- package/dist/services/definitions/searxng.mjs.map +1 -1
- package/dist/services/definitions/uptime-kuma.cjs +8 -1
- package/dist/services/definitions/uptime-kuma.cjs.map +1 -1
- package/dist/services/definitions/uptime-kuma.mjs +8 -1
- package/dist/services/definitions/uptime-kuma.mjs.map +1 -1
- package/dist/services/registry.test.cjs +36 -36
- package/dist/services/registry.test.cjs.map +1 -1
- package/dist/services/registry.test.mjs +1 -1
- package/dist/{skills-BlzpHmpH.cjs → skills-BSF7iNa4.cjs} +142 -1
- package/dist/{skills-BlzpHmpH.cjs.map → skills-BSF7iNa4.cjs.map} +1 -1
- package/dist/{vi.2VT5v0um-C_jmO7m2.mjs → test.CTcmp4Su-ClCHJ3FA.mjs} +6793 -6403
- package/dist/test.CTcmp4Su-ClCHJ3FA.mjs.map +1 -0
- package/dist/{vi.2VT5v0um-iVBt6Fyq.cjs → test.CTcmp4Su-DlzTarwH.cjs} +6793 -6403
- package/dist/test.CTcmp4Su-DlzTarwH.cjs.map +1 -0
- package/dist/track-analytics.test.cjs +28 -28
- package/dist/track-analytics.test.cjs.map +1 -1
- package/dist/track-analytics.test.mjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +10 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +10 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/validator.cjs +1 -1
- package/dist/validator.test.cjs +15 -15
- package/dist/validator.test.cjs.map +1 -1
- package/dist/validator.test.mjs +2 -2
- package/dist/version-manager.test.cjs +37 -37
- package/dist/version-manager.test.cjs.map +1 -1
- package/dist/version-manager.test.mjs +1 -1
- package/package.json +4 -4
- package/src/__snapshots__/composer.snapshot.test.ts.snap +5 -0
- package/src/addon-stack.test.ts +648 -0
- package/src/addon-stack.ts +1046 -0
- package/src/composer.ts +4 -4
- package/src/generators/postgres-init.ts +2 -0
- package/src/generators/skills.ts +142 -0
- package/src/index.ts +20 -2
- package/src/schema.ts +190 -0
- package/src/services/definitions/browserless.ts +3 -0
- package/src/services/definitions/burnlink.ts +142 -0
- package/src/services/definitions/convex.ts +31 -0
- package/src/services/definitions/grafana.ts +9 -0
- package/src/services/definitions/hindsight.ts +131 -0
- package/src/services/definitions/index.ts +10 -0
- package/src/services/definitions/meilisearch.ts +9 -0
- package/src/services/definitions/minio.ts +2 -0
- package/src/services/definitions/n8n.ts +9 -0
- package/src/services/definitions/ollama.ts +2 -0
- package/src/services/definitions/opensandbox.ts +156 -0
- package/src/services/definitions/qdrant.ts +2 -0
- package/src/services/definitions/searxng.ts +3 -0
- package/src/services/definitions/uptime-kuma.ts +3 -0
- package/src/types.ts +18 -0
- package/dist/schema-eX44HhRp.d.mts.map +0 -1
- package/dist/schema-tn5RK8CM.d.cts.map +0 -1
- package/dist/vi.2VT5v0um-C_jmO7m2.mjs.map +0 -1
- package/dist/vi.2VT5v0um-iVBt6Fyq.cjs.map +0 -1
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_test_CTcmp4Su = require("./test.CTcmp4Su-DlzTarwH.cjs");
|
|
2
2
|
const require_services_registry = require("./services/registry.cjs");
|
|
3
3
|
const require_resolver = require("./resolver.cjs");
|
|
4
4
|
const require_version_manager = require("./version-manager.cjs");
|
|
5
5
|
//#region src/version-manager.test.ts
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
require_test_CTcmp4Su.describe("getImageTag", () => {
|
|
7
|
+
require_test_CTcmp4Su.it("returns the tag for a known service", () => {
|
|
8
8
|
const tag = require_version_manager.getImageTag("redis");
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
require_test_CTcmp4Su.globalExpect(tag).toBeDefined();
|
|
10
|
+
require_test_CTcmp4Su.globalExpect(typeof tag).toBe("string");
|
|
11
11
|
});
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
require_test_CTcmp4Su.it("returns undefined for an unknown service", () => {
|
|
13
|
+
require_test_CTcmp4Su.globalExpect(require_version_manager.getImageTag("nonexistent-service-xyz")).toBeUndefined();
|
|
14
14
|
});
|
|
15
15
|
});
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
require_test_CTcmp4Su.describe("getImageReference", () => {
|
|
17
|
+
require_test_CTcmp4Su.it("returns image:tag for a known service", () => {
|
|
18
18
|
const ref = require_version_manager.getImageReference("redis");
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
require_test_CTcmp4Su.globalExpect(ref).toBeDefined();
|
|
20
|
+
require_test_CTcmp4Su.globalExpect(ref).toContain(":");
|
|
21
|
+
require_test_CTcmp4Su.globalExpect(ref).toMatch(/^.+:.+$/);
|
|
22
22
|
});
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
require_test_CTcmp4Su.it("returns undefined for an unknown service", () => {
|
|
24
|
+
require_test_CTcmp4Su.globalExpect(require_version_manager.getImageReference("nonexistent-service-xyz")).toBeUndefined();
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
require_test_CTcmp4Su.describe("pinImageTags", () => {
|
|
28
|
+
require_test_CTcmp4Su.it("pins image tags from the registry for all services", () => {
|
|
29
29
|
const resolved = require_resolver.resolve({
|
|
30
30
|
services: ["redis", "postgresql"],
|
|
31
31
|
skillPacks: [],
|
|
@@ -34,15 +34,15 @@ require_vi_2VT5v0um.describe("pinImageTags", () => {
|
|
|
34
34
|
platform: "linux/amd64"
|
|
35
35
|
});
|
|
36
36
|
const pinned = require_version_manager.pinImageTags(resolved);
|
|
37
|
-
|
|
37
|
+
require_test_CTcmp4Su.globalExpect(pinned.services).toHaveLength(resolved.services.length);
|
|
38
38
|
for (const svc of pinned.services) {
|
|
39
39
|
if (svc.definition.gitSource) continue;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
require_test_CTcmp4Su.globalExpect(svc.definition.imageTag).toBeDefined();
|
|
41
|
+
require_test_CTcmp4Su.globalExpect(typeof svc.definition.imageTag).toBe("string");
|
|
42
|
+
require_test_CTcmp4Su.globalExpect(svc.definition.imageTag.length).toBeGreaterThan(0);
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
|
-
|
|
45
|
+
require_test_CTcmp4Su.it("does not mutate the original resolved output", () => {
|
|
46
46
|
const resolved = require_resolver.resolve({
|
|
47
47
|
services: ["redis"],
|
|
48
48
|
skillPacks: [],
|
|
@@ -52,9 +52,9 @@ require_vi_2VT5v0um.describe("pinImageTags", () => {
|
|
|
52
52
|
});
|
|
53
53
|
const originalTag = resolved.services.find((s) => s.definition.id === "redis")?.definition.imageTag;
|
|
54
54
|
require_version_manager.pinImageTags(resolved);
|
|
55
|
-
|
|
55
|
+
require_test_CTcmp4Su.globalExpect(resolved.services.find((s) => s.definition.id === "redis")?.definition.imageTag).toBe(originalTag);
|
|
56
56
|
});
|
|
57
|
-
|
|
57
|
+
require_test_CTcmp4Su.it("preserves non-tag properties", () => {
|
|
58
58
|
const resolved = require_resolver.resolve({
|
|
59
59
|
services: ["redis"],
|
|
60
60
|
skillPacks: [],
|
|
@@ -64,37 +64,37 @@ require_vi_2VT5v0um.describe("pinImageTags", () => {
|
|
|
64
64
|
});
|
|
65
65
|
const pinned = require_version_manager.pinImageTags(resolved);
|
|
66
66
|
const redis = pinned.services.find((s) => s.definition.id === "redis");
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
require_test_CTcmp4Su.globalExpect(redis).toBeDefined();
|
|
68
|
+
require_test_CTcmp4Su.globalExpect(redis.definition.name).toBe("Redis");
|
|
69
|
+
require_test_CTcmp4Su.globalExpect(pinned.estimatedMemoryMB).toBe(resolved.estimatedMemoryMB);
|
|
70
70
|
});
|
|
71
71
|
});
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
require_test_CTcmp4Su.describe("checkCompatibility", () => {
|
|
73
|
+
require_test_CTcmp4Su.it("warns when Redis and Valkey are both selected", () => {
|
|
74
74
|
const all = require_services_registry.getAllServices();
|
|
75
75
|
const redis = all.find((s) => s.id === "redis");
|
|
76
76
|
const valkey = all.find((s) => s.id === "valkey");
|
|
77
|
-
if (redis && valkey)
|
|
77
|
+
if (redis && valkey) require_test_CTcmp4Su.globalExpect(require_version_manager.checkCompatibility([redis, valkey]).some((w) => w.message.includes("Redis") && w.message.includes("Valkey"))).toBe(true);
|
|
78
78
|
});
|
|
79
|
-
|
|
79
|
+
require_test_CTcmp4Su.it("warns when Caddy and Traefik are both selected", () => {
|
|
80
80
|
const all = require_services_registry.getAllServices();
|
|
81
81
|
const caddy = all.find((s) => s.id === "caddy");
|
|
82
82
|
const traefik = all.find((s) => s.id === "traefik");
|
|
83
|
-
if (caddy && traefik)
|
|
83
|
+
if (caddy && traefik) require_test_CTcmp4Su.globalExpect(require_version_manager.checkCompatibility([caddy, traefik]).some((w) => w.message.includes("Caddy") && w.message.includes("Traefik"))).toBe(true);
|
|
84
84
|
});
|
|
85
|
-
|
|
85
|
+
require_test_CTcmp4Su.it("warns about multiple vector databases", () => {
|
|
86
86
|
const all = require_services_registry.getAllServices();
|
|
87
87
|
const qdrant = all.find((s) => s.id === "qdrant");
|
|
88
88
|
const chromadb = all.find((s) => s.id === "chromadb");
|
|
89
|
-
if (qdrant && chromadb)
|
|
89
|
+
if (qdrant && chromadb) require_test_CTcmp4Su.globalExpect(require_version_manager.checkCompatibility([qdrant, chromadb]).some((w) => w.message.includes("vector database"))).toBe(true);
|
|
90
90
|
});
|
|
91
|
-
|
|
91
|
+
require_test_CTcmp4Su.it("warns about GPU services", () => {
|
|
92
92
|
const gpuService = require_services_registry.getAllServices().find((s) => s.gpuRequired);
|
|
93
|
-
if (gpuService)
|
|
93
|
+
if (gpuService) require_test_CTcmp4Su.globalExpect(require_version_manager.checkCompatibility([gpuService]).some((w) => w.message.includes("GPU"))).toBe(true);
|
|
94
94
|
});
|
|
95
|
-
|
|
95
|
+
require_test_CTcmp4Su.it("returns no warnings for a single non-conflicting service", () => {
|
|
96
96
|
const redis = require_services_registry.getServiceById("redis");
|
|
97
|
-
if (redis)
|
|
97
|
+
if (redis) require_test_CTcmp4Su.globalExpect(require_version_manager.checkCompatibility([redis]).filter((w) => w.type === "compatibility" && !w.message.includes("GPU"))).toHaveLength(0);
|
|
98
98
|
});
|
|
99
99
|
});
|
|
100
100
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-manager.test.cjs","names":["describe","getImageTag","getImageReference","resolve","pinImageTags","getAllServices","checkCompatibility","getServiceById"],"sources":["../src/version-manager.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { resolve } from \"./resolver.js\";\nimport { getAllServices, getServiceById } from \"./services/registry.js\";\nimport {\n\tcheckCompatibility,\n\tgetImageReference,\n\tgetImageTag,\n\tpinImageTags,\n} from \"./version-manager.js\";\n\ndescribe(\"getImageTag\", () => {\n\tit(\"returns the tag for a known service\", () => {\n\t\tconst tag = getImageTag(\"redis\");\n\t\texpect(tag).toBeDefined();\n\t\texpect(typeof tag).toBe(\"string\");\n\t});\n\n\tit(\"returns undefined for an unknown service\", () => {\n\t\texpect(getImageTag(\"nonexistent-service-xyz\")).toBeUndefined();\n\t});\n});\n\ndescribe(\"getImageReference\", () => {\n\tit(\"returns image:tag for a known service\", () => {\n\t\tconst ref = getImageReference(\"redis\");\n\t\texpect(ref).toBeDefined();\n\t\texpect(ref).toContain(\":\");\n\t\texpect(ref).toMatch(/^.+:.+$/);\n\t});\n\n\tit(\"returns undefined for an unknown service\", () => {\n\t\texpect(getImageReference(\"nonexistent-service-xyz\")).toBeUndefined();\n\t});\n});\n\ndescribe(\"pinImageTags\", () => {\n\tit(\"pins image tags from the registry for all services\", () => {\n\t\tconst resolved = resolve({\n\t\t\tservices: [\"redis\", \"postgresql\"],\n\t\t\tskillPacks: [],\n\t\t\tproxy: \"none\",\n\t\t\tgpu: false,\n\t\t\tplatform: \"linux/amd64\",\n\t\t});\n\n\t\tconst pinned = pinImageTags(resolved);\n\n\t\texpect(pinned.services).toHaveLength(resolved.services.length);\n\n\t\tfor (const svc of pinned.services) {\n\t\t\t// Git-based services (e.g., mission-control) don't have imageTag\n\t\t\tif (svc.definition.gitSource) continue;\n\t\t\texpect(svc.definition.imageTag).toBeDefined();\n\t\t\texpect(typeof svc.definition.imageTag).toBe(\"string\");\n\t\t\texpect(svc.definition.imageTag!.length).toBeGreaterThan(0);\n\t\t}\n\t});\n\n\tit(\"does not mutate the original resolved output\", () => {\n\t\tconst resolved = resolve({\n\t\t\tservices: [\"redis\"],\n\t\t\tskillPacks: [],\n\t\t\tproxy: \"none\",\n\t\t\tgpu: false,\n\t\t\tplatform: \"linux/amd64\",\n\t\t});\n\n\t\tconst redis = resolved.services.find((s) => s.definition.id === \"redis\");\n\t\tconst originalTag = redis?.definition.imageTag;\n\t\tpinImageTags(resolved);\n\n\t\tconst redisAfter = resolved.services.find((s) => s.definition.id === \"redis\");\n\t\texpect(redisAfter?.definition.imageTag).toBe(originalTag);\n\t});\n\n\tit(\"preserves non-tag properties\", () => {\n\t\tconst resolved = resolve({\n\t\t\tservices: [\"redis\"],\n\t\t\tskillPacks: [],\n\t\t\tproxy: \"none\",\n\t\t\tgpu: false,\n\t\t\tplatform: \"linux/amd64\",\n\t\t});\n\n\t\tconst pinned = pinImageTags(resolved);\n\t\tconst redis = pinned.services.find((s) => s.definition.id === \"redis\");\n\t\texpect(redis).toBeDefined();\n\t\texpect(redis!.definition.name).toBe(\"Redis\");\n\t\texpect(pinned.estimatedMemoryMB).toBe(resolved.estimatedMemoryMB);\n\t});\n});\n\ndescribe(\"checkCompatibility\", () => {\n\tit(\"warns when Redis and Valkey are both selected\", () => {\n\t\tconst all = getAllServices();\n\t\tconst redis = all.find((s) => s.id === \"redis\");\n\t\tconst valkey = all.find((s) => s.id === \"valkey\");\n\n\t\tif (redis && valkey) {\n\t\t\tconst warnings = checkCompatibility([redis, valkey]);\n\t\t\texpect(\n\t\t\t\twarnings.some((w) => w.message.includes(\"Redis\") && w.message.includes(\"Valkey\")),\n\t\t\t).toBe(true);\n\t\t}\n\t});\n\n\tit(\"warns when Caddy and Traefik are both selected\", () => {\n\t\tconst all = getAllServices();\n\t\tconst caddy = all.find((s) => s.id === \"caddy\");\n\t\tconst traefik = all.find((s) => s.id === \"traefik\");\n\n\t\tif (caddy && traefik) {\n\t\t\tconst warnings = checkCompatibility([caddy, traefik]);\n\t\t\texpect(\n\t\t\t\twarnings.some((w) => w.message.includes(\"Caddy\") && w.message.includes(\"Traefik\")),\n\t\t\t).toBe(true);\n\t\t}\n\t});\n\n\tit(\"warns about multiple vector databases\", () => {\n\t\tconst all = getAllServices();\n\t\tconst qdrant = all.find((s) => s.id === \"qdrant\");\n\t\tconst chromadb = all.find((s) => s.id === \"chromadb\");\n\n\t\tif (qdrant && chromadb) {\n\t\t\tconst warnings = checkCompatibility([qdrant, chromadb]);\n\t\t\texpect(warnings.some((w) => w.message.includes(\"vector database\"))).toBe(true);\n\t\t}\n\t});\n\n\tit(\"warns about GPU services\", () => {\n\t\tconst all = getAllServices();\n\t\tconst gpuService = all.find((s) => s.gpuRequired);\n\n\t\tif (gpuService) {\n\t\t\tconst warnings = checkCompatibility([gpuService]);\n\t\t\texpect(warnings.some((w) => w.message.includes(\"GPU\"))).toBe(true);\n\t\t}\n\t});\n\n\tit(\"returns no warnings for a single non-conflicting service\", () => {\n\t\tconst redis = getServiceById(\"redis\");\n\t\tif (redis) {\n\t\t\tconst warnings = checkCompatibility([redis]);\n\t\t\texpect(\n\t\t\t\twarnings.filter((w) => w.type === \"compatibility\" && !w.message.includes(\"GPU\")),\n\t\t\t).toHaveLength(0);\n\t\t}\n\t});\n});\n"],"mappings":";;;;;AAUAA,
|
|
1
|
+
{"version":3,"file":"version-manager.test.cjs","names":["describe","getImageTag","getImageReference","resolve","pinImageTags","getAllServices","checkCompatibility","getServiceById"],"sources":["../src/version-manager.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { resolve } from \"./resolver.js\";\nimport { getAllServices, getServiceById } from \"./services/registry.js\";\nimport {\n\tcheckCompatibility,\n\tgetImageReference,\n\tgetImageTag,\n\tpinImageTags,\n} from \"./version-manager.js\";\n\ndescribe(\"getImageTag\", () => {\n\tit(\"returns the tag for a known service\", () => {\n\t\tconst tag = getImageTag(\"redis\");\n\t\texpect(tag).toBeDefined();\n\t\texpect(typeof tag).toBe(\"string\");\n\t});\n\n\tit(\"returns undefined for an unknown service\", () => {\n\t\texpect(getImageTag(\"nonexistent-service-xyz\")).toBeUndefined();\n\t});\n});\n\ndescribe(\"getImageReference\", () => {\n\tit(\"returns image:tag for a known service\", () => {\n\t\tconst ref = getImageReference(\"redis\");\n\t\texpect(ref).toBeDefined();\n\t\texpect(ref).toContain(\":\");\n\t\texpect(ref).toMatch(/^.+:.+$/);\n\t});\n\n\tit(\"returns undefined for an unknown service\", () => {\n\t\texpect(getImageReference(\"nonexistent-service-xyz\")).toBeUndefined();\n\t});\n});\n\ndescribe(\"pinImageTags\", () => {\n\tit(\"pins image tags from the registry for all services\", () => {\n\t\tconst resolved = resolve({\n\t\t\tservices: [\"redis\", \"postgresql\"],\n\t\t\tskillPacks: [],\n\t\t\tproxy: \"none\",\n\t\t\tgpu: false,\n\t\t\tplatform: \"linux/amd64\",\n\t\t});\n\n\t\tconst pinned = pinImageTags(resolved);\n\n\t\texpect(pinned.services).toHaveLength(resolved.services.length);\n\n\t\tfor (const svc of pinned.services) {\n\t\t\t// Git-based services (e.g., mission-control) don't have imageTag\n\t\t\tif (svc.definition.gitSource) continue;\n\t\t\texpect(svc.definition.imageTag).toBeDefined();\n\t\t\texpect(typeof svc.definition.imageTag).toBe(\"string\");\n\t\t\texpect(svc.definition.imageTag!.length).toBeGreaterThan(0);\n\t\t}\n\t});\n\n\tit(\"does not mutate the original resolved output\", () => {\n\t\tconst resolved = resolve({\n\t\t\tservices: [\"redis\"],\n\t\t\tskillPacks: [],\n\t\t\tproxy: \"none\",\n\t\t\tgpu: false,\n\t\t\tplatform: \"linux/amd64\",\n\t\t});\n\n\t\tconst redis = resolved.services.find((s) => s.definition.id === \"redis\");\n\t\tconst originalTag = redis?.definition.imageTag;\n\t\tpinImageTags(resolved);\n\n\t\tconst redisAfter = resolved.services.find((s) => s.definition.id === \"redis\");\n\t\texpect(redisAfter?.definition.imageTag).toBe(originalTag);\n\t});\n\n\tit(\"preserves non-tag properties\", () => {\n\t\tconst resolved = resolve({\n\t\t\tservices: [\"redis\"],\n\t\t\tskillPacks: [],\n\t\t\tproxy: \"none\",\n\t\t\tgpu: false,\n\t\t\tplatform: \"linux/amd64\",\n\t\t});\n\n\t\tconst pinned = pinImageTags(resolved);\n\t\tconst redis = pinned.services.find((s) => s.definition.id === \"redis\");\n\t\texpect(redis).toBeDefined();\n\t\texpect(redis!.definition.name).toBe(\"Redis\");\n\t\texpect(pinned.estimatedMemoryMB).toBe(resolved.estimatedMemoryMB);\n\t});\n});\n\ndescribe(\"checkCompatibility\", () => {\n\tit(\"warns when Redis and Valkey are both selected\", () => {\n\t\tconst all = getAllServices();\n\t\tconst redis = all.find((s) => s.id === \"redis\");\n\t\tconst valkey = all.find((s) => s.id === \"valkey\");\n\n\t\tif (redis && valkey) {\n\t\t\tconst warnings = checkCompatibility([redis, valkey]);\n\t\t\texpect(\n\t\t\t\twarnings.some((w) => w.message.includes(\"Redis\") && w.message.includes(\"Valkey\")),\n\t\t\t).toBe(true);\n\t\t}\n\t});\n\n\tit(\"warns when Caddy and Traefik are both selected\", () => {\n\t\tconst all = getAllServices();\n\t\tconst caddy = all.find((s) => s.id === \"caddy\");\n\t\tconst traefik = all.find((s) => s.id === \"traefik\");\n\n\t\tif (caddy && traefik) {\n\t\t\tconst warnings = checkCompatibility([caddy, traefik]);\n\t\t\texpect(\n\t\t\t\twarnings.some((w) => w.message.includes(\"Caddy\") && w.message.includes(\"Traefik\")),\n\t\t\t).toBe(true);\n\t\t}\n\t});\n\n\tit(\"warns about multiple vector databases\", () => {\n\t\tconst all = getAllServices();\n\t\tconst qdrant = all.find((s) => s.id === \"qdrant\");\n\t\tconst chromadb = all.find((s) => s.id === \"chromadb\");\n\n\t\tif (qdrant && chromadb) {\n\t\t\tconst warnings = checkCompatibility([qdrant, chromadb]);\n\t\t\texpect(warnings.some((w) => w.message.includes(\"vector database\"))).toBe(true);\n\t\t}\n\t});\n\n\tit(\"warns about GPU services\", () => {\n\t\tconst all = getAllServices();\n\t\tconst gpuService = all.find((s) => s.gpuRequired);\n\n\t\tif (gpuService) {\n\t\t\tconst warnings = checkCompatibility([gpuService]);\n\t\t\texpect(warnings.some((w) => w.message.includes(\"GPU\"))).toBe(true);\n\t\t}\n\t});\n\n\tit(\"returns no warnings for a single non-conflicting service\", () => {\n\t\tconst redis = getServiceById(\"redis\");\n\t\tif (redis) {\n\t\t\tconst warnings = checkCompatibility([redis]);\n\t\t\texpect(\n\t\t\t\twarnings.filter((w) => w.type === \"compatibility\" && !w.message.includes(\"GPU\")),\n\t\t\t).toHaveLength(0);\n\t\t}\n\t});\n});\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "./
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "./test.CTcmp4Su-ClCHJ3FA.mjs";
|
|
2
2
|
import { getAllServices, getServiceById } from "./services/registry.mjs";
|
|
3
3
|
import { resolve } from "./resolver.mjs";
|
|
4
4
|
import { checkCompatibility, getImageReference, getImageTag, pinImageTags } from "./version-manager.mjs";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@better-openclaw/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.26",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Core logic for better-openclaw: schemas, service registry, resolver, composer, validators and generators",
|
|
6
6
|
"author": "bidew.io <bachir@bidew.io>",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"zod": "^4.3.6"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@biomejs/biome": "^2.4.
|
|
52
|
-
"@types/node": "^25.3.
|
|
53
|
-
"tsdown": "^0.21.
|
|
51
|
+
"@biomejs/biome": "^2.4.6",
|
|
52
|
+
"@types/node": "^25.3.5",
|
|
53
|
+
"tsdown": "^0.21.1",
|
|
54
54
|
"typescript": "^5.9.3",
|
|
55
55
|
"vitest": "^4.0.18"
|
|
56
56
|
},
|
|
@@ -80,6 +80,7 @@ exports[`compose snapshot tests > creator preset (ffmpeg + remotion + minio + re
|
|
|
80
80
|
RUST_LOG: info
|
|
81
81
|
DISABLE_BEACON: ""
|
|
82
82
|
CONVEX_SELF_HOSTED_ADMIN_KEY: \${CONVEX_SELF_HOSTED_ADMIN_KEY}
|
|
83
|
+
CONVEX_INSTANCE_SECRET: \${CONVEX_INSTANCE_SECRET}
|
|
83
84
|
ports:
|
|
84
85
|
- \${CONVEX_EXTERNAL_PORT_0:-3210}:3210
|
|
85
86
|
- \${CONVEX_EXTERNAL_PORT_1:-3211}:3211
|
|
@@ -296,6 +297,7 @@ exports[`compose snapshot tests > devops preset (n8n + postgresql + redis + moni
|
|
|
296
297
|
RUST_LOG: info
|
|
297
298
|
DISABLE_BEACON: ""
|
|
298
299
|
CONVEX_SELF_HOSTED_ADMIN_KEY: \${CONVEX_SELF_HOSTED_ADMIN_KEY}
|
|
300
|
+
CONVEX_INSTANCE_SECRET: \${CONVEX_INSTANCE_SECRET}
|
|
299
301
|
ports:
|
|
300
302
|
- \${CONVEX_EXTERNAL_PORT_0:-3210}:3210
|
|
301
303
|
- \${CONVEX_EXTERNAL_PORT_1:-3211}:3211
|
|
@@ -706,6 +708,7 @@ exports[`compose snapshot tests > full preset (many services) 1`] = `
|
|
|
706
708
|
RUST_LOG: info
|
|
707
709
|
DISABLE_BEACON: ""
|
|
708
710
|
CONVEX_SELF_HOSTED_ADMIN_KEY: \${CONVEX_SELF_HOSTED_ADMIN_KEY}
|
|
711
|
+
CONVEX_INSTANCE_SECRET: \${CONVEX_INSTANCE_SECRET}
|
|
709
712
|
ports:
|
|
710
713
|
- \${CONVEX_EXTERNAL_PORT_0:-3210}:3210
|
|
711
714
|
- \${CONVEX_EXTERNAL_PORT_1:-3211}:3211
|
|
@@ -1043,6 +1046,7 @@ exports[`compose snapshot tests > minimal preset (redis only) 1`] = `
|
|
|
1043
1046
|
RUST_LOG: info
|
|
1044
1047
|
DISABLE_BEACON: ""
|
|
1045
1048
|
CONVEX_SELF_HOSTED_ADMIN_KEY: \${CONVEX_SELF_HOSTED_ADMIN_KEY}
|
|
1049
|
+
CONVEX_INSTANCE_SECRET: \${CONVEX_INSTANCE_SECRET}
|
|
1046
1050
|
ports:
|
|
1047
1051
|
- \${CONVEX_EXTERNAL_PORT_0:-3210}:3210
|
|
1048
1052
|
- \${CONVEX_EXTERNAL_PORT_1:-3211}:3211
|
|
@@ -1226,6 +1230,7 @@ exports[`compose snapshot tests > researcher preset (qdrant + searxng + browserl
|
|
|
1226
1230
|
RUST_LOG: info
|
|
1227
1231
|
DISABLE_BEACON: ""
|
|
1228
1232
|
CONVEX_SELF_HOSTED_ADMIN_KEY: \${CONVEX_SELF_HOSTED_ADMIN_KEY}
|
|
1233
|
+
CONVEX_INSTANCE_SECRET: \${CONVEX_INSTANCE_SECRET}
|
|
1229
1234
|
ports:
|
|
1230
1235
|
- \${CONVEX_EXTERNAL_PORT_0:-3210}:3210
|
|
1231
1236
|
- \${CONVEX_EXTERNAL_PORT_1:-3211}:3211
|