@better-openclaw/core 1.0.8 → 1.0.9

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/dist/bare-metal-partition.d.mts.map +1 -1
  2. package/dist/bare-metal-partition.mjs +1 -0
  3. package/dist/bare-metal-partition.mjs.map +1 -1
  4. package/dist/composer.d.mts.map +1 -1
  5. package/dist/composer.mjs +11 -1
  6. package/dist/composer.mjs.map +1 -1
  7. package/dist/errors.d.mts +17 -0
  8. package/dist/errors.d.mts.map +1 -0
  9. package/dist/errors.mjs +24 -0
  10. package/dist/errors.mjs.map +1 -0
  11. package/dist/generate.d.mts +4 -3
  12. package/dist/generate.d.mts.map +1 -1
  13. package/dist/generate.mjs +13 -5
  14. package/dist/generate.mjs.map +1 -1
  15. package/dist/generators/traefik.d.mts +19 -0
  16. package/dist/generators/traefik.d.mts.map +1 -0
  17. package/dist/generators/traefik.mjs +86 -0
  18. package/dist/generators/traefik.mjs.map +1 -0
  19. package/dist/generators/traefik.test.d.mts +1 -0
  20. package/dist/generators/traefik.test.mjs +69 -0
  21. package/dist/generators/traefik.test.mjs.map +1 -0
  22. package/dist/index.d.mts +4 -2
  23. package/dist/index.mjs +4 -2
  24. package/dist/migrations.d.mts +14 -0
  25. package/dist/migrations.d.mts.map +1 -0
  26. package/dist/migrations.mjs +33 -0
  27. package/dist/migrations.mjs.map +1 -0
  28. package/dist/migrations.test.d.mts +1 -0
  29. package/dist/migrations.test.mjs +42 -0
  30. package/dist/migrations.test.mjs.map +1 -0
  31. package/dist/resolver.d.mts +6 -1
  32. package/dist/resolver.d.mts.map +1 -1
  33. package/dist/resolver.mjs +21 -3
  34. package/dist/resolver.mjs.map +1 -1
  35. package/dist/schema.d.mts +1 -0
  36. package/dist/schema.d.mts.map +1 -1
  37. package/dist/schema.mjs +1 -0
  38. package/dist/schema.mjs.map +1 -1
  39. package/dist/services/definitions/caddy.mjs +20 -1
  40. package/dist/services/definitions/caddy.mjs.map +1 -1
  41. package/dist/services/definitions/cal-com.d.mts +7 -0
  42. package/dist/services/definitions/cal-com.d.mts.map +1 -0
  43. package/dist/services/definitions/cal-com.mjs +88 -0
  44. package/dist/services/definitions/cal-com.mjs.map +1 -0
  45. package/dist/services/definitions/grafana.mjs +13 -1
  46. package/dist/services/definitions/grafana.mjs.map +1 -1
  47. package/dist/services/definitions/index.d.mts +4 -1
  48. package/dist/services/definitions/index.d.mts.map +1 -1
  49. package/dist/services/definitions/index.mjs +8 -2
  50. package/dist/services/definitions/index.mjs.map +1 -1
  51. package/dist/services/definitions/neo4j.d.mts +7 -0
  52. package/dist/services/definitions/neo4j.d.mts.map +1 -0
  53. package/dist/services/definitions/neo4j.mjs +91 -0
  54. package/dist/services/definitions/neo4j.mjs.map +1 -0
  55. package/dist/services/definitions/traefik.mjs +0 -1
  56. package/dist/services/definitions/traefik.mjs.map +1 -1
  57. package/dist/services/definitions/xyops.d.mts +7 -0
  58. package/dist/services/definitions/xyops.d.mts.map +1 -0
  59. package/dist/services/definitions/xyops.mjs +86 -0
  60. package/dist/services/definitions/xyops.mjs.map +1 -0
  61. package/dist/types.d.mts +8 -1
  62. package/dist/types.d.mts.map +1 -1
  63. package/dist/types.mjs.map +1 -1
  64. package/dist/validator.mjs +11 -0
  65. package/dist/validator.mjs.map +1 -1
  66. package/dist/version-manager.d.mts +1 -1
  67. package/dist/version-manager.d.mts.map +1 -1
  68. package/dist/version-manager.mjs +11 -5
  69. package/dist/version-manager.mjs.map +1 -1
  70. package/dist/version-manager.test.d.mts +1 -0
  71. package/dist/version-manager.test.mjs +102 -0
  72. package/dist/version-manager.test.mjs.map +1 -0
  73. package/package.json +1 -1
  74. package/src/__snapshots__/composer.snapshot.test.ts.snap +15 -1
  75. package/src/bare-metal-partition.ts +1 -0
  76. package/src/composer.ts +22 -1
  77. package/src/errors.ts +23 -0
  78. package/src/generate.ts +22 -4
  79. package/src/generators/traefik.test.ts +97 -0
  80. package/src/generators/traefik.ts +104 -0
  81. package/src/index.ts +7 -1
  82. package/src/migrations.test.ts +36 -0
  83. package/src/migrations.ts +49 -0
  84. package/src/resolver.ts +37 -3
  85. package/src/schema.ts +1 -0
  86. package/src/services/definitions/caddy.ts +23 -1
  87. package/src/services/definitions/cal-com.ts +91 -0
  88. package/src/services/definitions/grafana.ts +16 -1
  89. package/src/services/definitions/index.ts +9 -0
  90. package/src/services/definitions/neo4j.ts +96 -0
  91. package/src/services/definitions/traefik.ts +0 -2
  92. package/src/services/definitions/xyops.ts +94 -0
  93. package/src/types.ts +5 -1
  94. package/src/validator.ts +16 -0
  95. package/src/version-manager.test.ts +134 -0
  96. package/src/version-manager.ts +12 -5
@@ -1 +1 @@
1
- {"version":3,"file":"grafana.mjs","names":[],"sources":["../../../src/services/definitions/grafana.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const grafanaDefinition: ServiceDefinition = {\n\tid: \"grafana\",\n\tname: \"Grafana\",\n\tdescription:\n\t\t\"Open-source analytics and interactive visualization platform for metrics, logs, and traces with rich dashboards and alerting.\",\n\tcategory: \"monitoring\",\n\ticon: \"📊\",\n\n\timage: \"grafana/grafana\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3150,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"Grafana web interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"grafana-data\",\n\t\t\tcontainerPath: \"/var/lib/grafana\",\n\t\t\tdescription: \"Persistent Grafana dashboards, plugins, and data\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"GF_SECURITY_ADMIN_USER\",\n\t\t\tdefaultValue: \"admin\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Grafana admin username\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"GF_SECURITY_ADMIN_PASSWORD\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Grafana admin password\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:3000/api/health || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"15s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://grafana.com/docs/grafana/latest/\",\n\ttags: [\"dashboards\", \"visualization\", \"metrics\", \"monitoring\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"prometheus\"],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,oBAAuC;CACnD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAc;EAAiB;EAAW;EAAa;CAC9D,UAAU;CAEV,UAAU,CAAC,aAAa;CACxB,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
1
+ {"version":3,"file":"grafana.mjs","names":[],"sources":["../../../src/services/definitions/grafana.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const grafanaDefinition: ServiceDefinition = {\n\tid: \"grafana\",\n\tname: \"Grafana\",\n\tdescription:\n\t\t\"Open-source analytics and interactive visualization platform for metrics, logs, and traces with rich dashboards and alerting.\",\n\tcategory: \"monitoring\",\n\ticon: \"📊\",\n\n\timage: \"grafana/grafana\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3150,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"Grafana web interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"grafana-data\",\n\t\t\tcontainerPath: \"/var/lib/grafana\",\n\t\t\tdescription: \"Persistent Grafana dashboards, plugins, and data\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"GF_SECURITY_ADMIN_USER\",\n\t\t\tdefaultValue: \"admin\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Grafana admin username\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"GF_SECURITY_ADMIN_PASSWORD\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Grafana admin password\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:3000/api/health || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"15s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"GRAFANA_HOST\",\n\t\t\tdefaultValue: \"grafana\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Grafana hostname\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"GRAFANA_PORT\",\n\t\t\tdefaultValue: \"3000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Grafana internal port\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://grafana.com/docs/grafana/latest/\",\n\ttags: [\"dashboards\", \"visualization\", \"metrics\", \"monitoring\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"prometheus\"],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,oBAAuC;CACnD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,CAChB;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CAED,SAAS;CACT,MAAM;EAAC;EAAc;EAAiB;EAAW;EAAa;CAC9D,UAAU;CAEV,UAAU,CAAC,aAAa;CACxB,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
@@ -4,6 +4,7 @@ import { appflowyDefinition } from "./appflowy.mjs";
4
4
  import { beszelDefinition } from "./beszel.mjs";
5
5
  import { browserlessDefinition } from "./browserless.mjs";
6
6
  import { caddyDefinition } from "./caddy.mjs";
7
+ import { calComDefinition } from "./cal-com.mjs";
7
8
  import { chromadbDefinition } from "./chromadb.mjs";
8
9
  import { claudeCodeDefinition } from "./claude-code.mjs";
9
10
  import { codeServerDefinition } from "./code-server.mjs";
@@ -40,6 +41,7 @@ import { minioDefinition } from "./minio.mjs";
40
41
  import { mixpostDefinition } from "./mixpost.mjs";
41
42
  import { motionCanvasDefinition } from "./motion-canvas.mjs";
42
43
  import { n8nDefinition } from "./n8n.mjs";
44
+ import { neo4jDefinition } from "./neo4j.mjs";
43
45
  import { nocodbDefinition } from "./nocodb.mjs";
44
46
  import { ntfyDefinition } from "./ntfy.mjs";
45
47
  import { ollamaDefinition } from "./ollama.mjs";
@@ -71,9 +73,10 @@ import { valkeyDefinition } from "./valkey.mjs";
71
73
  import { watchtowerDefinition } from "./watchtower.mjs";
72
74
  import { weaviateDefinition } from "./weaviate.mjs";
73
75
  import { whisperDefinition } from "./whisper.mjs";
76
+ import { xyopsDefinition } from "./xyops.mjs";
74
77
 
75
78
  //#region src/services/definitions/index.d.ts
76
79
  declare const allServiceDefinitions: ServiceDefinition[];
77
80
  //#endregion
78
- export { allServiceDefinitions, anythingLlmDefinition, appflowyDefinition, beszelDefinition, browserlessDefinition, caddyDefinition, chromadbDefinition, claudeCodeDefinition, codeServerDefinition, codexDefinition, comfyuiDefinition, convexDashboardDefinition, convexDefinition, coolifyDefinition, desktopEnvironmentDefinition, difyDefinition, docsgptDefinition, dokployDefinition, dozzleDefinition, ffmpegDefinition, flowiseDefinition, geminiCliDefinition, giteaDefinition, gotifyDefinition, grafanaDefinition, kimiDefinition, lasuiteMeetAgentsDefinition, lasuiteMeetBackendDefinition, lasuiteMeetFrontendDefinition, librechatDefinition, lightpandaDefinition, litellmDefinition, livekitDefinition, matomoDefinition, matrixSynapseDefinition, mattermostDefinition, meilisearchDefinition, minioDefinition, missionControlDefinition, mixpostDefinition, motionCanvasDefinition, n8nDefinition, nocodbDefinition, ntfyDefinition, ollamaDefinition, openWebuiDefinition, opencodeDefinition, openpanelDefinition, outlineDefinition, paperlessNgxDefinition, playwrightServerDefinition, portainerDefinition, postgresqlDefinition, postizDefinition, prometheusDefinition, qdrantDefinition, redisDefinition, remotionDefinition, rocketchatDefinition, searxngDefinition, stableDiffusionDefinition, steelBrowserDefinition, streamGatewayDefinition, tailscaleDefinition, temporalDefinition, traefikDefinition, umamiDefinition, uptimeKumaDefinition, usesendDefinition, valkeyDefinition, watchtowerDefinition, weaviateDefinition, whisperDefinition };
81
+ export { allServiceDefinitions, anythingLlmDefinition, appflowyDefinition, beszelDefinition, browserlessDefinition, caddyDefinition, calComDefinition, chromadbDefinition, claudeCodeDefinition, codeServerDefinition, codexDefinition, comfyuiDefinition, convexDashboardDefinition, convexDefinition, coolifyDefinition, desktopEnvironmentDefinition, difyDefinition, docsgptDefinition, dokployDefinition, dozzleDefinition, ffmpegDefinition, flowiseDefinition, geminiCliDefinition, giteaDefinition, gotifyDefinition, grafanaDefinition, kimiDefinition, lasuiteMeetAgentsDefinition, lasuiteMeetBackendDefinition, lasuiteMeetFrontendDefinition, librechatDefinition, lightpandaDefinition, litellmDefinition, livekitDefinition, matomoDefinition, matrixSynapseDefinition, mattermostDefinition, meilisearchDefinition, minioDefinition, missionControlDefinition, mixpostDefinition, motionCanvasDefinition, n8nDefinition, neo4jDefinition, nocodbDefinition, ntfyDefinition, ollamaDefinition, openWebuiDefinition, opencodeDefinition, openpanelDefinition, outlineDefinition, paperlessNgxDefinition, playwrightServerDefinition, portainerDefinition, postgresqlDefinition, postizDefinition, prometheusDefinition, qdrantDefinition, redisDefinition, remotionDefinition, rocketchatDefinition, searxngDefinition, stableDiffusionDefinition, steelBrowserDefinition, streamGatewayDefinition, tailscaleDefinition, temporalDefinition, traefikDefinition, umamiDefinition, uptimeKumaDefinition, usesendDefinition, valkeyDefinition, watchtowerDefinition, weaviateDefinition, whisperDefinition, xyopsDefinition };
79
82
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/definitions/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmJa,qBAAA,EAAuB,iBAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/definitions/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyJa,qBAAA,EAAuB,iBAAA"}
@@ -3,6 +3,7 @@ import { appflowyDefinition } from "./appflowy.mjs";
3
3
  import { beszelDefinition } from "./beszel.mjs";
4
4
  import { browserlessDefinition } from "./browserless.mjs";
5
5
  import { caddyDefinition } from "./caddy.mjs";
6
+ import { calComDefinition } from "./cal-com.mjs";
6
7
  import { chromadbDefinition } from "./chromadb.mjs";
7
8
  import { claudeCodeDefinition } from "./claude-code.mjs";
8
9
  import { codeServerDefinition } from "./code-server.mjs";
@@ -39,6 +40,7 @@ import { minioDefinition } from "./minio.mjs";
39
40
  import { mixpostDefinition } from "./mixpost.mjs";
40
41
  import { motionCanvasDefinition } from "./motion-canvas.mjs";
41
42
  import { n8nDefinition } from "./n8n.mjs";
43
+ import { neo4jDefinition } from "./neo4j.mjs";
42
44
  import { nocodbDefinition } from "./nocodb.mjs";
43
45
  import { ntfyDefinition } from "./ntfy.mjs";
44
46
  import { ollamaDefinition } from "./ollama.mjs";
@@ -70,6 +72,7 @@ import { valkeyDefinition } from "./valkey.mjs";
70
72
  import { watchtowerDefinition } from "./watchtower.mjs";
71
73
  import { weaviateDefinition } from "./weaviate.mjs";
72
74
  import { whisperDefinition } from "./whisper.mjs";
75
+ import { xyopsDefinition } from "./xyops.mjs";
73
76
 
74
77
  //#region src/services/definitions/index.ts
75
78
  const allServiceDefinitions = [
@@ -144,9 +147,12 @@ const allServiceDefinitions = [
144
147
  lasuiteMeetFrontendDefinition,
145
148
  lasuiteMeetAgentsDefinition,
146
149
  desktopEnvironmentDefinition,
147
- streamGatewayDefinition
150
+ streamGatewayDefinition,
151
+ neo4jDefinition,
152
+ calComDefinition,
153
+ xyopsDefinition
148
154
  ];
149
155
 
150
156
  //#endregion
151
- export { allServiceDefinitions, anythingLlmDefinition, appflowyDefinition, beszelDefinition, browserlessDefinition, caddyDefinition, chromadbDefinition, claudeCodeDefinition, codeServerDefinition, codexDefinition, comfyuiDefinition, convexDashboardDefinition, convexDefinition, coolifyDefinition, desktopEnvironmentDefinition, difyDefinition, docsgptDefinition, dokployDefinition, dozzleDefinition, ffmpegDefinition, flowiseDefinition, geminiCliDefinition, giteaDefinition, gotifyDefinition, grafanaDefinition, kimiDefinition, lasuiteMeetAgentsDefinition, lasuiteMeetBackendDefinition, lasuiteMeetFrontendDefinition, librechatDefinition, lightpandaDefinition, litellmDefinition, livekitDefinition, matomoDefinition, matrixSynapseDefinition, mattermostDefinition, meilisearchDefinition, minioDefinition, missionControlDefinition, mixpostDefinition, motionCanvasDefinition, n8nDefinition, nocodbDefinition, ntfyDefinition, ollamaDefinition, openWebuiDefinition, opencodeDefinition, openpanelDefinition, outlineDefinition, paperlessNgxDefinition, playwrightServerDefinition, portainerDefinition, postgresqlDefinition, postizDefinition, prometheusDefinition, qdrantDefinition, redisDefinition, remotionDefinition, rocketchatDefinition, searxngDefinition, stableDiffusionDefinition, steelBrowserDefinition, streamGatewayDefinition, tailscaleDefinition, temporalDefinition, traefikDefinition, umamiDefinition, uptimeKumaDefinition, usesendDefinition, valkeyDefinition, watchtowerDefinition, weaviateDefinition, whisperDefinition };
157
+ export { allServiceDefinitions, anythingLlmDefinition, appflowyDefinition, beszelDefinition, browserlessDefinition, caddyDefinition, calComDefinition, chromadbDefinition, claudeCodeDefinition, codeServerDefinition, codexDefinition, comfyuiDefinition, convexDashboardDefinition, convexDefinition, coolifyDefinition, desktopEnvironmentDefinition, difyDefinition, docsgptDefinition, dokployDefinition, dozzleDefinition, ffmpegDefinition, flowiseDefinition, geminiCliDefinition, giteaDefinition, gotifyDefinition, grafanaDefinition, kimiDefinition, lasuiteMeetAgentsDefinition, lasuiteMeetBackendDefinition, lasuiteMeetFrontendDefinition, librechatDefinition, lightpandaDefinition, litellmDefinition, livekitDefinition, matomoDefinition, matrixSynapseDefinition, mattermostDefinition, meilisearchDefinition, minioDefinition, missionControlDefinition, mixpostDefinition, motionCanvasDefinition, n8nDefinition, neo4jDefinition, nocodbDefinition, ntfyDefinition, ollamaDefinition, openWebuiDefinition, opencodeDefinition, openpanelDefinition, outlineDefinition, paperlessNgxDefinition, playwrightServerDefinition, portainerDefinition, postgresqlDefinition, postizDefinition, prometheusDefinition, qdrantDefinition, redisDefinition, remotionDefinition, rocketchatDefinition, searxngDefinition, stableDiffusionDefinition, steelBrowserDefinition, streamGatewayDefinition, tailscaleDefinition, temporalDefinition, traefikDefinition, umamiDefinition, uptimeKumaDefinition, usesendDefinition, valkeyDefinition, watchtowerDefinition, weaviateDefinition, whisperDefinition, xyopsDefinition };
152
158
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/definitions/index.ts"],"sourcesContent":["export { anythingLlmDefinition } from \"./anything-llm.js\";\nexport { appflowyDefinition } from \"./appflowy.js\";\nexport { beszelDefinition } from \"./beszel.js\";\nexport { browserlessDefinition } from \"./browserless.js\";\nexport { caddyDefinition } from \"./caddy.js\";\nexport { chromadbDefinition } from \"./chromadb.js\";\nexport { claudeCodeDefinition } from \"./claude-code.js\";\nexport { codeServerDefinition } from \"./code-server.js\";\nexport { comfyuiDefinition } from \"./comfyui.js\";\nexport { convexDefinition } from \"./convex.js\";\nexport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nexport { codexDefinition } from \"./codex.js\";\nexport { coolifyDefinition } from \"./coolify.js\";\nexport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nexport { difyDefinition } from \"./dify.js\";\nexport { docsgptDefinition } from \"./docsgpt.js\";\nexport { dokployDefinition } from \"./dokploy.js\";\nexport { dozzleDefinition } from \"./dozzle.js\";\nexport { ffmpegDefinition } from \"./ffmpeg.js\";\nexport { flowiseDefinition } from \"./flowise.js\";\nexport { geminiCliDefinition } from \"./gemini-cli.js\";\nexport { giteaDefinition } from \"./gitea.js\";\nexport { gotifyDefinition } from \"./gotify.js\";\nexport { grafanaDefinition } from \"./grafana.js\";\nexport { kimiDefinition } from \"./kimi.js\";\nexport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nexport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nexport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nexport { librechatDefinition } from \"./librechat.js\";\nexport { lightpandaDefinition } from \"./lightpanda.js\";\nexport { litellmDefinition } from \"./litellm.js\";\nexport { livekitDefinition } from \"./livekit.js\";\nexport { matomoDefinition } from \"./matomo.js\";\nexport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nexport { mattermostDefinition } from \"./mattermost.js\";\nexport { meilisearchDefinition } from \"./meilisearch.js\";\nexport { missionControlDefinition } from \"./mission-control.js\";\nexport { minioDefinition } from \"./minio.js\";\nexport { mixpostDefinition } from \"./mixpost.js\";\nexport { motionCanvasDefinition } from \"./motion-canvas.js\";\nexport { n8nDefinition } from \"./n8n.js\";\nexport { nocodbDefinition } from \"./nocodb.js\";\nexport { ntfyDefinition } from \"./ntfy.js\";\nexport { ollamaDefinition } from \"./ollama.js\";\nexport { openWebuiDefinition } from \"./open-webui.js\";\nexport { opencodeDefinition } from \"./opencode.js\";\nexport { openpanelDefinition } from \"./openpanel.js\";\nexport { outlineDefinition } from \"./outline.js\";\nexport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nexport { playwrightServerDefinition } from \"./playwright-server.js\";\nexport { portainerDefinition } from \"./portainer.js\";\nexport { postgresqlDefinition } from \"./postgresql.js\";\nexport { postizDefinition } from \"./postiz.js\";\nexport { prometheusDefinition } from \"./prometheus.js\";\nexport { qdrantDefinition } from \"./qdrant.js\";\nexport { redisDefinition } from \"./redis.js\";\nexport { remotionDefinition } from \"./remotion.js\";\nexport { rocketchatDefinition } from \"./rocketchat.js\";\nexport { searxngDefinition } from \"./searxng.js\";\nexport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nexport { steelBrowserDefinition } from \"./steel-browser.js\";\nexport { streamGatewayDefinition } from \"./stream-gateway.js\";\nexport { tailscaleDefinition } from \"./tailscale.js\";\nexport { temporalDefinition } from \"./temporal.js\";\nexport { traefikDefinition } from \"./traefik.js\";\nexport { umamiDefinition } from \"./umami.js\";\nexport { usesendDefinition } from \"./usesend.js\";\nexport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nexport { valkeyDefinition } from \"./valkey.js\";\nexport { watchtowerDefinition } from \"./watchtower.js\";\nexport { weaviateDefinition } from \"./weaviate.js\";\nexport { whisperDefinition } from \"./whisper.js\";\n\nimport type { ServiceDefinition } from \"../../types.js\";\nimport { anythingLlmDefinition } from \"./anything-llm.js\";\nimport { appflowyDefinition } from \"./appflowy.js\";\nimport { beszelDefinition } from \"./beszel.js\";\nimport { browserlessDefinition } from \"./browserless.js\";\nimport { caddyDefinition } from \"./caddy.js\";\nimport { chromadbDefinition } from \"./chromadb.js\";\nimport { claudeCodeDefinition } from \"./claude-code.js\";\nimport { codeServerDefinition } from \"./code-server.js\";\nimport { comfyuiDefinition } from \"./comfyui.js\";\nimport { convexDefinition } from \"./convex.js\";\nimport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nimport { codexDefinition } from \"./codex.js\";\nimport { coolifyDefinition } from \"./coolify.js\";\nimport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nimport { difyDefinition } from \"./dify.js\";\nimport { docsgptDefinition } from \"./docsgpt.js\";\nimport { dokployDefinition } from \"./dokploy.js\";\nimport { dozzleDefinition } from \"./dozzle.js\";\nimport { ffmpegDefinition } from \"./ffmpeg.js\";\nimport { flowiseDefinition } from \"./flowise.js\";\nimport { geminiCliDefinition } from \"./gemini-cli.js\";\nimport { giteaDefinition } from \"./gitea.js\";\nimport { gotifyDefinition } from \"./gotify.js\";\nimport { grafanaDefinition } from \"./grafana.js\";\nimport { kimiDefinition } from \"./kimi.js\";\nimport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nimport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nimport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nimport { librechatDefinition } from \"./librechat.js\";\nimport { lightpandaDefinition } from \"./lightpanda.js\";\nimport { litellmDefinition } from \"./litellm.js\";\nimport { livekitDefinition } from \"./livekit.js\";\nimport { matomoDefinition } from \"./matomo.js\";\nimport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nimport { mattermostDefinition } from \"./mattermost.js\";\nimport { meilisearchDefinition } from \"./meilisearch.js\";\nimport { missionControlDefinition } from \"./mission-control.js\";\nimport { minioDefinition } from \"./minio.js\";\nimport { mixpostDefinition } from \"./mixpost.js\";\nimport { motionCanvasDefinition } from \"./motion-canvas.js\";\nimport { n8nDefinition } from \"./n8n.js\";\nimport { nocodbDefinition } from \"./nocodb.js\";\nimport { ntfyDefinition } from \"./ntfy.js\";\nimport { ollamaDefinition } from \"./ollama.js\";\nimport { openWebuiDefinition } from \"./open-webui.js\";\nimport { opencodeDefinition } from \"./opencode.js\";\nimport { openpanelDefinition } from \"./openpanel.js\";\nimport { outlineDefinition } from \"./outline.js\";\nimport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nimport { playwrightServerDefinition } from \"./playwright-server.js\";\nimport { portainerDefinition } from \"./portainer.js\";\nimport { postgresqlDefinition } from \"./postgresql.js\";\nimport { postizDefinition } from \"./postiz.js\";\nimport { prometheusDefinition } from \"./prometheus.js\";\nimport { qdrantDefinition } from \"./qdrant.js\";\nimport { redisDefinition } from \"./redis.js\";\nimport { remotionDefinition } from \"./remotion.js\";\nimport { rocketchatDefinition } from \"./rocketchat.js\";\nimport { searxngDefinition } from \"./searxng.js\";\nimport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nimport { steelBrowserDefinition } from \"./steel-browser.js\";\nimport { streamGatewayDefinition } from \"./stream-gateway.js\";\nimport { tailscaleDefinition } from \"./tailscale.js\";\nimport { temporalDefinition } from \"./temporal.js\";\nimport { traefikDefinition } from \"./traefik.js\";\nimport { umamiDefinition } from \"./umami.js\";\nimport { usesendDefinition } from \"./usesend.js\";\nimport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nimport { valkeyDefinition } from \"./valkey.js\";\nimport { watchtowerDefinition } from \"./watchtower.js\";\nimport { weaviateDefinition } from \"./weaviate.js\";\nimport { whisperDefinition } from \"./whisper.js\";\n\nexport const allServiceDefinitions: ServiceDefinition[] = [\n\tredisDefinition,\n\tqdrantDefinition,\n\tn8nDefinition,\n\tffmpegDefinition,\n\tminioDefinition,\n\tpostgresqlDefinition,\n\tcaddyDefinition,\n\ttraefikDefinition,\n\tuptimeKumaDefinition,\n\tgrafanaDefinition,\n\tprometheusDefinition,\n\tbrowserlessDefinition,\n\tsearxngDefinition,\n\tmeilisearchDefinition,\n\tollamaDefinition,\n\twhisperDefinition,\n\tchromadbDefinition,\n\tweaviateDefinition,\n\tvalkeyDefinition,\n\tgotifyDefinition,\n\tntfyDefinition,\n\tremotionDefinition,\n\tmotionCanvasDefinition,\n\ttemporalDefinition,\n\toutlineDefinition,\n\tdocsgptDefinition,\n\tpaperlessNgxDefinition,\n\tnocodbDefinition,\n\tappflowyDefinition,\n\tmatrixSynapseDefinition,\n\trocketchatDefinition,\n\tmattermostDefinition,\n\tstableDiffusionDefinition,\n\tcomfyuiDefinition,\n\tplaywrightServerDefinition,\n\topenWebuiDefinition,\n\tlibrechatDefinition,\n\tanythingLlmDefinition,\n\tdifyDefinition,\n\tflowiseDefinition,\n\tlitellmDefinition,\n\tgiteaDefinition,\n\tcodeServerDefinition,\n\tportainerDefinition,\n\twatchtowerDefinition,\n\tdozzleDefinition,\n\tbeszelDefinition,\n\tconvexDefinition,\n\tconvexDashboardDefinition,\n\tclaudeCodeDefinition,\n\topencodeDefinition,\n\tcodexDefinition,\n\tgeminiCliDefinition,\n\tkimiDefinition,\n\tpostizDefinition,\n\tmixpostDefinition,\n\tmatomoDefinition,\n\tumamiDefinition,\n\tusesendDefinition,\n\tmissionControlDefinition,\n\topenpanelDefinition,\n\tlightpandaDefinition,\n\tsteelBrowserDefinition,\n\tcoolifyDefinition,\n\tdokployDefinition,\n\ttailscaleDefinition,\n\tlivekitDefinition,\n\tlasuiteMeetBackendDefinition,\n\tlasuiteMeetFrontendDefinition,\n\tlasuiteMeetAgentsDefinition,\n\tdesktopEnvironmentDefinition,\n\tstreamGatewayDefinition,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmJA,MAAa,wBAA6C;CACzD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/definitions/index.ts"],"sourcesContent":["export { anythingLlmDefinition } from \"./anything-llm.js\";\nexport { appflowyDefinition } from \"./appflowy.js\";\nexport { beszelDefinition } from \"./beszel.js\";\nexport { browserlessDefinition } from \"./browserless.js\";\nexport { caddyDefinition } from \"./caddy.js\";\nexport { calComDefinition } from \"./cal-com.js\";\nexport { chromadbDefinition } from \"./chromadb.js\";\nexport { claudeCodeDefinition } from \"./claude-code.js\";\nexport { codeServerDefinition } from \"./code-server.js\";\nexport { comfyuiDefinition } from \"./comfyui.js\";\nexport { convexDefinition } from \"./convex.js\";\nexport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nexport { codexDefinition } from \"./codex.js\";\nexport { coolifyDefinition } from \"./coolify.js\";\nexport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nexport { difyDefinition } from \"./dify.js\";\nexport { docsgptDefinition } from \"./docsgpt.js\";\nexport { dokployDefinition } from \"./dokploy.js\";\nexport { dozzleDefinition } from \"./dozzle.js\";\nexport { ffmpegDefinition } from \"./ffmpeg.js\";\nexport { flowiseDefinition } from \"./flowise.js\";\nexport { geminiCliDefinition } from \"./gemini-cli.js\";\nexport { giteaDefinition } from \"./gitea.js\";\nexport { gotifyDefinition } from \"./gotify.js\";\nexport { grafanaDefinition } from \"./grafana.js\";\nexport { kimiDefinition } from \"./kimi.js\";\nexport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nexport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nexport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nexport { librechatDefinition } from \"./librechat.js\";\nexport { lightpandaDefinition } from \"./lightpanda.js\";\nexport { litellmDefinition } from \"./litellm.js\";\nexport { livekitDefinition } from \"./livekit.js\";\nexport { matomoDefinition } from \"./matomo.js\";\nexport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nexport { mattermostDefinition } from \"./mattermost.js\";\nexport { meilisearchDefinition } from \"./meilisearch.js\";\nexport { missionControlDefinition } from \"./mission-control.js\";\nexport { minioDefinition } from \"./minio.js\";\nexport { mixpostDefinition } from \"./mixpost.js\";\nexport { motionCanvasDefinition } from \"./motion-canvas.js\";\nexport { n8nDefinition } from \"./n8n.js\";\nexport { neo4jDefinition } from \"./neo4j.js\";\nexport { nocodbDefinition } from \"./nocodb.js\";\nexport { ntfyDefinition } from \"./ntfy.js\";\nexport { ollamaDefinition } from \"./ollama.js\";\nexport { openWebuiDefinition } from \"./open-webui.js\";\nexport { opencodeDefinition } from \"./opencode.js\";\nexport { openpanelDefinition } from \"./openpanel.js\";\nexport { outlineDefinition } from \"./outline.js\";\nexport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nexport { playwrightServerDefinition } from \"./playwright-server.js\";\nexport { portainerDefinition } from \"./portainer.js\";\nexport { postgresqlDefinition } from \"./postgresql.js\";\nexport { postizDefinition } from \"./postiz.js\";\nexport { prometheusDefinition } from \"./prometheus.js\";\nexport { qdrantDefinition } from \"./qdrant.js\";\nexport { redisDefinition } from \"./redis.js\";\nexport { remotionDefinition } from \"./remotion.js\";\nexport { rocketchatDefinition } from \"./rocketchat.js\";\nexport { searxngDefinition } from \"./searxng.js\";\nexport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nexport { steelBrowserDefinition } from \"./steel-browser.js\";\nexport { streamGatewayDefinition } from \"./stream-gateway.js\";\nexport { tailscaleDefinition } from \"./tailscale.js\";\nexport { temporalDefinition } from \"./temporal.js\";\nexport { traefikDefinition } from \"./traefik.js\";\nexport { umamiDefinition } from \"./umami.js\";\nexport { usesendDefinition } from \"./usesend.js\";\nexport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nexport { valkeyDefinition } from \"./valkey.js\";\nexport { watchtowerDefinition } from \"./watchtower.js\";\nexport { weaviateDefinition } from \"./weaviate.js\";\nexport { whisperDefinition } from \"./whisper.js\";\nexport { xyopsDefinition } from \"./xyops.js\";\n\nimport type { ServiceDefinition } from \"../../types.js\";\nimport { anythingLlmDefinition } from \"./anything-llm.js\";\nimport { appflowyDefinition } from \"./appflowy.js\";\nimport { beszelDefinition } from \"./beszel.js\";\nimport { browserlessDefinition } from \"./browserless.js\";\nimport { caddyDefinition } from \"./caddy.js\";\nimport { calComDefinition } from \"./cal-com.js\";\nimport { chromadbDefinition } from \"./chromadb.js\";\nimport { claudeCodeDefinition } from \"./claude-code.js\";\nimport { codeServerDefinition } from \"./code-server.js\";\nimport { comfyuiDefinition } from \"./comfyui.js\";\nimport { convexDefinition } from \"./convex.js\";\nimport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nimport { codexDefinition } from \"./codex.js\";\nimport { coolifyDefinition } from \"./coolify.js\";\nimport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nimport { difyDefinition } from \"./dify.js\";\nimport { docsgptDefinition } from \"./docsgpt.js\";\nimport { dokployDefinition } from \"./dokploy.js\";\nimport { dozzleDefinition } from \"./dozzle.js\";\nimport { ffmpegDefinition } from \"./ffmpeg.js\";\nimport { flowiseDefinition } from \"./flowise.js\";\nimport { geminiCliDefinition } from \"./gemini-cli.js\";\nimport { giteaDefinition } from \"./gitea.js\";\nimport { gotifyDefinition } from \"./gotify.js\";\nimport { grafanaDefinition } from \"./grafana.js\";\nimport { kimiDefinition } from \"./kimi.js\";\nimport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nimport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nimport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nimport { librechatDefinition } from \"./librechat.js\";\nimport { lightpandaDefinition } from \"./lightpanda.js\";\nimport { litellmDefinition } from \"./litellm.js\";\nimport { livekitDefinition } from \"./livekit.js\";\nimport { matomoDefinition } from \"./matomo.js\";\nimport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nimport { mattermostDefinition } from \"./mattermost.js\";\nimport { meilisearchDefinition } from \"./meilisearch.js\";\nimport { missionControlDefinition } from \"./mission-control.js\";\nimport { minioDefinition } from \"./minio.js\";\nimport { mixpostDefinition } from \"./mixpost.js\";\nimport { motionCanvasDefinition } from \"./motion-canvas.js\";\nimport { n8nDefinition } from \"./n8n.js\";\nimport { neo4jDefinition } from \"./neo4j.js\";\nimport { nocodbDefinition } from \"./nocodb.js\";\nimport { ntfyDefinition } from \"./ntfy.js\";\nimport { ollamaDefinition } from \"./ollama.js\";\nimport { openWebuiDefinition } from \"./open-webui.js\";\nimport { opencodeDefinition } from \"./opencode.js\";\nimport { openpanelDefinition } from \"./openpanel.js\";\nimport { outlineDefinition } from \"./outline.js\";\nimport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nimport { playwrightServerDefinition } from \"./playwright-server.js\";\nimport { portainerDefinition } from \"./portainer.js\";\nimport { postgresqlDefinition } from \"./postgresql.js\";\nimport { postizDefinition } from \"./postiz.js\";\nimport { prometheusDefinition } from \"./prometheus.js\";\nimport { qdrantDefinition } from \"./qdrant.js\";\nimport { redisDefinition } from \"./redis.js\";\nimport { remotionDefinition } from \"./remotion.js\";\nimport { rocketchatDefinition } from \"./rocketchat.js\";\nimport { searxngDefinition } from \"./searxng.js\";\nimport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nimport { steelBrowserDefinition } from \"./steel-browser.js\";\nimport { streamGatewayDefinition } from \"./stream-gateway.js\";\nimport { tailscaleDefinition } from \"./tailscale.js\";\nimport { temporalDefinition } from \"./temporal.js\";\nimport { traefikDefinition } from \"./traefik.js\";\nimport { umamiDefinition } from \"./umami.js\";\nimport { usesendDefinition } from \"./usesend.js\";\nimport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nimport { valkeyDefinition } from \"./valkey.js\";\nimport { watchtowerDefinition } from \"./watchtower.js\";\nimport { weaviateDefinition } from \"./weaviate.js\";\nimport { whisperDefinition } from \"./whisper.js\";\nimport { xyopsDefinition } from \"./xyops.js\";\n\nexport const allServiceDefinitions: ServiceDefinition[] = [\n\tredisDefinition,\n\tqdrantDefinition,\n\tn8nDefinition,\n\tffmpegDefinition,\n\tminioDefinition,\n\tpostgresqlDefinition,\n\tcaddyDefinition,\n\ttraefikDefinition,\n\tuptimeKumaDefinition,\n\tgrafanaDefinition,\n\tprometheusDefinition,\n\tbrowserlessDefinition,\n\tsearxngDefinition,\n\tmeilisearchDefinition,\n\tollamaDefinition,\n\twhisperDefinition,\n\tchromadbDefinition,\n\tweaviateDefinition,\n\tvalkeyDefinition,\n\tgotifyDefinition,\n\tntfyDefinition,\n\tremotionDefinition,\n\tmotionCanvasDefinition,\n\ttemporalDefinition,\n\toutlineDefinition,\n\tdocsgptDefinition,\n\tpaperlessNgxDefinition,\n\tnocodbDefinition,\n\tappflowyDefinition,\n\tmatrixSynapseDefinition,\n\trocketchatDefinition,\n\tmattermostDefinition,\n\tstableDiffusionDefinition,\n\tcomfyuiDefinition,\n\tplaywrightServerDefinition,\n\topenWebuiDefinition,\n\tlibrechatDefinition,\n\tanythingLlmDefinition,\n\tdifyDefinition,\n\tflowiseDefinition,\n\tlitellmDefinition,\n\tgiteaDefinition,\n\tcodeServerDefinition,\n\tportainerDefinition,\n\twatchtowerDefinition,\n\tdozzleDefinition,\n\tbeszelDefinition,\n\tconvexDefinition,\n\tconvexDashboardDefinition,\n\tclaudeCodeDefinition,\n\topencodeDefinition,\n\tcodexDefinition,\n\tgeminiCliDefinition,\n\tkimiDefinition,\n\tpostizDefinition,\n\tmixpostDefinition,\n\tmatomoDefinition,\n\tumamiDefinition,\n\tusesendDefinition,\n\tmissionControlDefinition,\n\topenpanelDefinition,\n\tlightpandaDefinition,\n\tsteelBrowserDefinition,\n\tcoolifyDefinition,\n\tdokployDefinition,\n\ttailscaleDefinition,\n\tlivekitDefinition,\n\tlasuiteMeetBackendDefinition,\n\tlasuiteMeetFrontendDefinition,\n\tlasuiteMeetAgentsDefinition,\n\tdesktopEnvironmentDefinition,\n\tstreamGatewayDefinition,\n\tneo4jDefinition,\n\tcalComDefinition,\n\txyopsDefinition,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJA,MAAa,wBAA6C;CACzD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA"}
@@ -0,0 +1,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/neo4j.d.ts
4
+ declare const neo4jDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { neo4jDefinition };
7
+ //# sourceMappingURL=neo4j.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j.d.mts","names":[],"sources":["../../../src/services/definitions/neo4j.ts"],"mappings":";;;cAEa,eAAA,EAAiB,iBAAA"}
@@ -0,0 +1,91 @@
1
+ //#region src/services/definitions/neo4j.ts
2
+ const neo4jDefinition = {
3
+ id: "neo4j",
4
+ name: "Neo4j",
5
+ description: "Graph database platform for connected data, enabling knowledge graphs, fraud detection, and relationship-driven queries with the Cypher query language.",
6
+ category: "database",
7
+ icon: "🔵",
8
+ image: "neo4j",
9
+ imageTag: "5-community",
10
+ ports: [{
11
+ host: 7474,
12
+ container: 7474,
13
+ description: "Neo4j Browser (HTTP)",
14
+ exposed: true
15
+ }, {
16
+ host: 7687,
17
+ container: 7687,
18
+ description: "Bolt protocol",
19
+ exposed: true
20
+ }],
21
+ volumes: [{
22
+ name: "neo4j-data",
23
+ containerPath: "/data",
24
+ description: "Persistent Neo4j data"
25
+ }],
26
+ environment: [{
27
+ key: "NEO4J_AUTH",
28
+ defaultValue: "neo4j/${NEO4J_PASSWORD}",
29
+ secret: true,
30
+ description: "Neo4j authentication credentials (user/password)",
31
+ required: true
32
+ }],
33
+ healthcheck: {
34
+ test: "wget -q --spider http://localhost:7474 || exit 1",
35
+ interval: "30s",
36
+ timeout: "10s",
37
+ retries: 3,
38
+ startPeriod: "30s"
39
+ },
40
+ dependsOn: [],
41
+ restartPolicy: "unless-stopped",
42
+ networks: ["openclaw-network"],
43
+ skills: [],
44
+ openclawEnvVars: [
45
+ {
46
+ key: "NEO4J_HOST",
47
+ defaultValue: "neo4j",
48
+ secret: false,
49
+ description: "Neo4j hostname for OpenClaw",
50
+ required: true
51
+ },
52
+ {
53
+ key: "NEO4J_BOLT_PORT",
54
+ defaultValue: "7687",
55
+ secret: false,
56
+ description: "Neo4j Bolt protocol port for OpenClaw",
57
+ required: true
58
+ },
59
+ {
60
+ key: "NEO4J_HTTP_PORT",
61
+ defaultValue: "7474",
62
+ secret: false,
63
+ description: "Neo4j HTTP port for OpenClaw",
64
+ required: true
65
+ },
66
+ {
67
+ key: "NEO4J_PASSWORD",
68
+ defaultValue: "",
69
+ secret: true,
70
+ description: "Neo4j password for OpenClaw",
71
+ required: true
72
+ }
73
+ ],
74
+ docsUrl: "https://neo4j.com/docs/",
75
+ tags: [
76
+ "graph",
77
+ "database",
78
+ "knowledge-graph",
79
+ "cypher"
80
+ ],
81
+ maturity: "stable",
82
+ requires: [],
83
+ recommends: [],
84
+ conflictsWith: [],
85
+ minMemoryMB: 512,
86
+ gpuRequired: false
87
+ };
88
+
89
+ //#endregion
90
+ export { neo4jDefinition };
91
+ //# sourceMappingURL=neo4j.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j.mjs","names":[],"sources":["../../../src/services/definitions/neo4j.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const neo4jDefinition: ServiceDefinition = {\n\tid: \"neo4j\",\n\tname: \"Neo4j\",\n\tdescription:\n\t\t\"Graph database platform for connected data, enabling knowledge graphs, fraud detection, and relationship-driven queries with the Cypher query language.\",\n\tcategory: \"database\",\n\ticon: \"🔵\",\n\n\timage: \"neo4j\",\n\timageTag: \"5-community\",\n\tports: [\n\t\t{\n\t\t\thost: 7474,\n\t\t\tcontainer: 7474,\n\t\t\tdescription: \"Neo4j Browser (HTTP)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 7687,\n\t\t\tcontainer: 7687,\n\t\t\tdescription: \"Bolt protocol\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"neo4j-data\",\n\t\t\tcontainerPath: \"/data\",\n\t\t\tdescription: \"Persistent Neo4j data\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"NEO4J_AUTH\",\n\t\t\tdefaultValue: \"neo4j/${NEO4J_PASSWORD}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Neo4j authentication credentials (user/password)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:7474 || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"30s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"NEO4J_HOST\",\n\t\t\tdefaultValue: \"neo4j\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Neo4j hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"NEO4J_BOLT_PORT\",\n\t\t\tdefaultValue: \"7687\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Neo4j Bolt protocol port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"NEO4J_HTTP_PORT\",\n\t\t\tdefaultValue: \"7474\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Neo4j HTTP port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"NEO4J_PASSWORD\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Neo4j password for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://neo4j.com/docs/\",\n\ttags: [\"graph\", \"database\", \"knowledge-graph\", \"cypher\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,kBAAqC;CACjD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,EACD;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB;EAChB;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CAED,SAAS;CACT,MAAM;EAAC;EAAS;EAAY;EAAmB;EAAS;CACxD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
@@ -33,7 +33,6 @@ const traefikDefinition = {
33
33
  description: "Let's Encrypt certificate storage"
34
34
  }],
35
35
  environment: [],
36
- command: "--api.dashboard=true --providers.docker=true --entrypoints.web.address=:80 --entrypoints.websecure.address=:443",
37
36
  dependsOn: [],
38
37
  restartPolicy: "unless-stopped",
39
38
  networks: ["openclaw-network"],
@@ -1 +1 @@
1
- {"version":3,"file":"traefik.mjs","names":[],"sources":["../../../src/services/definitions/traefik.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const traefikDefinition: ServiceDefinition = {\n\tid: \"traefik\",\n\tname: \"Traefik\",\n\tdescription:\n\t\t\"Cloud-native reverse proxy and load balancer with automatic service discovery, Let's Encrypt integration, and a built-in dashboard.\",\n\tcategory: \"proxy\",\n\ticon: \"🔀\",\n\n\timage: \"traefik\",\n\timageTag: \"v3.3\",\n\tports: [\n\t\t{\n\t\t\thost: 80,\n\t\t\tcontainer: 80,\n\t\t\tdescription: \"HTTP entrypoint\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 443,\n\t\t\tcontainer: 443,\n\t\t\tdescription: \"HTTPS entrypoint\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 8085,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"Traefik dashboard\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"traefik-certs\",\n\t\t\tcontainerPath: \"/letsencrypt\",\n\t\t\tdescription: \"Let's Encrypt certificate storage\",\n\t\t},\n\t],\n\tenvironment: [],\n\tcommand:\n\t\t\"--api.dashboard=true --providers.docker=true --entrypoints.web.address=:80 --entrypoints.websecure.address=:443\",\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://doc.traefik.io/traefik/\",\n\ttags: [\"reverse-proxy\", \"load-balancer\", \"service-discovery\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [\"caddy\"],\n\n\tminMemoryMB: 64,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,oBAAuC;CACnD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO;EACN;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa,EAAE;CACf,SACC;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAiB;EAAiB;EAAoB;CAC7D,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,CAAC,QAAQ;CAExB,aAAa;CACb,aAAa;CACb"}
1
+ {"version":3,"file":"traefik.mjs","names":[],"sources":["../../../src/services/definitions/traefik.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const traefikDefinition: ServiceDefinition = {\n\tid: \"traefik\",\n\tname: \"Traefik\",\n\tdescription:\n\t\t\"Cloud-native reverse proxy and load balancer with automatic service discovery, Let's Encrypt integration, and a built-in dashboard.\",\n\tcategory: \"proxy\",\n\ticon: \"🔀\",\n\n\timage: \"traefik\",\n\timageTag: \"v3.3\",\n\tports: [\n\t\t{\n\t\t\thost: 80,\n\t\t\tcontainer: 80,\n\t\t\tdescription: \"HTTP entrypoint\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 443,\n\t\t\tcontainer: 443,\n\t\t\tdescription: \"HTTPS entrypoint\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 8085,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"Traefik dashboard\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"traefik-certs\",\n\t\t\tcontainerPath: \"/letsencrypt\",\n\t\t\tdescription: \"Let's Encrypt certificate storage\",\n\t\t},\n\t],\n\tenvironment: [],\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://doc.traefik.io/traefik/\",\n\ttags: [\"reverse-proxy\", \"load-balancer\", \"service-discovery\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [\"caddy\"],\n\n\tminMemoryMB: 64,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,oBAAuC;CACnD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO;EACN;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa,EAAE;CACf,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAiB;EAAiB;EAAoB;CAC7D,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,CAAC,QAAQ;CAExB,aAAa;CACb,aAAa;CACb"}
@@ -0,0 +1,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/xyops.d.ts
4
+ declare const xyopsDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { xyopsDefinition };
7
+ //# sourceMappingURL=xyops.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xyops.d.mts","names":[],"sources":["../../../src/services/definitions/xyops.ts"],"mappings":";;;cAEa,eAAA,EAAiB,iBAAA"}
@@ -0,0 +1,86 @@
1
+ //#region src/services/definitions/xyops.ts
2
+ const xyopsDefinition = {
3
+ id: "xyops",
4
+ name: "xyOps",
5
+ description: "Job scheduling, workflow automation, server monitoring, alerting, and incident response platform with a visual workflow editor and fleet management.",
6
+ category: "automation",
7
+ icon: "⚙️",
8
+ image: "ghcr.io/pixlcore/xyops",
9
+ imageTag: "latest",
10
+ ports: [{
11
+ host: 5522,
12
+ container: 5522,
13
+ description: "xyOps web interface",
14
+ exposed: true
15
+ }, {
16
+ host: 5523,
17
+ container: 5523,
18
+ description: "xyOps secondary service",
19
+ exposed: false
20
+ }],
21
+ volumes: [{
22
+ name: "xyops-data",
23
+ containerPath: "/opt/xyops/data",
24
+ description: "Persistent xyOps data and configuration"
25
+ }, {
26
+ name: "/var/run/docker.sock",
27
+ containerPath: "/var/run/docker.sock",
28
+ description: "Docker socket for container management"
29
+ }],
30
+ environment: [{
31
+ key: "TZ",
32
+ defaultValue: "UTC",
33
+ secret: false,
34
+ description: "Timezone for xyOps",
35
+ required: false
36
+ }, {
37
+ key: "XYOPS_xysat_local",
38
+ defaultValue: "1",
39
+ secret: false,
40
+ description: "Enable local satellite mode for monitoring the host",
41
+ required: false
42
+ }],
43
+ healthcheck: {
44
+ test: "wget -q --spider http://localhost:5522 || exit 1",
45
+ interval: "30s",
46
+ timeout: "10s",
47
+ retries: 3,
48
+ startPeriod: "30s"
49
+ },
50
+ dependsOn: [],
51
+ restartPolicy: "unless-stopped",
52
+ networks: ["openclaw-network"],
53
+ skills: [],
54
+ openclawEnvVars: [{
55
+ key: "XYOPS_HOST",
56
+ defaultValue: "xyops",
57
+ secret: false,
58
+ description: "xyOps hostname for OpenClaw",
59
+ required: true
60
+ }, {
61
+ key: "XYOPS_PORT",
62
+ defaultValue: "5522",
63
+ secret: false,
64
+ description: "xyOps port for OpenClaw",
65
+ required: true
66
+ }],
67
+ docsUrl: "https://github.com/pixlcore/xyops",
68
+ tags: [
69
+ "scheduling",
70
+ "automation",
71
+ "monitoring",
72
+ "alerting",
73
+ "incident-response",
74
+ "workflow"
75
+ ],
76
+ maturity: "stable",
77
+ requires: [],
78
+ recommends: [],
79
+ conflictsWith: [],
80
+ minMemoryMB: 256,
81
+ gpuRequired: false
82
+ };
83
+
84
+ //#endregion
85
+ export { xyopsDefinition };
86
+ //# sourceMappingURL=xyops.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xyops.mjs","names":[],"sources":["../../../src/services/definitions/xyops.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const xyopsDefinition: ServiceDefinition = {\n\tid: \"xyops\",\n\tname: \"xyOps\",\n\tdescription:\n\t\t\"Job scheduling, workflow automation, server monitoring, alerting, and incident response platform with a visual workflow editor and fleet management.\",\n\tcategory: \"automation\",\n\ticon: \"⚙️\",\n\n\timage: \"ghcr.io/pixlcore/xyops\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 5522,\n\t\t\tcontainer: 5522,\n\t\t\tdescription: \"xyOps web interface\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 5523,\n\t\t\tcontainer: 5523,\n\t\t\tdescription: \"xyOps secondary service\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"xyops-data\",\n\t\t\tcontainerPath: \"/opt/xyops/data\",\n\t\t\tdescription: \"Persistent xyOps data and configuration\",\n\t\t},\n\t\t{\n\t\t\tname: \"/var/run/docker.sock\",\n\t\t\tcontainerPath: \"/var/run/docker.sock\",\n\t\t\tdescription: \"Docker socket for container management\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"TZ\",\n\t\t\tdefaultValue: \"UTC\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Timezone for xyOps\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"XYOPS_xysat_local\",\n\t\t\tdefaultValue: \"1\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Enable local satellite mode for monitoring the host\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:5522 || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"30s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"XYOPS_HOST\",\n\t\t\tdefaultValue: \"xyops\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"xyOps hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"XYOPS_PORT\",\n\t\t\tdefaultValue: \"5522\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"xyOps port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://github.com/pixlcore/xyops\",\n\ttags: [\"scheduling\", \"automation\", \"monitoring\", \"alerting\", \"incident-response\", \"workflow\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,kBAAqC;CACjD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,EACD;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,EACD;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,CAChB;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CAED,SAAS;CACT,MAAM;EAAC;EAAc;EAAc;EAAc;EAAY;EAAqB;EAAW;CAC7F,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
package/dist/types.d.mts CHANGED
@@ -23,7 +23,9 @@ type ServiceDefinition = z.infer<typeof ServiceDefinitionSchema>;
23
23
  type SkillPack = z.infer<typeof SkillPackSchema>;
24
24
  type Preset = z.infer<typeof PresetSchema>;
25
25
  type GenerationInput = z.infer<typeof GenerationInputSchema>;
26
- type ComposeOptions = z.infer<typeof ComposeOptionsSchema>;
26
+ type ComposeOptions = z.infer<typeof ComposeOptionsSchema> & {
27
+ /** Dynamic Traefik labels per service, computed by the Traefik generator. */traefikLabels?: Map<string, Record<string, string>>;
28
+ };
27
29
  type ResolvedService = z.infer<typeof ResolvedServiceSchema>;
28
30
  type AddedDependency = z.infer<typeof AddedDependencySchema>;
29
31
  type Warning = z.infer<typeof WarningSchema>;
@@ -39,6 +41,11 @@ interface ResolverInput {
39
41
  gpu?: boolean;
40
42
  platform?: Platform;
41
43
  monitoring?: boolean;
44
+ memoryThresholds?: {
45
+ info: number;
46
+ warning: number;
47
+ critical: number;
48
+ };
42
49
  }
43
50
  interface GeneratedFiles {
44
51
  [path: string]: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;KAoCY,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KAC1B,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KAC1B,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KAC/B,SAAA,GAAY,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAC3B,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,sBAAA;AAAA,KAClC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAC9B,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAE9B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KAC/B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,MAAA,GAAS,CAAA,CAAE,KAAA,QAAa,YAAA;AAAA,KACxB,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAE9B,iBAAA,GAAoB,CAAA,CAAE,KAAA,QAAa,uBAAA;AAAA,KACnC,SAAA,GAAY,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAC3B,MAAA,GAAS,CAAA,CAAE,KAAA,QAAa,YAAA;AAAA,KAExB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,OAAA,GAAU,CAAA,CAAE,KAAA,QAAa,aAAA;AAAA,KACzB,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,WAAA;AAAA,KAC/B,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAEhC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,sBAAA;AAAA,KAClC,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,UAIrB,aAAA;EAChB,QAAA;EACA,UAAA;EACA,KAAA,GAAQ,SAAA;EACR,GAAA;EACA,QAAA,GAAW,QAAA;EACX,UAAA;AAAA;AAAA,UAGgB,cAAA;EAAA,CACf,IAAA;AAAA;AAAA,UAGe,kBAAA;EAChB,YAAA;EACA,UAAA;EACA,iBAAA;EACA,WAAA;AAAA;AAAA,UAGgB,gBAAA;EAChB,KAAA,EAAO,cAAA;EACP,QAAA,EAAU,kBAAA;AAAA;AAAA,UAGM,YAAA;EAChB,EAAA,EAAI,eAAA;EACJ,IAAA;EACA,IAAA;AAAA;AAAA,cAGY,kBAAA,EAAoB,YAAA"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;KAoCY,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KAC1B,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KAC1B,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KAC/B,SAAA,GAAY,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAC3B,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,sBAAA;AAAA,KAClC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAC9B,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAE9B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KAC/B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,MAAA,GAAS,CAAA,CAAE,KAAA,QAAa,YAAA;AAAA,KACxB,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAE9B,iBAAA,GAAoB,CAAA,CAAE,KAAA,QAAa,uBAAA;AAAA,KACnC,SAAA,GAAY,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAC3B,MAAA,GAAS,CAAA,CAAE,KAAA,QAAa,YAAA;AAAA,KAExB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;+EAE3C,aAAA,GAAgB,GAAA,SAAY,MAAA;AAAA;AAAA,KAEjB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,OAAA,GAAU,CAAA,CAAE,KAAA,QAAa,aAAA;AAAA,KACzB,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,WAAA;AAAA,KAC/B,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAEhC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,sBAAA;AAAA,KAClC,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,UAIrB,aAAA;EAChB,QAAA;EACA,UAAA;EACA,KAAA,GAAQ,SAAA;EACR,GAAA;EACA,QAAA,GAAW,QAAA;EACX,UAAA;EACA,gBAAA;IAAqB,IAAA;IAAc,OAAA;IAAiB,QAAA;EAAA;AAAA;AAAA,UAGpC,cAAA;EAAA,CACf,IAAA;AAAA;AAAA,UAGe,kBAAA;EAChB,YAAA;EACA,UAAA;EACA,iBAAA;EACA,WAAA;AAAA;AAAA,UAGgB,gBAAA;EAChB,KAAA,EAAO,cAAA;EACP,QAAA,EAAU,kBAAA;AAAA;AAAA,UAGM,YAAA;EAChB,EAAA,EAAI,eAAA;EACJ,IAAA;EACA,IAAA;AAAA;AAAA,cAGY,kBAAA,EAAoB,YAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport type {\n\tAddedDependencySchema,\n\tApiErrorSchema,\n\tComposeOptionsSchema,\n\tDeploymentTargetSchema,\n\tDeploymentTypeSchema,\n\tDeploySchema,\n\tEnvVariableSchema,\n\tErrorSchema,\n\tGenerationInputSchema,\n\tHealthCheckSchema,\n\tMaturitySchema,\n\tNativePlatformSchema,\n\tNativeRecipeSchema,\n\tOutputFormatSchema,\n\tPlatformSchema,\n\tPortMappingSchema,\n\tPresetSchema,\n\tProxyTypeSchema,\n\tResolvedServiceSchema,\n\tResolverOutputSchema,\n\tResourceLimitsSchema,\n\tRestartPolicySchema,\n\tServiceCategorySchema,\n\tServiceDefinitionSchema,\n\tSkillBindingSchema,\n\tSkillPackSchema,\n\tValidateRequestSchema,\n\tValidateResponseSchema,\n\tVolumeMappingSchema,\n\tWarningSchema,\n} from \"./schema.js\";\n\n// ─── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type ServiceCategory = z.infer<typeof ServiceCategorySchema>;\nexport type Maturity = z.infer<typeof MaturitySchema>;\nexport type Platform = z.infer<typeof PlatformSchema>;\nexport type RestartPolicy = z.infer<typeof RestartPolicySchema>;\nexport type ProxyType = z.infer<typeof ProxyTypeSchema>;\nexport type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;\nexport type DeploymentType = z.infer<typeof DeploymentTypeSchema>;\nexport type NativePlatform = z.infer<typeof NativePlatformSchema>;\nexport type NativeRecipe = z.infer<typeof NativeRecipeSchema>;\nexport type OutputFormat = z.infer<typeof OutputFormatSchema>;\n\nexport type PortMapping = z.infer<typeof PortMappingSchema>;\nexport type VolumeMapping = z.infer<typeof VolumeMappingSchema>;\nexport type EnvVariable = z.infer<typeof EnvVariableSchema>;\nexport type HealthCheck = z.infer<typeof HealthCheckSchema>;\nexport type ResourceLimits = z.infer<typeof ResourceLimitsSchema>;\nexport type Deploy = z.infer<typeof DeploySchema>;\nexport type SkillBinding = z.infer<typeof SkillBindingSchema>;\n\nexport type ServiceDefinition = z.infer<typeof ServiceDefinitionSchema>;\nexport type SkillPack = z.infer<typeof SkillPackSchema>;\nexport type Preset = z.infer<typeof PresetSchema>;\n\nexport type GenerationInput = z.infer<typeof GenerationInputSchema>;\nexport type ComposeOptions = z.infer<typeof ComposeOptionsSchema>;\nexport type ResolvedService = z.infer<typeof ResolvedServiceSchema>;\nexport type AddedDependency = z.infer<typeof AddedDependencySchema>;\nexport type Warning = z.infer<typeof WarningSchema>;\nexport type ResolverError = z.infer<typeof ErrorSchema>;\nexport type ResolverOutput = z.infer<typeof ResolverOutputSchema>;\n\nexport type ValidateRequest = z.infer<typeof ValidateRequestSchema>;\nexport type ValidateResponse = z.infer<typeof ValidateResponseSchema>;\nexport type ApiError = z.infer<typeof ApiErrorSchema>;\n\n// ─── Additional Types ───────────────────────────────────────────────────────\n\nexport interface ResolverInput {\n\tservices: string[];\n\tskillPacks: string[];\n\tproxy?: ProxyType;\n\tgpu?: boolean;\n\tplatform?: Platform;\n\tmonitoring?: boolean;\n}\n\nexport interface GeneratedFiles {\n\t[path: string]: string;\n}\n\nexport interface GenerationMetadata {\n\tserviceCount: number;\n\tskillCount: number;\n\testimatedMemoryMB: number;\n\tgeneratedAt: string;\n}\n\nexport interface GenerationResult {\n\tfiles: GeneratedFiles;\n\tmetadata: GenerationMetadata;\n}\n\nexport interface CategoryInfo {\n\tid: ServiceCategory;\n\tname: string;\n\ticon: string;\n}\n\nexport const SERVICE_CATEGORIES: CategoryInfo[] = [\n\t{ id: \"coding-agent\", name: \"AI Coding Agents\", icon: \"💻\" },\n\t{ id: \"ai-platform\", name: \"AI Platforms & Chat UIs\", icon: \"🧪\" },\n\t{ id: \"ai\", name: \"AI / Local Models\", icon: \"🤖\" },\n\t{ id: \"automation\", name: \"Automation & Workflows\", icon: \"🔄\" },\n\t{ id: \"vector-db\", name: \"Vector Databases\", icon: \"🧠\" },\n\t{ id: \"media\", name: \"Media & Video\", icon: \"🎬\" },\n\t{ id: \"social-media\", name: \"Social Media\", icon: \"📱\" },\n\t{ id: \"analytics\", name: \"Analytics\", icon: \"📊\" },\n\t{ id: \"knowledge\", name: \"Knowledge & Documents\", icon: \"📚\" },\n\t{ id: \"storage\", name: \"Object Storage\", icon: \"💾\" },\n\t{ id: \"database\", name: \"Databases & Caching\", icon: \"🗄️\" },\n\t{ id: \"dev-tools\", name: \"Developer Tools\", icon: \"🛠️\" },\n\t{ id: \"proxy\", name: \"Reverse Proxy\", icon: \"🌐\" },\n\t{ id: \"monitoring\", name: \"Monitoring\", icon: \"📡\" },\n\t{ id: \"browser\", name: \"Browser Automation\", icon: \"🌐\" },\n\t{ id: \"search\", name: \"Search\", icon: \"🔍\" },\n\t{ id: \"communication\", name: \"Notifications\", icon: \"🔔\" },\n\t{ id: \"desktop\", name: \"Desktop Environment\", icon: \"🖥️\" },\n\t{ id: \"streaming\", name: \"Streaming & Relay\", icon: \"📺\" },\n];\n"],"mappings":";AAwGA,MAAa,qBAAqC;CACjD;EAAE,IAAI;EAAgB,MAAM;EAAoB,MAAM;EAAM;CAC5D;EAAE,IAAI;EAAe,MAAM;EAA2B,MAAM;EAAM;CAClE;EAAE,IAAI;EAAM,MAAM;EAAqB,MAAM;EAAM;CACnD;EAAE,IAAI;EAAc,MAAM;EAA0B,MAAM;EAAM;CAChE;EAAE,IAAI;EAAa,MAAM;EAAoB,MAAM;EAAM;CACzD;EAAE,IAAI;EAAS,MAAM;EAAiB,MAAM;EAAM;CAClD;EAAE,IAAI;EAAgB,MAAM;EAAgB,MAAM;EAAM;CACxD;EAAE,IAAI;EAAa,MAAM;EAAa,MAAM;EAAM;CAClD;EAAE,IAAI;EAAa,MAAM;EAAyB,MAAM;EAAM;CAC9D;EAAE,IAAI;EAAW,MAAM;EAAkB,MAAM;EAAM;CACrD;EAAE,IAAI;EAAY,MAAM;EAAuB,MAAM;EAAO;CAC5D;EAAE,IAAI;EAAa,MAAM;EAAmB,MAAM;EAAO;CACzD;EAAE,IAAI;EAAS,MAAM;EAAiB,MAAM;EAAM;CAClD;EAAE,IAAI;EAAc,MAAM;EAAc,MAAM;EAAM;CACpD;EAAE,IAAI;EAAW,MAAM;EAAsB,MAAM;EAAM;CACzD;EAAE,IAAI;EAAU,MAAM;EAAU,MAAM;EAAM;CAC5C;EAAE,IAAI;EAAiB,MAAM;EAAiB,MAAM;EAAM;CAC1D;EAAE,IAAI;EAAW,MAAM;EAAuB,MAAM;EAAO;CAC3D;EAAE,IAAI;EAAa,MAAM;EAAqB,MAAM;EAAM;CAC1D"}
1
+ {"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport type {\n\tAddedDependencySchema,\n\tApiErrorSchema,\n\tComposeOptionsSchema,\n\tDeploymentTargetSchema,\n\tDeploymentTypeSchema,\n\tDeploySchema,\n\tEnvVariableSchema,\n\tErrorSchema,\n\tGenerationInputSchema,\n\tHealthCheckSchema,\n\tMaturitySchema,\n\tNativePlatformSchema,\n\tNativeRecipeSchema,\n\tOutputFormatSchema,\n\tPlatformSchema,\n\tPortMappingSchema,\n\tPresetSchema,\n\tProxyTypeSchema,\n\tResolvedServiceSchema,\n\tResolverOutputSchema,\n\tResourceLimitsSchema,\n\tRestartPolicySchema,\n\tServiceCategorySchema,\n\tServiceDefinitionSchema,\n\tSkillBindingSchema,\n\tSkillPackSchema,\n\tValidateRequestSchema,\n\tValidateResponseSchema,\n\tVolumeMappingSchema,\n\tWarningSchema,\n} from \"./schema.js\";\n\n// ─── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type ServiceCategory = z.infer<typeof ServiceCategorySchema>;\nexport type Maturity = z.infer<typeof MaturitySchema>;\nexport type Platform = z.infer<typeof PlatformSchema>;\nexport type RestartPolicy = z.infer<typeof RestartPolicySchema>;\nexport type ProxyType = z.infer<typeof ProxyTypeSchema>;\nexport type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;\nexport type DeploymentType = z.infer<typeof DeploymentTypeSchema>;\nexport type NativePlatform = z.infer<typeof NativePlatformSchema>;\nexport type NativeRecipe = z.infer<typeof NativeRecipeSchema>;\nexport type OutputFormat = z.infer<typeof OutputFormatSchema>;\n\nexport type PortMapping = z.infer<typeof PortMappingSchema>;\nexport type VolumeMapping = z.infer<typeof VolumeMappingSchema>;\nexport type EnvVariable = z.infer<typeof EnvVariableSchema>;\nexport type HealthCheck = z.infer<typeof HealthCheckSchema>;\nexport type ResourceLimits = z.infer<typeof ResourceLimitsSchema>;\nexport type Deploy = z.infer<typeof DeploySchema>;\nexport type SkillBinding = z.infer<typeof SkillBindingSchema>;\n\nexport type ServiceDefinition = z.infer<typeof ServiceDefinitionSchema>;\nexport type SkillPack = z.infer<typeof SkillPackSchema>;\nexport type Preset = z.infer<typeof PresetSchema>;\n\nexport type GenerationInput = z.infer<typeof GenerationInputSchema>;\nexport type ComposeOptions = z.infer<typeof ComposeOptionsSchema> & {\n\t/** Dynamic Traefik labels per service, computed by the Traefik generator. */\n\ttraefikLabels?: Map<string, Record<string, string>>;\n};\nexport type ResolvedService = z.infer<typeof ResolvedServiceSchema>;\nexport type AddedDependency = z.infer<typeof AddedDependencySchema>;\nexport type Warning = z.infer<typeof WarningSchema>;\nexport type ResolverError = z.infer<typeof ErrorSchema>;\nexport type ResolverOutput = z.infer<typeof ResolverOutputSchema>;\n\nexport type ValidateRequest = z.infer<typeof ValidateRequestSchema>;\nexport type ValidateResponse = z.infer<typeof ValidateResponseSchema>;\nexport type ApiError = z.infer<typeof ApiErrorSchema>;\n\n// ─── Additional Types ───────────────────────────────────────────────────────\n\nexport interface ResolverInput {\n\tservices: string[];\n\tskillPacks: string[];\n\tproxy?: ProxyType;\n\tgpu?: boolean;\n\tplatform?: Platform;\n\tmonitoring?: boolean;\n\tmemoryThresholds?: { info: number; warning: number; critical: number };\n}\n\nexport interface GeneratedFiles {\n\t[path: string]: string;\n}\n\nexport interface GenerationMetadata {\n\tserviceCount: number;\n\tskillCount: number;\n\testimatedMemoryMB: number;\n\tgeneratedAt: string;\n}\n\nexport interface GenerationResult {\n\tfiles: GeneratedFiles;\n\tmetadata: GenerationMetadata;\n}\n\nexport interface CategoryInfo {\n\tid: ServiceCategory;\n\tname: string;\n\ticon: string;\n}\n\nexport const SERVICE_CATEGORIES: CategoryInfo[] = [\n\t{ id: \"coding-agent\", name: \"AI Coding Agents\", icon: \"💻\" },\n\t{ id: \"ai-platform\", name: \"AI Platforms & Chat UIs\", icon: \"🧪\" },\n\t{ id: \"ai\", name: \"AI / Local Models\", icon: \"🤖\" },\n\t{ id: \"automation\", name: \"Automation & Workflows\", icon: \"🔄\" },\n\t{ id: \"vector-db\", name: \"Vector Databases\", icon: \"🧠\" },\n\t{ id: \"media\", name: \"Media & Video\", icon: \"🎬\" },\n\t{ id: \"social-media\", name: \"Social Media\", icon: \"📱\" },\n\t{ id: \"analytics\", name: \"Analytics\", icon: \"📊\" },\n\t{ id: \"knowledge\", name: \"Knowledge & Documents\", icon: \"📚\" },\n\t{ id: \"storage\", name: \"Object Storage\", icon: \"💾\" },\n\t{ id: \"database\", name: \"Databases & Caching\", icon: \"🗄️\" },\n\t{ id: \"dev-tools\", name: \"Developer Tools\", icon: \"🛠️\" },\n\t{ id: \"proxy\", name: \"Reverse Proxy\", icon: \"🌐\" },\n\t{ id: \"monitoring\", name: \"Monitoring\", icon: \"📡\" },\n\t{ id: \"browser\", name: \"Browser Automation\", icon: \"🌐\" },\n\t{ id: \"search\", name: \"Search\", icon: \"🔍\" },\n\t{ id: \"communication\", name: \"Notifications\", icon: \"🔔\" },\n\t{ id: \"desktop\", name: \"Desktop Environment\", icon: \"🖥️\" },\n\t{ id: \"streaming\", name: \"Streaming & Relay\", icon: \"📺\" },\n];\n"],"mappings":";AA4GA,MAAa,qBAAqC;CACjD;EAAE,IAAI;EAAgB,MAAM;EAAoB,MAAM;EAAM;CAC5D;EAAE,IAAI;EAAe,MAAM;EAA2B,MAAM;EAAM;CAClE;EAAE,IAAI;EAAM,MAAM;EAAqB,MAAM;EAAM;CACnD;EAAE,IAAI;EAAc,MAAM;EAA0B,MAAM;EAAM;CAChE;EAAE,IAAI;EAAa,MAAM;EAAoB,MAAM;EAAM;CACzD;EAAE,IAAI;EAAS,MAAM;EAAiB,MAAM;EAAM;CAClD;EAAE,IAAI;EAAgB,MAAM;EAAgB,MAAM;EAAM;CACxD;EAAE,IAAI;EAAa,MAAM;EAAa,MAAM;EAAM;CAClD;EAAE,IAAI;EAAa,MAAM;EAAyB,MAAM;EAAM;CAC9D;EAAE,IAAI;EAAW,MAAM;EAAkB,MAAM;EAAM;CACrD;EAAE,IAAI;EAAY,MAAM;EAAuB,MAAM;EAAO;CAC5D;EAAE,IAAI;EAAa,MAAM;EAAmB,MAAM;EAAO;CACzD;EAAE,IAAI;EAAS,MAAM;EAAiB,MAAM;EAAM;CAClD;EAAE,IAAI;EAAc,MAAM;EAAc,MAAM;EAAM;CACpD;EAAE,IAAI;EAAW,MAAM;EAAsB,MAAM;EAAM;CACzD;EAAE,IAAI;EAAU,MAAM;EAAU,MAAM;EAAM;CAC5C;EAAE,IAAI;EAAiB,MAAM;EAAiB,MAAM;EAAM;CAC1D;EAAE,IAAI;EAAW,MAAM;EAAuB,MAAM;EAAO;CAC3D;EAAE,IAAI;EAAa,MAAM;EAAqB,MAAM;EAAM;CAC1D"}
@@ -55,6 +55,17 @@ function checkEnvCompleteness(resolved, errors, warnings, generateSecrets) {
55
55
  type: "secret_needed",
56
56
  message: `Secret "${envVar.key}" for "${svc.definition.name}" needs to be configured manually`
57
57
  });
58
+ if (envVar.validation && envVar.defaultValue) try {
59
+ if (!new RegExp(envVar.validation).test(envVar.defaultValue)) warnings.push({
60
+ type: "env_validation",
61
+ message: `Environment variable "${envVar.key}" for "${svc.definition.name}" default value does not match validation pattern: ${envVar.validation}`
62
+ });
63
+ } catch {
64
+ warnings.push({
65
+ type: "env_validation",
66
+ message: `Environment variable "${envVar.key}" for "${svc.definition.name}" has invalid validation regex: ${envVar.validation}`
67
+ });
68
+ }
58
69
  }
59
70
  }
60
71
  function checkNetworkConsistency(resolved, warnings) {
@@ -1 +1 @@
1
- {"version":3,"file":"validator.mjs","names":[],"sources":["../src/validator.ts"],"sourcesContent":["import { parse } from \"yaml\";\nimport type { ResolverError, ResolverOutput, Warning } from \"./types.js\";\n\nexport interface ValidationResult {\n\tvalid: boolean;\n\terrors: ResolverError[];\n\twarnings: Warning[];\n}\n\n/**\n * Validates a complete generated stack before writing files.\n * Checks for port conflicts, volume uniqueness, env completeness,\n * dependency ordering, YAML validity, and more.\n */\nexport function validate(\n\tresolved: ResolverOutput,\n\tcomposedYaml: string,\n\toptions: { domain?: string; generateSecrets?: boolean } = {},\n): ValidationResult {\n\tconst errors: ResolverError[] = [];\n\tconst warnings: Warning[] = [];\n\n\tcheckPortConflicts(resolved, errors);\n\tcheckVolumeUniqueness(resolved, errors);\n\tcheckEnvCompleteness(resolved, errors, warnings, options.generateSecrets ?? true);\n\tcheckNetworkConsistency(resolved, warnings);\n\tcheckDependencyDAG(resolved, errors);\n\tcheckYamlValidity(composedYaml, errors);\n\n\tif (options.domain) {\n\t\tcheckDomainFormat(options.domain, errors);\n\t}\n\n\treturn {\n\t\tvalid: errors.length === 0,\n\t\terrors,\n\t\twarnings,\n\t};\n}\n\nfunction checkPortConflicts(resolved: ResolverOutput, errors: ResolverError[]): void {\n\tconst hostPorts = new Map<number, string>();\n\tfor (const svc of resolved.services) {\n\t\tfor (const port of svc.definition.ports) {\n\t\t\tif (!port.exposed) continue;\n\t\t\tconst existing = hostPorts.get(port.host);\n\t\t\tif (existing) {\n\t\t\t\terrors.push({\n\t\t\t\t\ttype: \"port_conflict\",\n\t\t\t\t\tmessage: `Port ${port.host} is used by both \"${existing}\" and \"${svc.definition.name}\"`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\thostPorts.set(port.host, svc.definition.name);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction checkVolumeUniqueness(resolved: ResolverOutput, errors: ResolverError[]): void {\n\tconst volumeNames = new Map<string, string>();\n\tfor (const svc of resolved.services) {\n\t\tfor (const vol of svc.definition.volumes) {\n\t\t\tconst existing = volumeNames.get(vol.name);\n\t\t\tif (existing && existing !== svc.definition.id) {\n\t\t\t\terrors.push({\n\t\t\t\t\ttype: \"volume_conflict\",\n\t\t\t\t\tmessage: `Volume name \"${vol.name}\" is used by both \"${existing}\" and \"${svc.definition.id}\"`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvolumeNames.set(vol.name, svc.definition.id);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction checkEnvCompleteness(\n\tresolved: ResolverOutput,\n\terrors: ResolverError[],\n\twarnings: Warning[],\n\tgenerateSecrets: boolean,\n): void {\n\tfor (const svc of resolved.services) {\n\t\tfor (const envVar of svc.definition.environment) {\n\t\t\tif (envVar.required && !envVar.defaultValue && !envVar.secret) {\n\t\t\t\terrors.push({\n\t\t\t\t\ttype: \"missing_env\",\n\t\t\t\t\tmessage: `Required environment variable \"${envVar.key}\" for \"${svc.definition.name}\" has no default value`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (envVar.secret && !generateSecrets && !envVar.defaultValue) {\n\t\t\t\twarnings.push({\n\t\t\t\t\ttype: \"secret_needed\",\n\t\t\t\t\tmessage: `Secret \"${envVar.key}\" for \"${svc.definition.name}\" needs to be configured manually`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction checkNetworkConsistency(resolved: ResolverOutput, warnings: Warning[]): void {\n\tfor (const svc of resolved.services) {\n\t\tif (!svc.definition.networks.includes(\"openclaw-network\")) {\n\t\t\twarnings.push({\n\t\t\t\ttype: \"network\",\n\t\t\t\tmessage: `Service \"${svc.definition.name}\" is not on openclaw-network — it may not be reachable from OpenClaw`,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction checkDependencyDAG(resolved: ResolverOutput, errors: ResolverError[]): void {\n\tconst ids = new Set(resolved.services.map((s) => s.definition.id));\n\tconst visited = new Set<string>();\n\tconst inStack = new Set<string>();\n\n\tconst adjList = new Map<string, string[]>();\n\tfor (const svc of resolved.services) {\n\t\tconst deps = [...svc.definition.requires, ...svc.definition.dependsOn].filter((d) =>\n\t\t\tids.has(d),\n\t\t);\n\t\tadjList.set(svc.definition.id, deps);\n\t}\n\n\tfunction hasCycle(node: string): boolean {\n\t\tif (inStack.has(node)) return true;\n\t\tif (visited.has(node)) return false;\n\t\tvisited.add(node);\n\t\tinStack.add(node);\n\t\tfor (const dep of adjList.get(node) ?? []) {\n\t\t\tif (hasCycle(dep)) return true;\n\t\t}\n\t\tinStack.delete(node);\n\t\treturn false;\n\t}\n\n\tfor (const id of ids) {\n\t\tif (hasCycle(id)) {\n\t\t\terrors.push({\n\t\t\t\ttype: \"cycle\",\n\t\t\t\tmessage: `Circular dependency detected involving \"${id}\"`,\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction checkYamlValidity(yaml: string, errors: ResolverError[]): void {\n\ttry {\n\t\tparse(yaml);\n\t} catch (e) {\n\t\terrors.push({\n\t\t\ttype: \"yaml_invalid\",\n\t\t\tmessage: `Generated YAML is not valid: ${e instanceof Error ? e.message : String(e)}`,\n\t\t});\n\t}\n}\n\nfunction checkDomainFormat(domain: string, errors: ResolverError[]): void {\n\tconst domainRegex = /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n\tif (!domainRegex.test(domain)) {\n\t\terrors.push({\n\t\t\ttype: \"invalid_domain\",\n\t\t\tmessage: `\"${domain}\" is not a valid domain name`,\n\t\t});\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"validator.mjs","names":[],"sources":["../src/validator.ts"],"sourcesContent":["import { parse } from \"yaml\";\nimport type { ResolverError, ResolverOutput, Warning } from \"./types.js\";\n\nexport interface ValidationResult {\n\tvalid: boolean;\n\terrors: ResolverError[];\n\twarnings: Warning[];\n}\n\n/**\n * Validates a complete generated stack before writing files.\n * Checks for port conflicts, volume uniqueness, env completeness,\n * dependency ordering, YAML validity, and more.\n */\nexport function validate(\n\tresolved: ResolverOutput,\n\tcomposedYaml: string,\n\toptions: { domain?: string; generateSecrets?: boolean } = {},\n): ValidationResult {\n\tconst errors: ResolverError[] = [];\n\tconst warnings: Warning[] = [];\n\n\tcheckPortConflicts(resolved, errors);\n\tcheckVolumeUniqueness(resolved, errors);\n\tcheckEnvCompleteness(resolved, errors, warnings, options.generateSecrets ?? true);\n\tcheckNetworkConsistency(resolved, warnings);\n\tcheckDependencyDAG(resolved, errors);\n\tcheckYamlValidity(composedYaml, errors);\n\n\tif (options.domain) {\n\t\tcheckDomainFormat(options.domain, errors);\n\t}\n\n\treturn {\n\t\tvalid: errors.length === 0,\n\t\terrors,\n\t\twarnings,\n\t};\n}\n\nfunction checkPortConflicts(resolved: ResolverOutput, errors: ResolverError[]): void {\n\tconst hostPorts = new Map<number, string>();\n\tfor (const svc of resolved.services) {\n\t\tfor (const port of svc.definition.ports) {\n\t\t\tif (!port.exposed) continue;\n\t\t\tconst existing = hostPorts.get(port.host);\n\t\t\tif (existing) {\n\t\t\t\terrors.push({\n\t\t\t\t\ttype: \"port_conflict\",\n\t\t\t\t\tmessage: `Port ${port.host} is used by both \"${existing}\" and \"${svc.definition.name}\"`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\thostPorts.set(port.host, svc.definition.name);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction checkVolumeUniqueness(resolved: ResolverOutput, errors: ResolverError[]): void {\n\tconst volumeNames = new Map<string, string>();\n\tfor (const svc of resolved.services) {\n\t\tfor (const vol of svc.definition.volumes) {\n\t\t\tconst existing = volumeNames.get(vol.name);\n\t\t\tif (existing && existing !== svc.definition.id) {\n\t\t\t\terrors.push({\n\t\t\t\t\ttype: \"volume_conflict\",\n\t\t\t\t\tmessage: `Volume name \"${vol.name}\" is used by both \"${existing}\" and \"${svc.definition.id}\"`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvolumeNames.set(vol.name, svc.definition.id);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction checkEnvCompleteness(\n\tresolved: ResolverOutput,\n\terrors: ResolverError[],\n\twarnings: Warning[],\n\tgenerateSecrets: boolean,\n): void {\n\tfor (const svc of resolved.services) {\n\t\tfor (const envVar of svc.definition.environment) {\n\t\t\tif (envVar.required && !envVar.defaultValue && !envVar.secret) {\n\t\t\t\terrors.push({\n\t\t\t\t\ttype: \"missing_env\",\n\t\t\t\t\tmessage: `Required environment variable \"${envVar.key}\" for \"${svc.definition.name}\" has no default value`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (envVar.secret && !generateSecrets && !envVar.defaultValue) {\n\t\t\t\twarnings.push({\n\t\t\t\t\ttype: \"secret_needed\",\n\t\t\t\t\tmessage: `Secret \"${envVar.key}\" for \"${svc.definition.name}\" needs to be configured manually`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (envVar.validation && envVar.defaultValue) {\n\t\t\t\ttry {\n\t\t\t\t\tconst regex = new RegExp(envVar.validation);\n\t\t\t\t\tif (!regex.test(envVar.defaultValue)) {\n\t\t\t\t\t\twarnings.push({\n\t\t\t\t\t\t\ttype: \"env_validation\",\n\t\t\t\t\t\t\tmessage: `Environment variable \"${envVar.key}\" for \"${svc.definition.name}\" default value does not match validation pattern: ${envVar.validation}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\twarnings.push({\n\t\t\t\t\t\ttype: \"env_validation\",\n\t\t\t\t\t\tmessage: `Environment variable \"${envVar.key}\" for \"${svc.definition.name}\" has invalid validation regex: ${envVar.validation}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction checkNetworkConsistency(resolved: ResolverOutput, warnings: Warning[]): void {\n\tfor (const svc of resolved.services) {\n\t\tif (!svc.definition.networks.includes(\"openclaw-network\")) {\n\t\t\twarnings.push({\n\t\t\t\ttype: \"network\",\n\t\t\t\tmessage: `Service \"${svc.definition.name}\" is not on openclaw-network — it may not be reachable from OpenClaw`,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction checkDependencyDAG(resolved: ResolverOutput, errors: ResolverError[]): void {\n\tconst ids = new Set(resolved.services.map((s) => s.definition.id));\n\tconst visited = new Set<string>();\n\tconst inStack = new Set<string>();\n\n\tconst adjList = new Map<string, string[]>();\n\tfor (const svc of resolved.services) {\n\t\tconst deps = [...svc.definition.requires, ...svc.definition.dependsOn].filter((d) =>\n\t\t\tids.has(d),\n\t\t);\n\t\tadjList.set(svc.definition.id, deps);\n\t}\n\n\tfunction hasCycle(node: string): boolean {\n\t\tif (inStack.has(node)) return true;\n\t\tif (visited.has(node)) return false;\n\t\tvisited.add(node);\n\t\tinStack.add(node);\n\t\tfor (const dep of adjList.get(node) ?? []) {\n\t\t\tif (hasCycle(dep)) return true;\n\t\t}\n\t\tinStack.delete(node);\n\t\treturn false;\n\t}\n\n\tfor (const id of ids) {\n\t\tif (hasCycle(id)) {\n\t\t\terrors.push({\n\t\t\t\ttype: \"cycle\",\n\t\t\t\tmessage: `Circular dependency detected involving \"${id}\"`,\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction checkYamlValidity(yaml: string, errors: ResolverError[]): void {\n\ttry {\n\t\tparse(yaml);\n\t} catch (e) {\n\t\terrors.push({\n\t\t\ttype: \"yaml_invalid\",\n\t\t\tmessage: `Generated YAML is not valid: ${e instanceof Error ? e.message : String(e)}`,\n\t\t});\n\t}\n}\n\nfunction checkDomainFormat(domain: string, errors: ResolverError[]): void {\n\tconst domainRegex = /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n\tif (!domainRegex.test(domain)) {\n\t\terrors.push({\n\t\t\ttype: \"invalid_domain\",\n\t\t\tmessage: `\"${domain}\" is not a valid domain name`,\n\t\t});\n\t}\n}\n"],"mappings":";;;;;;;;AAcA,SAAgB,SACf,UACA,cACA,UAA0D,EAAE,EACzC;CACnB,MAAM,SAA0B,EAAE;CAClC,MAAM,WAAsB,EAAE;AAE9B,oBAAmB,UAAU,OAAO;AACpC,uBAAsB,UAAU,OAAO;AACvC,sBAAqB,UAAU,QAAQ,UAAU,QAAQ,mBAAmB,KAAK;AACjF,yBAAwB,UAAU,SAAS;AAC3C,oBAAmB,UAAU,OAAO;AACpC,mBAAkB,cAAc,OAAO;AAEvC,KAAI,QAAQ,OACX,mBAAkB,QAAQ,QAAQ,OAAO;AAG1C,QAAO;EACN,OAAO,OAAO,WAAW;EACzB;EACA;EACA;;AAGF,SAAS,mBAAmB,UAA0B,QAA+B;CACpF,MAAM,4BAAY,IAAI,KAAqB;AAC3C,MAAK,MAAM,OAAO,SAAS,SAC1B,MAAK,MAAM,QAAQ,IAAI,WAAW,OAAO;AACxC,MAAI,CAAC,KAAK,QAAS;EACnB,MAAM,WAAW,UAAU,IAAI,KAAK,KAAK;AACzC,MAAI,SACH,QAAO,KAAK;GACX,MAAM;GACN,SAAS,QAAQ,KAAK,KAAK,oBAAoB,SAAS,SAAS,IAAI,WAAW,KAAK;GACrF,CAAC;MAEF,WAAU,IAAI,KAAK,MAAM,IAAI,WAAW,KAAK;;;AAMjD,SAAS,sBAAsB,UAA0B,QAA+B;CACvF,MAAM,8BAAc,IAAI,KAAqB;AAC7C,MAAK,MAAM,OAAO,SAAS,SAC1B,MAAK,MAAM,OAAO,IAAI,WAAW,SAAS;EACzC,MAAM,WAAW,YAAY,IAAI,IAAI,KAAK;AAC1C,MAAI,YAAY,aAAa,IAAI,WAAW,GAC3C,QAAO,KAAK;GACX,MAAM;GACN,SAAS,gBAAgB,IAAI,KAAK,qBAAqB,SAAS,SAAS,IAAI,WAAW,GAAG;GAC3F,CAAC;MAEF,aAAY,IAAI,IAAI,MAAM,IAAI,WAAW,GAAG;;;AAMhD,SAAS,qBACR,UACA,QACA,UACA,iBACO;AACP,MAAK,MAAM,OAAO,SAAS,SAC1B,MAAK,MAAM,UAAU,IAAI,WAAW,aAAa;AAChD,MAAI,OAAO,YAAY,CAAC,OAAO,gBAAgB,CAAC,OAAO,OACtD,QAAO,KAAK;GACX,MAAM;GACN,SAAS,kCAAkC,OAAO,IAAI,SAAS,IAAI,WAAW,KAAK;GACnF,CAAC;AAEH,MAAI,OAAO,UAAU,CAAC,mBAAmB,CAAC,OAAO,aAChD,UAAS,KAAK;GACb,MAAM;GACN,SAAS,WAAW,OAAO,IAAI,SAAS,IAAI,WAAW,KAAK;GAC5D,CAAC;AAEH,MAAI,OAAO,cAAc,OAAO,aAC/B,KAAI;AAEH,OAAI,CADU,IAAI,OAAO,OAAO,WAAW,CAChC,KAAK,OAAO,aAAa,CACnC,UAAS,KAAK;IACb,MAAM;IACN,SAAS,yBAAyB,OAAO,IAAI,SAAS,IAAI,WAAW,KAAK,qDAAqD,OAAO;IACtI,CAAC;UAEI;AACP,YAAS,KAAK;IACb,MAAM;IACN,SAAS,yBAAyB,OAAO,IAAI,SAAS,IAAI,WAAW,KAAK,kCAAkC,OAAO;IACnH,CAAC;;;;AAOP,SAAS,wBAAwB,UAA0B,UAA2B;AACrF,MAAK,MAAM,OAAO,SAAS,SAC1B,KAAI,CAAC,IAAI,WAAW,SAAS,SAAS,mBAAmB,CACxD,UAAS,KAAK;EACb,MAAM;EACN,SAAS,YAAY,IAAI,WAAW,KAAK;EACzC,CAAC;;AAKL,SAAS,mBAAmB,UAA0B,QAA+B;CACpF,MAAM,MAAM,IAAI,IAAI,SAAS,SAAS,KAAK,MAAM,EAAE,WAAW,GAAG,CAAC;CAClE,MAAM,0BAAU,IAAI,KAAa;CACjC,MAAM,0BAAU,IAAI,KAAa;CAEjC,MAAM,0BAAU,IAAI,KAAuB;AAC3C,MAAK,MAAM,OAAO,SAAS,UAAU;EACpC,MAAM,OAAO,CAAC,GAAG,IAAI,WAAW,UAAU,GAAG,IAAI,WAAW,UAAU,CAAC,QAAQ,MAC9E,IAAI,IAAI,EAAE,CACV;AACD,UAAQ,IAAI,IAAI,WAAW,IAAI,KAAK;;CAGrC,SAAS,SAAS,MAAuB;AACxC,MAAI,QAAQ,IAAI,KAAK,CAAE,QAAO;AAC9B,MAAI,QAAQ,IAAI,KAAK,CAAE,QAAO;AAC9B,UAAQ,IAAI,KAAK;AACjB,UAAQ,IAAI,KAAK;AACjB,OAAK,MAAM,OAAO,QAAQ,IAAI,KAAK,IAAI,EAAE,CACxC,KAAI,SAAS,IAAI,CAAE,QAAO;AAE3B,UAAQ,OAAO,KAAK;AACpB,SAAO;;AAGR,MAAK,MAAM,MAAM,IAChB,KAAI,SAAS,GAAG,EAAE;AACjB,SAAO,KAAK;GACX,MAAM;GACN,SAAS,2CAA2C,GAAG;GACvD,CAAC;AACF;;;AAKH,SAAS,kBAAkB,MAAc,QAA+B;AACvE,KAAI;AACH,QAAM,KAAK;UACH,GAAG;AACX,SAAO,KAAK;GACX,MAAM;GACN,SAAS,gCAAgC,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;GACnF,CAAC;;;AAIJ,SAAS,kBAAkB,QAAgB,QAA+B;AAEzE,KAAI,CADgB,qEACH,KAAK,OAAO,CAC5B,QAAO,KAAK;EACX,MAAM;EACN,SAAS,IAAI,OAAO;EACpB,CAAC"}
@@ -5,7 +5,7 @@ import { ResolverOutput, ServiceDefinition, Warning } from "./types.mjs";
5
5
  declare function getImageTag(serviceId: string): string | undefined;
6
6
  /** Get the full image reference (image:tag) for a service */
7
7
  declare function getImageReference(serviceId: string): string | undefined;
8
- /** Pin all service image tags in a resolved output (returns a copy) */
8
+ /** Pin all service image tags to the registry-defined versions (returns a copy) */
9
9
  declare function pinImageTags(resolved: ResolverOutput): ResolverOutput;
10
10
  /** Check for known compatibility issues between services */
11
11
  declare function checkCompatibility(services: ServiceDefinition[]): Warning[];
@@ -1 +1 @@
1
- {"version":3,"file":"version-manager.d.mts","names":[],"sources":["../src/version-manager.ts"],"mappings":";;;;iBAIgB,WAAA,CAAY,SAAA;AAA5B;AAAA,iBAMgB,iBAAA,CAAkB,SAAA;;iBAOlB,YAAA,CAAa,QAAA,EAAU,cAAA,GAAiB,cAAA;;iBAWxC,kBAAA,CAAmB,QAAA,EAAU,iBAAA,KAAsB,OAAA"}
1
+ {"version":3,"file":"version-manager.d.mts","names":[],"sources":["../src/version-manager.ts"],"mappings":";;;;iBAIgB,WAAA,CAAY,SAAA;AAA5B;AAAA,iBAMgB,iBAAA,CAAkB,SAAA;;iBAOlB,YAAA,CAAa,QAAA,EAAU,cAAA,GAAiB,cAAA;;iBAkBxC,kBAAA,CAAmB,QAAA,EAAU,iBAAA,KAAsB,OAAA"}
@@ -11,14 +11,20 @@ function getImageReference(serviceId) {
11
11
  if (!svc) return void 0;
12
12
  return `${svc.image}:${svc.imageTag}`;
13
13
  }
14
- /** Pin all service image tags in a resolved output (returns a copy) */
14
+ /** Pin all service image tags to the registry-defined versions (returns a copy) */
15
15
  function pinImageTags(resolved) {
16
16
  return {
17
17
  ...resolved,
18
- services: resolved.services.map((s) => ({
19
- ...s,
20
- definition: { ...s.definition }
21
- }))
18
+ services: resolved.services.map((s) => {
19
+ const pinnedTag = getServiceById(s.definition.id)?.imageTag ?? s.definition.imageTag;
20
+ return {
21
+ ...s,
22
+ definition: {
23
+ ...s.definition,
24
+ imageTag: pinnedTag
25
+ }
26
+ };
27
+ })
22
28
  };
23
29
  }
24
30
  /** Check for known compatibility issues between services */
@@ -1 +1 @@
1
- {"version":3,"file":"version-manager.mjs","names":[],"sources":["../src/version-manager.ts"],"sourcesContent":["import { getServiceById } from \"./services/registry.js\";\nimport type { ResolverOutput, ServiceDefinition, Warning } from \"./types.js\";\n\n/** Get the pinned image tag for a service */\nexport function getImageTag(serviceId: string): string | undefined {\n\tconst svc = getServiceById(serviceId);\n\treturn svc?.imageTag;\n}\n\n/** Get the full image reference (image:tag) for a service */\nexport function getImageReference(serviceId: string): string | undefined {\n\tconst svc = getServiceById(serviceId);\n\tif (!svc) return undefined;\n\treturn `${svc.image}:${svc.imageTag}`;\n}\n\n/** Pin all service image tags in a resolved output (returns a copy) */\nexport function pinImageTags(resolved: ResolverOutput): ResolverOutput {\n\treturn {\n\t\t...resolved,\n\t\tservices: resolved.services.map((s) => ({\n\t\t\t...s,\n\t\t\tdefinition: { ...s.definition },\n\t\t})),\n\t};\n}\n\n/** Check for known compatibility issues between services */\nexport function checkCompatibility(services: ServiceDefinition[]): Warning[] {\n\tconst warnings: Warning[] = [];\n\tconst ids = new Set(services.map((s) => s.id));\n\n\t// Redis + Valkey conflict (should already be caught by resolver, but double-check)\n\tif (ids.has(\"redis\") && ids.has(\"valkey\")) {\n\t\twarnings.push({\n\t\t\ttype: \"compatibility\",\n\t\t\tmessage: \"Redis and Valkey cannot coexist. Choose one.\",\n\t\t});\n\t}\n\t// Caddy + Traefik conflict\n\tif (ids.has(\"caddy\") && ids.has(\"traefik\")) {\n\t\twarnings.push({\n\t\t\ttype: \"compatibility\",\n\t\t\tmessage: \"Caddy and Traefik cannot coexist. Choose one reverse proxy.\",\n\t\t});\n\t}\n\t// Multiple vector DBs warning\n\tconst vectorDbs = [\"qdrant\", \"chromadb\", \"weaviate\"].filter((id) => ids.has(id));\n\tif (vectorDbs.length > 1) {\n\t\twarnings.push({\n\t\t\ttype: \"compatibility\",\n\t\t\tmessage: `Multiple vector databases selected (${vectorDbs.join(\", \")}). Consider using just one to reduce resource usage.`,\n\t\t});\n\t}\n\t// GPU services without GPU\n\tconst gpuServices = services.filter((s) => s.gpuRequired);\n\tif (gpuServices.length > 0) {\n\t\twarnings.push({\n\t\t\ttype: \"compatibility\",\n\t\t\tmessage: `Services requiring GPU: ${gpuServices.map((s) => s.name).join(\", \")}. Ensure NVIDIA Container Toolkit is installed.`,\n\t\t});\n\t}\n\n\treturn warnings;\n}\n"],"mappings":";;;;AAIA,SAAgB,YAAY,WAAuC;AAElE,QADY,eAAe,UAAU,EACzB;;;AAIb,SAAgB,kBAAkB,WAAuC;CACxE,MAAM,MAAM,eAAe,UAAU;AACrC,KAAI,CAAC,IAAK,QAAO;AACjB,QAAO,GAAG,IAAI,MAAM,GAAG,IAAI;;;AAI5B,SAAgB,aAAa,UAA0C;AACtE,QAAO;EACN,GAAG;EACH,UAAU,SAAS,SAAS,KAAK,OAAO;GACvC,GAAG;GACH,YAAY,EAAE,GAAG,EAAE,YAAY;GAC/B,EAAE;EACH;;;AAIF,SAAgB,mBAAmB,UAA0C;CAC5E,MAAM,WAAsB,EAAE;CAC9B,MAAM,MAAM,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,GAAG,CAAC;AAG9C,KAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,CACxC,UAAS,KAAK;EACb,MAAM;EACN,SAAS;EACT,CAAC;AAGH,KAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,CACzC,UAAS,KAAK;EACb,MAAM;EACN,SAAS;EACT,CAAC;CAGH,MAAM,YAAY;EAAC;EAAU;EAAY;EAAW,CAAC,QAAQ,OAAO,IAAI,IAAI,GAAG,CAAC;AAChF,KAAI,UAAU,SAAS,EACtB,UAAS,KAAK;EACb,MAAM;EACN,SAAS,uCAAuC,UAAU,KAAK,KAAK,CAAC;EACrE,CAAC;CAGH,MAAM,cAAc,SAAS,QAAQ,MAAM,EAAE,YAAY;AACzD,KAAI,YAAY,SAAS,EACxB,UAAS,KAAK;EACb,MAAM;EACN,SAAS,2BAA2B,YAAY,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC;EAC9E,CAAC;AAGH,QAAO"}
1
+ {"version":3,"file":"version-manager.mjs","names":[],"sources":["../src/version-manager.ts"],"sourcesContent":["import { getServiceById } from \"./services/registry.js\";\nimport type { ResolverOutput, ServiceDefinition, Warning } from \"./types.js\";\n\n/** Get the pinned image tag for a service */\nexport function getImageTag(serviceId: string): string | undefined {\n\tconst svc = getServiceById(serviceId);\n\treturn svc?.imageTag;\n}\n\n/** Get the full image reference (image:tag) for a service */\nexport function getImageReference(serviceId: string): string | undefined {\n\tconst svc = getServiceById(serviceId);\n\tif (!svc) return undefined;\n\treturn `${svc.image}:${svc.imageTag}`;\n}\n\n/** Pin all service image tags to the registry-defined versions (returns a copy) */\nexport function pinImageTags(resolved: ResolverOutput): ResolverOutput {\n\treturn {\n\t\t...resolved,\n\t\tservices: resolved.services.map((s) => {\n\t\t\tconst registryDef = getServiceById(s.definition.id);\n\t\t\tconst pinnedTag = registryDef?.imageTag ?? s.definition.imageTag;\n\t\t\treturn {\n\t\t\t\t...s,\n\t\t\t\tdefinition: {\n\t\t\t\t\t...s.definition,\n\t\t\t\t\timageTag: pinnedTag,\n\t\t\t\t},\n\t\t\t};\n\t\t}),\n\t};\n}\n\n/** Check for known compatibility issues between services */\nexport function checkCompatibility(services: ServiceDefinition[]): Warning[] {\n\tconst warnings: Warning[] = [];\n\tconst ids = new Set(services.map((s) => s.id));\n\n\t// Redis + Valkey conflict (should already be caught by resolver, but double-check)\n\tif (ids.has(\"redis\") && ids.has(\"valkey\")) {\n\t\twarnings.push({\n\t\t\ttype: \"compatibility\",\n\t\t\tmessage: \"Redis and Valkey cannot coexist. Choose one.\",\n\t\t});\n\t}\n\t// Caddy + Traefik conflict\n\tif (ids.has(\"caddy\") && ids.has(\"traefik\")) {\n\t\twarnings.push({\n\t\t\ttype: \"compatibility\",\n\t\t\tmessage: \"Caddy and Traefik cannot coexist. Choose one reverse proxy.\",\n\t\t});\n\t}\n\t// Multiple vector DBs warning\n\tconst vectorDbs = [\"qdrant\", \"chromadb\", \"weaviate\"].filter((id) => ids.has(id));\n\tif (vectorDbs.length > 1) {\n\t\twarnings.push({\n\t\t\ttype: \"compatibility\",\n\t\t\tmessage: `Multiple vector databases selected (${vectorDbs.join(\", \")}). Consider using just one to reduce resource usage.`,\n\t\t});\n\t}\n\t// GPU services without GPU\n\tconst gpuServices = services.filter((s) => s.gpuRequired);\n\tif (gpuServices.length > 0) {\n\t\twarnings.push({\n\t\t\ttype: \"compatibility\",\n\t\t\tmessage: `Services requiring GPU: ${gpuServices.map((s) => s.name).join(\", \")}. Ensure NVIDIA Container Toolkit is installed.`,\n\t\t});\n\t}\n\n\treturn warnings;\n}\n"],"mappings":";;;;AAIA,SAAgB,YAAY,WAAuC;AAElE,QADY,eAAe,UAAU,EACzB;;;AAIb,SAAgB,kBAAkB,WAAuC;CACxE,MAAM,MAAM,eAAe,UAAU;AACrC,KAAI,CAAC,IAAK,QAAO;AACjB,QAAO,GAAG,IAAI,MAAM,GAAG,IAAI;;;AAI5B,SAAgB,aAAa,UAA0C;AACtE,QAAO;EACN,GAAG;EACH,UAAU,SAAS,SAAS,KAAK,MAAM;GAEtC,MAAM,YADc,eAAe,EAAE,WAAW,GAAG,EACpB,YAAY,EAAE,WAAW;AACxD,UAAO;IACN,GAAG;IACH,YAAY;KACX,GAAG,EAAE;KACL,UAAU;KACV;IACD;IACA;EACF;;;AAIF,SAAgB,mBAAmB,UAA0C;CAC5E,MAAM,WAAsB,EAAE;CAC9B,MAAM,MAAM,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,GAAG,CAAC;AAG9C,KAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,CACxC,UAAS,KAAK;EACb,MAAM;EACN,SAAS;EACT,CAAC;AAGH,KAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,CACzC,UAAS,KAAK;EACb,MAAM;EACN,SAAS;EACT,CAAC;CAGH,MAAM,YAAY;EAAC;EAAU;EAAY;EAAW,CAAC,QAAQ,OAAO,IAAI,IAAI,GAAG,CAAC;AAChF,KAAI,UAAU,SAAS,EACtB,UAAS,KAAK;EACb,MAAM;EACN,SAAS,uCAAuC,UAAU,KAAK,KAAK,CAAC;EACrE,CAAC;CAGH,MAAM,cAAc,SAAS,QAAQ,MAAM,EAAE,YAAY;AACzD,KAAI,YAAY,SAAS,EACxB,UAAS,KAAK;EACb,MAAM;EACN,SAAS,2BAA2B,YAAY,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC;EAC9E,CAAC;AAGH,QAAO"}
@@ -0,0 +1 @@
1
+ export { };