@better-openclaw/core 1.0.30 → 1.0.31

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 (96) hide show
  1. package/README.md +2 -1
  2. package/dist/deployers/coolify.test.cjs +156 -0
  3. package/dist/deployers/coolify.test.cjs.map +1 -0
  4. package/dist/deployers/coolify.test.d.cts +1 -0
  5. package/dist/deployers/coolify.test.d.mts +1 -0
  6. package/dist/deployers/coolify.test.mjs +157 -0
  7. package/dist/deployers/coolify.test.mjs.map +1 -0
  8. package/dist/deployers/dokploy.test.cjs +108 -0
  9. package/dist/deployers/dokploy.test.cjs.map +1 -0
  10. package/dist/deployers/dokploy.test.d.cts +1 -0
  11. package/dist/deployers/dokploy.test.d.mts +1 -0
  12. package/dist/deployers/dokploy.test.mjs +109 -0
  13. package/dist/deployers/dokploy.test.mjs.map +1 -0
  14. package/dist/frameworks/frameworks.test.cjs +94 -0
  15. package/dist/frameworks/frameworks.test.cjs.map +1 -0
  16. package/dist/frameworks/frameworks.test.d.cts +1 -0
  17. package/dist/frameworks/frameworks.test.d.mts +1 -0
  18. package/dist/frameworks/frameworks.test.mjs +94 -0
  19. package/dist/frameworks/frameworks.test.mjs.map +1 -0
  20. package/dist/generators/cloud-init.test.cjs +58 -0
  21. package/dist/generators/cloud-init.test.cjs.map +1 -0
  22. package/dist/generators/cloud-init.test.d.cts +1 -0
  23. package/dist/generators/cloud-init.test.d.mts +1 -0
  24. package/dist/generators/cloud-init.test.mjs +59 -0
  25. package/dist/generators/cloud-init.test.mjs.map +1 -0
  26. package/dist/generators/get-shit-done.test.cjs +48 -0
  27. package/dist/generators/get-shit-done.test.cjs.map +1 -0
  28. package/dist/generators/get-shit-done.test.d.cts +1 -0
  29. package/dist/generators/get-shit-done.test.d.mts +1 -0
  30. package/dist/generators/get-shit-done.test.mjs +49 -0
  31. package/dist/generators/get-shit-done.test.mjs.map +1 -0
  32. package/dist/generators/grafana.test.cjs +74 -0
  33. package/dist/generators/grafana.test.cjs.map +1 -0
  34. package/dist/generators/grafana.test.d.cts +1 -0
  35. package/dist/generators/grafana.test.d.mts +1 -0
  36. package/dist/generators/grafana.test.mjs +74 -0
  37. package/dist/generators/grafana.test.mjs.map +1 -0
  38. package/dist/generators/n8n-workflows.test.cjs +75 -0
  39. package/dist/generators/n8n-workflows.test.cjs.map +1 -0
  40. package/dist/generators/n8n-workflows.test.d.cts +1 -0
  41. package/dist/generators/n8n-workflows.test.d.mts +1 -0
  42. package/dist/generators/n8n-workflows.test.mjs +76 -0
  43. package/dist/generators/n8n-workflows.test.mjs.map +1 -0
  44. package/dist/generators/openclaw-install-script.test.cjs +35 -0
  45. package/dist/generators/openclaw-install-script.test.cjs.map +1 -0
  46. package/dist/generators/openclaw-install-script.test.d.cts +1 -0
  47. package/dist/generators/openclaw-install-script.test.d.mts +1 -0
  48. package/dist/generators/openclaw-install-script.test.mjs +36 -0
  49. package/dist/generators/openclaw-install-script.test.mjs.map +1 -0
  50. package/dist/generators/postgres-init.test.cjs +111 -0
  51. package/dist/generators/postgres-init.test.cjs.map +1 -0
  52. package/dist/generators/postgres-init.test.d.cts +1 -0
  53. package/dist/generators/postgres-init.test.d.mts +1 -0
  54. package/dist/generators/postgres-init.test.mjs +112 -0
  55. package/dist/generators/postgres-init.test.mjs.map +1 -0
  56. package/dist/generators/prometheus.test.cjs +99 -0
  57. package/dist/generators/prometheus.test.cjs.map +1 -0
  58. package/dist/generators/prometheus.test.d.cts +1 -0
  59. package/dist/generators/prometheus.test.d.mts +1 -0
  60. package/dist/generators/prometheus.test.mjs +99 -0
  61. package/dist/generators/prometheus.test.mjs.map +1 -0
  62. package/dist/generators/stack-manifest.test.cjs +97 -0
  63. package/dist/generators/stack-manifest.test.cjs.map +1 -0
  64. package/dist/generators/stack-manifest.test.d.cts +1 -0
  65. package/dist/generators/stack-manifest.test.d.mts +1 -0
  66. package/dist/generators/stack-manifest.test.mjs +98 -0
  67. package/dist/generators/stack-manifest.test.mjs.map +1 -0
  68. package/dist/index.cjs +0 -2
  69. package/dist/index.d.cts +1 -2
  70. package/dist/index.d.mts +1 -2
  71. package/dist/index.mjs +1 -2
  72. package/dist/logger/index.cjs +0 -2
  73. package/dist/logger/index.d.cts +1 -2
  74. package/dist/logger/index.d.mts +1 -2
  75. package/dist/logger/index.mjs +1 -2
  76. package/dist/port-scanner.test.cjs +155 -0
  77. package/dist/port-scanner.test.cjs.map +1 -0
  78. package/dist/port-scanner.test.d.cts +1 -0
  79. package/dist/port-scanner.test.d.mts +1 -0
  80. package/dist/port-scanner.test.mjs +156 -0
  81. package/dist/port-scanner.test.mjs.map +1 -0
  82. package/package.json +1 -1
  83. package/src/deployers/coolify.test.ts +180 -0
  84. package/src/deployers/dokploy.test.ts +120 -0
  85. package/src/frameworks/frameworks.test.ts +119 -0
  86. package/src/generators/cloud-init.test.ts +70 -0
  87. package/src/generators/get-shit-done.test.ts +54 -0
  88. package/src/generators/grafana.test.ts +90 -0
  89. package/src/generators/n8n-workflows.test.ts +80 -0
  90. package/src/generators/openclaw-install-script.test.ts +42 -0
  91. package/src/generators/postgres-init.test.ts +116 -0
  92. package/src/generators/prometheus.test.ts +108 -0
  93. package/src/generators/stack-manifest.test.ts +104 -0
  94. package/src/index.ts +3 -2
  95. package/src/logger/index.ts +2 -1
  96. package/src/port-scanner.test.ts +167 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-init.test.mjs","names":[],"sources":["../../src/generators/postgres-init.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport type { ResolverOutput } from \"../types.js\";\nimport { generatePostgresInit, getDbRequirements } from \"./postgres-init.js\";\n\nfunction makeResolved(serviceIds: string[]): ResolverOutput {\n\treturn {\n\t\tservices: serviceIds.map((id) => ({\n\t\t\tdefinition: {\n\t\t\t\tid,\n\t\t\t\tname: id.charAt(0).toUpperCase() + id.slice(1),\n\t\t\t\tdescription: \"\",\n\t\t\t\ticon: \"\",\n\t\t\t\tcategory: \"test\",\n\t\t\t\timage: `${id}:latest`,\n\t\t\t\tports: [],\n\t\t\t\tvolumes: [],\n\t\t\t\tenvironment: [],\n\t\t\t\tdependencies: [],\n\t\t\t\tconflicts: [],\n\t\t\t\tskills: [],\n\t\t\t\tmemoryMB: 256,\n\t\t\t\tdocsUrl: \"\",\n\t\t\t},\n\t\t\taddedBy: \"user\" as const,\n\t\t})),\n\t\taddedDependencies: [],\n\t\testimatedMemoryMB: 512,\n\t} as unknown as ResolverOutput;\n}\n\ndescribe(\"getDbRequirements\", () => {\n\tit(\"returns empty array when no services need a DB\", () => {\n\t\tconst resolved = makeResolved([\"redis\", \"minio\"]);\n\t\texpect(getDbRequirements(resolved)).toEqual([]);\n\t});\n\n\tit(\"returns requirements for n8n\", () => {\n\t\tconst resolved = makeResolved([\"n8n\", \"redis\"]);\n\t\tconst reqs = getDbRequirements(resolved);\n\t\texpect(reqs).toHaveLength(1);\n\t\texpect(reqs[0]).toEqual({\n\t\t\tserviceId: \"n8n\",\n\t\t\tserviceName: \"N8n\",\n\t\t\tdbName: \"n8n\",\n\t\t\tdbUser: \"n8n\",\n\t\t\tpasswordEnvVar: \"N8N_DB_PASSWORD\",\n\t\t});\n\t});\n\n\tit(\"returns requirements for multiple services\", () => {\n\t\tconst resolved = makeResolved([\"n8n\", \"outline\", \"postiz\", \"redis\"]);\n\t\tconst reqs = getDbRequirements(resolved);\n\t\texpect(reqs).toHaveLength(3);\n\t\tconst ids = reqs.map((r) => r.serviceId);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"outline\");\n\t\texpect(ids).toContain(\"postiz\");\n\t});\n});\n\ndescribe(\"generatePostgresInit\", () => {\n\tit(\"returns null when PostgreSQL is not in the stack\", () => {\n\t\tconst resolved = makeResolved([\"n8n\", \"redis\"]);\n\t\texpect(generatePostgresInit(resolved)).toBeNull();\n\t});\n\n\tit(\"returns null when PostgreSQL is present but no services need DBs\", () => {\n\t\tconst resolved = makeResolved([\"postgresql\", \"redis\", \"minio\"]);\n\t\texpect(generatePostgresInit(resolved)).toBeNull();\n\t});\n\n\tit(\"generates init script when PostgreSQL and DB-needing services are present\", () => {\n\t\tconst resolved = makeResolved([\"postgresql\", \"n8n\"]);\n\t\tconst script = generatePostgresInit(resolved);\n\t\texpect(script).not.toBeNull();\n\t\texpect(script).toContain(\"#!/bin/bash\");\n\t\texpect(script).toContain(\"create_db_and_user\");\n\t\texpect(script).toContain('\"n8n\"');\n\t\texpect(script).toContain(\"N8N_DB_PASSWORD\");\n\t});\n\n\tit(\"includes all services that need DBs\", () => {\n\t\tconst resolved = makeResolved([\"postgresql\", \"n8n\", \"outline\", \"dify\"]);\n\t\tconst script = generatePostgresInit(resolved)!;\n\t\texpect(script).toContain('\"n8n\"');\n\t\texpect(script).toContain('\"outline\"');\n\t\texpect(script).toContain('\"dify\"');\n\t});\n\n\tit(\"uses environment variable substitution for passwords (not literals)\", () => {\n\t\tconst resolved = makeResolved([\"postgresql\", \"n8n\"]);\n\t\tconst script = generatePostgresInit(resolved)!;\n\t\t// Passwords should be referenced as env vars, not hardcoded\n\t\texpect(script).toContain(\"${N8N_DB_PASSWORD:-$POSTGRES_PASSWORD}\");\n\t});\n\n\tit(\"script uses psql with ON_ERROR_STOP\", () => {\n\t\tconst resolved = makeResolved([\"postgresql\", \"n8n\"]);\n\t\tconst script = generatePostgresInit(resolved)!;\n\t\texpect(script).toContain(\"ON_ERROR_STOP=1\");\n\t});\n\n\tit(\"script creates user with IF NOT EXISTS check\", () => {\n\t\tconst resolved = makeResolved([\"postgresql\", \"n8n\"]);\n\t\tconst script = generatePostgresInit(resolved)!;\n\t\texpect(script).toContain(\"IF NOT EXISTS\");\n\t\texpect(script).toContain(\"CREATE ROLE\");\n\t});\n\n\tit(\"includes service names in summary line\", () => {\n\t\tconst resolved = makeResolved([\"postgresql\", \"n8n\", \"outline\"]);\n\t\tconst script = generatePostgresInit(resolved)!;\n\t\texpect(script).toContain(\"N8n\");\n\t\texpect(script).toContain(\"Outline\");\n\t});\n});\n"],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ require("../skills-uPxJVmKk.cjs");
2
+ const require_test_CTcmp4Su = require("../test.CTcmp4Su-BWSPM8ZQ.cjs");
3
+ const require_generators_prometheus = require("./prometheus.cjs");
4
+ const require_generate = require("../generate.cjs");
5
+ let yaml = require("yaml");
6
+ //#region src/generators/prometheus.test.ts
7
+ function makeResolved(serviceIds) {
8
+ return {
9
+ services: serviceIds.map((id) => ({
10
+ definition: {
11
+ id,
12
+ name: id.charAt(0).toUpperCase() + id.slice(1),
13
+ description: "",
14
+ icon: "📦",
15
+ category: "test",
16
+ image: `${id}:latest`,
17
+ ports: [],
18
+ volumes: [],
19
+ environment: [],
20
+ dependencies: [],
21
+ conflicts: [],
22
+ skills: [],
23
+ memoryMB: 256,
24
+ docsUrl: ""
25
+ },
26
+ addedBy: "user"
27
+ })),
28
+ addedDependencies: [],
29
+ estimatedMemoryMB: 512
30
+ };
31
+ }
32
+ require_test_CTcmp4Su.describe("generatePrometheusConfig", () => {
33
+ require_test_CTcmp4Su.it("always includes prometheus self-monitoring", () => {
34
+ const config = require_generators_prometheus.generatePrometheusConfig(makeResolved(["redis"]));
35
+ require_test_CTcmp4Su.globalExpect(config).toContain("job_name: \"prometheus\"");
36
+ require_test_CTcmp4Su.globalExpect(config).toContain("localhost:9090");
37
+ });
38
+ require_test_CTcmp4Su.it("includes scrape config for redis", () => {
39
+ const config = require_generators_prometheus.generatePrometheusConfig(makeResolved(["redis"]));
40
+ require_test_CTcmp4Su.globalExpect(config).toContain("job_name: \"redis\"");
41
+ require_test_CTcmp4Su.globalExpect(config).toContain("redis:9121");
42
+ });
43
+ require_test_CTcmp4Su.it("includes scrape config for postgresql", () => {
44
+ const config = require_generators_prometheus.generatePrometheusConfig(makeResolved(["postgresql"]));
45
+ require_test_CTcmp4Su.globalExpect(config).toContain("job_name: \"postgresql\"");
46
+ require_test_CTcmp4Su.globalExpect(config).toContain("postgresql:9187");
47
+ });
48
+ require_test_CTcmp4Su.it("includes scrape configs for multiple services", () => {
49
+ const config = require_generators_prometheus.generatePrometheusConfig(makeResolved([
50
+ "redis",
51
+ "n8n",
52
+ "minio"
53
+ ]));
54
+ require_test_CTcmp4Su.globalExpect(config).toContain("job_name: \"redis\"");
55
+ require_test_CTcmp4Su.globalExpect(config).toContain("job_name: \"n8n\"");
56
+ require_test_CTcmp4Su.globalExpect(config).toContain("job_name: \"minio\"");
57
+ });
58
+ require_test_CTcmp4Su.it("skips services without known metrics endpoints", () => {
59
+ require_test_CTcmp4Su.globalExpect(require_generators_prometheus.generatePrometheusConfig(makeResolved(["ffmpeg"]))).not.toContain("job_name: \"ffmpeg\"");
60
+ });
61
+ require_test_CTcmp4Su.it("does not duplicate prometheus job", () => {
62
+ require_test_CTcmp4Su.globalExpect(require_generators_prometheus.generatePrometheusConfig(makeResolved(["prometheus", "redis"])).match(/job_name: "prometheus"/g)).toHaveLength(1);
63
+ });
64
+ require_test_CTcmp4Su.it("always includes openclaw gateway metrics", () => {
65
+ const config = require_generators_prometheus.generatePrometheusConfig(makeResolved(["redis"]));
66
+ require_test_CTcmp4Su.globalExpect(config).toContain("job_name: \"openclaw-gateway\"");
67
+ require_test_CTcmp4Su.globalExpect(config).toContain("openclaw:18789");
68
+ });
69
+ require_test_CTcmp4Su.it("is valid YAML", () => {
70
+ const parsed = (0, yaml.parse)(require_generators_prometheus.generatePrometheusConfig(makeResolved(["redis", "postgresql"])));
71
+ require_test_CTcmp4Su.globalExpect(parsed).toBeDefined();
72
+ require_test_CTcmp4Su.globalExpect(parsed.global).toBeDefined();
73
+ require_test_CTcmp4Su.globalExpect(parsed.scrape_configs).toBeInstanceOf(Array);
74
+ });
75
+ require_test_CTcmp4Su.it("sets correct metrics paths per service", () => {
76
+ require_test_CTcmp4Su.globalExpect(require_generators_prometheus.generatePrometheusConfig(makeResolved(["minio"]))).toContain("/minio/v2/metrics/cluster");
77
+ });
78
+ });
79
+ require_test_CTcmp4Su.describe("prometheus via generate()", () => {
80
+ require_test_CTcmp4Su.it("generates prometheus config when monitoring is enabled", () => {
81
+ const result = require_generate.generate({
82
+ projectName: "prom-test",
83
+ services: ["redis"],
84
+ skillPacks: [],
85
+ proxy: "none",
86
+ gpu: false,
87
+ platform: "linux/amd64",
88
+ deployment: "local",
89
+ generateSecrets: true,
90
+ openclawVersion: "latest",
91
+ monitoring: true
92
+ });
93
+ require_test_CTcmp4Su.globalExpect(result.files).toHaveProperty("prometheus/prometheus.yml");
94
+ require_test_CTcmp4Su.globalExpect((0, yaml.parse)(result.files["prometheus/prometheus.yml"]).scrape_configs.length).toBeGreaterThan(0);
95
+ });
96
+ });
97
+ //#endregion
98
+
99
+ //# sourceMappingURL=prometheus.test.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prometheus.test.cjs","names":["describe","generatePrometheusConfig","generate"],"sources":["../../src/generators/prometheus.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { parse } from \"yaml\";\nimport { generate } from \"../generate.js\";\nimport type { ResolverOutput } from \"../types.js\";\nimport { generatePrometheusConfig } from \"./prometheus.js\";\n\nfunction makeResolved(serviceIds: string[]): ResolverOutput {\n\treturn {\n\t\tservices: serviceIds.map((id) => ({\n\t\t\tdefinition: {\n\t\t\t\tid,\n\t\t\t\tname: id.charAt(0).toUpperCase() + id.slice(1),\n\t\t\t\tdescription: \"\",\n\t\t\t\ticon: \"📦\",\n\t\t\t\tcategory: \"test\",\n\t\t\t\timage: `${id}:latest`,\n\t\t\t\tports: [],\n\t\t\t\tvolumes: [],\n\t\t\t\tenvironment: [],\n\t\t\t\tdependencies: [],\n\t\t\t\tconflicts: [],\n\t\t\t\tskills: [],\n\t\t\t\tmemoryMB: 256,\n\t\t\t\tdocsUrl: \"\",\n\t\t\t},\n\t\t\taddedBy: \"user\" as const,\n\t\t})),\n\t\taddedDependencies: [],\n\t\testimatedMemoryMB: 512,\n\t} as unknown as ResolverOutput;\n}\n\ndescribe(\"generatePrometheusConfig\", () => {\n\tit(\"always includes prometheus self-monitoring\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\"]));\n\t\texpect(config).toContain('job_name: \"prometheus\"');\n\t\texpect(config).toContain(\"localhost:9090\");\n\t});\n\n\tit(\"includes scrape config for redis\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\"]));\n\t\texpect(config).toContain('job_name: \"redis\"');\n\t\texpect(config).toContain(\"redis:9121\");\n\t});\n\n\tit(\"includes scrape config for postgresql\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"postgresql\"]));\n\t\texpect(config).toContain('job_name: \"postgresql\"');\n\t\texpect(config).toContain(\"postgresql:9187\");\n\t});\n\n\tit(\"includes scrape configs for multiple services\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\", \"n8n\", \"minio\"]));\n\t\texpect(config).toContain('job_name: \"redis\"');\n\t\texpect(config).toContain('job_name: \"n8n\"');\n\t\texpect(config).toContain('job_name: \"minio\"');\n\t});\n\n\tit(\"skips services without known metrics endpoints\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"ffmpeg\"]));\n\t\texpect(config).not.toContain('job_name: \"ffmpeg\"');\n\t});\n\n\tit(\"does not duplicate prometheus job\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"prometheus\", \"redis\"]));\n\t\tconst matches = config.match(/job_name: \"prometheus\"/g);\n\t\texpect(matches).toHaveLength(1);\n\t});\n\n\tit(\"always includes openclaw gateway metrics\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\"]));\n\t\texpect(config).toContain('job_name: \"openclaw-gateway\"');\n\t\texpect(config).toContain(\"openclaw:18789\");\n\t});\n\n\tit(\"is valid YAML\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\", \"postgresql\"]));\n\t\tconst parsed = parse(config);\n\t\texpect(parsed).toBeDefined();\n\t\texpect(parsed.global).toBeDefined();\n\t\texpect(parsed.scrape_configs).toBeInstanceOf(Array);\n\t});\n\n\tit(\"sets correct metrics paths per service\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"minio\"]));\n\t\texpect(config).toContain(\"/minio/v2/metrics/cluster\");\n\t});\n});\n\ndescribe(\"prometheus via generate()\", () => {\n\tit(\"generates prometheus config when monitoring is enabled\", () => {\n\t\tconst result = generate({\n\t\t\tprojectName: \"prom-test\",\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\tdeployment: \"local\",\n\t\t\tgenerateSecrets: true,\n\t\t\topenclawVersion: \"latest\",\n\t\t\tmonitoring: true,\n\t\t});\n\t\texpect(result.files).toHaveProperty(\"prometheus/prometheus.yml\");\n\t\tconst promConfig = parse(result.files[\"prometheus/prometheus.yml\"]!);\n\t\texpect(promConfig.scrape_configs.length).toBeGreaterThan(0);\n\t});\n});\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,99 @@
1
+ import { a as describe, o as it, t as globalExpect } from "../test.CTcmp4Su-BRa7-bTj.mjs";
2
+ import { generatePrometheusConfig } from "./prometheus.mjs";
3
+ import { generate } from "../generate.mjs";
4
+ import { parse } from "yaml";
5
+ //#region src/generators/prometheus.test.ts
6
+ function makeResolved(serviceIds) {
7
+ return {
8
+ services: serviceIds.map((id) => ({
9
+ definition: {
10
+ id,
11
+ name: id.charAt(0).toUpperCase() + id.slice(1),
12
+ description: "",
13
+ icon: "📦",
14
+ category: "test",
15
+ image: `${id}:latest`,
16
+ ports: [],
17
+ volumes: [],
18
+ environment: [],
19
+ dependencies: [],
20
+ conflicts: [],
21
+ skills: [],
22
+ memoryMB: 256,
23
+ docsUrl: ""
24
+ },
25
+ addedBy: "user"
26
+ })),
27
+ addedDependencies: [],
28
+ estimatedMemoryMB: 512
29
+ };
30
+ }
31
+ describe("generatePrometheusConfig", () => {
32
+ it("always includes prometheus self-monitoring", () => {
33
+ const config = generatePrometheusConfig(makeResolved(["redis"]));
34
+ globalExpect(config).toContain("job_name: \"prometheus\"");
35
+ globalExpect(config).toContain("localhost:9090");
36
+ });
37
+ it("includes scrape config for redis", () => {
38
+ const config = generatePrometheusConfig(makeResolved(["redis"]));
39
+ globalExpect(config).toContain("job_name: \"redis\"");
40
+ globalExpect(config).toContain("redis:9121");
41
+ });
42
+ it("includes scrape config for postgresql", () => {
43
+ const config = generatePrometheusConfig(makeResolved(["postgresql"]));
44
+ globalExpect(config).toContain("job_name: \"postgresql\"");
45
+ globalExpect(config).toContain("postgresql:9187");
46
+ });
47
+ it("includes scrape configs for multiple services", () => {
48
+ const config = generatePrometheusConfig(makeResolved([
49
+ "redis",
50
+ "n8n",
51
+ "minio"
52
+ ]));
53
+ globalExpect(config).toContain("job_name: \"redis\"");
54
+ globalExpect(config).toContain("job_name: \"n8n\"");
55
+ globalExpect(config).toContain("job_name: \"minio\"");
56
+ });
57
+ it("skips services without known metrics endpoints", () => {
58
+ globalExpect(generatePrometheusConfig(makeResolved(["ffmpeg"]))).not.toContain("job_name: \"ffmpeg\"");
59
+ });
60
+ it("does not duplicate prometheus job", () => {
61
+ globalExpect(generatePrometheusConfig(makeResolved(["prometheus", "redis"])).match(/job_name: "prometheus"/g)).toHaveLength(1);
62
+ });
63
+ it("always includes openclaw gateway metrics", () => {
64
+ const config = generatePrometheusConfig(makeResolved(["redis"]));
65
+ globalExpect(config).toContain("job_name: \"openclaw-gateway\"");
66
+ globalExpect(config).toContain("openclaw:18789");
67
+ });
68
+ it("is valid YAML", () => {
69
+ const parsed = parse(generatePrometheusConfig(makeResolved(["redis", "postgresql"])));
70
+ globalExpect(parsed).toBeDefined();
71
+ globalExpect(parsed.global).toBeDefined();
72
+ globalExpect(parsed.scrape_configs).toBeInstanceOf(Array);
73
+ });
74
+ it("sets correct metrics paths per service", () => {
75
+ globalExpect(generatePrometheusConfig(makeResolved(["minio"]))).toContain("/minio/v2/metrics/cluster");
76
+ });
77
+ });
78
+ describe("prometheus via generate()", () => {
79
+ it("generates prometheus config when monitoring is enabled", () => {
80
+ const result = generate({
81
+ projectName: "prom-test",
82
+ services: ["redis"],
83
+ skillPacks: [],
84
+ proxy: "none",
85
+ gpu: false,
86
+ platform: "linux/amd64",
87
+ deployment: "local",
88
+ generateSecrets: true,
89
+ openclawVersion: "latest",
90
+ monitoring: true
91
+ });
92
+ globalExpect(result.files).toHaveProperty("prometheus/prometheus.yml");
93
+ globalExpect(parse(result.files["prometheus/prometheus.yml"]).scrape_configs.length).toBeGreaterThan(0);
94
+ });
95
+ });
96
+ //#endregion
97
+ export {};
98
+
99
+ //# sourceMappingURL=prometheus.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prometheus.test.mjs","names":[],"sources":["../../src/generators/prometheus.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { parse } from \"yaml\";\nimport { generate } from \"../generate.js\";\nimport type { ResolverOutput } from \"../types.js\";\nimport { generatePrometheusConfig } from \"./prometheus.js\";\n\nfunction makeResolved(serviceIds: string[]): ResolverOutput {\n\treturn {\n\t\tservices: serviceIds.map((id) => ({\n\t\t\tdefinition: {\n\t\t\t\tid,\n\t\t\t\tname: id.charAt(0).toUpperCase() + id.slice(1),\n\t\t\t\tdescription: \"\",\n\t\t\t\ticon: \"📦\",\n\t\t\t\tcategory: \"test\",\n\t\t\t\timage: `${id}:latest`,\n\t\t\t\tports: [],\n\t\t\t\tvolumes: [],\n\t\t\t\tenvironment: [],\n\t\t\t\tdependencies: [],\n\t\t\t\tconflicts: [],\n\t\t\t\tskills: [],\n\t\t\t\tmemoryMB: 256,\n\t\t\t\tdocsUrl: \"\",\n\t\t\t},\n\t\t\taddedBy: \"user\" as const,\n\t\t})),\n\t\taddedDependencies: [],\n\t\testimatedMemoryMB: 512,\n\t} as unknown as ResolverOutput;\n}\n\ndescribe(\"generatePrometheusConfig\", () => {\n\tit(\"always includes prometheus self-monitoring\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\"]));\n\t\texpect(config).toContain('job_name: \"prometheus\"');\n\t\texpect(config).toContain(\"localhost:9090\");\n\t});\n\n\tit(\"includes scrape config for redis\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\"]));\n\t\texpect(config).toContain('job_name: \"redis\"');\n\t\texpect(config).toContain(\"redis:9121\");\n\t});\n\n\tit(\"includes scrape config for postgresql\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"postgresql\"]));\n\t\texpect(config).toContain('job_name: \"postgresql\"');\n\t\texpect(config).toContain(\"postgresql:9187\");\n\t});\n\n\tit(\"includes scrape configs for multiple services\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\", \"n8n\", \"minio\"]));\n\t\texpect(config).toContain('job_name: \"redis\"');\n\t\texpect(config).toContain('job_name: \"n8n\"');\n\t\texpect(config).toContain('job_name: \"minio\"');\n\t});\n\n\tit(\"skips services without known metrics endpoints\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"ffmpeg\"]));\n\t\texpect(config).not.toContain('job_name: \"ffmpeg\"');\n\t});\n\n\tit(\"does not duplicate prometheus job\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"prometheus\", \"redis\"]));\n\t\tconst matches = config.match(/job_name: \"prometheus\"/g);\n\t\texpect(matches).toHaveLength(1);\n\t});\n\n\tit(\"always includes openclaw gateway metrics\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\"]));\n\t\texpect(config).toContain('job_name: \"openclaw-gateway\"');\n\t\texpect(config).toContain(\"openclaw:18789\");\n\t});\n\n\tit(\"is valid YAML\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"redis\", \"postgresql\"]));\n\t\tconst parsed = parse(config);\n\t\texpect(parsed).toBeDefined();\n\t\texpect(parsed.global).toBeDefined();\n\t\texpect(parsed.scrape_configs).toBeInstanceOf(Array);\n\t});\n\n\tit(\"sets correct metrics paths per service\", () => {\n\t\tconst config = generatePrometheusConfig(makeResolved([\"minio\"]));\n\t\texpect(config).toContain(\"/minio/v2/metrics/cluster\");\n\t});\n});\n\ndescribe(\"prometheus via generate()\", () => {\n\tit(\"generates prometheus config when monitoring is enabled\", () => {\n\t\tconst result = generate({\n\t\t\tprojectName: \"prom-test\",\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\tdeployment: \"local\",\n\t\t\tgenerateSecrets: true,\n\t\t\topenclawVersion: \"latest\",\n\t\t\tmonitoring: true,\n\t\t});\n\t\texpect(result.files).toHaveProperty(\"prometheus/prometheus.yml\");\n\t\tconst promConfig = parse(result.files[\"prometheus/prometheus.yml\"]!);\n\t\texpect(promConfig.scrape_configs.length).toBeGreaterThan(0);\n\t});\n});\n"],"mappings":";;;;;AAMA,SAAS,aAAa,YAAsC;AAC3D,QAAO;EACN,UAAU,WAAW,KAAK,QAAQ;GACjC,YAAY;IACX;IACA,MAAM,GAAG,OAAO,EAAE,CAAC,aAAa,GAAG,GAAG,MAAM,EAAE;IAC9C,aAAa;IACb,MAAM;IACN,UAAU;IACV,OAAO,GAAG,GAAG;IACb,OAAO,EAAE;IACT,SAAS,EAAE;IACX,aAAa,EAAE;IACf,cAAc,EAAE;IAChB,WAAW,EAAE;IACb,QAAQ,EAAE;IACV,UAAU;IACV,SAAS;IACT;GACD,SAAS;GACT,EAAE;EACH,mBAAmB,EAAE;EACrB,mBAAmB;EACnB;;AAGF,SAAS,kCAAkC;AAC1C,IAAG,oDAAoD;EACtD,MAAM,SAAS,yBAAyB,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChE,eAAO,OAAO,CAAC,UAAU,2BAAyB;AAClD,eAAO,OAAO,CAAC,UAAU,iBAAiB;GACzC;AAEF,IAAG,0CAA0C;EAC5C,MAAM,SAAS,yBAAyB,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChE,eAAO,OAAO,CAAC,UAAU,sBAAoB;AAC7C,eAAO,OAAO,CAAC,UAAU,aAAa;GACrC;AAEF,IAAG,+CAA+C;EACjD,MAAM,SAAS,yBAAyB,aAAa,CAAC,aAAa,CAAC,CAAC;AACrE,eAAO,OAAO,CAAC,UAAU,2BAAyB;AAClD,eAAO,OAAO,CAAC,UAAU,kBAAkB;GAC1C;AAEF,IAAG,uDAAuD;EACzD,MAAM,SAAS,yBAAyB,aAAa;GAAC;GAAS;GAAO;GAAQ,CAAC,CAAC;AAChF,eAAO,OAAO,CAAC,UAAU,sBAAoB;AAC7C,eAAO,OAAO,CAAC,UAAU,oBAAkB;AAC3C,eAAO,OAAO,CAAC,UAAU,sBAAoB;GAC5C;AAEF,IAAG,wDAAwD;AAE1D,eADe,yBAAyB,aAAa,CAAC,SAAS,CAAC,CAAC,CACnD,CAAC,IAAI,UAAU,uBAAqB;GACjD;AAEF,IAAG,2CAA2C;AAG7C,eAFe,yBAAyB,aAAa,CAAC,cAAc,QAAQ,CAAC,CAAC,CACvD,MAAM,0BAA0B,CACxC,CAAC,aAAa,EAAE;GAC9B;AAEF,IAAG,kDAAkD;EACpD,MAAM,SAAS,yBAAyB,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChE,eAAO,OAAO,CAAC,UAAU,iCAA+B;AACxD,eAAO,OAAO,CAAC,UAAU,iBAAiB;GACzC;AAEF,IAAG,uBAAuB;EAEzB,MAAM,SAAS,MADA,yBAAyB,aAAa,CAAC,SAAS,aAAa,CAAC,CAAC,CAClD;AAC5B,eAAO,OAAO,CAAC,aAAa;AAC5B,eAAO,OAAO,OAAO,CAAC,aAAa;AACnC,eAAO,OAAO,eAAe,CAAC,eAAe,MAAM;GAClD;AAEF,IAAG,gDAAgD;AAElD,eADe,yBAAyB,aAAa,CAAC,QAAQ,CAAC,CAAC,CAClD,CAAC,UAAU,4BAA4B;GACpD;EACD;AAEF,SAAS,mCAAmC;AAC3C,IAAG,gEAAgE;EAClE,MAAM,SAAS,SAAS;GACvB,aAAa;GACb,UAAU,CAAC,QAAQ;GACnB,YAAY,EAAE;GACd,OAAO;GACP,KAAK;GACL,UAAU;GACV,YAAY;GACZ,iBAAiB;GACjB,iBAAiB;GACjB,YAAY;GACZ,CAAC;AACF,eAAO,OAAO,MAAM,CAAC,eAAe,4BAA4B;AAEhE,eADmB,MAAM,OAAO,MAAM,6BAA8B,CAClD,eAAe,OAAO,CAAC,gBAAgB,EAAE;GAC1D;EACD"}
@@ -0,0 +1,97 @@
1
+ const require_test_CTcmp4Su = require("../test.CTcmp4Su-BWSPM8ZQ.cjs");
2
+ const require_generators_stack_manifest = require("./stack-manifest.cjs");
3
+ //#region src/generators/stack-manifest.test.ts
4
+ function makeResolved(serviceIds) {
5
+ return {
6
+ services: serviceIds.map((id) => ({
7
+ definition: {
8
+ id,
9
+ name: id.charAt(0).toUpperCase() + id.slice(1),
10
+ description: `${id} service`,
11
+ icon: "📦",
12
+ category: "test",
13
+ image: `${id}:latest`,
14
+ imageTag: "latest",
15
+ ports: [{
16
+ container: 8080,
17
+ host: 8080,
18
+ exposed: true,
19
+ description: `${id} port`
20
+ }],
21
+ volumes: [],
22
+ environment: [],
23
+ dependencies: [],
24
+ conflicts: [],
25
+ skills: [],
26
+ memoryMB: 256,
27
+ docsUrl: `https://docs.example.com/${id}`
28
+ },
29
+ addedBy: "user"
30
+ })),
31
+ addedDependencies: [],
32
+ estimatedMemoryMB: 512
33
+ };
34
+ }
35
+ const baseInput = {
36
+ projectName: "test-stack",
37
+ services: ["redis"],
38
+ skillPacks: [],
39
+ proxy: "caddy",
40
+ domain: "example.com",
41
+ gpu: false,
42
+ platform: "linux/amd64",
43
+ deployment: "local",
44
+ generateSecrets: true,
45
+ openclawVersion: "latest"
46
+ };
47
+ require_test_CTcmp4Su.describe("generateStackManifest", () => {
48
+ require_test_CTcmp4Su.it("returns a single file: stack-manifest.json", () => {
49
+ const files = require_generators_stack_manifest.generateStackManifest(makeResolved(["redis"]), baseInput);
50
+ require_test_CTcmp4Su.globalExpect(Object.keys(files)).toEqual(["stack-manifest.json"]);
51
+ });
52
+ require_test_CTcmp4Su.it("produces valid JSON", () => {
53
+ const files = require_generators_stack_manifest.generateStackManifest(makeResolved(["redis"]), baseInput);
54
+ require_test_CTcmp4Su.globalExpect(JSON.parse(files["stack-manifest.json"])).toBeDefined();
55
+ });
56
+ require_test_CTcmp4Su.it("includes format version", () => {
57
+ const files = require_generators_stack_manifest.generateStackManifest(makeResolved(["redis"]), baseInput);
58
+ require_test_CTcmp4Su.globalExpect(JSON.parse(files["stack-manifest.json"]).formatVersion).toBe("1");
59
+ });
60
+ require_test_CTcmp4Su.it("includes project name from input", () => {
61
+ const files = require_generators_stack_manifest.generateStackManifest(makeResolved(["redis"]), baseInput);
62
+ require_test_CTcmp4Su.globalExpect(JSON.parse(files["stack-manifest.json"]).projectName).toBe("test-stack");
63
+ });
64
+ require_test_CTcmp4Su.it("includes deployment configuration", () => {
65
+ const files = require_generators_stack_manifest.generateStackManifest(makeResolved(["redis"]), baseInput);
66
+ const manifest = JSON.parse(files["stack-manifest.json"]);
67
+ require_test_CTcmp4Su.globalExpect(manifest.deployment).toBe("local");
68
+ require_test_CTcmp4Su.globalExpect(manifest.proxy).toBe("caddy");
69
+ require_test_CTcmp4Su.globalExpect(manifest.domain).toBe("example.com");
70
+ });
71
+ require_test_CTcmp4Su.it("lists all services with correct structure", () => {
72
+ const files = require_generators_stack_manifest.generateStackManifest(makeResolved(["redis", "postgresql"]), baseInput);
73
+ const manifest = JSON.parse(files["stack-manifest.json"]);
74
+ require_test_CTcmp4Su.globalExpect(manifest.services).toHaveLength(2);
75
+ for (const svc of manifest.services) {
76
+ require_test_CTcmp4Su.globalExpect(svc).toHaveProperty("id");
77
+ require_test_CTcmp4Su.globalExpect(svc).toHaveProperty("name");
78
+ require_test_CTcmp4Su.globalExpect(svc).toHaveProperty("category");
79
+ require_test_CTcmp4Su.globalExpect(svc).toHaveProperty("ports");
80
+ require_test_CTcmp4Su.globalExpect(svc).toHaveProperty("docsUrl");
81
+ require_test_CTcmp4Su.globalExpect(svc).toHaveProperty("addedBy");
82
+ }
83
+ });
84
+ require_test_CTcmp4Su.it("includes metadata with service count", () => {
85
+ const files = require_generators_stack_manifest.generateStackManifest(makeResolved(["redis", "postgresql"]), baseInput);
86
+ require_test_CTcmp4Su.globalExpect(JSON.parse(files["stack-manifest.json"]).metadata.serviceCount).toBe(2);
87
+ });
88
+ require_test_CTcmp4Su.it("includes generatedAt timestamp", () => {
89
+ const files = require_generators_stack_manifest.generateStackManifest(makeResolved(["redis"]), baseInput);
90
+ const manifest = JSON.parse(files["stack-manifest.json"]);
91
+ require_test_CTcmp4Su.globalExpect(manifest.generatedAt).toBeDefined();
92
+ require_test_CTcmp4Su.globalExpect(() => new Date(manifest.generatedAt)).not.toThrow();
93
+ });
94
+ });
95
+ //#endregion
96
+
97
+ //# sourceMappingURL=stack-manifest.test.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-manifest.test.cjs","names":["describe","generateStackManifest"],"sources":["../../src/generators/stack-manifest.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport type { GenerationInput, ResolverOutput } from \"../types.js\";\nimport { generateStackManifest, type StackManifest } from \"./stack-manifest.js\";\n\nfunction makeResolved(serviceIds: string[]): ResolverOutput {\n\treturn {\n\t\tservices: serviceIds.map((id) => ({\n\t\t\tdefinition: {\n\t\t\t\tid,\n\t\t\t\tname: id.charAt(0).toUpperCase() + id.slice(1),\n\t\t\t\tdescription: `${id} service`,\n\t\t\t\ticon: \"📦\",\n\t\t\t\tcategory: \"test\",\n\t\t\t\timage: `${id}:latest`,\n\t\t\t\timageTag: \"latest\",\n\t\t\t\tports: [{ container: 8080, host: 8080, exposed: true, description: `${id} port` }],\n\t\t\t\tvolumes: [],\n\t\t\t\tenvironment: [],\n\t\t\t\tdependencies: [],\n\t\t\t\tconflicts: [],\n\t\t\t\tskills: [],\n\t\t\t\tmemoryMB: 256,\n\t\t\t\tdocsUrl: `https://docs.example.com/${id}`,\n\t\t\t},\n\t\t\taddedBy: \"user\" as const,\n\t\t})),\n\t\taddedDependencies: [],\n\t\testimatedMemoryMB: 512,\n\t} as unknown as ResolverOutput;\n}\n\nconst baseInput: GenerationInput = {\n\tprojectName: \"test-stack\",\n\tservices: [\"redis\"],\n\tskillPacks: [],\n\tproxy: \"caddy\",\n\tdomain: \"example.com\",\n\tgpu: false,\n\tplatform: \"linux/amd64\",\n\tdeployment: \"local\",\n\tgenerateSecrets: true,\n\topenclawVersion: \"latest\",\n} as unknown as GenerationInput;\n\ndescribe(\"generateStackManifest\", () => {\n\tit(\"returns a single file: stack-manifest.json\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\texpect(Object.keys(files)).toEqual([\"stack-manifest.json\"]);\n\t});\n\n\tit(\"produces valid JSON\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest).toBeDefined();\n\t});\n\n\tit(\"includes format version\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.formatVersion).toBe(\"1\");\n\t});\n\n\tit(\"includes project name from input\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.projectName).toBe(\"test-stack\");\n\t});\n\n\tit(\"includes deployment configuration\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.deployment).toBe(\"local\");\n\t\texpect(manifest.proxy).toBe(\"caddy\");\n\t\texpect(manifest.domain).toBe(\"example.com\");\n\t});\n\n\tit(\"lists all services with correct structure\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\", \"postgresql\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.services).toHaveLength(2);\n\t\tfor (const svc of manifest.services) {\n\t\t\texpect(svc).toHaveProperty(\"id\");\n\t\t\texpect(svc).toHaveProperty(\"name\");\n\t\t\texpect(svc).toHaveProperty(\"category\");\n\t\t\texpect(svc).toHaveProperty(\"ports\");\n\t\t\texpect(svc).toHaveProperty(\"docsUrl\");\n\t\t\texpect(svc).toHaveProperty(\"addedBy\");\n\t\t}\n\t});\n\n\tit(\"includes metadata with service count\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\", \"postgresql\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.metadata.serviceCount).toBe(2);\n\t});\n\n\tit(\"includes generatedAt timestamp\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.generatedAt).toBeDefined();\n\t\t// Should be ISO 8601\n\t\texpect(() => new Date(manifest.generatedAt)).not.toThrow();\n\t});\n});\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,98 @@
1
+ import { a as describe, o as it, t as globalExpect } from "../test.CTcmp4Su-BRa7-bTj.mjs";
2
+ import { generateStackManifest } from "./stack-manifest.mjs";
3
+ //#region src/generators/stack-manifest.test.ts
4
+ function makeResolved(serviceIds) {
5
+ return {
6
+ services: serviceIds.map((id) => ({
7
+ definition: {
8
+ id,
9
+ name: id.charAt(0).toUpperCase() + id.slice(1),
10
+ description: `${id} service`,
11
+ icon: "📦",
12
+ category: "test",
13
+ image: `${id}:latest`,
14
+ imageTag: "latest",
15
+ ports: [{
16
+ container: 8080,
17
+ host: 8080,
18
+ exposed: true,
19
+ description: `${id} port`
20
+ }],
21
+ volumes: [],
22
+ environment: [],
23
+ dependencies: [],
24
+ conflicts: [],
25
+ skills: [],
26
+ memoryMB: 256,
27
+ docsUrl: `https://docs.example.com/${id}`
28
+ },
29
+ addedBy: "user"
30
+ })),
31
+ addedDependencies: [],
32
+ estimatedMemoryMB: 512
33
+ };
34
+ }
35
+ const baseInput = {
36
+ projectName: "test-stack",
37
+ services: ["redis"],
38
+ skillPacks: [],
39
+ proxy: "caddy",
40
+ domain: "example.com",
41
+ gpu: false,
42
+ platform: "linux/amd64",
43
+ deployment: "local",
44
+ generateSecrets: true,
45
+ openclawVersion: "latest"
46
+ };
47
+ describe("generateStackManifest", () => {
48
+ it("returns a single file: stack-manifest.json", () => {
49
+ const files = generateStackManifest(makeResolved(["redis"]), baseInput);
50
+ globalExpect(Object.keys(files)).toEqual(["stack-manifest.json"]);
51
+ });
52
+ it("produces valid JSON", () => {
53
+ const files = generateStackManifest(makeResolved(["redis"]), baseInput);
54
+ globalExpect(JSON.parse(files["stack-manifest.json"])).toBeDefined();
55
+ });
56
+ it("includes format version", () => {
57
+ const files = generateStackManifest(makeResolved(["redis"]), baseInput);
58
+ globalExpect(JSON.parse(files["stack-manifest.json"]).formatVersion).toBe("1");
59
+ });
60
+ it("includes project name from input", () => {
61
+ const files = generateStackManifest(makeResolved(["redis"]), baseInput);
62
+ globalExpect(JSON.parse(files["stack-manifest.json"]).projectName).toBe("test-stack");
63
+ });
64
+ it("includes deployment configuration", () => {
65
+ const files = generateStackManifest(makeResolved(["redis"]), baseInput);
66
+ const manifest = JSON.parse(files["stack-manifest.json"]);
67
+ globalExpect(manifest.deployment).toBe("local");
68
+ globalExpect(manifest.proxy).toBe("caddy");
69
+ globalExpect(manifest.domain).toBe("example.com");
70
+ });
71
+ it("lists all services with correct structure", () => {
72
+ const files = generateStackManifest(makeResolved(["redis", "postgresql"]), baseInput);
73
+ const manifest = JSON.parse(files["stack-manifest.json"]);
74
+ globalExpect(manifest.services).toHaveLength(2);
75
+ for (const svc of manifest.services) {
76
+ globalExpect(svc).toHaveProperty("id");
77
+ globalExpect(svc).toHaveProperty("name");
78
+ globalExpect(svc).toHaveProperty("category");
79
+ globalExpect(svc).toHaveProperty("ports");
80
+ globalExpect(svc).toHaveProperty("docsUrl");
81
+ globalExpect(svc).toHaveProperty("addedBy");
82
+ }
83
+ });
84
+ it("includes metadata with service count", () => {
85
+ const files = generateStackManifest(makeResolved(["redis", "postgresql"]), baseInput);
86
+ globalExpect(JSON.parse(files["stack-manifest.json"]).metadata.serviceCount).toBe(2);
87
+ });
88
+ it("includes generatedAt timestamp", () => {
89
+ const files = generateStackManifest(makeResolved(["redis"]), baseInput);
90
+ const manifest = JSON.parse(files["stack-manifest.json"]);
91
+ globalExpect(manifest.generatedAt).toBeDefined();
92
+ globalExpect(() => new Date(manifest.generatedAt)).not.toThrow();
93
+ });
94
+ });
95
+ //#endregion
96
+ export {};
97
+
98
+ //# sourceMappingURL=stack-manifest.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-manifest.test.mjs","names":[],"sources":["../../src/generators/stack-manifest.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport type { GenerationInput, ResolverOutput } from \"../types.js\";\nimport { generateStackManifest, type StackManifest } from \"./stack-manifest.js\";\n\nfunction makeResolved(serviceIds: string[]): ResolverOutput {\n\treturn {\n\t\tservices: serviceIds.map((id) => ({\n\t\t\tdefinition: {\n\t\t\t\tid,\n\t\t\t\tname: id.charAt(0).toUpperCase() + id.slice(1),\n\t\t\t\tdescription: `${id} service`,\n\t\t\t\ticon: \"📦\",\n\t\t\t\tcategory: \"test\",\n\t\t\t\timage: `${id}:latest`,\n\t\t\t\timageTag: \"latest\",\n\t\t\t\tports: [{ container: 8080, host: 8080, exposed: true, description: `${id} port` }],\n\t\t\t\tvolumes: [],\n\t\t\t\tenvironment: [],\n\t\t\t\tdependencies: [],\n\t\t\t\tconflicts: [],\n\t\t\t\tskills: [],\n\t\t\t\tmemoryMB: 256,\n\t\t\t\tdocsUrl: `https://docs.example.com/${id}`,\n\t\t\t},\n\t\t\taddedBy: \"user\" as const,\n\t\t})),\n\t\taddedDependencies: [],\n\t\testimatedMemoryMB: 512,\n\t} as unknown as ResolverOutput;\n}\n\nconst baseInput: GenerationInput = {\n\tprojectName: \"test-stack\",\n\tservices: [\"redis\"],\n\tskillPacks: [],\n\tproxy: \"caddy\",\n\tdomain: \"example.com\",\n\tgpu: false,\n\tplatform: \"linux/amd64\",\n\tdeployment: \"local\",\n\tgenerateSecrets: true,\n\topenclawVersion: \"latest\",\n} as unknown as GenerationInput;\n\ndescribe(\"generateStackManifest\", () => {\n\tit(\"returns a single file: stack-manifest.json\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\texpect(Object.keys(files)).toEqual([\"stack-manifest.json\"]);\n\t});\n\n\tit(\"produces valid JSON\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest).toBeDefined();\n\t});\n\n\tit(\"includes format version\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.formatVersion).toBe(\"1\");\n\t});\n\n\tit(\"includes project name from input\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.projectName).toBe(\"test-stack\");\n\t});\n\n\tit(\"includes deployment configuration\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.deployment).toBe(\"local\");\n\t\texpect(manifest.proxy).toBe(\"caddy\");\n\t\texpect(manifest.domain).toBe(\"example.com\");\n\t});\n\n\tit(\"lists all services with correct structure\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\", \"postgresql\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.services).toHaveLength(2);\n\t\tfor (const svc of manifest.services) {\n\t\t\texpect(svc).toHaveProperty(\"id\");\n\t\t\texpect(svc).toHaveProperty(\"name\");\n\t\t\texpect(svc).toHaveProperty(\"category\");\n\t\t\texpect(svc).toHaveProperty(\"ports\");\n\t\t\texpect(svc).toHaveProperty(\"docsUrl\");\n\t\t\texpect(svc).toHaveProperty(\"addedBy\");\n\t\t}\n\t});\n\n\tit(\"includes metadata with service count\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\", \"postgresql\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.metadata.serviceCount).toBe(2);\n\t});\n\n\tit(\"includes generatedAt timestamp\", () => {\n\t\tconst files = generateStackManifest(makeResolved([\"redis\"]), baseInput);\n\t\tconst manifest: StackManifest = JSON.parse(files[\"stack-manifest.json\"]!);\n\t\texpect(manifest.generatedAt).toBeDefined();\n\t\t// Should be ISO 8601\n\t\texpect(() => new Date(manifest.generatedAt)).not.toThrow();\n\t});\n});\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -31,7 +31,6 @@ const require_deployers_index = require("./deployers/index.cjs");
31
31
  const require_logger_logger = require("./logger/logger.cjs");
32
32
  const require_logger_sinks_callback_sink = require("./logger/sinks/callback-sink.cjs");
33
33
  const require_logger_sinks_console_sink = require("./logger/sinks/console-sink.cjs");
34
- const require_logger_sinks_file_sink = require("./logger/sinks/file-sink.cjs");
35
34
  require("./logger/index.cjs");
36
35
  const require_port_scanner = require("./port-scanner.cjs");
37
36
  const require_skill_manifest = require("./skill-manifest-B8znSsym.cjs");
@@ -60,7 +59,6 @@ exports.EnvQuirkFixSchema = require_schema.EnvQuirkFixSchema;
60
59
  exports.EnvQuirkSchema = require_schema.EnvQuirkSchema;
61
60
  exports.EnvVariableSchema = require_schema.EnvVariableSchema;
62
61
  exports.ErrorSchema = require_schema.ErrorSchema;
63
- exports.FileSink = require_logger_sinks_file_sink.FileSink;
64
62
  exports.GenerationInputSchema = require_schema.GenerationInputSchema;
65
63
  exports.GitSourceSchema = require_schema.GitSourceSchema;
66
64
  exports.HealthCheckSchema = require_schema.HealthCheckSchema;
package/dist/index.d.cts CHANGED
@@ -27,7 +27,6 @@ import { generateSkillFiles } from "./generators/skills.cjs";
27
27
  import { StackManifest, StackManifestService, StackManifestSkill, generateStackManifest } from "./generators/stack-manifest.cjs";
28
28
  import { t as CallbackSink } from "./callback-sink-iNThWRnQ.cjs";
29
29
  import { t as ConsoleSink } from "./console-sink-BHQpRyCt.cjs";
30
- import { FileSink, FileSinkOptions } from "./logger/sinks/file-sink.cjs";
31
30
  import { CURRENT_CONFIG_VERSION, migrateConfig, needsMigration } from "./migrations.cjs";
32
31
  import { PortConflict, formatPortConflicts, scanPortConflicts } from "./port-scanner.cjs";
33
32
  import { getAllPresets, getPresetById, presetRegistry } from "./presets/registry.cjs";
@@ -38,4 +37,4 @@ import { SkillManifestEntry, getAllManifestSkills, getManifestSkillById, getMani
38
37
  import { AnalyticsPayload, buildAnalyticsPayload, trackAnalytics } from "./track-analytics.cjs";
39
38
  import { validate } from "./validator.cjs";
40
39
  import { checkCompatibility, getImageReference, getImageTag, pinImageTags } from "./version-manager.cjs";
41
- export { type AddedDependency, AddedDependencySchema, type AddonStackInput, AddonStackInputSchema, type AddonStackResult, AddonStackResultSchema, type AddonStackUpdateInput, AddonStackUpdateInputSchema, type AddonStackUpdateResult, AddonStackUpdateResultSchema, type AgentFramework, type AgentFrameworkDefinition, type AgentFrameworkId, AgentFrameworkSchema, type AiProvider, type AnalyticsPayload, type ApiError, ApiErrorSchema, type BuildContext, BuildContextSchema, CURRENT_CONFIG_VERSION, CallbackSink, type CategoryInfo, type ComposeOptions, ComposeOptionsSchema, type ComposeResult, ConsoleSink, CoolifyDeployer, type Deploy, DeploySchema, type DeployTarget, DeployTargetSchema, type DeploymentTarget, DeploymentTargetSchema, type DeploymentType, DeploymentTypeSchema, DokployDeployer, type EnvQuirk, type EnvQuirkFix, EnvQuirkFixSchema, EnvQuirkSchema, type EnvVarGroup, type EnvVariable, EnvVariableSchema, ErrorSchema, FileSink, type FileSinkOptions, type GeneratedFiles, type GenerationInput, GenerationInputSchema, type GenerationMetadata, type GenerationResult, type GitSource, GitSourceSchema, type GsdRuntime, type HealthCheck, HealthCheckSchema, type LogLevel, type LogSink, type LogSource, type Maturity, MaturitySchema, type NativePlatform, NativePlatformSchema, type NativeRecipe, NativeRecipeSchema, type OpenclawImageVariant, OpenclawImageVariantSchema, type OpenclawInstallMethod, OpenclawInstallMethodSchema, type OperationCategory, type OperationOutcome, type OperationStep, type OperationsLogEntry, OperationsLogger, type OperationsLoggerOptions, type OutputFormat, OutputFormatSchema, type DeployInput as PaasDeployInput, type DeployResult as PaasDeployResult, type DeployStep as PaasDeployStep, type DeployTarget$1 as PaasDeployTarget, type PaasDeployer, type PaasServer, type Platform, PlatformSchema, type PortConflict, type PortMapping, PortMappingSchema, type Preset, PresetSchema, type ProxyRoute, ProxyRouteSchema, type ProxyType, ProxyTypeSchema, type ResolvedService, ResolvedServiceSchema, type ResolverError, type ResolverInput, type ResolverOutput, ResolverOutputSchema, type ResourceLimits, ResourceLimitsSchema, type RestartPolicy, RestartPolicySchema, SERVICE_CATEGORIES, type ServiceCategory, ServiceCategorySchema, type ServiceDefinition, ServiceDefinitionSchema, type SkillBinding, SkillBindingSchema, type SkillManifestEntry, type SkillPack, SkillPackSchema, type SkippedService, SkippedServiceReasonSchema, SkippedServiceSchema, StackConfigError, type StackManifest, type StackManifestService, type StackManifestSkill, StepTracker, type ValidateRequest, ValidateRequestSchema, type ValidateResponse, ValidateResponseSchema, ValidationError, type VolumeMapping, VolumeMappingSchema, type Warning, WarningSchema, YAML_OPTIONS, buildAnalyticsPayload, buildCompanionService, buildPostgresSetup, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateAddonStack, generateCaddyfile, generateCloneScripts, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllFrameworks, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompanionFrameworks, getCompatibleSkillPacks, getDbRequirements, getDeployer, getFrameworkById, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getPrimaryFrameworks, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, quotedStr, registerFramework, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, trackAnalytics, updateAddonStack, validate };
40
+ export { type AddedDependency, AddedDependencySchema, type AddonStackInput, AddonStackInputSchema, type AddonStackResult, AddonStackResultSchema, type AddonStackUpdateInput, AddonStackUpdateInputSchema, type AddonStackUpdateResult, AddonStackUpdateResultSchema, type AgentFramework, type AgentFrameworkDefinition, type AgentFrameworkId, AgentFrameworkSchema, type AiProvider, type AnalyticsPayload, type ApiError, ApiErrorSchema, type BuildContext, BuildContextSchema, CURRENT_CONFIG_VERSION, CallbackSink, type CategoryInfo, type ComposeOptions, ComposeOptionsSchema, type ComposeResult, ConsoleSink, CoolifyDeployer, type Deploy, DeploySchema, type DeployTarget, DeployTargetSchema, type DeploymentTarget, DeploymentTargetSchema, type DeploymentType, DeploymentTypeSchema, DokployDeployer, type EnvQuirk, type EnvQuirkFix, EnvQuirkFixSchema, EnvQuirkSchema, type EnvVarGroup, type EnvVariable, EnvVariableSchema, ErrorSchema, type GeneratedFiles, type GenerationInput, GenerationInputSchema, type GenerationMetadata, type GenerationResult, type GitSource, GitSourceSchema, type GsdRuntime, type HealthCheck, HealthCheckSchema, type LogLevel, type LogSink, type LogSource, type Maturity, MaturitySchema, type NativePlatform, NativePlatformSchema, type NativeRecipe, NativeRecipeSchema, type OpenclawImageVariant, OpenclawImageVariantSchema, type OpenclawInstallMethod, OpenclawInstallMethodSchema, type OperationCategory, type OperationOutcome, type OperationStep, type OperationsLogEntry, OperationsLogger, type OperationsLoggerOptions, type OutputFormat, OutputFormatSchema, type DeployInput as PaasDeployInput, type DeployResult as PaasDeployResult, type DeployStep as PaasDeployStep, type DeployTarget$1 as PaasDeployTarget, type PaasDeployer, type PaasServer, type Platform, PlatformSchema, type PortConflict, type PortMapping, PortMappingSchema, type Preset, PresetSchema, type ProxyRoute, ProxyRouteSchema, type ProxyType, ProxyTypeSchema, type ResolvedService, ResolvedServiceSchema, type ResolverError, type ResolverInput, type ResolverOutput, ResolverOutputSchema, type ResourceLimits, ResourceLimitsSchema, type RestartPolicy, RestartPolicySchema, SERVICE_CATEGORIES, type ServiceCategory, ServiceCategorySchema, type ServiceDefinition, ServiceDefinitionSchema, type SkillBinding, SkillBindingSchema, type SkillManifestEntry, type SkillPack, SkillPackSchema, type SkippedService, SkippedServiceReasonSchema, SkippedServiceSchema, StackConfigError, type StackManifest, type StackManifestService, type StackManifestSkill, StepTracker, type ValidateRequest, ValidateRequestSchema, type ValidateResponse, ValidateResponseSchema, ValidationError, type VolumeMapping, VolumeMappingSchema, type Warning, WarningSchema, YAML_OPTIONS, buildAnalyticsPayload, buildCompanionService, buildPostgresSetup, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateAddonStack, generateCaddyfile, generateCloneScripts, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllFrameworks, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompanionFrameworks, getCompatibleSkillPacks, getDbRequirements, getDeployer, getFrameworkById, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getPrimaryFrameworks, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, quotedStr, registerFramework, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, trackAnalytics, updateAddonStack, validate };
package/dist/index.d.mts CHANGED
@@ -27,7 +27,6 @@ import { generateSkillFiles } from "./generators/skills.mjs";
27
27
  import { StackManifest, StackManifestService, StackManifestSkill, generateStackManifest } from "./generators/stack-manifest.mjs";
28
28
  import { t as CallbackSink } from "./callback-sink-CdMKYayY.mjs";
29
29
  import { t as ConsoleSink } from "./console-sink-bouG_M1K.mjs";
30
- import { FileSink, FileSinkOptions } from "./logger/sinks/file-sink.mjs";
31
30
  import { CURRENT_CONFIG_VERSION, migrateConfig, needsMigration } from "./migrations.mjs";
32
31
  import { PortConflict, formatPortConflicts, scanPortConflicts } from "./port-scanner.mjs";
33
32
  import { getAllPresets, getPresetById, presetRegistry } from "./presets/registry.mjs";
@@ -38,4 +37,4 @@ import { SkillManifestEntry, getAllManifestSkills, getManifestSkillById, getMani
38
37
  import { AnalyticsPayload, buildAnalyticsPayload, trackAnalytics } from "./track-analytics.mjs";
39
38
  import { validate } from "./validator.mjs";
40
39
  import { checkCompatibility, getImageReference, getImageTag, pinImageTags } from "./version-manager.mjs";
41
- export { type AddedDependency, AddedDependencySchema, type AddonStackInput, AddonStackInputSchema, type AddonStackResult, AddonStackResultSchema, type AddonStackUpdateInput, AddonStackUpdateInputSchema, type AddonStackUpdateResult, AddonStackUpdateResultSchema, type AgentFramework, type AgentFrameworkDefinition, type AgentFrameworkId, AgentFrameworkSchema, type AiProvider, type AnalyticsPayload, type ApiError, ApiErrorSchema, type BuildContext, BuildContextSchema, CURRENT_CONFIG_VERSION, CallbackSink, type CategoryInfo, type ComposeOptions, ComposeOptionsSchema, type ComposeResult, ConsoleSink, CoolifyDeployer, type Deploy, DeploySchema, type DeployTarget, DeployTargetSchema, type DeploymentTarget, DeploymentTargetSchema, type DeploymentType, DeploymentTypeSchema, DokployDeployer, type EnvQuirk, type EnvQuirkFix, EnvQuirkFixSchema, EnvQuirkSchema, type EnvVarGroup, type EnvVariable, EnvVariableSchema, ErrorSchema, FileSink, type FileSinkOptions, type GeneratedFiles, type GenerationInput, GenerationInputSchema, type GenerationMetadata, type GenerationResult, type GitSource, GitSourceSchema, type GsdRuntime, type HealthCheck, HealthCheckSchema, type LogLevel, type LogSink, type LogSource, type Maturity, MaturitySchema, type NativePlatform, NativePlatformSchema, type NativeRecipe, NativeRecipeSchema, type OpenclawImageVariant, OpenclawImageVariantSchema, type OpenclawInstallMethod, OpenclawInstallMethodSchema, type OperationCategory, type OperationOutcome, type OperationStep, type OperationsLogEntry, OperationsLogger, type OperationsLoggerOptions, type OutputFormat, OutputFormatSchema, type DeployInput as PaasDeployInput, type DeployResult as PaasDeployResult, type DeployStep as PaasDeployStep, type DeployTarget$1 as PaasDeployTarget, type PaasDeployer, type PaasServer, type Platform, PlatformSchema, type PortConflict, type PortMapping, PortMappingSchema, type Preset, PresetSchema, type ProxyRoute, ProxyRouteSchema, type ProxyType, ProxyTypeSchema, type ResolvedService, ResolvedServiceSchema, type ResolverError, type ResolverInput, type ResolverOutput, ResolverOutputSchema, type ResourceLimits, ResourceLimitsSchema, type RestartPolicy, RestartPolicySchema, SERVICE_CATEGORIES, type ServiceCategory, ServiceCategorySchema, type ServiceDefinition, ServiceDefinitionSchema, type SkillBinding, SkillBindingSchema, type SkillManifestEntry, type SkillPack, SkillPackSchema, type SkippedService, SkippedServiceReasonSchema, SkippedServiceSchema, StackConfigError, type StackManifest, type StackManifestService, type StackManifestSkill, StepTracker, type ValidateRequest, ValidateRequestSchema, type ValidateResponse, ValidateResponseSchema, ValidationError, type VolumeMapping, VolumeMappingSchema, type Warning, WarningSchema, YAML_OPTIONS, buildAnalyticsPayload, buildCompanionService, buildPostgresSetup, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateAddonStack, generateCaddyfile, generateCloneScripts, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllFrameworks, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompanionFrameworks, getCompatibleSkillPacks, getDbRequirements, getDeployer, getFrameworkById, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getPrimaryFrameworks, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, quotedStr, registerFramework, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, trackAnalytics, updateAddonStack, validate };
40
+ export { type AddedDependency, AddedDependencySchema, type AddonStackInput, AddonStackInputSchema, type AddonStackResult, AddonStackResultSchema, type AddonStackUpdateInput, AddonStackUpdateInputSchema, type AddonStackUpdateResult, AddonStackUpdateResultSchema, type AgentFramework, type AgentFrameworkDefinition, type AgentFrameworkId, AgentFrameworkSchema, type AiProvider, type AnalyticsPayload, type ApiError, ApiErrorSchema, type BuildContext, BuildContextSchema, CURRENT_CONFIG_VERSION, CallbackSink, type CategoryInfo, type ComposeOptions, ComposeOptionsSchema, type ComposeResult, ConsoleSink, CoolifyDeployer, type Deploy, DeploySchema, type DeployTarget, DeployTargetSchema, type DeploymentTarget, DeploymentTargetSchema, type DeploymentType, DeploymentTypeSchema, DokployDeployer, type EnvQuirk, type EnvQuirkFix, EnvQuirkFixSchema, EnvQuirkSchema, type EnvVarGroup, type EnvVariable, EnvVariableSchema, ErrorSchema, type GeneratedFiles, type GenerationInput, GenerationInputSchema, type GenerationMetadata, type GenerationResult, type GitSource, GitSourceSchema, type GsdRuntime, type HealthCheck, HealthCheckSchema, type LogLevel, type LogSink, type LogSource, type Maturity, MaturitySchema, type NativePlatform, NativePlatformSchema, type NativeRecipe, NativeRecipeSchema, type OpenclawImageVariant, OpenclawImageVariantSchema, type OpenclawInstallMethod, OpenclawInstallMethodSchema, type OperationCategory, type OperationOutcome, type OperationStep, type OperationsLogEntry, OperationsLogger, type OperationsLoggerOptions, type OutputFormat, OutputFormatSchema, type DeployInput as PaasDeployInput, type DeployResult as PaasDeployResult, type DeployStep as PaasDeployStep, type DeployTarget$1 as PaasDeployTarget, type PaasDeployer, type PaasServer, type Platform, PlatformSchema, type PortConflict, type PortMapping, PortMappingSchema, type Preset, PresetSchema, type ProxyRoute, ProxyRouteSchema, type ProxyType, ProxyTypeSchema, type ResolvedService, ResolvedServiceSchema, type ResolverError, type ResolverInput, type ResolverOutput, ResolverOutputSchema, type ResourceLimits, ResourceLimitsSchema, type RestartPolicy, RestartPolicySchema, SERVICE_CATEGORIES, type ServiceCategory, ServiceCategorySchema, type ServiceDefinition, ServiceDefinitionSchema, type SkillBinding, SkillBindingSchema, type SkillManifestEntry, type SkillPack, SkillPackSchema, type SkippedService, SkippedServiceReasonSchema, SkippedServiceSchema, StackConfigError, type StackManifest, type StackManifestService, type StackManifestSkill, StepTracker, type ValidateRequest, ValidateRequestSchema, type ValidateResponse, ValidateResponseSchema, ValidationError, type VolumeMapping, VolumeMappingSchema, type Warning, WarningSchema, YAML_OPTIONS, buildAnalyticsPayload, buildCompanionService, buildPostgresSetup, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateAddonStack, generateCaddyfile, generateCloneScripts, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllFrameworks, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompanionFrameworks, getCompatibleSkillPacks, getDbRequirements, getDeployer, getFrameworkById, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getPrimaryFrameworks, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, quotedStr, registerFramework, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, trackAnalytics, updateAddonStack, validate };
package/dist/index.mjs CHANGED
@@ -30,11 +30,10 @@ import { deployerRegistry, getAvailableDeployers, getDeployer } from "./deployer
30
30
  import { OperationsLogger, StepTracker } from "./logger/logger.mjs";
31
31
  import { CallbackSink } from "./logger/sinks/callback-sink.mjs";
32
32
  import { ConsoleSink } from "./logger/sinks/console-sink.mjs";
33
- import { FileSink } from "./logger/sinks/file-sink.mjs";
34
33
  import "./logger/index.mjs";
35
34
  import { formatPortConflicts, scanPortConflicts } from "./port-scanner.mjs";
36
35
  import { n as getManifestSkillById, r as getManifestSkillCount, t as getAllManifestSkills } from "./skill-manifest-6XhrhWsG.mjs";
37
36
  import { buildAnalyticsPayload, trackAnalytics } from "./track-analytics.mjs";
38
37
  import { SERVICE_CATEGORIES } from "./types.mjs";
39
38
  import { checkCompatibility, getImageReference, getImageTag, pinImageTags } from "./version-manager.mjs";
40
- export { AddedDependencySchema, AddonStackInputSchema, AddonStackResultSchema, AddonStackUpdateInputSchema, AddonStackUpdateResultSchema, AgentFrameworkSchema, ApiErrorSchema, BuildContextSchema, CURRENT_CONFIG_VERSION, CallbackSink, ComposeOptionsSchema, ConsoleSink, CoolifyDeployer, DeploySchema, DeployTargetSchema, DeploymentTargetSchema, DeploymentTypeSchema, DokployDeployer, EnvQuirkFixSchema, EnvQuirkSchema, EnvVariableSchema, ErrorSchema, FileSink, GenerationInputSchema, GitSourceSchema, HealthCheckSchema, MaturitySchema, NativePlatformSchema, NativeRecipeSchema, OpenclawImageVariantSchema, OpenclawInstallMethodSchema, OperationsLogger, OutputFormatSchema, PlatformSchema, PortMappingSchema, PresetSchema, ProxyRouteSchema, ProxyTypeSchema, ResolvedServiceSchema, ResolverOutputSchema, ResourceLimitsSchema, RestartPolicySchema, SERVICE_CATEGORIES, ServiceCategorySchema, ServiceDefinitionSchema, SkillBindingSchema, SkillPackSchema, SkippedServiceReasonSchema, SkippedServiceSchema, StackConfigError, StepTracker, ValidateRequestSchema, ValidateResponseSchema, ValidationError, VolumeMappingSchema, WarningSchema, YAML_OPTIONS, buildAnalyticsPayload, buildCompanionService, buildPostgresSetup, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateAddonStack, generateCaddyfile, generateCloneScripts, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllFrameworks, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompanionFrameworks, getCompatibleSkillPacks, getDbRequirements, getDeployer, getFrameworkById, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getPrimaryFrameworks, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, quotedStr, registerFramework, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, trackAnalytics, updateAddonStack, validate };
39
+ export { AddedDependencySchema, AddonStackInputSchema, AddonStackResultSchema, AddonStackUpdateInputSchema, AddonStackUpdateResultSchema, AgentFrameworkSchema, ApiErrorSchema, BuildContextSchema, CURRENT_CONFIG_VERSION, CallbackSink, ComposeOptionsSchema, ConsoleSink, CoolifyDeployer, DeploySchema, DeployTargetSchema, DeploymentTargetSchema, DeploymentTypeSchema, DokployDeployer, EnvQuirkFixSchema, EnvQuirkSchema, EnvVariableSchema, ErrorSchema, GenerationInputSchema, GitSourceSchema, HealthCheckSchema, MaturitySchema, NativePlatformSchema, NativeRecipeSchema, OpenclawImageVariantSchema, OpenclawInstallMethodSchema, OperationsLogger, OutputFormatSchema, PlatformSchema, PortMappingSchema, PresetSchema, ProxyRouteSchema, ProxyTypeSchema, ResolvedServiceSchema, ResolverOutputSchema, ResourceLimitsSchema, RestartPolicySchema, SERVICE_CATEGORIES, ServiceCategorySchema, ServiceDefinitionSchema, SkillBindingSchema, SkillPackSchema, SkippedServiceReasonSchema, SkippedServiceSchema, StackConfigError, StepTracker, ValidateRequestSchema, ValidateResponseSchema, ValidationError, VolumeMappingSchema, WarningSchema, YAML_OPTIONS, buildAnalyticsPayload, buildCompanionService, buildPostgresSetup, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateAddonStack, generateCaddyfile, generateCloneScripts, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllFrameworks, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompanionFrameworks, getCompatibleSkillPacks, getDbRequirements, getDeployer, getFrameworkById, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getPrimaryFrameworks, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, quotedStr, registerFramework, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, trackAnalytics, updateAddonStack, validate };
@@ -2,9 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_logger_logger = require("./logger.cjs");
3
3
  const require_logger_sinks_callback_sink = require("./sinks/callback-sink.cjs");
4
4
  const require_logger_sinks_console_sink = require("./sinks/console-sink.cjs");
5
- const require_logger_sinks_file_sink = require("./sinks/file-sink.cjs");
6
5
  exports.CallbackSink = require_logger_sinks_callback_sink.CallbackSink;
7
6
  exports.ConsoleSink = require_logger_sinks_console_sink.ConsoleSink;
8
- exports.FileSink = require_logger_sinks_file_sink.FileSink;
9
7
  exports.OperationsLogger = require_logger_logger.OperationsLogger;
10
8
  exports.StepTracker = require_logger_logger.StepTracker;
@@ -2,5 +2,4 @@ import { a as OperationOutcome, c as OperationsLoggerOptions, i as OperationCate
2
2
  import { n as StepTracker, t as OperationsLogger } from "../logger-DDfwai-A.cjs";
3
3
  import { t as CallbackSink } from "../callback-sink-iNThWRnQ.cjs";
4
4
  import { t as ConsoleSink } from "../console-sink-BHQpRyCt.cjs";
5
- import { FileSink } from "./sinks/file-sink.cjs";
6
- export { CallbackSink, ConsoleSink, FileSink, type LogLevel, type LogSink, type LogSource, type OperationCategory, type OperationOutcome, type OperationStep, type OperationsLogEntry, OperationsLogger, type OperationsLoggerOptions, StepTracker };
5
+ export { CallbackSink, ConsoleSink, type LogLevel, type LogSink, type LogSource, type OperationCategory, type OperationOutcome, type OperationStep, type OperationsLogEntry, OperationsLogger, type OperationsLoggerOptions, StepTracker };
@@ -2,5 +2,4 @@ import { a as OperationOutcome, c as OperationsLoggerOptions, i as OperationCate
2
2
  import { n as StepTracker, t as OperationsLogger } from "../logger-CZ0Qnyiu.mjs";
3
3
  import { t as CallbackSink } from "../callback-sink-CdMKYayY.mjs";
4
4
  import { t as ConsoleSink } from "../console-sink-bouG_M1K.mjs";
5
- import { FileSink } from "./sinks/file-sink.mjs";
6
- export { CallbackSink, ConsoleSink, FileSink, type LogLevel, type LogSink, type LogSource, type OperationCategory, type OperationOutcome, type OperationStep, type OperationsLogEntry, OperationsLogger, type OperationsLoggerOptions, StepTracker };
5
+ export { CallbackSink, ConsoleSink, type LogLevel, type LogSink, type LogSource, type OperationCategory, type OperationOutcome, type OperationStep, type OperationsLogEntry, OperationsLogger, type OperationsLoggerOptions, StepTracker };