@better-openclaw/core 1.0.14 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/resolver.mjs.map +1 -1
- package/dist/services/definitions/authentik.d.mts +7 -0
- package/dist/services/definitions/authentik.d.mts.map +1 -0
- package/dist/services/definitions/authentik.mjs +105 -0
- package/dist/services/definitions/authentik.mjs.map +1 -0
- package/dist/services/definitions/crowdsec.d.mts +7 -0
- package/dist/services/definitions/crowdsec.d.mts.map +1 -0
- package/dist/services/definitions/crowdsec.mjs +62 -0
- package/dist/services/definitions/crowdsec.mjs.map +1 -0
- package/dist/services/definitions/ghost.d.mts +7 -0
- package/dist/services/definitions/ghost.d.mts.map +1 -0
- package/dist/services/definitions/ghost.mjs +58 -0
- package/dist/services/definitions/ghost.mjs.map +1 -0
- package/dist/services/definitions/homeassistant.d.mts +7 -0
- package/dist/services/definitions/homeassistant.d.mts.map +1 -0
- package/dist/services/definitions/homeassistant.mjs +61 -0
- package/dist/services/definitions/homeassistant.mjs.map +1 -0
- package/dist/services/definitions/immich.d.mts +7 -0
- package/dist/services/definitions/immich.d.mts.map +1 -0
- package/dist/services/definitions/immich.mjs +92 -0
- package/dist/services/definitions/immich.mjs.map +1 -0
- package/dist/services/definitions/index.d.mts +14 -1
- package/dist/services/definitions/index.d.mts.map +1 -1
- package/dist/services/definitions/index.mjs +27 -1
- package/dist/services/definitions/index.mjs.map +1 -1
- package/dist/services/definitions/jellyfin.d.mts +7 -0
- package/dist/services/definitions/jellyfin.d.mts.map +1 -0
- package/dist/services/definitions/jellyfin.mjs +62 -0
- package/dist/services/definitions/jellyfin.mjs.map +1 -0
- package/dist/services/definitions/jenkins.d.mts +7 -0
- package/dist/services/definitions/jenkins.d.mts.map +1 -0
- package/dist/services/definitions/jenkins.mjs +62 -0
- package/dist/services/definitions/jenkins.mjs.map +1 -0
- package/dist/services/definitions/loki.d.mts +7 -0
- package/dist/services/definitions/loki.d.mts.map +1 -0
- package/dist/services/definitions/loki.mjs +51 -0
- package/dist/services/definitions/loki.mjs.map +1 -0
- package/dist/services/definitions/milvus.d.mts +7 -0
- package/dist/services/definitions/milvus.d.mts.map +1 -0
- package/dist/services/definitions/milvus.mjs +75 -0
- package/dist/services/definitions/milvus.mjs.map +1 -0
- package/dist/services/definitions/nextcloud.d.mts +7 -0
- package/dist/services/definitions/nextcloud.d.mts.map +1 -0
- package/dist/services/definitions/nextcloud.mjs +80 -0
- package/dist/services/definitions/nextcloud.mjs.map +1 -0
- package/dist/services/definitions/signoz.d.mts +7 -0
- package/dist/services/definitions/signoz.d.mts.map +1 -0
- package/dist/services/definitions/signoz.mjs +54 -0
- package/dist/services/definitions/signoz.mjs.map +1 -0
- package/dist/services/definitions/supabase.d.mts +7 -0
- package/dist/services/definitions/supabase.d.mts.map +1 -0
- package/dist/services/definitions/supabase.mjs +69 -0
- package/dist/services/definitions/supabase.mjs.map +1 -0
- package/dist/services/definitions/vaultwarden.d.mts +7 -0
- package/dist/services/definitions/vaultwarden.d.mts.map +1 -0
- package/dist/services/definitions/vaultwarden.mjs +63 -0
- package/dist/services/definitions/vaultwarden.mjs.map +1 -0
- package/package.json +1 -1
- package/src/resolver.ts +10 -10
- package/src/services/definitions/authentik.ts +106 -0
- package/src/services/definitions/crowdsec.ts +66 -0
- package/src/services/definitions/ghost.ts +60 -0
- package/src/services/definitions/homeassistant.ts +65 -0
- package/src/services/definitions/immich.ts +93 -0
- package/src/services/definitions/index.ts +39 -0
- package/src/services/definitions/jellyfin.ts +66 -0
- package/src/services/definitions/jenkins.ts +67 -0
- package/src/services/definitions/loki.ts +53 -0
- package/src/services/definitions/milvus.ts +84 -0
- package/src/services/definitions/nextcloud.ts +81 -0
- package/src/services/definitions/signoz.ts +54 -0
- package/src/services/definitions/supabase.ts +73 -0
- package/src/services/definitions/vaultwarden.ts +68 -0
package/dist/resolver.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.mjs","names":[],"sources":["../src/resolver.ts"],"sourcesContent":["import { getServiceById } from \"./services/registry.js\";\nimport { getSkillPackById } from \"./skills/registry.js\";\nimport type {\n\tAddedDependency,\n\tResolvedService,\n\tResolverError,\n\tResolverInput,\n\tResolverOutput,\n\tServiceDefinition,\n\tWarning,\n} from \"./types.js\";\n\nexport interface MemoryThresholds {\n\tinfo: number;\n\twarning: number;\n\tcritical: number;\n}\n\nconst DEFAULT_MEMORY_THRESHOLDS: MemoryThresholds = {\n\tinfo: 2048,\n\twarning: 4096,\n\tcritical: 8192,\n};\n\n/**\n * Resolves user selections into a complete, valid service list.\n *\n * Algorithm:\n * 1. Expand skill pack requirements into service list\n * 2. Resolve transitive `requires` dependencies (iterate until stable)\n * 3. Detect `conflictsWith` violations\n * 4. Check platform compatibility and GPU requirements\n * 5. Estimate total memory (sum minMemoryMB)\n * 6. Deduplicate\n * 7. Topological sort by dependency graph, alphabetical for ties\n *\n * Deterministic: same input -> same output, always.\n */\nexport function resolve(input: ResolverInput): ResolverOutput {\n\tconst addedDependencies: AddedDependency[] = [];\n\tconst warnings: Warning[] = [];\n\tconst errors: ResolverError[] = [];\n\n\t// Track all service IDs needed\n\tconst serviceIds = new Set<string>(input.services);\n\tconst serviceAddedBy = new Map<string, ResolvedService[\"addedBy\"]>();\n\n\t// Mark user-selected services\n\tfor (const id of input.services) {\n\t\tserviceAddedBy.set(id, \"user\");\n\t}\n\n\t// 1. Expand skill pack requirements\n\tfor (const packId of input.skillPacks) {\n\t\tconst pack = getSkillPackById(packId);\n\t\tif (!pack) {\n\t\t\terrors.push({\n\t\t\t\ttype: \"unknown_skill_pack\",\n\t\t\t\tmessage: `Unknown skill pack: \"${packId}\"`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const requiredService of pack.requiredServices) {\n\t\t\tif (!serviceIds.has(requiredService)) {\n\t\t\t\tserviceIds.add(requiredService);\n\t\t\t\tserviceAddedBy.set(requiredService, \"skill-pack\");\n\t\t\t\taddedDependencies.push({\n\t\t\t\t\tservice: requiredService,\n\t\t\t\t\treason: `Required by skill pack: ${pack.name}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add proxy if specified\n\tif (input.proxy && input.proxy !== \"none\") {\n\t\tif (!serviceIds.has(input.proxy)) {\n\t\t\tserviceIds.add(input.proxy);\n\t\t\tserviceAddedBy.set(input.proxy, \"proxy\");\n\t\t\taddedDependencies.push({\n\t\t\t\tservice: input.proxy,\n\t\t\t\treason: `Selected as reverse proxy`,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Add monitoring stack if requested\n\tif (input.monitoring) {\n\t\tconst monitoringServices = [\"uptime-kuma\", \"grafana\", \"prometheus\"];\n\t\tfor (const svc of monitoringServices) {\n\t\t\tif (!serviceIds.has(svc)) {\n\t\t\t\tserviceIds.add(svc);\n\t\t\t\tserviceAddedBy.set(svc, \"monitoring\");\n\t\t\t\taddedDependencies.push({\n\t\t\t\t\tservice: svc,\n\t\t\t\t\treason: \"Included with monitoring stack\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate all service IDs exist\n\tconst unknownIds: string[] = [];\n\tfor (const id of serviceIds) {\n\t\tif (!getServiceById(id)) {\n\t\t\tunknownIds.push(id);\n\t\t}\n\t}\n\tif (unknownIds.length > 0) {\n\t\tfor (const id of unknownIds) {\n\t\t\terrors.push({\n\t\t\t\ttype: \"unknown_service\",\n\t\t\t\tmessage: `Unknown service: \"${id}\"`,\n\t\t\t});\n\t\t\tserviceIds.delete(id);\n\t\t}\n\t}\n\n\t// 2. Resolve transitive dependencies (iterate until stable)\n\tlet changed = true;\n\tconst maxIterations = 50; // safety bound\n\tlet iteration = 0;\n\twhile (changed && iteration < maxIterations) {\n\t\tchanged = false;\n\t\titeration++;\n\t\tfor (const id of [...serviceIds]) {\n\t\t\tconst def = getServiceById(id);\n\t\t\tif (!def) continue;\n\t\t\tfor (const reqId of def.requires) {\n\t\t\t\tif (!serviceIds.has(reqId)) {\n\t\t\t\t\tserviceIds.add(reqId);\n\t\t\t\t\tserviceAddedBy.set(reqId, \"dependency\");\n\t\t\t\t\taddedDependencies.push({\n\t\t\t\t\t\tservice: reqId,\n\t\t\t\t\t\treason: `Required by ${def.name}`,\n\t\t\t\t\t});\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (iteration >= maxIterations) {\n\t\twarnings.push({\n\t\t\ttype: \"resolution\",\n\t\t\tmessage: `Dependency resolution reached maximum iterations (${maxIterations}). Some transitive dependencies may not be fully resolved.`,\n\t\t});\n\t}\n\n\t// Check recommended services\n\tfor (const id of serviceIds) {\n\t\tconst def = getServiceById(id);\n\t\tif (!def) continue;\n\t\tfor (const recId of def.recommends) {\n\t\t\tif (!serviceIds.has(recId) && getServiceById(recId)) {\n\t\t\t\twarnings.push({\n\t\t\t\t\ttype: \"recommendation\",\n\t\t\t\t\tmessage: `${def.name} recommends \"${recId}\" for enhanced functionality`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// 3. Detect conflicts\n\tconst resolvedDefs: ServiceDefinition[] = [];\n\tfor (const id of serviceIds) {\n\t\tconst def = getServiceById(id);\n\t\tif (def) resolvedDefs.push(def);\n\t}\n\n\tfor (let i = 0; i < resolvedDefs.length; i++) {\n\t\tfor (let j = i + 1; j < resolvedDefs.length; j++) {\n\t\t\tconst a = resolvedDefs[i]!;\n\t\t\tconst b = resolvedDefs[j]!;\n\t\t\tif (a.conflictsWith.includes(b.id) || b.conflictsWith.includes(a.id)) {\n\t\t\t\terrors.push({\n\t\t\t\t\ttype: \"conflict\",\n\t\t\t\t\tmessage: `${a.name} and ${b.name} cannot be used together`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// 4. Check platform compatibility\n\tif (input.platform) {\n\t\tfor (const def of resolvedDefs) {\n\t\t\tif (def.platforms && def.platforms.length > 0 && !def.platforms.includes(input.platform)) {\n\t\t\t\twarnings.push({\n\t\t\t\t\ttype: \"platform\",\n\t\t\t\t\tmessage: `${def.name} may not be compatible with ${input.platform}. Supported: ${def.platforms.join(\", \")}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check GPU requirements\n\tconst gpuServices = resolvedDefs.filter((d) => d.gpuRequired);\n\tif (gpuServices.length > 0 && !input.gpu) {\n\t\tfor (const svc of gpuServices) {\n\t\t\twarnings.push({\n\t\t\t\ttype: \"gpu\",\n\t\t\t\tmessage: `${svc.name} requires GPU passthrough. Enable --gpu flag for optimal performance.`,\n\t\t\t});\n\t\t}\n\t}\n\n\t// 5. Estimate total memory\n\tlet estimatedMemoryMB = 512; // Base for OpenClaw itself\n\tfor (const def of resolvedDefs) {\n\t\testimatedMemoryMB += def.minMemoryMB ?? 128;\n\t}\n\n\t// Memory warnings\n\tconst thresholds = input.memoryThresholds ?? DEFAULT_MEMORY_THRESHOLDS;\n\tif (estimatedMemoryMB > thresholds.critical) {\n\t\twarnings.push({\n\t\t\ttype: \"memory\",\n\t\t\tmessage: `Estimated ${(estimatedMemoryMB / 1024).toFixed(1)}GB RAM required. Ensure your server has sufficient resources.`,\n\t\t});\n\t} else if (estimatedMemoryMB > thresholds.warning) {\n\t\twarnings.push({\n\t\t\ttype: \"memory\",\n\t\t\tmessage: `Estimated ${(estimatedMemoryMB / 1024).toFixed(1)}GB RAM required. A server with at least 8GB RAM is recommended.`,\n\t\t});\n\t} else if (estimatedMemoryMB > thresholds.info) {\n\t\twarnings.push({\n\t\t\ttype: \"memory\",\n\t\t\tmessage: `Estimated ${(estimatedMemoryMB / 1024).toFixed(1)}GB RAM required.`,\n\t\t});\n\t}\n\n\t// 7. Topological sort by dependency graph\n\tconst sorted = topologicalSort(resolvedDefs);\n\n\t// Build final resolved services list\n\tconst services: ResolvedService[] = sorted.map((def) => ({\n\t\tdefinition: def,\n\t\taddedBy: serviceAddedBy.get(def.id) ?? \"user\",\n\t}));\n\n\tconst isValid = errors.length === 0;\n\n\treturn {\n\tservices,\n\taddedDependencies,\n\tremovedConflicts: [],\n\twarnings,\n\terrors,\n\tisValid,\n\testimatedMemoryMB,\n\taiProviders: input.aiProviders ?? [],\n\tgsdRuntimes: []\n};\n}\n\n/**\n * Topological sort using Kahn's algorithm.\n * Ties broken alphabetically by service ID for determinism.\n */\nfunction topologicalSort(definitions: ServiceDefinition[]): ServiceDefinition[] {\n\tconst idSet = new Set(definitions.map((d) => d.id));\n\tconst graph = new Map<string, string[]>(); // id -> list of IDs that depend on it\n\tconst inDegree = new Map<string, number>();\n\n\t// Initialize\n\tfor (const def of definitions) {\n\t\tgraph.set(def.id, []);\n\t\tinDegree.set(def.id, 0);\n\t}\n\n\t// Build edges: if A requires B, then B -> A (B must come before A)\n\tfor (const def of definitions) {\n\t\tfor (const reqId of [...def.requires, ...def.dependsOn]) {\n\t\t\tif (idSet.has(reqId)) {\n\t\t\t\tgraph.get(reqId)?.push(def.id);\n\t\t\t\tinDegree.set(def.id, (inDegree.get(def.id) ?? 0) + 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Kahn's algorithm with alphabetical tie-breaking\n\tconst queue: string[] = [];\n\tfor (const [id, deg] of inDegree) {\n\t\tif (deg === 0) queue.push(id);\n\t}\n\tqueue.sort(); // alphabetical for determinism\n\n\tconst sorted: ServiceDefinition[] = [];\n\tconst defMap = new Map(definitions.map((d) => [d.id, d]));\n\n\twhile (queue.length > 0) {\n\t\tconst id = queue.shift()!;\n\t\tconst def = defMap.get(id);\n\t\tif (def) sorted.push(def);\n\n\t\tconst neighbors = graph.get(id) ?? [];\n\t\tconst newReady: string[] = [];\n\t\tfor (const neighbor of neighbors) {\n\t\t\tconst deg = (inDegree.get(neighbor) ?? 0) - 1;\n\t\t\tinDegree.set(neighbor, deg);\n\t\t\tif (deg === 0) newReady.push(neighbor);\n\t\t}\n\t\t// Sort newly ready nodes alphabetically and add to queue in order\n\t\tnewReady.sort();\n\t\tqueue.push(...newReady);\n\t}\n\n\t// If not all nodes are in sorted, there's a cycle\n\tif (sorted.length < definitions.length) {\n\t\t// Return what we have plus remaining (cycle detected but we still produce output)\n\t\tconst sortedIds = new Set(sorted.map((d) => d.id));\n\t\tconst remaining = definitions.filter((d) => !sortedIds.has(d.id));\n\t\tremaining.sort((a, b) => a.id.localeCompare(b.id));\n\t\tsorted.push(...remaining);\n\t}\n\n\treturn sorted;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolver.mjs","names":[],"sources":["../src/resolver.ts"],"sourcesContent":["import { getServiceById } from \"./services/registry.js\";\nimport { getSkillPackById } from \"./skills/registry.js\";\nimport type {\n\tAddedDependency,\n\tResolvedService,\n\tResolverError,\n\tResolverInput,\n\tResolverOutput,\n\tServiceDefinition,\n\tWarning,\n} from \"./types.js\";\n\nexport interface MemoryThresholds {\n\tinfo: number;\n\twarning: number;\n\tcritical: number;\n}\n\nconst DEFAULT_MEMORY_THRESHOLDS: MemoryThresholds = {\n\tinfo: 2048,\n\twarning: 4096,\n\tcritical: 8192,\n};\n\n/**\n * Resolves user selections into a complete, valid service list.\n *\n * Algorithm:\n * 1. Expand skill pack requirements into service list\n * 2. Resolve transitive `requires` dependencies (iterate until stable)\n * 3. Detect `conflictsWith` violations\n * 4. Check platform compatibility and GPU requirements\n * 5. Estimate total memory (sum minMemoryMB)\n * 6. Deduplicate\n * 7. Topological sort by dependency graph, alphabetical for ties\n *\n * Deterministic: same input -> same output, always.\n */\nexport function resolve(input: ResolverInput): ResolverOutput {\n\tconst addedDependencies: AddedDependency[] = [];\n\tconst warnings: Warning[] = [];\n\tconst errors: ResolverError[] = [];\n\n\t// Track all service IDs needed\n\tconst serviceIds = new Set<string>(input.services);\n\tconst serviceAddedBy = new Map<string, ResolvedService[\"addedBy\"]>();\n\n\t// Mark user-selected services\n\tfor (const id of input.services) {\n\t\tserviceAddedBy.set(id, \"user\");\n\t}\n\n\t// 1. Expand skill pack requirements\n\tfor (const packId of input.skillPacks) {\n\t\tconst pack = getSkillPackById(packId);\n\t\tif (!pack) {\n\t\t\terrors.push({\n\t\t\t\ttype: \"unknown_skill_pack\",\n\t\t\t\tmessage: `Unknown skill pack: \"${packId}\"`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const requiredService of pack.requiredServices) {\n\t\t\tif (!serviceIds.has(requiredService)) {\n\t\t\t\tserviceIds.add(requiredService);\n\t\t\t\tserviceAddedBy.set(requiredService, \"skill-pack\");\n\t\t\t\taddedDependencies.push({\n\t\t\t\t\tservice: requiredService,\n\t\t\t\t\treason: `Required by skill pack: ${pack.name}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add proxy if specified\n\tif (input.proxy && input.proxy !== \"none\") {\n\t\tif (!serviceIds.has(input.proxy)) {\n\t\t\tserviceIds.add(input.proxy);\n\t\t\tserviceAddedBy.set(input.proxy, \"proxy\");\n\t\t\taddedDependencies.push({\n\t\t\t\tservice: input.proxy,\n\t\t\t\treason: `Selected as reverse proxy`,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Add monitoring stack if requested\n\tif (input.monitoring) {\n\t\tconst monitoringServices = [\"uptime-kuma\", \"grafana\", \"prometheus\"];\n\t\tfor (const svc of monitoringServices) {\n\t\t\tif (!serviceIds.has(svc)) {\n\t\t\t\tserviceIds.add(svc);\n\t\t\t\tserviceAddedBy.set(svc, \"monitoring\");\n\t\t\t\taddedDependencies.push({\n\t\t\t\t\tservice: svc,\n\t\t\t\t\treason: \"Included with monitoring stack\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate all service IDs exist\n\tconst unknownIds: string[] = [];\n\tfor (const id of serviceIds) {\n\t\tif (!getServiceById(id)) {\n\t\t\tunknownIds.push(id);\n\t\t}\n\t}\n\tif (unknownIds.length > 0) {\n\t\tfor (const id of unknownIds) {\n\t\t\terrors.push({\n\t\t\t\ttype: \"unknown_service\",\n\t\t\t\tmessage: `Unknown service: \"${id}\"`,\n\t\t\t});\n\t\t\tserviceIds.delete(id);\n\t\t}\n\t}\n\n\t// 2. Resolve transitive dependencies (iterate until stable)\n\tlet changed = true;\n\tconst maxIterations = 50; // safety bound\n\tlet iteration = 0;\n\twhile (changed && iteration < maxIterations) {\n\t\tchanged = false;\n\t\titeration++;\n\t\tfor (const id of [...serviceIds]) {\n\t\t\tconst def = getServiceById(id);\n\t\t\tif (!def) continue;\n\t\t\tfor (const reqId of def.requires) {\n\t\t\t\tif (!serviceIds.has(reqId)) {\n\t\t\t\t\tserviceIds.add(reqId);\n\t\t\t\t\tserviceAddedBy.set(reqId, \"dependency\");\n\t\t\t\t\taddedDependencies.push({\n\t\t\t\t\t\tservice: reqId,\n\t\t\t\t\t\treason: `Required by ${def.name}`,\n\t\t\t\t\t});\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (iteration >= maxIterations) {\n\t\twarnings.push({\n\t\t\ttype: \"resolution\",\n\t\t\tmessage: `Dependency resolution reached maximum iterations (${maxIterations}). Some transitive dependencies may not be fully resolved.`,\n\t\t});\n\t}\n\n\t// Check recommended services\n\tfor (const id of serviceIds) {\n\t\tconst def = getServiceById(id);\n\t\tif (!def) continue;\n\t\tfor (const recId of def.recommends) {\n\t\t\tif (!serviceIds.has(recId) && getServiceById(recId)) {\n\t\t\t\twarnings.push({\n\t\t\t\t\ttype: \"recommendation\",\n\t\t\t\t\tmessage: `${def.name} recommends \"${recId}\" for enhanced functionality`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// 3. Detect conflicts\n\tconst resolvedDefs: ServiceDefinition[] = [];\n\tfor (const id of serviceIds) {\n\t\tconst def = getServiceById(id);\n\t\tif (def) resolvedDefs.push(def);\n\t}\n\n\tfor (let i = 0; i < resolvedDefs.length; i++) {\n\t\tfor (let j = i + 1; j < resolvedDefs.length; j++) {\n\t\t\tconst a = resolvedDefs[i]!;\n\t\t\tconst b = resolvedDefs[j]!;\n\t\t\tif (a.conflictsWith.includes(b.id) || b.conflictsWith.includes(a.id)) {\n\t\t\t\terrors.push({\n\t\t\t\t\ttype: \"conflict\",\n\t\t\t\t\tmessage: `${a.name} and ${b.name} cannot be used together`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// 4. Check platform compatibility\n\tif (input.platform) {\n\t\tfor (const def of resolvedDefs) {\n\t\t\tif (def.platforms && def.platforms.length > 0 && !def.platforms.includes(input.platform)) {\n\t\t\t\twarnings.push({\n\t\t\t\t\ttype: \"platform\",\n\t\t\t\t\tmessage: `${def.name} may not be compatible with ${input.platform}. Supported: ${def.platforms.join(\", \")}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check GPU requirements\n\tconst gpuServices = resolvedDefs.filter((d) => d.gpuRequired);\n\tif (gpuServices.length > 0 && !input.gpu) {\n\t\tfor (const svc of gpuServices) {\n\t\t\twarnings.push({\n\t\t\t\ttype: \"gpu\",\n\t\t\t\tmessage: `${svc.name} requires GPU passthrough. Enable --gpu flag for optimal performance.`,\n\t\t\t});\n\t\t}\n\t}\n\n\t// 5. Estimate total memory\n\tlet estimatedMemoryMB = 512; // Base for OpenClaw itself\n\tfor (const def of resolvedDefs) {\n\t\testimatedMemoryMB += def.minMemoryMB ?? 128;\n\t}\n\n\t// Memory warnings\n\tconst thresholds = input.memoryThresholds ?? DEFAULT_MEMORY_THRESHOLDS;\n\tif (estimatedMemoryMB > thresholds.critical) {\n\t\twarnings.push({\n\t\t\ttype: \"memory\",\n\t\t\tmessage: `Estimated ${(estimatedMemoryMB / 1024).toFixed(1)}GB RAM required. Ensure your server has sufficient resources.`,\n\t\t});\n\t} else if (estimatedMemoryMB > thresholds.warning) {\n\t\twarnings.push({\n\t\t\ttype: \"memory\",\n\t\t\tmessage: `Estimated ${(estimatedMemoryMB / 1024).toFixed(1)}GB RAM required. A server with at least 8GB RAM is recommended.`,\n\t\t});\n\t} else if (estimatedMemoryMB > thresholds.info) {\n\t\twarnings.push({\n\t\t\ttype: \"memory\",\n\t\t\tmessage: `Estimated ${(estimatedMemoryMB / 1024).toFixed(1)}GB RAM required.`,\n\t\t});\n\t}\n\n\t// 7. Topological sort by dependency graph\n\tconst sorted = topologicalSort(resolvedDefs);\n\n\t// Build final resolved services list\n\tconst services: ResolvedService[] = sorted.map((def) => ({\n\t\tdefinition: def,\n\t\taddedBy: serviceAddedBy.get(def.id) ?? \"user\",\n\t}));\n\n\tconst isValid = errors.length === 0;\n\n\treturn {\n\t\tservices,\n\t\taddedDependencies,\n\t\tremovedConflicts: [],\n\t\twarnings,\n\t\terrors,\n\t\tisValid,\n\t\testimatedMemoryMB,\n\t\taiProviders: input.aiProviders ?? [],\n\t\tgsdRuntimes: [],\n\t};\n}\n\n/**\n * Topological sort using Kahn's algorithm.\n * Ties broken alphabetically by service ID for determinism.\n */\nfunction topologicalSort(definitions: ServiceDefinition[]): ServiceDefinition[] {\n\tconst idSet = new Set(definitions.map((d) => d.id));\n\tconst graph = new Map<string, string[]>(); // id -> list of IDs that depend on it\n\tconst inDegree = new Map<string, number>();\n\n\t// Initialize\n\tfor (const def of definitions) {\n\t\tgraph.set(def.id, []);\n\t\tinDegree.set(def.id, 0);\n\t}\n\n\t// Build edges: if A requires B, then B -> A (B must come before A)\n\tfor (const def of definitions) {\n\t\tfor (const reqId of [...def.requires, ...def.dependsOn]) {\n\t\t\tif (idSet.has(reqId)) {\n\t\t\t\tgraph.get(reqId)?.push(def.id);\n\t\t\t\tinDegree.set(def.id, (inDegree.get(def.id) ?? 0) + 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Kahn's algorithm with alphabetical tie-breaking\n\tconst queue: string[] = [];\n\tfor (const [id, deg] of inDegree) {\n\t\tif (deg === 0) queue.push(id);\n\t}\n\tqueue.sort(); // alphabetical for determinism\n\n\tconst sorted: ServiceDefinition[] = [];\n\tconst defMap = new Map(definitions.map((d) => [d.id, d]));\n\n\twhile (queue.length > 0) {\n\t\tconst id = queue.shift()!;\n\t\tconst def = defMap.get(id);\n\t\tif (def) sorted.push(def);\n\n\t\tconst neighbors = graph.get(id) ?? [];\n\t\tconst newReady: string[] = [];\n\t\tfor (const neighbor of neighbors) {\n\t\t\tconst deg = (inDegree.get(neighbor) ?? 0) - 1;\n\t\t\tinDegree.set(neighbor, deg);\n\t\t\tif (deg === 0) newReady.push(neighbor);\n\t\t}\n\t\t// Sort newly ready nodes alphabetically and add to queue in order\n\t\tnewReady.sort();\n\t\tqueue.push(...newReady);\n\t}\n\n\t// If not all nodes are in sorted, there's a cycle\n\tif (sorted.length < definitions.length) {\n\t\t// Return what we have plus remaining (cycle detected but we still produce output)\n\t\tconst sortedIds = new Set(sorted.map((d) => d.id));\n\t\tconst remaining = definitions.filter((d) => !sortedIds.has(d.id));\n\t\tremaining.sort((a, b) => a.id.localeCompare(b.id));\n\t\tsorted.push(...remaining);\n\t}\n\n\treturn sorted;\n}\n"],"mappings":";;;;AAkBA,MAAM,4BAA8C;CACnD,MAAM;CACN,SAAS;CACT,UAAU;CACV;;;;;;;;;;;;;;;AAgBD,SAAgB,QAAQ,OAAsC;CAC7D,MAAM,oBAAuC,EAAE;CAC/C,MAAM,WAAsB,EAAE;CAC9B,MAAM,SAA0B,EAAE;CAGlC,MAAM,aAAa,IAAI,IAAY,MAAM,SAAS;CAClD,MAAM,iCAAiB,IAAI,KAAyC;AAGpE,MAAK,MAAM,MAAM,MAAM,SACtB,gBAAe,IAAI,IAAI,OAAO;AAI/B,MAAK,MAAM,UAAU,MAAM,YAAY;EACtC,MAAM,OAAO,iBAAiB,OAAO;AACrC,MAAI,CAAC,MAAM;AACV,UAAO,KAAK;IACX,MAAM;IACN,SAAS,wBAAwB,OAAO;IACxC,CAAC;AACF;;AAED,OAAK,MAAM,mBAAmB,KAAK,iBAClC,KAAI,CAAC,WAAW,IAAI,gBAAgB,EAAE;AACrC,cAAW,IAAI,gBAAgB;AAC/B,kBAAe,IAAI,iBAAiB,aAAa;AACjD,qBAAkB,KAAK;IACtB,SAAS;IACT,QAAQ,2BAA2B,KAAK;IACxC,CAAC;;;AAML,KAAI,MAAM,SAAS,MAAM,UAAU,QAClC;MAAI,CAAC,WAAW,IAAI,MAAM,MAAM,EAAE;AACjC,cAAW,IAAI,MAAM,MAAM;AAC3B,kBAAe,IAAI,MAAM,OAAO,QAAQ;AACxC,qBAAkB,KAAK;IACtB,SAAS,MAAM;IACf,QAAQ;IACR,CAAC;;;AAKJ,KAAI,MAAM,YAET;OAAK,MAAM,OADgB;GAAC;GAAe;GAAW;GAAa,CAElE,KAAI,CAAC,WAAW,IAAI,IAAI,EAAE;AACzB,cAAW,IAAI,IAAI;AACnB,kBAAe,IAAI,KAAK,aAAa;AACrC,qBAAkB,KAAK;IACtB,SAAS;IACT,QAAQ;IACR,CAAC;;;CAML,MAAM,aAAuB,EAAE;AAC/B,MAAK,MAAM,MAAM,WAChB,KAAI,CAAC,eAAe,GAAG,CACtB,YAAW,KAAK,GAAG;AAGrB,KAAI,WAAW,SAAS,EACvB,MAAK,MAAM,MAAM,YAAY;AAC5B,SAAO,KAAK;GACX,MAAM;GACN,SAAS,qBAAqB,GAAG;GACjC,CAAC;AACF,aAAW,OAAO,GAAG;;CAKvB,IAAI,UAAU;CACd,MAAM,gBAAgB;CACtB,IAAI,YAAY;AAChB,QAAO,WAAW,YAAY,eAAe;AAC5C,YAAU;AACV;AACA,OAAK,MAAM,MAAM,CAAC,GAAG,WAAW,EAAE;GACjC,MAAM,MAAM,eAAe,GAAG;AAC9B,OAAI,CAAC,IAAK;AACV,QAAK,MAAM,SAAS,IAAI,SACvB,KAAI,CAAC,WAAW,IAAI,MAAM,EAAE;AAC3B,eAAW,IAAI,MAAM;AACrB,mBAAe,IAAI,OAAO,aAAa;AACvC,sBAAkB,KAAK;KACtB,SAAS;KACT,QAAQ,eAAe,IAAI;KAC3B,CAAC;AACF,cAAU;;;;AAMd,KAAI,aAAa,cAChB,UAAS,KAAK;EACb,MAAM;EACN,SAAS,qDAAqD,cAAc;EAC5E,CAAC;AAIH,MAAK,MAAM,MAAM,YAAY;EAC5B,MAAM,MAAM,eAAe,GAAG;AAC9B,MAAI,CAAC,IAAK;AACV,OAAK,MAAM,SAAS,IAAI,WACvB,KAAI,CAAC,WAAW,IAAI,MAAM,IAAI,eAAe,MAAM,CAClD,UAAS,KAAK;GACb,MAAM;GACN,SAAS,GAAG,IAAI,KAAK,eAAe,MAAM;GAC1C,CAAC;;CAML,MAAM,eAAoC,EAAE;AAC5C,MAAK,MAAM,MAAM,YAAY;EAC5B,MAAM,MAAM,eAAe,GAAG;AAC9B,MAAI,IAAK,cAAa,KAAK,IAAI;;AAGhC,MAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,IACxC,MAAK,IAAI,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;EACjD,MAAM,IAAI,aAAa;EACvB,MAAM,IAAI,aAAa;AACvB,MAAI,EAAE,cAAc,SAAS,EAAE,GAAG,IAAI,EAAE,cAAc,SAAS,EAAE,GAAG,CACnE,QAAO,KAAK;GACX,MAAM;GACN,SAAS,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK;GACjC,CAAC;;AAML,KAAI,MAAM,UACT;OAAK,MAAM,OAAO,aACjB,KAAI,IAAI,aAAa,IAAI,UAAU,SAAS,KAAK,CAAC,IAAI,UAAU,SAAS,MAAM,SAAS,CACvF,UAAS,KAAK;GACb,MAAM;GACN,SAAS,GAAG,IAAI,KAAK,8BAA8B,MAAM,SAAS,eAAe,IAAI,UAAU,KAAK,KAAK;GACzG,CAAC;;CAML,MAAM,cAAc,aAAa,QAAQ,MAAM,EAAE,YAAY;AAC7D,KAAI,YAAY,SAAS,KAAK,CAAC,MAAM,IACpC,MAAK,MAAM,OAAO,YACjB,UAAS,KAAK;EACb,MAAM;EACN,SAAS,GAAG,IAAI,KAAK;EACrB,CAAC;CAKJ,IAAI,oBAAoB;AACxB,MAAK,MAAM,OAAO,aACjB,sBAAqB,IAAI,eAAe;CAIzC,MAAM,aAAa,MAAM,oBAAoB;AAC7C,KAAI,oBAAoB,WAAW,SAClC,UAAS,KAAK;EACb,MAAM;EACN,SAAS,cAAc,oBAAoB,MAAM,QAAQ,EAAE,CAAC;EAC5D,CAAC;UACQ,oBAAoB,WAAW,QACzC,UAAS,KAAK;EACb,MAAM;EACN,SAAS,cAAc,oBAAoB,MAAM,QAAQ,EAAE,CAAC;EAC5D,CAAC;UACQ,oBAAoB,WAAW,KACzC,UAAS,KAAK;EACb,MAAM;EACN,SAAS,cAAc,oBAAoB,MAAM,QAAQ,EAAE,CAAC;EAC5D,CAAC;AAcH,QAAO;EACN,UAXc,gBAAgB,aAAa,CAGD,KAAK,SAAS;GACxD,YAAY;GACZ,SAAS,eAAe,IAAI,IAAI,GAAG,IAAI;GACvC,EAAE;EAMF;EACA,kBAAkB,EAAE;EACpB;EACA;EACA,SARe,OAAO,WAAW;EASjC;EACA,aAAa,MAAM,eAAe,EAAE;EACpC,aAAa,EAAE;EACf;;;;;;AAOF,SAAS,gBAAgB,aAAuD;CAC/E,MAAM,QAAQ,IAAI,IAAI,YAAY,KAAK,MAAM,EAAE,GAAG,CAAC;CACnD,MAAM,wBAAQ,IAAI,KAAuB;CACzC,MAAM,2BAAW,IAAI,KAAqB;AAG1C,MAAK,MAAM,OAAO,aAAa;AAC9B,QAAM,IAAI,IAAI,IAAI,EAAE,CAAC;AACrB,WAAS,IAAI,IAAI,IAAI,EAAE;;AAIxB,MAAK,MAAM,OAAO,YACjB,MAAK,MAAM,SAAS,CAAC,GAAG,IAAI,UAAU,GAAG,IAAI,UAAU,CACtD,KAAI,MAAM,IAAI,MAAM,EAAE;AACrB,QAAM,IAAI,MAAM,EAAE,KAAK,IAAI,GAAG;AAC9B,WAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE;;CAMxD,MAAM,QAAkB,EAAE;AAC1B,MAAK,MAAM,CAAC,IAAI,QAAQ,SACvB,KAAI,QAAQ,EAAG,OAAM,KAAK,GAAG;AAE9B,OAAM,MAAM;CAEZ,MAAM,SAA8B,EAAE;CACtC,MAAM,SAAS,IAAI,IAAI,YAAY,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzD,QAAO,MAAM,SAAS,GAAG;EACxB,MAAM,KAAK,MAAM,OAAO;EACxB,MAAM,MAAM,OAAO,IAAI,GAAG;AAC1B,MAAI,IAAK,QAAO,KAAK,IAAI;EAEzB,MAAM,YAAY,MAAM,IAAI,GAAG,IAAI,EAAE;EACrC,MAAM,WAAqB,EAAE;AAC7B,OAAK,MAAM,YAAY,WAAW;GACjC,MAAM,OAAO,SAAS,IAAI,SAAS,IAAI,KAAK;AAC5C,YAAS,IAAI,UAAU,IAAI;AAC3B,OAAI,QAAQ,EAAG,UAAS,KAAK,SAAS;;AAGvC,WAAS,MAAM;AACf,QAAM,KAAK,GAAG,SAAS;;AAIxB,KAAI,OAAO,SAAS,YAAY,QAAQ;EAEvC,MAAM,YAAY,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,GAAG,CAAC;EAClD,MAAM,YAAY,YAAY,QAAQ,MAAM,CAAC,UAAU,IAAI,EAAE,GAAG,CAAC;AACjE,YAAU,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC;AAClD,SAAO,KAAK,GAAG,UAAU;;AAG1B,QAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentik.d.mts","names":[],"sources":["../../../src/services/definitions/authentik.ts"],"mappings":";;;cAEa,mBAAA,EAAqB,iBAAA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
//#region src/services/definitions/authentik.ts
|
|
2
|
+
const authentikDefinition = {
|
|
3
|
+
id: "authentik",
|
|
4
|
+
name: "Authentik",
|
|
5
|
+
description: "The open-source Identity Provider that unifies your identity infrastructure.",
|
|
6
|
+
category: "security",
|
|
7
|
+
icon: "🛡️",
|
|
8
|
+
image: "ghcr.io/goauthentik/server",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 9e3,
|
|
12
|
+
container: 9e3,
|
|
13
|
+
description: "Authentik HTTP Interface",
|
|
14
|
+
exposed: true
|
|
15
|
+
}, {
|
|
16
|
+
host: 9443,
|
|
17
|
+
container: 9443,
|
|
18
|
+
description: "Authentik HTTPS Interface",
|
|
19
|
+
exposed: false
|
|
20
|
+
}],
|
|
21
|
+
volumes: [{
|
|
22
|
+
name: "authentik_media",
|
|
23
|
+
containerPath: "/media",
|
|
24
|
+
description: "Authentik media storage"
|
|
25
|
+
}, {
|
|
26
|
+
name: "authentik_custom_templates",
|
|
27
|
+
containerPath: "/templates",
|
|
28
|
+
description: "Authentik custom templates"
|
|
29
|
+
}],
|
|
30
|
+
environment: [
|
|
31
|
+
{
|
|
32
|
+
key: "AUTHENTIK_REDIS__HOST",
|
|
33
|
+
defaultValue: "redis",
|
|
34
|
+
secret: false,
|
|
35
|
+
description: "Redis server hostname",
|
|
36
|
+
required: true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: "AUTHENTIK_POSTGRESQL__HOST",
|
|
40
|
+
defaultValue: "postgres",
|
|
41
|
+
secret: false,
|
|
42
|
+
description: "Postgres database hostname",
|
|
43
|
+
required: true
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
key: "AUTHENTIK_POSTGRESQL__USER",
|
|
47
|
+
defaultValue: "postgres",
|
|
48
|
+
secret: false,
|
|
49
|
+
description: "Postgres database user",
|
|
50
|
+
required: true
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
key: "AUTHENTIK_POSTGRESQL__NAME",
|
|
54
|
+
defaultValue: "authentik",
|
|
55
|
+
secret: false,
|
|
56
|
+
description: "Postgres database name",
|
|
57
|
+
required: true
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
key: "AUTHENTIK_POSTGRESQL__PASSWORD",
|
|
61
|
+
defaultValue: "postgres",
|
|
62
|
+
secret: true,
|
|
63
|
+
description: "Postgres database password",
|
|
64
|
+
required: true
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
key: "AUTHENTIK_SECRET_KEY",
|
|
68
|
+
defaultValue: "authentik_secret_replace_me_in_production",
|
|
69
|
+
secret: true,
|
|
70
|
+
description: "Secret key used for cookie signing",
|
|
71
|
+
required: true
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
healthcheck: {
|
|
75
|
+
test: "curl --fail http://localhost:9000/-/health/live/ || exit 1",
|
|
76
|
+
interval: "30s",
|
|
77
|
+
timeout: "5s",
|
|
78
|
+
retries: 3,
|
|
79
|
+
startPeriod: "30s"
|
|
80
|
+
},
|
|
81
|
+
dependsOn: ["postgresql", "redis"],
|
|
82
|
+
restartPolicy: "unless-stopped",
|
|
83
|
+
networks: ["openclaw-network"],
|
|
84
|
+
skills: [],
|
|
85
|
+
openclawEnvVars: [],
|
|
86
|
+
docsUrl: "https://docs.goauthentik.io/",
|
|
87
|
+
tags: [
|
|
88
|
+
"identity",
|
|
89
|
+
"sso",
|
|
90
|
+
"saml",
|
|
91
|
+
"oidc",
|
|
92
|
+
"oauth2",
|
|
93
|
+
"security"
|
|
94
|
+
],
|
|
95
|
+
maturity: "stable",
|
|
96
|
+
requires: ["postgresql", "redis"],
|
|
97
|
+
recommends: [],
|
|
98
|
+
conflictsWith: [],
|
|
99
|
+
minMemoryMB: 2048,
|
|
100
|
+
gpuRequired: false
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
//#endregion
|
|
104
|
+
export { authentikDefinition };
|
|
105
|
+
//# sourceMappingURL=authentik.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentik.mjs","names":[],"sources":["../../../src/services/definitions/authentik.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const authentikDefinition: ServiceDefinition = {\n\tid: \"authentik\",\n\tname: \"Authentik\",\n\tdescription: \"The open-source Identity Provider that unifies your identity infrastructure.\",\n\tcategory: \"security\",\n\ticon: \"🛡️\",\n\n\timage: \"ghcr.io/goauthentik/server\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 9000,\n\t\t\tcontainer: 9000,\n\t\t\tdescription: \"Authentik HTTP Interface\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 9443,\n\t\t\tcontainer: 9443,\n\t\t\tdescription: \"Authentik HTTPS Interface\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"authentik_media\",\n\t\t\tcontainerPath: \"/media\",\n\t\t\tdescription: \"Authentik media storage\",\n\t\t},\n\t\t{\n\t\t\tname: \"authentik_custom_templates\",\n\t\t\tcontainerPath: \"/templates\",\n\t\t\tdescription: \"Authentik custom templates\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"AUTHENTIK_REDIS__HOST\",\n\t\t\tdefaultValue: \"redis\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Redis server hostname\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"AUTHENTIK_POSTGRESQL__HOST\",\n\t\t\tdefaultValue: \"postgres\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Postgres database hostname\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"AUTHENTIK_POSTGRESQL__USER\",\n\t\t\tdefaultValue: \"postgres\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Postgres database user\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"AUTHENTIK_POSTGRESQL__NAME\",\n\t\t\tdefaultValue: \"authentik\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Postgres database name\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"AUTHENTIK_POSTGRESQL__PASSWORD\",\n\t\t\tdefaultValue: \"postgres\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Postgres database password\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"AUTHENTIK_SECRET_KEY\",\n\t\t\tdefaultValue: \"authentik_secret_replace_me_in_production\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Secret key used for cookie signing\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl --fail http://localhost:9000/-/health/live/ || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"5s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"30s\",\n\t},\n\tdependsOn: [\"postgresql\", \"redis\"],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://docs.goauthentik.io/\",\n\ttags: [\"identity\", \"sso\", \"saml\", \"oidc\", \"oauth2\", \"security\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"postgresql\", \"redis\"],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 2048,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,sBAAyC;CACrD,IAAI;CACJ,MAAM;CACN,aAAa;CACb,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;EACZ;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;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,CAAC,cAAc,QAAQ;CAClC,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAY;EAAO;EAAQ;EAAQ;EAAU;EAAW;CAC/D,UAAU;CAEV,UAAU,CAAC,cAAc,QAAQ;CACjC,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crowdsec.d.mts","names":[],"sources":["../../../src/services/definitions/crowdsec.ts"],"mappings":";;;cAEa,kBAAA,EAAoB,iBAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
//#region src/services/definitions/crowdsec.ts
|
|
2
|
+
const crowdsecDefinition = {
|
|
3
|
+
id: "crowdsec",
|
|
4
|
+
name: "CrowdSec",
|
|
5
|
+
description: "Free, open-source and collaborative IPS designed to protect servers, services, and containers.",
|
|
6
|
+
category: "security",
|
|
7
|
+
icon: "⚔️",
|
|
8
|
+
image: "crowdsecurity/crowdsec",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 8080,
|
|
12
|
+
container: 8080,
|
|
13
|
+
description: "CrowdSec Local API Interface",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "crowdsec_data",
|
|
18
|
+
containerPath: "/v/lib/crowdsec/data",
|
|
19
|
+
description: "CrowdSec persistent SQLite data"
|
|
20
|
+
}, {
|
|
21
|
+
name: "crowdsec_config",
|
|
22
|
+
containerPath: "/etc/crowdsec",
|
|
23
|
+
description: "CrowdSec configurations"
|
|
24
|
+
}],
|
|
25
|
+
environment: [{
|
|
26
|
+
key: "COLLECTIONS",
|
|
27
|
+
defaultValue: "crowdsecurity/linux crowdsecurity/sshd",
|
|
28
|
+
secret: false,
|
|
29
|
+
description: "Default collections to install",
|
|
30
|
+
required: false
|
|
31
|
+
}],
|
|
32
|
+
healthcheck: {
|
|
33
|
+
test: "cscli metrics || exit 1",
|
|
34
|
+
interval: "30s",
|
|
35
|
+
timeout: "10s",
|
|
36
|
+
retries: 3,
|
|
37
|
+
startPeriod: "15s"
|
|
38
|
+
},
|
|
39
|
+
dependsOn: [],
|
|
40
|
+
restartPolicy: "unless-stopped",
|
|
41
|
+
networks: ["openclaw-network"],
|
|
42
|
+
skills: [],
|
|
43
|
+
openclawEnvVars: [],
|
|
44
|
+
docsUrl: "https://docs.crowdsec.net/",
|
|
45
|
+
tags: [
|
|
46
|
+
"ips",
|
|
47
|
+
"ids",
|
|
48
|
+
"firewall",
|
|
49
|
+
"security",
|
|
50
|
+
"threat-intelligence"
|
|
51
|
+
],
|
|
52
|
+
maturity: "stable",
|
|
53
|
+
requires: [],
|
|
54
|
+
recommends: [],
|
|
55
|
+
conflictsWith: [],
|
|
56
|
+
minMemoryMB: 256,
|
|
57
|
+
gpuRequired: false
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
61
|
+
export { crowdsecDefinition };
|
|
62
|
+
//# sourceMappingURL=crowdsec.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crowdsec.mjs","names":[],"sources":["../../../src/services/definitions/crowdsec.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const crowdsecDefinition: ServiceDefinition = {\n\tid: \"crowdsec\",\n\tname: \"CrowdSec\",\n\tdescription:\n\t\t\"Free, open-source and collaborative IPS designed to protect servers, services, and containers.\",\n\tcategory: \"security\",\n\ticon: \"⚔️\",\n\n\timage: \"crowdsecurity/crowdsec\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"CrowdSec Local API Interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"crowdsec_data\",\n\t\t\tcontainerPath: \"/v/lib/crowdsec/data\",\n\t\t\tdescription: \"CrowdSec persistent SQLite data\",\n\t\t},\n\t\t{\n\t\t\tname: \"crowdsec_config\",\n\t\t\tcontainerPath: \"/etc/crowdsec\",\n\t\t\tdescription: \"CrowdSec configurations\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"COLLECTIONS\",\n\t\t\tdefaultValue: \"crowdsecurity/linux crowdsecurity/sshd\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Default collections to install\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"cscli metrics || 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://docs.crowdsec.net/\",\n\ttags: [\"ips\", \"ids\", \"firewall\", \"security\", \"threat-intelligence\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,qBAAwC;CACpD,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,EACD;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,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAO;EAAO;EAAY;EAAY;EAAsB;CACnE,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ghost.d.mts","names":[],"sources":["../../../src/services/definitions/ghost.ts"],"mappings":";;;cAEa,eAAA,EAAiB,iBAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//#region src/services/definitions/ghost.ts
|
|
2
|
+
const ghostDefinition = {
|
|
3
|
+
id: "ghost",
|
|
4
|
+
name: "Ghost",
|
|
5
|
+
description: "The world's most popular modern open-source publishing platform.",
|
|
6
|
+
category: "social-media",
|
|
7
|
+
icon: "👻",
|
|
8
|
+
image: "ghost",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 2368,
|
|
12
|
+
container: 2368,
|
|
13
|
+
description: "Ghost Public Interface",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "ghost_content",
|
|
18
|
+
containerPath: "/var/lib/ghost/content",
|
|
19
|
+
description: "Ghost images, themes, and content storage"
|
|
20
|
+
}],
|
|
21
|
+
environment: [{
|
|
22
|
+
key: "url",
|
|
23
|
+
defaultValue: "http://localhost:2368",
|
|
24
|
+
secret: false,
|
|
25
|
+
description: "The URL of the Ghost install",
|
|
26
|
+
required: true
|
|
27
|
+
}],
|
|
28
|
+
healthcheck: {
|
|
29
|
+
test: "curl --fail http://localhost:2368/ghost/ || exit 1",
|
|
30
|
+
interval: "30s",
|
|
31
|
+
timeout: "10s",
|
|
32
|
+
retries: 3,
|
|
33
|
+
startPeriod: "30s"
|
|
34
|
+
},
|
|
35
|
+
dependsOn: [],
|
|
36
|
+
restartPolicy: "unless-stopped",
|
|
37
|
+
networks: ["openclaw-network"],
|
|
38
|
+
skills: [],
|
|
39
|
+
openclawEnvVars: [],
|
|
40
|
+
docsUrl: "https://ghost.org/docs/",
|
|
41
|
+
tags: [
|
|
42
|
+
"blog",
|
|
43
|
+
"publishing",
|
|
44
|
+
"writing",
|
|
45
|
+
"cms",
|
|
46
|
+
"content"
|
|
47
|
+
],
|
|
48
|
+
maturity: "stable",
|
|
49
|
+
requires: [],
|
|
50
|
+
recommends: [],
|
|
51
|
+
conflictsWith: [],
|
|
52
|
+
minMemoryMB: 512,
|
|
53
|
+
gpuRequired: false
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
export { ghostDefinition };
|
|
58
|
+
//# sourceMappingURL=ghost.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ghost.mjs","names":[],"sources":["../../../src/services/definitions/ghost.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const ghostDefinition: ServiceDefinition = {\n\tid: \"ghost\",\n\tname: \"Ghost\",\n\tdescription: \"The world's most popular modern open-source publishing platform.\",\n\tcategory: \"social-media\",\n\ticon: \"👻\",\n\n\timage: \"ghost\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 2368,\n\t\t\tcontainer: 2368,\n\t\t\tdescription: \"Ghost Public Interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"ghost_content\",\n\t\t\tcontainerPath: \"/var/lib/ghost/content\",\n\t\t\tdescription: \"Ghost images, themes, and content storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"url\",\n\t\t\tdefaultValue: \"http://localhost:2368\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"The URL of the Ghost install\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl --fail http://localhost:2368/ghost/ || 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\n\tdocsUrl: \"https://ghost.org/docs/\",\n\ttags: [\"blog\", \"publishing\", \"writing\", \"cms\", \"content\"],\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,aAAa;CACb,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,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;EAAQ;EAAc;EAAW;EAAO;EAAU;CACzD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ServiceDefinition } from "../../types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/definitions/homeassistant.d.ts
|
|
4
|
+
declare const homeassistantDefinition: ServiceDefinition;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { homeassistantDefinition };
|
|
7
|
+
//# sourceMappingURL=homeassistant.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homeassistant.d.mts","names":[],"sources":["../../../src/services/definitions/homeassistant.ts"],"mappings":";;;cAEa,uBAAA,EAAyB,iBAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region src/services/definitions/homeassistant.ts
|
|
2
|
+
const homeassistantDefinition = {
|
|
3
|
+
id: "homeassistant",
|
|
4
|
+
name: "Home Assistant",
|
|
5
|
+
description: "Open source home automation that puts local control and privacy first.",
|
|
6
|
+
category: "automation",
|
|
7
|
+
icon: "🏠",
|
|
8
|
+
image: "ghcr.io/home-assistant/home-assistant",
|
|
9
|
+
imageTag: "stable",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 8123,
|
|
12
|
+
container: 8123,
|
|
13
|
+
description: "Home Assistant Web Interface",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "homeassistant_config",
|
|
18
|
+
containerPath: "/config",
|
|
19
|
+
description: "Home Assistant configuration directory"
|
|
20
|
+
}, {
|
|
21
|
+
name: "/etc/localtime",
|
|
22
|
+
containerPath: "/etc/localtime",
|
|
23
|
+
description: "Timezone sync"
|
|
24
|
+
}],
|
|
25
|
+
environment: [{
|
|
26
|
+
key: "TZ",
|
|
27
|
+
defaultValue: "UTC",
|
|
28
|
+
secret: false,
|
|
29
|
+
description: "Timezone mapping",
|
|
30
|
+
required: false
|
|
31
|
+
}],
|
|
32
|
+
healthcheck: {
|
|
33
|
+
test: "curl --fail http://localhost:8123/ || exit 1",
|
|
34
|
+
interval: "30s",
|
|
35
|
+
timeout: "10s",
|
|
36
|
+
retries: 3,
|
|
37
|
+
startPeriod: "30s"
|
|
38
|
+
},
|
|
39
|
+
dependsOn: [],
|
|
40
|
+
restartPolicy: "unless-stopped",
|
|
41
|
+
networks: ["openclaw-network"],
|
|
42
|
+
skills: [],
|
|
43
|
+
openclawEnvVars: [],
|
|
44
|
+
docsUrl: "https://www.home-assistant.io/docs/",
|
|
45
|
+
tags: [
|
|
46
|
+
"smarthome",
|
|
47
|
+
"automation",
|
|
48
|
+
"iot",
|
|
49
|
+
"local-first"
|
|
50
|
+
],
|
|
51
|
+
maturity: "stable",
|
|
52
|
+
requires: [],
|
|
53
|
+
recommends: [],
|
|
54
|
+
conflictsWith: [],
|
|
55
|
+
minMemoryMB: 1024,
|
|
56
|
+
gpuRequired: false
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
export { homeassistantDefinition };
|
|
61
|
+
//# sourceMappingURL=homeassistant.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homeassistant.mjs","names":[],"sources":["../../../src/services/definitions/homeassistant.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const homeassistantDefinition: ServiceDefinition = {\n\tid: \"homeassistant\",\n\tname: \"Home Assistant\",\n\tdescription: \"Open source home automation that puts local control and privacy first.\",\n\tcategory: \"automation\",\n\ticon: \"🏠\",\n\n\timage: \"ghcr.io/home-assistant/home-assistant\",\n\timageTag: \"stable\",\n\tports: [\n\t\t{\n\t\t\thost: 8123,\n\t\t\tcontainer: 8123,\n\t\t\tdescription: \"Home Assistant Web Interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"homeassistant_config\",\n\t\t\tcontainerPath: \"/config\",\n\t\t\tdescription: \"Home Assistant configuration directory\",\n\t\t},\n\t\t{\n\t\t\tname: \"/etc/localtime\",\n\t\t\tcontainerPath: \"/etc/localtime\",\n\t\t\tdescription: \"Timezone sync\",\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 mapping\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl --fail http://localhost:8123/ || 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\n\tdocsUrl: \"https://www.home-assistant.io/docs/\",\n\ttags: [\"smarthome\", \"automation\", \"iot\", \"local-first\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 1024,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,0BAA6C;CACzD,IAAI;CACJ,MAAM;CACN,aAAa;CACb,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,EACD;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,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAa;EAAc;EAAO;EAAc;CACvD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"immich.d.mts","names":[],"sources":["../../../src/services/definitions/immich.ts"],"mappings":";;;cAEa,gBAAA,EAAkB,iBAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
//#region src/services/definitions/immich.ts
|
|
2
|
+
const immichDefinition = {
|
|
3
|
+
id: "immich",
|
|
4
|
+
name: "Immich",
|
|
5
|
+
description: "High performance self-hosted photo and video management solution.",
|
|
6
|
+
category: "media",
|
|
7
|
+
icon: "📸",
|
|
8
|
+
image: "ghcr.io/immich-app/immich-server",
|
|
9
|
+
imageTag: "release",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 2283,
|
|
12
|
+
container: 2283,
|
|
13
|
+
description: "Immich Web Interface",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "immich_upload",
|
|
18
|
+
containerPath: "/usr/src/app/upload",
|
|
19
|
+
description: "Persistent Immich photos/videos storage"
|
|
20
|
+
}, {
|
|
21
|
+
name: "/etc/localtime",
|
|
22
|
+
containerPath: "/etc/localtime",
|
|
23
|
+
description: "Host timezone synchronization"
|
|
24
|
+
}],
|
|
25
|
+
environment: [
|
|
26
|
+
{
|
|
27
|
+
key: "DB_HOSTNAME",
|
|
28
|
+
defaultValue: "postgres",
|
|
29
|
+
secret: false,
|
|
30
|
+
description: "Database hostname",
|
|
31
|
+
required: true
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
key: "DB_USERNAME",
|
|
35
|
+
defaultValue: "postgres",
|
|
36
|
+
secret: false,
|
|
37
|
+
description: "Database user",
|
|
38
|
+
required: true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
key: "DB_PASSWORD",
|
|
42
|
+
defaultValue: "postgres",
|
|
43
|
+
secret: true,
|
|
44
|
+
description: "Database password",
|
|
45
|
+
required: true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
key: "DB_DATABASE_NAME",
|
|
49
|
+
defaultValue: "immich",
|
|
50
|
+
secret: false,
|
|
51
|
+
description: "Database name",
|
|
52
|
+
required: true
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
key: "REDIS_HOSTNAME",
|
|
56
|
+
defaultValue: "redis",
|
|
57
|
+
secret: false,
|
|
58
|
+
description: "Redis hostname",
|
|
59
|
+
required: true
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
healthcheck: {
|
|
63
|
+
test: "curl --fail http://localhost:2283/api/server-info/ping || exit 1",
|
|
64
|
+
interval: "30s",
|
|
65
|
+
timeout: "10s",
|
|
66
|
+
retries: 3,
|
|
67
|
+
startPeriod: "30s"
|
|
68
|
+
},
|
|
69
|
+
dependsOn: ["postgresql", "redis"],
|
|
70
|
+
restartPolicy: "unless-stopped",
|
|
71
|
+
networks: ["openclaw-network"],
|
|
72
|
+
skills: [],
|
|
73
|
+
openclawEnvVars: [],
|
|
74
|
+
docsUrl: "https://immich.app/docs/overview/introduction",
|
|
75
|
+
tags: [
|
|
76
|
+
"media",
|
|
77
|
+
"photos",
|
|
78
|
+
"videos",
|
|
79
|
+
"gallery",
|
|
80
|
+
"backup"
|
|
81
|
+
],
|
|
82
|
+
maturity: "stable",
|
|
83
|
+
requires: ["postgresql", "redis"],
|
|
84
|
+
recommends: [],
|
|
85
|
+
conflictsWith: [],
|
|
86
|
+
minMemoryMB: 1024,
|
|
87
|
+
gpuRequired: false
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
//#endregion
|
|
91
|
+
export { immichDefinition };
|
|
92
|
+
//# sourceMappingURL=immich.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"immich.mjs","names":[],"sources":["../../../src/services/definitions/immich.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const immichDefinition: ServiceDefinition = {\n\tid: \"immich\",\n\tname: \"Immich\",\n\tdescription: \"High performance self-hosted photo and video management solution.\",\n\tcategory: \"media\",\n\ticon: \"📸\",\n\n\timage: \"ghcr.io/immich-app/immich-server\",\n\timageTag: \"release\",\n\tports: [\n\t\t{\n\t\t\thost: 2283,\n\t\t\tcontainer: 2283,\n\t\t\tdescription: \"Immich Web Interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"immich_upload\",\n\t\t\tcontainerPath: \"/usr/src/app/upload\",\n\t\t\tdescription: \"Persistent Immich photos/videos storage\",\n\t\t},\n\t\t{\n\t\t\tname: \"/etc/localtime\",\n\t\t\tcontainerPath: \"/etc/localtime\",\n\t\t\tdescription: \"Host timezone synchronization\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"DB_HOSTNAME\",\n\t\t\tdefaultValue: \"postgres\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Database hostname\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_USERNAME\",\n\t\t\tdefaultValue: \"postgres\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Database user\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_PASSWORD\",\n\t\t\tdefaultValue: \"postgres\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Database password\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_DATABASE_NAME\",\n\t\t\tdefaultValue: \"immich\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Database name\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"REDIS_HOSTNAME\",\n\t\t\tdefaultValue: \"redis\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Redis hostname\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl --fail http://localhost:2283/api/server-info/ping || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"30s\",\n\t},\n\tdependsOn: [\"postgresql\", \"redis\"],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://immich.app/docs/overview/introduction\",\n\ttags: [\"media\", \"photos\", \"videos\", \"gallery\", \"backup\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"postgresql\", \"redis\"],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 1024,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,mBAAsC;CAClD,IAAI;CACJ,MAAM;CACN,aAAa;CACb,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,EACD;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa;EACZ;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;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,CAAC,cAAc,QAAQ;CAClC,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAS;EAAU;EAAU;EAAW;EAAS;CACxD,UAAU;CAEV,UAAU,CAAC,cAAc,QAAQ;CACjC,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ServiceDefinition } from "../../types.mjs";
|
|
2
2
|
import { anythingLlmDefinition } from "./anything-llm.mjs";
|
|
3
3
|
import { appflowyDefinition } from "./appflowy.mjs";
|
|
4
|
+
import { authentikDefinition } from "./authentik.mjs";
|
|
4
5
|
import { beszelDefinition } from "./beszel.mjs";
|
|
5
6
|
import { browserlessDefinition } from "./browserless.mjs";
|
|
6
7
|
import { caddyDefinition } from "./caddy.mjs";
|
|
@@ -13,6 +14,7 @@ import { comfyuiDefinition } from "./comfyui.mjs";
|
|
|
13
14
|
import { convexDashboardDefinition } from "./convex-dashboard.mjs";
|
|
14
15
|
import { convexDefinition } from "./convex.mjs";
|
|
15
16
|
import { coolifyDefinition } from "./coolify.mjs";
|
|
17
|
+
import { crowdsecDefinition } from "./crowdsec.mjs";
|
|
16
18
|
import { desktopEnvironmentDefinition } from "./desktop-environment.mjs";
|
|
17
19
|
import { difyDefinition } from "./dify.mjs";
|
|
18
20
|
import { docsgptDefinition } from "./docsgpt.mjs";
|
|
@@ -21,10 +23,15 @@ import { dozzleDefinition } from "./dozzle.mjs";
|
|
|
21
23
|
import { ffmpegDefinition } from "./ffmpeg.mjs";
|
|
22
24
|
import { flowiseDefinition } from "./flowise.mjs";
|
|
23
25
|
import { geminiCliDefinition } from "./gemini-cli.mjs";
|
|
26
|
+
import { ghostDefinition } from "./ghost.mjs";
|
|
24
27
|
import { giteaDefinition } from "./gitea.mjs";
|
|
25
28
|
import { gotifyDefinition } from "./gotify.mjs";
|
|
26
29
|
import { grafanaDefinition } from "./grafana.mjs";
|
|
27
30
|
import { hexstrikeDefinition } from "./hexstrike.mjs";
|
|
31
|
+
import { homeassistantDefinition } from "./homeassistant.mjs";
|
|
32
|
+
import { immichDefinition } from "./immich.mjs";
|
|
33
|
+
import { jellyfinDefinition } from "./jellyfin.mjs";
|
|
34
|
+
import { jenkinsDefinition } from "./jenkins.mjs";
|
|
28
35
|
import { kimiDefinition } from "./kimi.mjs";
|
|
29
36
|
import { lasuiteMeetAgentsDefinition } from "./lasuite-meet-agents.mjs";
|
|
30
37
|
import { lasuiteMeetBackendDefinition } from "./lasuite-meet-backend.mjs";
|
|
@@ -33,16 +40,19 @@ import { librechatDefinition } from "./librechat.mjs";
|
|
|
33
40
|
import { lightpandaDefinition } from "./lightpanda.mjs";
|
|
34
41
|
import { litellmDefinition } from "./litellm.mjs";
|
|
35
42
|
import { livekitDefinition } from "./livekit.mjs";
|
|
43
|
+
import { lokiDefinition } from "./loki.mjs";
|
|
36
44
|
import { matomoDefinition } from "./matomo.mjs";
|
|
37
45
|
import { matrixSynapseDefinition } from "./matrix-synapse.mjs";
|
|
38
46
|
import { mattermostDefinition } from "./mattermost.mjs";
|
|
39
47
|
import { meilisearchDefinition } from "./meilisearch.mjs";
|
|
48
|
+
import { milvusDefinition } from "./milvus.mjs";
|
|
40
49
|
import { minioDefinition } from "./minio.mjs";
|
|
41
50
|
import { missionControlDefinition } from "./mission-control.mjs";
|
|
42
51
|
import { mixpostDefinition } from "./mixpost.mjs";
|
|
43
52
|
import { motionCanvasDefinition } from "./motion-canvas.mjs";
|
|
44
53
|
import { n8nDefinition } from "./n8n.mjs";
|
|
45
54
|
import { neo4jDefinition } from "./neo4j.mjs";
|
|
55
|
+
import { nextcloudDefinition } from "./nextcloud.mjs";
|
|
46
56
|
import { nocodbDefinition } from "./nocodb.mjs";
|
|
47
57
|
import { ntfyDefinition } from "./ntfy.mjs";
|
|
48
58
|
import { ollamaDefinition } from "./ollama.mjs";
|
|
@@ -64,10 +74,12 @@ import { remotionDefinition } from "./remotion.mjs";
|
|
|
64
74
|
import { rocketchatDefinition } from "./rocketchat.mjs";
|
|
65
75
|
import { scraplingDefinition } from "./scrapling.mjs";
|
|
66
76
|
import { searxngDefinition } from "./searxng.mjs";
|
|
77
|
+
import { signozDefinition } from "./signoz.mjs";
|
|
67
78
|
import { solidityGuardDefinition } from "./solidityguard.mjs";
|
|
68
79
|
import { stableDiffusionDefinition } from "./stable-diffusion.mjs";
|
|
69
80
|
import { steelBrowserDefinition } from "./steel-browser.mjs";
|
|
70
81
|
import { streamGatewayDefinition } from "./stream-gateway.mjs";
|
|
82
|
+
import { supabaseDefinition } from "./supabase.mjs";
|
|
71
83
|
import { tailscaleDefinition } from "./tailscale.mjs";
|
|
72
84
|
import { temporalDefinition } from "./temporal.mjs";
|
|
73
85
|
import { traefikDefinition } from "./traefik.mjs";
|
|
@@ -75,6 +87,7 @@ import { umamiDefinition } from "./umami.mjs";
|
|
|
75
87
|
import { uptimeKumaDefinition } from "./uptime-kuma.mjs";
|
|
76
88
|
import { usesendDefinition } from "./usesend.mjs";
|
|
77
89
|
import { valkeyDefinition } from "./valkey.mjs";
|
|
90
|
+
import { vaultwardenDefinition } from "./vaultwarden.mjs";
|
|
78
91
|
import { watchtowerDefinition } from "./watchtower.mjs";
|
|
79
92
|
import { weaviateDefinition } from "./weaviate.mjs";
|
|
80
93
|
import { whisperDefinition } from "./whisper.mjs";
|
|
@@ -83,5 +96,5 @@ import { xyopsDefinition } from "./xyops.mjs";
|
|
|
83
96
|
//#region src/services/definitions/index.d.ts
|
|
84
97
|
declare const allServiceDefinitions: ServiceDefinition[];
|
|
85
98
|
//#endregion
|
|
86
|
-
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, hexstrikeDefinition, 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, pentagiDefinition, pentestagentDefinition, playwrightServerDefinition, portainerDefinition, postgresqlDefinition, postizDefinition, prometheusDefinition, qdrantDefinition, redisDefinition, remotionDefinition, rocketchatDefinition, scraplingDefinition, searxngDefinition, solidityGuardDefinition, stableDiffusionDefinition, steelBrowserDefinition, streamGatewayDefinition, tailscaleDefinition, temporalDefinition, traefikDefinition, umamiDefinition, uptimeKumaDefinition, usesendDefinition, valkeyDefinition, watchtowerDefinition, weaviateDefinition, whisperDefinition, xyopsDefinition };
|
|
99
|
+
export { allServiceDefinitions, anythingLlmDefinition, appflowyDefinition, authentikDefinition, beszelDefinition, browserlessDefinition, caddyDefinition, calComDefinition, chromadbDefinition, claudeCodeDefinition, codeServerDefinition, codexDefinition, comfyuiDefinition, convexDashboardDefinition, convexDefinition, coolifyDefinition, crowdsecDefinition, desktopEnvironmentDefinition, difyDefinition, docsgptDefinition, dokployDefinition, dozzleDefinition, ffmpegDefinition, flowiseDefinition, geminiCliDefinition, ghostDefinition, giteaDefinition, gotifyDefinition, grafanaDefinition, hexstrikeDefinition, homeassistantDefinition, immichDefinition, jellyfinDefinition, jenkinsDefinition, kimiDefinition, lasuiteMeetAgentsDefinition, lasuiteMeetBackendDefinition, lasuiteMeetFrontendDefinition, librechatDefinition, lightpandaDefinition, litellmDefinition, livekitDefinition, lokiDefinition, matomoDefinition, matrixSynapseDefinition, mattermostDefinition, meilisearchDefinition, milvusDefinition, minioDefinition, missionControlDefinition, mixpostDefinition, motionCanvasDefinition, n8nDefinition, neo4jDefinition, nextcloudDefinition, nocodbDefinition, ntfyDefinition, ollamaDefinition, openWebuiDefinition, opencodeDefinition, openpanelDefinition, outlineDefinition, paperlessNgxDefinition, pentagiDefinition, pentestagentDefinition, playwrightServerDefinition, portainerDefinition, postgresqlDefinition, postizDefinition, prometheusDefinition, qdrantDefinition, redisDefinition, remotionDefinition, rocketchatDefinition, scraplingDefinition, searxngDefinition, signozDefinition, solidityGuardDefinition, stableDiffusionDefinition, steelBrowserDefinition, streamGatewayDefinition, supabaseDefinition, tailscaleDefinition, temporalDefinition, traefikDefinition, umamiDefinition, uptimeKumaDefinition, usesendDefinition, valkeyDefinition, vaultwardenDefinition, watchtowerDefinition, weaviateDefinition, whisperDefinition, xyopsDefinition };
|
|
87
100
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/definitions/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/definitions/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6La,qBAAA,EAAuB,iBAAA"}
|