@better-openclaw/core 1.0.24 → 1.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon-stack.cjs +725 -0
- package/dist/addon-stack.cjs.map +1 -0
- package/dist/addon-stack.d.cts +23 -0
- package/dist/addon-stack.d.cts.map +1 -0
- package/dist/addon-stack.d.mts +23 -0
- package/dist/addon-stack.d.mts.map +1 -0
- package/dist/addon-stack.mjs +723 -0
- package/dist/addon-stack.mjs.map +1 -0
- package/dist/addon-stack.test.cjs +461 -0
- package/dist/addon-stack.test.cjs.map +1 -0
- package/dist/addon-stack.test.d.cts +1 -0
- package/dist/addon-stack.test.d.mts +1 -0
- package/dist/addon-stack.test.mjs +461 -0
- package/dist/addon-stack.test.mjs.map +1 -0
- package/dist/bare-metal-partition.test.cjs +20 -20
- package/dist/bare-metal-partition.test.cjs.map +1 -1
- package/dist/bare-metal-partition.test.mjs +2 -2
- package/dist/compose-validation.test.cjs +1 -1
- package/dist/composer.cjs +5 -1
- package/dist/composer.cjs.map +1 -1
- package/dist/composer.d.cts +24 -1
- package/dist/composer.d.cts.map +1 -1
- package/dist/composer.d.mts +24 -1
- package/dist/composer.d.mts.map +1 -1
- package/dist/composer.mjs +1 -1
- package/dist/composer.mjs.map +1 -1
- package/dist/composer.snapshot.test.cjs +20 -20
- package/dist/composer.snapshot.test.cjs.map +1 -1
- package/dist/composer.snapshot.test.mjs +2 -2
- package/dist/composer.test.cjs +54 -54
- package/dist/composer.test.cjs.map +1 -1
- package/dist/composer.test.mjs +2 -2
- package/dist/deployers/strip-host-ports.cjs +1 -1
- package/dist/deployers/strip-host-ports.test.cjs +26 -26
- package/dist/deployers/strip-host-ports.test.cjs.map +1 -1
- package/dist/deployers/strip-host-ports.test.mjs +1 -1
- package/dist/generate.cjs +3 -3
- package/dist/generate.mjs +3 -3
- package/dist/generate.test.cjs +56 -56
- package/dist/generate.test.cjs.map +1 -1
- package/dist/generate.test.mjs +1 -1
- package/dist/generators/bare-metal-install.test.cjs +18 -18
- package/dist/generators/bare-metal-install.test.cjs.map +1 -1
- package/dist/generators/bare-metal-install.test.mjs +1 -1
- package/dist/generators/caddy.test.cjs +13 -13
- package/dist/generators/caddy.test.cjs.map +1 -1
- package/dist/generators/caddy.test.mjs +1 -1
- package/dist/generators/clone-repos.test.cjs +27 -27
- package/dist/generators/clone-repos.test.cjs.map +1 -1
- package/dist/generators/clone-repos.test.mjs +1 -1
- package/dist/generators/env.cjs +1 -1
- package/dist/generators/env.test.cjs +17 -17
- package/dist/generators/env.test.cjs.map +1 -1
- package/dist/generators/env.test.mjs +1 -1
- package/dist/generators/health-check.test.cjs +39 -39
- package/dist/generators/health-check.test.cjs.map +1 -1
- package/dist/generators/health-check.test.mjs +1 -1
- package/dist/generators/postgres-init.cjs +5 -0
- package/dist/generators/postgres-init.cjs.map +1 -1
- package/dist/generators/postgres-init.d.cts.map +1 -1
- package/dist/generators/postgres-init.d.mts.map +1 -1
- package/dist/generators/postgres-init.mjs +5 -0
- package/dist/generators/postgres-init.mjs.map +1 -1
- package/dist/generators/scripts.test.cjs +39 -39
- package/dist/generators/scripts.test.cjs.map +1 -1
- package/dist/generators/scripts.test.mjs +1 -1
- package/dist/generators/skills.cjs +1 -1
- package/dist/generators/skills.d.cts.map +1 -1
- package/dist/generators/skills.d.mts.map +1 -1
- package/dist/generators/skills.mjs +141 -0
- package/dist/generators/skills.mjs.map +1 -1
- package/dist/generators/traefik.test.cjs +32 -32
- package/dist/generators/traefik.test.cjs.map +1 -1
- package/dist/generators/traefik.test.mjs +1 -1
- package/dist/index.cjs +21 -5
- package/dist/index.d.cts +5 -4
- package/dist/index.d.mts +5 -4
- package/dist/index.mjs +7 -6
- package/dist/migrations.test.cjs +16 -16
- package/dist/migrations.test.cjs.map +1 -1
- package/dist/migrations.test.mjs +1 -1
- package/dist/presets/presets.test.cjs +1 -1
- package/dist/presets/registry.test.cjs +14 -14
- package/dist/presets/registry.test.cjs.map +1 -1
- package/dist/presets/registry.test.mjs +1 -1
- package/dist/resolver.test.cjs +95 -95
- package/dist/resolver.test.cjs.map +1 -1
- package/dist/resolver.test.mjs +1 -1
- package/dist/{schema-eX44HhRp.d.mts → schema-BQnZrcw8.d.cts} +300 -2
- package/dist/schema-BQnZrcw8.d.cts.map +1 -0
- package/dist/{schema-tn5RK8CM.d.cts → schema-SBpL0bdI.d.mts} +300 -2
- package/dist/schema-SBpL0bdI.d.mts.map +1 -0
- package/dist/schema.cjs +148 -2
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +2 -2
- package/dist/schema.d.mts +2 -2
- package/dist/schema.mjs +139 -2
- package/dist/schema.mjs.map +1 -1
- package/dist/schema.test.cjs +86 -86
- package/dist/schema.test.cjs.map +1 -1
- package/dist/schema.test.mjs +1 -1
- package/dist/services/definitions/browserless.cjs +4 -1
- package/dist/services/definitions/browserless.cjs.map +1 -1
- package/dist/services/definitions/browserless.mjs +4 -1
- package/dist/services/definitions/browserless.mjs.map +1 -1
- package/dist/services/definitions/burnlink.cjs +142 -0
- package/dist/services/definitions/burnlink.cjs.map +1 -0
- package/dist/services/definitions/burnlink.d.cts +7 -0
- package/dist/services/definitions/burnlink.d.cts.map +1 -0
- package/dist/services/definitions/burnlink.d.mts +7 -0
- package/dist/services/definitions/burnlink.d.mts.map +1 -0
- package/dist/services/definitions/burnlink.mjs +141 -0
- package/dist/services/definitions/burnlink.mjs.map +1 -0
- package/dist/services/definitions/convex.cjs +43 -1
- package/dist/services/definitions/convex.cjs.map +1 -1
- package/dist/services/definitions/convex.mjs +43 -1
- package/dist/services/definitions/convex.mjs.map +1 -1
- package/dist/services/definitions/grafana.cjs +11 -1
- package/dist/services/definitions/grafana.cjs.map +1 -1
- package/dist/services/definitions/grafana.mjs +11 -1
- package/dist/services/definitions/grafana.mjs.map +1 -1
- package/dist/services/definitions/hindsight.cjs +130 -0
- package/dist/services/definitions/hindsight.cjs.map +1 -0
- package/dist/services/definitions/hindsight.d.cts +7 -0
- package/dist/services/definitions/hindsight.d.cts.map +1 -0
- package/dist/services/definitions/hindsight.d.mts +7 -0
- package/dist/services/definitions/hindsight.d.mts.map +1 -0
- package/dist/services/definitions/hindsight.mjs +129 -0
- package/dist/services/definitions/hindsight.mjs.map +1 -0
- package/dist/services/definitions/index.cjs +9 -0
- package/dist/services/definitions/index.cjs.map +1 -1
- package/dist/services/definitions/index.d.cts +4 -1
- package/dist/services/definitions/index.d.cts.map +1 -1
- package/dist/services/definitions/index.d.mts +4 -1
- package/dist/services/definitions/index.d.mts.map +1 -1
- package/dist/services/definitions/index.mjs +7 -1
- package/dist/services/definitions/index.mjs.map +1 -1
- package/dist/services/definitions/meilisearch.cjs +11 -1
- package/dist/services/definitions/meilisearch.cjs.map +1 -1
- package/dist/services/definitions/meilisearch.mjs +11 -1
- package/dist/services/definitions/meilisearch.mjs.map +1 -1
- package/dist/services/definitions/minio.cjs +3 -1
- package/dist/services/definitions/minio.cjs.map +1 -1
- package/dist/services/definitions/minio.mjs +3 -1
- package/dist/services/definitions/minio.mjs.map +1 -1
- package/dist/services/definitions/n8n.cjs +11 -1
- package/dist/services/definitions/n8n.cjs.map +1 -1
- package/dist/services/definitions/n8n.mjs +11 -1
- package/dist/services/definitions/n8n.mjs.map +1 -1
- package/dist/services/definitions/ollama.cjs +3 -1
- package/dist/services/definitions/ollama.cjs.map +1 -1
- package/dist/services/definitions/ollama.mjs +3 -1
- package/dist/services/definitions/ollama.mjs.map +1 -1
- package/dist/services/definitions/opensandbox.cjs +149 -0
- package/dist/services/definitions/opensandbox.cjs.map +1 -0
- package/dist/services/definitions/opensandbox.d.cts +7 -0
- package/dist/services/definitions/opensandbox.d.cts.map +1 -0
- package/dist/services/definitions/opensandbox.d.mts +7 -0
- package/dist/services/definitions/opensandbox.d.mts.map +1 -0
- package/dist/services/definitions/opensandbox.mjs +148 -0
- package/dist/services/definitions/opensandbox.mjs.map +1 -0
- package/dist/services/definitions/qdrant.cjs +3 -1
- package/dist/services/definitions/qdrant.cjs.map +1 -1
- package/dist/services/definitions/qdrant.mjs +3 -1
- package/dist/services/definitions/qdrant.mjs.map +1 -1
- package/dist/services/definitions/searxng.cjs +8 -1
- package/dist/services/definitions/searxng.cjs.map +1 -1
- package/dist/services/definitions/searxng.mjs +8 -1
- package/dist/services/definitions/searxng.mjs.map +1 -1
- package/dist/services/definitions/uptime-kuma.cjs +8 -1
- package/dist/services/definitions/uptime-kuma.cjs.map +1 -1
- package/dist/services/definitions/uptime-kuma.mjs +8 -1
- package/dist/services/definitions/uptime-kuma.mjs.map +1 -1
- package/dist/services/registry.test.cjs +36 -36
- package/dist/services/registry.test.cjs.map +1 -1
- package/dist/services/registry.test.mjs +1 -1
- package/dist/{skills-BlzpHmpH.cjs → skills-BSF7iNa4.cjs} +142 -1
- package/dist/{skills-BlzpHmpH.cjs.map → skills-BSF7iNa4.cjs.map} +1 -1
- package/dist/{vi.2VT5v0um-C_jmO7m2.mjs → test.CTcmp4Su-ClCHJ3FA.mjs} +6793 -6403
- package/dist/test.CTcmp4Su-ClCHJ3FA.mjs.map +1 -0
- package/dist/{vi.2VT5v0um-iVBt6Fyq.cjs → test.CTcmp4Su-DlzTarwH.cjs} +6793 -6403
- package/dist/test.CTcmp4Su-DlzTarwH.cjs.map +1 -0
- package/dist/track-analytics.test.cjs +28 -28
- package/dist/track-analytics.test.cjs.map +1 -1
- package/dist/track-analytics.test.mjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +10 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +10 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/validator.cjs +1 -1
- package/dist/validator.test.cjs +15 -15
- package/dist/validator.test.cjs.map +1 -1
- package/dist/validator.test.mjs +2 -2
- package/dist/version-manager.test.cjs +37 -37
- package/dist/version-manager.test.cjs.map +1 -1
- package/dist/version-manager.test.mjs +1 -1
- package/package.json +4 -4
- package/src/__snapshots__/composer.snapshot.test.ts.snap +5 -0
- package/src/addon-stack.test.ts +648 -0
- package/src/addon-stack.ts +1046 -0
- package/src/composer.ts +4 -4
- package/src/generators/postgres-init.ts +2 -0
- package/src/generators/skills.ts +142 -0
- package/src/index.ts +20 -2
- package/src/schema.ts +190 -0
- package/src/services/definitions/browserless.ts +3 -0
- package/src/services/definitions/burnlink.ts +142 -0
- package/src/services/definitions/convex.ts +31 -0
- package/src/services/definitions/grafana.ts +9 -0
- package/src/services/definitions/hindsight.ts +131 -0
- package/src/services/definitions/index.ts +10 -0
- package/src/services/definitions/meilisearch.ts +9 -0
- package/src/services/definitions/minio.ts +2 -0
- package/src/services/definitions/n8n.ts +9 -0
- package/src/services/definitions/ollama.ts +2 -0
- package/src/services/definitions/opensandbox.ts +156 -0
- package/src/services/definitions/qdrant.ts +2 -0
- package/src/services/definitions/searxng.ts +3 -0
- package/src/services/definitions/uptime-kuma.ts +3 -0
- package/src/types.ts +18 -0
- package/dist/schema-eX44HhRp.d.mts.map +0 -1
- package/dist/schema-tn5RK8CM.d.cts.map +0 -1
- package/dist/vi.2VT5v0um-C_jmO7m2.mjs.map +0 -1
- package/dist/vi.2VT5v0um-iVBt6Fyq.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensandbox.cjs","names":[],"sources":["../../../src/services/definitions/opensandbox.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const opensandboxDefinition: ServiceDefinition = {\n\tid: \"opensandbox\",\n\tname: \"OpenSandbox\",\n\tdescription:\n\t\t\"Secure containerized code execution for AI agents. Multi-language sandboxes (Python, JS/TS, Java, Go, Bash) with file operations, resource limits, and network isolation.\",\n\tcategory: \"dev-tools\",\n\ticon: \"📦\",\n\n\timage: \"opensandbox/server\",\n\timageTag: \"v1.0.6\",\n\tports: [\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"OpenSandbox Lifecycle API (FastAPI)\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"/var/run/docker.sock\",\n\t\t\tcontainerPath: \"/var/run/docker.sock\",\n\t\t\tdescription:\n\t\t\t\t\"Docker socket (required for managing sandbox containers)\",\n\t\t},\n\t\t{\n\t\t\tname: \"./sandbox.toml\",\n\t\t\tcontainerPath: \"/root/.sandbox.toml:ro\",\n\t\t\tdescription: \"OpenSandbox configuration file (read-only bind mount)\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"OPEN_SANDBOX_API_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"API key for OpenSandbox lifecycle API authentication (min 32 chars)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_LOG_LEVEL\",\n\t\t\tdefaultValue: \"INFO\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Log verbosity (DEBUG, INFO, WARNING, ERROR)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_RUNTIME_TYPE\",\n\t\t\tdefaultValue: \"docker\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Runtime backend (always docker for VPS deployments)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_EXECD_IMAGE\",\n\t\t\tdefaultValue: \"opensandbox/execd:v1.0.6\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Execution daemon image injected into sandbox containers\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_NETWORK_MODE\",\n\t\t\tdefaultValue: \"bridge\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Container networking mode (always bridge for isolation)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_PIDS_LIMIT\",\n\t\t\tdefaultValue: \"512\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Max PIDs per sandbox (fork bomb protection)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_NO_NEW_PRIVILEGES\",\n\t\t\tdefaultValue: \"true\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Security: prevent privilege escalation in sandboxes\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_SECURE_RUNTIME\",\n\t\t\tdefaultValue: \"gvisor\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Secure container runtime (gVisor for sandbox isolation)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl --fail http://localhost:8080/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: [{ skillId: \"code-sandbox\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_HOST\",\n\t\t\tdefaultValue: \"opensandbox\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"OpenSandbox hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"OpenSandbox port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_API_KEY\",\n\t\t\tdefaultValue: \"${OPEN_SANDBOX_API_KEY}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"OpenSandbox API key for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://github.com/anthropics/OpenSandbox\",\n\ttags: [\n\t\t\"sandbox\",\n\t\t\"code-execution\",\n\t\t\"security\",\n\t\t\"ai-agent\",\n\t\t\"isolation\",\n\t],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 768,\n\tgpuRequired: false,\n\tcapDropCompatible: true,\n\tproxyPath: \"/sandbox\",\n\tenvQuirks: [\n\t\t{\n\t\t\tkey: \"OPEN_SANDBOX_API_KEY\",\n\t\t\tissue: \"min_length\",\n\t\t\tfix: { type: \"generate_base64url\", minBytes: 32 },\n\t\t},\n\t],\n};\n"],"mappings":";;AAEA,MAAa,wBAA2C;CACvD,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,aACC;EACD,EACD;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,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,aACC;GACD,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,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,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAgB,aAAa;EAAM,CAAC;CACxD,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;CAED,SAAS;CACT,MAAM;EACL;EACA;EACA;EACA;EACA;EACA;CACD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,WAAW,CACV;EACC,KAAK;EACL,OAAO;EACP,KAAK;GAAE,MAAM;GAAsB,UAAU;GAAI;EACjD,CACD;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensandbox.d.cts","names":[],"sources":["../../../src/services/definitions/opensandbox.ts"],"mappings":";;;cAEa,qBAAA,EAAuB,iBAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensandbox.d.mts","names":[],"sources":["../../../src/services/definitions/opensandbox.ts"],"mappings":";;;cAEa,qBAAA,EAAuB,iBAAA"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
//#region src/services/definitions/opensandbox.ts
|
|
2
|
+
const opensandboxDefinition = {
|
|
3
|
+
id: "opensandbox",
|
|
4
|
+
name: "OpenSandbox",
|
|
5
|
+
description: "Secure containerized code execution for AI agents. Multi-language sandboxes (Python, JS/TS, Java, Go, Bash) with file operations, resource limits, and network isolation.",
|
|
6
|
+
category: "dev-tools",
|
|
7
|
+
icon: "📦",
|
|
8
|
+
image: "opensandbox/server",
|
|
9
|
+
imageTag: "v1.0.6",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 8080,
|
|
12
|
+
container: 8080,
|
|
13
|
+
description: "OpenSandbox Lifecycle API (FastAPI)",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "/var/run/docker.sock",
|
|
18
|
+
containerPath: "/var/run/docker.sock",
|
|
19
|
+
description: "Docker socket (required for managing sandbox containers)"
|
|
20
|
+
}, {
|
|
21
|
+
name: "./sandbox.toml",
|
|
22
|
+
containerPath: "/root/.sandbox.toml:ro",
|
|
23
|
+
description: "OpenSandbox configuration file (read-only bind mount)"
|
|
24
|
+
}],
|
|
25
|
+
environment: [
|
|
26
|
+
{
|
|
27
|
+
key: "OPEN_SANDBOX_API_KEY",
|
|
28
|
+
defaultValue: "",
|
|
29
|
+
secret: true,
|
|
30
|
+
description: "API key for OpenSandbox lifecycle API authentication (min 32 chars)",
|
|
31
|
+
required: true
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
key: "OPENSANDBOX_LOG_LEVEL",
|
|
35
|
+
defaultValue: "INFO",
|
|
36
|
+
secret: false,
|
|
37
|
+
description: "Log verbosity (DEBUG, INFO, WARNING, ERROR)",
|
|
38
|
+
required: false
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
key: "OPENSANDBOX_RUNTIME_TYPE",
|
|
42
|
+
defaultValue: "docker",
|
|
43
|
+
secret: false,
|
|
44
|
+
description: "Runtime backend (always docker for VPS deployments)",
|
|
45
|
+
required: false
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
key: "OPENSANDBOX_EXECD_IMAGE",
|
|
49
|
+
defaultValue: "opensandbox/execd:v1.0.6",
|
|
50
|
+
secret: false,
|
|
51
|
+
description: "Execution daemon image injected into sandbox containers",
|
|
52
|
+
required: false
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
key: "OPENSANDBOX_NETWORK_MODE",
|
|
56
|
+
defaultValue: "bridge",
|
|
57
|
+
secret: false,
|
|
58
|
+
description: "Container networking mode (always bridge for isolation)",
|
|
59
|
+
required: false
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
key: "OPENSANDBOX_PIDS_LIMIT",
|
|
63
|
+
defaultValue: "512",
|
|
64
|
+
secret: false,
|
|
65
|
+
description: "Max PIDs per sandbox (fork bomb protection)",
|
|
66
|
+
required: false
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: "OPENSANDBOX_NO_NEW_PRIVILEGES",
|
|
70
|
+
defaultValue: "true",
|
|
71
|
+
secret: false,
|
|
72
|
+
description: "Security: prevent privilege escalation in sandboxes",
|
|
73
|
+
required: false
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: "OPENSANDBOX_SECURE_RUNTIME",
|
|
77
|
+
defaultValue: "gvisor",
|
|
78
|
+
secret: false,
|
|
79
|
+
description: "Secure container runtime (gVisor for sandbox isolation)",
|
|
80
|
+
required: false
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
healthcheck: {
|
|
84
|
+
test: "curl --fail http://localhost:8080/health || exit 1",
|
|
85
|
+
interval: "30s",
|
|
86
|
+
timeout: "10s",
|
|
87
|
+
retries: 3,
|
|
88
|
+
startPeriod: "15s"
|
|
89
|
+
},
|
|
90
|
+
dependsOn: [],
|
|
91
|
+
restartPolicy: "unless-stopped",
|
|
92
|
+
networks: ["openclaw-network"],
|
|
93
|
+
skills: [{
|
|
94
|
+
skillId: "code-sandbox",
|
|
95
|
+
autoInstall: true
|
|
96
|
+
}],
|
|
97
|
+
openclawEnvVars: [
|
|
98
|
+
{
|
|
99
|
+
key: "OPENSANDBOX_HOST",
|
|
100
|
+
defaultValue: "opensandbox",
|
|
101
|
+
secret: false,
|
|
102
|
+
description: "OpenSandbox hostname for OpenClaw",
|
|
103
|
+
required: true
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
key: "OPENSANDBOX_PORT",
|
|
107
|
+
defaultValue: "8080",
|
|
108
|
+
secret: false,
|
|
109
|
+
description: "OpenSandbox port for OpenClaw",
|
|
110
|
+
required: true
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
key: "OPENSANDBOX_API_KEY",
|
|
114
|
+
defaultValue: "${OPEN_SANDBOX_API_KEY}",
|
|
115
|
+
secret: true,
|
|
116
|
+
description: "OpenSandbox API key for OpenClaw",
|
|
117
|
+
required: true
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
docsUrl: "https://github.com/anthropics/OpenSandbox",
|
|
121
|
+
tags: [
|
|
122
|
+
"sandbox",
|
|
123
|
+
"code-execution",
|
|
124
|
+
"security",
|
|
125
|
+
"ai-agent",
|
|
126
|
+
"isolation"
|
|
127
|
+
],
|
|
128
|
+
maturity: "stable",
|
|
129
|
+
requires: [],
|
|
130
|
+
recommends: [],
|
|
131
|
+
conflictsWith: [],
|
|
132
|
+
minMemoryMB: 768,
|
|
133
|
+
gpuRequired: false,
|
|
134
|
+
capDropCompatible: true,
|
|
135
|
+
proxyPath: "/sandbox",
|
|
136
|
+
envQuirks: [{
|
|
137
|
+
key: "OPEN_SANDBOX_API_KEY",
|
|
138
|
+
issue: "min_length",
|
|
139
|
+
fix: {
|
|
140
|
+
type: "generate_base64url",
|
|
141
|
+
minBytes: 32
|
|
142
|
+
}
|
|
143
|
+
}]
|
|
144
|
+
};
|
|
145
|
+
//#endregion
|
|
146
|
+
export { opensandboxDefinition };
|
|
147
|
+
|
|
148
|
+
//# sourceMappingURL=opensandbox.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensandbox.mjs","names":[],"sources":["../../../src/services/definitions/opensandbox.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const opensandboxDefinition: ServiceDefinition = {\n\tid: \"opensandbox\",\n\tname: \"OpenSandbox\",\n\tdescription:\n\t\t\"Secure containerized code execution for AI agents. Multi-language sandboxes (Python, JS/TS, Java, Go, Bash) with file operations, resource limits, and network isolation.\",\n\tcategory: \"dev-tools\",\n\ticon: \"📦\",\n\n\timage: \"opensandbox/server\",\n\timageTag: \"v1.0.6\",\n\tports: [\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"OpenSandbox Lifecycle API (FastAPI)\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"/var/run/docker.sock\",\n\t\t\tcontainerPath: \"/var/run/docker.sock\",\n\t\t\tdescription:\n\t\t\t\t\"Docker socket (required for managing sandbox containers)\",\n\t\t},\n\t\t{\n\t\t\tname: \"./sandbox.toml\",\n\t\t\tcontainerPath: \"/root/.sandbox.toml:ro\",\n\t\t\tdescription: \"OpenSandbox configuration file (read-only bind mount)\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"OPEN_SANDBOX_API_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"API key for OpenSandbox lifecycle API authentication (min 32 chars)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_LOG_LEVEL\",\n\t\t\tdefaultValue: \"INFO\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Log verbosity (DEBUG, INFO, WARNING, ERROR)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_RUNTIME_TYPE\",\n\t\t\tdefaultValue: \"docker\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Runtime backend (always docker for VPS deployments)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_EXECD_IMAGE\",\n\t\t\tdefaultValue: \"opensandbox/execd:v1.0.6\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Execution daemon image injected into sandbox containers\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_NETWORK_MODE\",\n\t\t\tdefaultValue: \"bridge\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Container networking mode (always bridge for isolation)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_PIDS_LIMIT\",\n\t\t\tdefaultValue: \"512\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Max PIDs per sandbox (fork bomb protection)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_NO_NEW_PRIVILEGES\",\n\t\t\tdefaultValue: \"true\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Security: prevent privilege escalation in sandboxes\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_SECURE_RUNTIME\",\n\t\t\tdefaultValue: \"gvisor\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Secure container runtime (gVisor for sandbox isolation)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl --fail http://localhost:8080/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: [{ skillId: \"code-sandbox\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_HOST\",\n\t\t\tdefaultValue: \"opensandbox\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"OpenSandbox hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"OpenSandbox port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENSANDBOX_API_KEY\",\n\t\t\tdefaultValue: \"${OPEN_SANDBOX_API_KEY}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"OpenSandbox API key for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://github.com/anthropics/OpenSandbox\",\n\ttags: [\n\t\t\"sandbox\",\n\t\t\"code-execution\",\n\t\t\"security\",\n\t\t\"ai-agent\",\n\t\t\"isolation\",\n\t],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 768,\n\tgpuRequired: false,\n\tcapDropCompatible: true,\n\tproxyPath: \"/sandbox\",\n\tenvQuirks: [\n\t\t{\n\t\t\tkey: \"OPEN_SANDBOX_API_KEY\",\n\t\t\tissue: \"min_length\",\n\t\t\tfix: { type: \"generate_base64url\", minBytes: 32 },\n\t\t},\n\t],\n};\n"],"mappings":";AAEA,MAAa,wBAA2C;CACvD,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,aACC;EACD,EACD;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,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,aACC;GACD,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,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,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAgB,aAAa;EAAM,CAAC;CACxD,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;CAED,SAAS;CACT,MAAM;EACL;EACA;EACA;EACA;EACA;EACA;CACD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,WAAW,CACV;EACC,KAAK;EACL,OAAO;EACP,KAAK;GAAE,MAAM;GAAsB,UAAU;GAAI;EACjD,CACD;CACD"}
|
|
@@ -70,7 +70,9 @@ const qdrantDefinition = {
|
|
|
70
70
|
recommends: ["redis"],
|
|
71
71
|
conflictsWith: [],
|
|
72
72
|
minMemoryMB: 512,
|
|
73
|
-
gpuRequired: false
|
|
73
|
+
gpuRequired: false,
|
|
74
|
+
capDropCompatible: true,
|
|
75
|
+
proxyPath: "/qdrant"
|
|
74
76
|
};
|
|
75
77
|
//#endregion
|
|
76
78
|
exports.qdrantDefinition = qdrantDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qdrant.cjs","names":[],"sources":["../../../src/services/definitions/qdrant.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const qdrantDefinition: ServiceDefinition = {\n\tid: \"qdrant\",\n\tname: \"Qdrant Vector DB\",\n\tdescription:\n\t\t\"High-performance vector similarity search engine for building RAG pipelines, semantic search, and AI-powered recommendation systems.\",\n\tcategory: \"vector-db\",\n\ticon: \"🧠\",\n\n\timage: \"qdrant/qdrant\",\n\timageTag: \"v1.12.1\",\n\tports: [\n\t\t{\n\t\t\thost: 6333,\n\t\t\tcontainer: 6333,\n\t\t\tdescription: \"Qdrant REST API\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 6334,\n\t\t\tcontainer: 6334,\n\t\t\tdescription: \"Qdrant gRPC API\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"qdrant-data\",\n\t\t\tcontainerPath: \"/qdrant/storage\",\n\t\t\tdescription: \"Persistent Qdrant vector storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"QDRANT__SERVICE__GRPC_PORT\",\n\t\t\tdefaultValue: \"6334\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"gRPC port for Qdrant service\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"bash -c 'echo > /dev/tcp/localhost/6333' || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"10s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"qdrant-memory\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"QDRANT_HOST\",\n\t\t\tdefaultValue: \"qdrant\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Qdrant hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"QDRANT_PORT\",\n\t\t\tdefaultValue: \"6333\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Qdrant REST API port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://qdrant.tech/documentation/\",\n\ttags: [\"vector\", \"rag\", \"embeddings\", \"semantic-search\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"redis\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n};\n"],"mappings":";;AAEA,MAAa,mBAAsC;CAClD,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,CAAC;EAAE,SAAS;EAAiB,aAAa;EAAM,CAAC;CACzD,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;EAAU;EAAO;EAAc;EAAkB;CACxD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,QAAQ;CACrB,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
1
|
+
{"version":3,"file":"qdrant.cjs","names":[],"sources":["../../../src/services/definitions/qdrant.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const qdrantDefinition: ServiceDefinition = {\n\tid: \"qdrant\",\n\tname: \"Qdrant Vector DB\",\n\tdescription:\n\t\t\"High-performance vector similarity search engine for building RAG pipelines, semantic search, and AI-powered recommendation systems.\",\n\tcategory: \"vector-db\",\n\ticon: \"🧠\",\n\n\timage: \"qdrant/qdrant\",\n\timageTag: \"v1.12.1\",\n\tports: [\n\t\t{\n\t\t\thost: 6333,\n\t\t\tcontainer: 6333,\n\t\t\tdescription: \"Qdrant REST API\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 6334,\n\t\t\tcontainer: 6334,\n\t\t\tdescription: \"Qdrant gRPC API\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"qdrant-data\",\n\t\t\tcontainerPath: \"/qdrant/storage\",\n\t\t\tdescription: \"Persistent Qdrant vector storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"QDRANT__SERVICE__GRPC_PORT\",\n\t\t\tdefaultValue: \"6334\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"gRPC port for Qdrant service\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"bash -c 'echo > /dev/tcp/localhost/6333' || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"10s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"qdrant-memory\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"QDRANT_HOST\",\n\t\t\tdefaultValue: \"qdrant\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Qdrant hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"QDRANT_PORT\",\n\t\t\tdefaultValue: \"6333\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Qdrant REST API port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://qdrant.tech/documentation/\",\n\ttags: [\"vector\", \"rag\", \"embeddings\", \"semantic-search\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"redis\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n\tcapDropCompatible: true,\n\tproxyPath: \"/qdrant\",\n};\n"],"mappings":";;AAEA,MAAa,mBAAsC;CAClD,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,CAAC;EAAE,SAAS;EAAiB,aAAa;EAAM,CAAC;CACzD,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;EAAU;EAAO;EAAc;EAAkB;CACxD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,QAAQ;CACrB,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qdrant.mjs","names":[],"sources":["../../../src/services/definitions/qdrant.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const qdrantDefinition: ServiceDefinition = {\n\tid: \"qdrant\",\n\tname: \"Qdrant Vector DB\",\n\tdescription:\n\t\t\"High-performance vector similarity search engine for building RAG pipelines, semantic search, and AI-powered recommendation systems.\",\n\tcategory: \"vector-db\",\n\ticon: \"🧠\",\n\n\timage: \"qdrant/qdrant\",\n\timageTag: \"v1.12.1\",\n\tports: [\n\t\t{\n\t\t\thost: 6333,\n\t\t\tcontainer: 6333,\n\t\t\tdescription: \"Qdrant REST API\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 6334,\n\t\t\tcontainer: 6334,\n\t\t\tdescription: \"Qdrant gRPC API\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"qdrant-data\",\n\t\t\tcontainerPath: \"/qdrant/storage\",\n\t\t\tdescription: \"Persistent Qdrant vector storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"QDRANT__SERVICE__GRPC_PORT\",\n\t\t\tdefaultValue: \"6334\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"gRPC port for Qdrant service\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"bash -c 'echo > /dev/tcp/localhost/6333' || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"10s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"qdrant-memory\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"QDRANT_HOST\",\n\t\t\tdefaultValue: \"qdrant\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Qdrant hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"QDRANT_PORT\",\n\t\t\tdefaultValue: \"6333\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Qdrant REST API port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://qdrant.tech/documentation/\",\n\ttags: [\"vector\", \"rag\", \"embeddings\", \"semantic-search\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"redis\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,mBAAsC;CAClD,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,CAAC;EAAE,SAAS;EAAiB,aAAa;EAAM,CAAC;CACzD,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;EAAU;EAAO;EAAc;EAAkB;CACxD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,QAAQ;CACrB,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
1
|
+
{"version":3,"file":"qdrant.mjs","names":[],"sources":["../../../src/services/definitions/qdrant.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const qdrantDefinition: ServiceDefinition = {\n\tid: \"qdrant\",\n\tname: \"Qdrant Vector DB\",\n\tdescription:\n\t\t\"High-performance vector similarity search engine for building RAG pipelines, semantic search, and AI-powered recommendation systems.\",\n\tcategory: \"vector-db\",\n\ticon: \"🧠\",\n\n\timage: \"qdrant/qdrant\",\n\timageTag: \"v1.12.1\",\n\tports: [\n\t\t{\n\t\t\thost: 6333,\n\t\t\tcontainer: 6333,\n\t\t\tdescription: \"Qdrant REST API\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 6334,\n\t\t\tcontainer: 6334,\n\t\t\tdescription: \"Qdrant gRPC API\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"qdrant-data\",\n\t\t\tcontainerPath: \"/qdrant/storage\",\n\t\t\tdescription: \"Persistent Qdrant vector storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"QDRANT__SERVICE__GRPC_PORT\",\n\t\t\tdefaultValue: \"6334\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"gRPC port for Qdrant service\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"bash -c 'echo > /dev/tcp/localhost/6333' || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"10s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"qdrant-memory\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"QDRANT_HOST\",\n\t\t\tdefaultValue: \"qdrant\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Qdrant hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"QDRANT_PORT\",\n\t\t\tdefaultValue: \"6333\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Qdrant REST API port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://qdrant.tech/documentation/\",\n\ttags: [\"vector\", \"rag\", \"embeddings\", \"semantic-search\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"redis\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n\tcapDropCompatible: true,\n\tproxyPath: \"/qdrant\",\n};\n"],"mappings":";AAEA,MAAa,mBAAsC;CAClD,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,CAAC;EAAE,SAAS;EAAiB,aAAa;EAAM,CAAC;CACzD,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;EAAU;EAAO;EAAc;EAAkB;CACxD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,QAAQ;CACrB,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX"}
|
|
@@ -58,7 +58,14 @@ const searxngDefinition = {
|
|
|
58
58
|
recommends: ["redis"],
|
|
59
59
|
conflictsWith: [],
|
|
60
60
|
minMemoryMB: 256,
|
|
61
|
-
gpuRequired: false
|
|
61
|
+
gpuRequired: false,
|
|
62
|
+
capDropCompatible: false,
|
|
63
|
+
proxyPath: "/searxng",
|
|
64
|
+
firstBootCapabilities: [
|
|
65
|
+
"CHOWN",
|
|
66
|
+
"SETGID",
|
|
67
|
+
"SETUID"
|
|
68
|
+
]
|
|
62
69
|
};
|
|
63
70
|
//#endregion
|
|
64
71
|
exports.searxngDefinition = searxngDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searxng.cjs","names":[],"sources":["../../../src/services/definitions/searxng.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const searxngDefinition: ServiceDefinition = {\n\tid: \"searxng\",\n\tname: \"SearXNG\",\n\tdescription:\n\t\t\"Privacy-respecting, self-hosted metasearch engine that aggregates results from multiple search engines without tracking.\",\n\tcategory: \"search\",\n\ticon: \"🔍\",\n\n\timage: \"searxng/searxng\",\n\timageTag: \"2026.2.23-4964d664f\",\n\tports: [\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"SearXNG web interface and API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"searxng-data\",\n\t\t\tcontainerPath: \"/etc/searxng\",\n\t\t\tdescription: \"SearXNG configuration and settings\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:8080/ || 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: [{ skillId: \"searxng-search\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"SEARXNG_HOST\",\n\t\t\tdefaultValue: \"searxng\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"SearXNG hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SEARXNG_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"SearXNG port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://docs.searxng.org/\",\n\ttags: [\"search\", \"meta-search\", \"privacy\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"redis\"],\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,EAAE;CACf,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAkB,aAAa;EAAM,CAAC;CAC1D,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;EAAU;EAAe;EAAU;CAC1C,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,QAAQ;CACrB,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
1
|
+
{"version":3,"file":"searxng.cjs","names":[],"sources":["../../../src/services/definitions/searxng.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const searxngDefinition: ServiceDefinition = {\n\tid: \"searxng\",\n\tname: \"SearXNG\",\n\tdescription:\n\t\t\"Privacy-respecting, self-hosted metasearch engine that aggregates results from multiple search engines without tracking.\",\n\tcategory: \"search\",\n\ticon: \"🔍\",\n\n\timage: \"searxng/searxng\",\n\timageTag: \"2026.2.23-4964d664f\",\n\tports: [\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"SearXNG web interface and API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"searxng-data\",\n\t\t\tcontainerPath: \"/etc/searxng\",\n\t\t\tdescription: \"SearXNG configuration and settings\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:8080/ || 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: [{ skillId: \"searxng-search\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"SEARXNG_HOST\",\n\t\t\tdefaultValue: \"searxng\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"SearXNG hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SEARXNG_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"SearXNG port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://docs.searxng.org/\",\n\ttags: [\"search\", \"meta-search\", \"privacy\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"redis\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n\tcapDropCompatible: false,\n\tproxyPath: \"/searxng\",\n\tfirstBootCapabilities: [\"CHOWN\", \"SETGID\", \"SETUID\"],\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,EAAE;CACf,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAkB,aAAa;EAAM,CAAC;CAC1D,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;EAAU;EAAe;EAAU;CAC1C,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,QAAQ;CACrB,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,uBAAuB;EAAC;EAAS;EAAU;EAAS;CACpD"}
|
|
@@ -57,7 +57,14 @@ const searxngDefinition = {
|
|
|
57
57
|
recommends: ["redis"],
|
|
58
58
|
conflictsWith: [],
|
|
59
59
|
minMemoryMB: 256,
|
|
60
|
-
gpuRequired: false
|
|
60
|
+
gpuRequired: false,
|
|
61
|
+
capDropCompatible: false,
|
|
62
|
+
proxyPath: "/searxng",
|
|
63
|
+
firstBootCapabilities: [
|
|
64
|
+
"CHOWN",
|
|
65
|
+
"SETGID",
|
|
66
|
+
"SETUID"
|
|
67
|
+
]
|
|
61
68
|
};
|
|
62
69
|
//#endregion
|
|
63
70
|
export { searxngDefinition };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searxng.mjs","names":[],"sources":["../../../src/services/definitions/searxng.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const searxngDefinition: ServiceDefinition = {\n\tid: \"searxng\",\n\tname: \"SearXNG\",\n\tdescription:\n\t\t\"Privacy-respecting, self-hosted metasearch engine that aggregates results from multiple search engines without tracking.\",\n\tcategory: \"search\",\n\ticon: \"🔍\",\n\n\timage: \"searxng/searxng\",\n\timageTag: \"2026.2.23-4964d664f\",\n\tports: [\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"SearXNG web interface and API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"searxng-data\",\n\t\t\tcontainerPath: \"/etc/searxng\",\n\t\t\tdescription: \"SearXNG configuration and settings\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:8080/ || 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: [{ skillId: \"searxng-search\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"SEARXNG_HOST\",\n\t\t\tdefaultValue: \"searxng\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"SearXNG hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SEARXNG_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"SearXNG port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://docs.searxng.org/\",\n\ttags: [\"search\", \"meta-search\", \"privacy\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"redis\"],\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,EAAE;CACf,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAkB,aAAa;EAAM,CAAC;CAC1D,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;EAAU;EAAe;EAAU;CAC1C,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,QAAQ;CACrB,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
1
|
+
{"version":3,"file":"searxng.mjs","names":[],"sources":["../../../src/services/definitions/searxng.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const searxngDefinition: ServiceDefinition = {\n\tid: \"searxng\",\n\tname: \"SearXNG\",\n\tdescription:\n\t\t\"Privacy-respecting, self-hosted metasearch engine that aggregates results from multiple search engines without tracking.\",\n\tcategory: \"search\",\n\ticon: \"🔍\",\n\n\timage: \"searxng/searxng\",\n\timageTag: \"2026.2.23-4964d664f\",\n\tports: [\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"SearXNG web interface and API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"searxng-data\",\n\t\t\tcontainerPath: \"/etc/searxng\",\n\t\t\tdescription: \"SearXNG configuration and settings\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:8080/ || 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: [{ skillId: \"searxng-search\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"SEARXNG_HOST\",\n\t\t\tdefaultValue: \"searxng\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"SearXNG hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SEARXNG_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"SearXNG port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://docs.searxng.org/\",\n\ttags: [\"search\", \"meta-search\", \"privacy\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"redis\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n\tcapDropCompatible: false,\n\tproxyPath: \"/searxng\",\n\tfirstBootCapabilities: [\"CHOWN\", \"SETGID\", \"SETUID\"],\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,EAAE;CACf,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAkB,aAAa;EAAM,CAAC;CAC1D,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;EAAU;EAAe;EAAU;CAC1C,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,QAAQ;CACrB,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,uBAAuB;EAAC;EAAS;EAAU;EAAS;CACpD"}
|
|
@@ -44,7 +44,14 @@ const uptimeKumaDefinition = {
|
|
|
44
44
|
recommends: [],
|
|
45
45
|
conflictsWith: [],
|
|
46
46
|
minMemoryMB: 256,
|
|
47
|
-
gpuRequired: false
|
|
47
|
+
gpuRequired: false,
|
|
48
|
+
capDropCompatible: false,
|
|
49
|
+
proxyPath: "/uptime-kuma",
|
|
50
|
+
firstBootCapabilities: [
|
|
51
|
+
"CHOWN",
|
|
52
|
+
"SETGID",
|
|
53
|
+
"SETUID"
|
|
54
|
+
]
|
|
48
55
|
};
|
|
49
56
|
//#endregion
|
|
50
57
|
exports.uptimeKumaDefinition = uptimeKumaDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uptime-kuma.cjs","names":[],"sources":["../../../src/services/definitions/uptime-kuma.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const uptimeKumaDefinition: ServiceDefinition = {\n\tid: \"uptime-kuma\",\n\tname: \"Uptime Kuma\",\n\tdescription:\n\t\t\"Self-hosted monitoring tool for tracking uptime of websites, APIs, and services with a sleek dashboard and multi-notification support.\",\n\tcategory: \"monitoring\",\n\ticon: \"📡\",\n\n\timage: \"louislam/uptime-kuma\",\n\timageTag: \"2\",\n\tports: [\n\t\t{\n\t\t\thost: 3001,\n\t\t\tcontainer: 3001,\n\t\t\tdescription: \"Uptime Kuma web interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"uptime-kuma-data\",\n\t\t\tcontainerPath: \"/app/data\",\n\t\t\tdescription: \"Persistent Uptime Kuma data and configuration\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:3001 || 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://github.com/louislam/uptime-kuma/wiki\",\n\ttags: [\"uptime\", \"monitoring\", \"status-page\", \"alerts\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";;AAEA,MAAa,uBAA0C;CACtD,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,EAAE;CACf,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;EAAU;EAAc;EAAe;EAAS;CACvD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
1
|
+
{"version":3,"file":"uptime-kuma.cjs","names":[],"sources":["../../../src/services/definitions/uptime-kuma.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const uptimeKumaDefinition: ServiceDefinition = {\n\tid: \"uptime-kuma\",\n\tname: \"Uptime Kuma\",\n\tdescription:\n\t\t\"Self-hosted monitoring tool for tracking uptime of websites, APIs, and services with a sleek dashboard and multi-notification support.\",\n\tcategory: \"monitoring\",\n\ticon: \"📡\",\n\n\timage: \"louislam/uptime-kuma\",\n\timageTag: \"2\",\n\tports: [\n\t\t{\n\t\t\thost: 3001,\n\t\t\tcontainer: 3001,\n\t\t\tdescription: \"Uptime Kuma web interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"uptime-kuma-data\",\n\t\t\tcontainerPath: \"/app/data\",\n\t\t\tdescription: \"Persistent Uptime Kuma data and configuration\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:3001 || 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://github.com/louislam/uptime-kuma/wiki\",\n\ttags: [\"uptime\", \"monitoring\", \"status-page\", \"alerts\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n\tcapDropCompatible: false,\n\tproxyPath: \"/uptime-kuma\",\n\tfirstBootCapabilities: [\"CHOWN\", \"SETGID\", \"SETUID\"],\n};\n"],"mappings":";;AAEA,MAAa,uBAA0C;CACtD,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,EAAE;CACf,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;EAAU;EAAc;EAAe;EAAS;CACvD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,uBAAuB;EAAC;EAAS;EAAU;EAAS;CACpD"}
|
|
@@ -43,7 +43,14 @@ const uptimeKumaDefinition = {
|
|
|
43
43
|
recommends: [],
|
|
44
44
|
conflictsWith: [],
|
|
45
45
|
minMemoryMB: 256,
|
|
46
|
-
gpuRequired: false
|
|
46
|
+
gpuRequired: false,
|
|
47
|
+
capDropCompatible: false,
|
|
48
|
+
proxyPath: "/uptime-kuma",
|
|
49
|
+
firstBootCapabilities: [
|
|
50
|
+
"CHOWN",
|
|
51
|
+
"SETGID",
|
|
52
|
+
"SETUID"
|
|
53
|
+
]
|
|
47
54
|
};
|
|
48
55
|
//#endregion
|
|
49
56
|
export { uptimeKumaDefinition };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uptime-kuma.mjs","names":[],"sources":["../../../src/services/definitions/uptime-kuma.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const uptimeKumaDefinition: ServiceDefinition = {\n\tid: \"uptime-kuma\",\n\tname: \"Uptime Kuma\",\n\tdescription:\n\t\t\"Self-hosted monitoring tool for tracking uptime of websites, APIs, and services with a sleek dashboard and multi-notification support.\",\n\tcategory: \"monitoring\",\n\ticon: \"📡\",\n\n\timage: \"louislam/uptime-kuma\",\n\timageTag: \"2\",\n\tports: [\n\t\t{\n\t\t\thost: 3001,\n\t\t\tcontainer: 3001,\n\t\t\tdescription: \"Uptime Kuma web interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"uptime-kuma-data\",\n\t\t\tcontainerPath: \"/app/data\",\n\t\t\tdescription: \"Persistent Uptime Kuma data and configuration\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:3001 || 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://github.com/louislam/uptime-kuma/wiki\",\n\ttags: [\"uptime\", \"monitoring\", \"status-page\", \"alerts\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,uBAA0C;CACtD,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,EAAE;CACf,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;EAAU;EAAc;EAAe;EAAS;CACvD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
1
|
+
{"version":3,"file":"uptime-kuma.mjs","names":[],"sources":["../../../src/services/definitions/uptime-kuma.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const uptimeKumaDefinition: ServiceDefinition = {\n\tid: \"uptime-kuma\",\n\tname: \"Uptime Kuma\",\n\tdescription:\n\t\t\"Self-hosted monitoring tool for tracking uptime of websites, APIs, and services with a sleek dashboard and multi-notification support.\",\n\tcategory: \"monitoring\",\n\ticon: \"📡\",\n\n\timage: \"louislam/uptime-kuma\",\n\timageTag: \"2\",\n\tports: [\n\t\t{\n\t\t\thost: 3001,\n\t\t\tcontainer: 3001,\n\t\t\tdescription: \"Uptime Kuma web interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"uptime-kuma-data\",\n\t\t\tcontainerPath: \"/app/data\",\n\t\t\tdescription: \"Persistent Uptime Kuma data and configuration\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:3001 || 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://github.com/louislam/uptime-kuma/wiki\",\n\ttags: [\"uptime\", \"monitoring\", \"status-page\", \"alerts\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n\tcapDropCompatible: false,\n\tproxyPath: \"/uptime-kuma\",\n\tfirstBootCapabilities: [\"CHOWN\", \"SETGID\", \"SETUID\"],\n};\n"],"mappings":";AAEA,MAAa,uBAA0C;CACtD,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,EAAE;CACf,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;EAAU;EAAc;EAAe;EAAS;CACvD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,uBAAuB;EAAC;EAAS;EAAU;EAAS;CACpD"}
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_test_CTcmp4Su = require("../test.CTcmp4Su-DlzTarwH.cjs");
|
|
2
2
|
const require_services_registry = require("./registry.cjs");
|
|
3
3
|
//#region src/services/registry.test.ts
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
require_test_CTcmp4Su.describe("service registry", () => {
|
|
5
|
+
require_test_CTcmp4Su.it("has at least 60 services registered", () => {
|
|
6
|
+
require_test_CTcmp4Su.globalExpect(require_services_registry.getAllServices().length).toBeGreaterThanOrEqual(60);
|
|
7
7
|
});
|
|
8
|
-
|
|
8
|
+
require_test_CTcmp4Su.it("finds redis by ID", () => {
|
|
9
9
|
const redis = require_services_registry.getServiceById("redis");
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
require_test_CTcmp4Su.globalExpect(redis).toBeDefined();
|
|
11
|
+
require_test_CTcmp4Su.globalExpect(redis.id).toBe("redis");
|
|
12
|
+
require_test_CTcmp4Su.globalExpect(redis.name).toBe("Redis");
|
|
13
13
|
});
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
require_test_CTcmp4Su.it("returns undefined for unknown ID", () => {
|
|
15
|
+
require_test_CTcmp4Su.globalExpect(require_services_registry.getServiceById("nonexistent")).toBeUndefined();
|
|
16
16
|
});
|
|
17
|
-
|
|
17
|
+
require_test_CTcmp4Su.it("finds tailscale and it is mandatory", () => {
|
|
18
18
|
const tailscale = require_services_registry.getServiceById("tailscale");
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
require_test_CTcmp4Su.globalExpect(tailscale).toBeDefined();
|
|
20
|
+
require_test_CTcmp4Su.globalExpect(tailscale.id).toBe("tailscale");
|
|
21
|
+
require_test_CTcmp4Su.globalExpect(tailscale.mandatory).toBe(true);
|
|
22
22
|
});
|
|
23
|
-
|
|
23
|
+
require_test_CTcmp4Su.it("finds mission-control and it is mandatory with gitSource", () => {
|
|
24
24
|
const mc = require_services_registry.getServiceById("mission-control");
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
require_test_CTcmp4Su.globalExpect(mc).toBeDefined();
|
|
26
|
+
require_test_CTcmp4Su.globalExpect(mc.mandatory).toBe(true);
|
|
27
|
+
require_test_CTcmp4Su.globalExpect(mc.gitSource).toBeDefined();
|
|
28
|
+
require_test_CTcmp4Su.globalExpect(mc.gitSource.repoUrl).toContain("better-openclaw-mission-control");
|
|
29
29
|
});
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
require_test_CTcmp4Su.it("finds coolify, dokploy, livekit, and La Suite Meet services by ID", () => {
|
|
31
|
+
require_test_CTcmp4Su.globalExpect(require_services_registry.getServiceById("coolify")).toBeDefined();
|
|
32
|
+
require_test_CTcmp4Su.globalExpect(require_services_registry.getServiceById("dokploy")).toBeDefined();
|
|
33
|
+
require_test_CTcmp4Su.globalExpect(require_services_registry.getServiceById("livekit")).toBeDefined();
|
|
34
|
+
require_test_CTcmp4Su.globalExpect(require_services_registry.getServiceById("lasuite-meet-backend")).toBeDefined();
|
|
35
|
+
require_test_CTcmp4Su.globalExpect(require_services_registry.getServiceById("lasuite-meet-frontend")).toBeDefined();
|
|
36
|
+
require_test_CTcmp4Su.globalExpect(require_services_registry.getServiceById("lasuite-meet-agents")).toBeDefined();
|
|
37
37
|
});
|
|
38
|
-
|
|
38
|
+
require_test_CTcmp4Su.it("filters by category", () => {
|
|
39
39
|
const databases = require_services_registry.getServicesByCategory("database");
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
require_test_CTcmp4Su.globalExpect(databases.map((s) => s.id)).toContain("redis");
|
|
41
|
+
require_test_CTcmp4Su.globalExpect(databases.length).toBeGreaterThanOrEqual(1);
|
|
42
42
|
});
|
|
43
|
-
|
|
43
|
+
require_test_CTcmp4Su.it("filters by tag", () => {
|
|
44
44
|
const cacheServices = require_services_registry.getServicesByTag("cache");
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
require_test_CTcmp4Su.globalExpect(cacheServices.map((s) => s.id)).toContain("redis");
|
|
46
|
+
require_test_CTcmp4Su.globalExpect(cacheServices.length).toBeGreaterThanOrEqual(1);
|
|
47
47
|
});
|
|
48
|
-
|
|
48
|
+
require_test_CTcmp4Su.it("all service IDs are unique", () => {
|
|
49
49
|
const ids = require_services_registry.getAllServices().map((s) => s.id);
|
|
50
|
-
|
|
50
|
+
require_test_CTcmp4Su.globalExpect(new Set(ids).size).toBe(ids.length);
|
|
51
51
|
});
|
|
52
|
-
|
|
52
|
+
require_test_CTcmp4Su.it("no two services have the same exposed host port", () => {
|
|
53
53
|
const services = require_services_registry.getAllServices();
|
|
54
54
|
const portMap = /* @__PURE__ */ new Map();
|
|
55
55
|
for (const svc of services) for (const port of svc.ports) {
|
|
@@ -61,7 +61,7 @@ require_vi_2VT5v0um.describe("service registry", () => {
|
|
|
61
61
|
const conflicts = [];
|
|
62
62
|
for (const [port, serviceIds] of portMap) if (serviceIds.length > 1) conflicts.push(`Port ${port} shared by: ${serviceIds.join(", ")}`);
|
|
63
63
|
if (conflicts.length > 0) console.warn(`[informational] ${conflicts.length} port overlap(s) detected:\n ${conflicts.join("\n ")}`);
|
|
64
|
-
|
|
64
|
+
require_test_CTcmp4Su.globalExpect(portMap.size).toBeGreaterThan(0);
|
|
65
65
|
});
|
|
66
66
|
});
|
|
67
67
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.test.cjs","names":["describe","getAllServices","getServiceById","getServicesByCategory","getServicesByTag"],"sources":["../../src/services/registry.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport {\n\tgetAllServices,\n\tgetServiceById,\n\tgetServicesByCategory,\n\tgetServicesByTag,\n} from \"../services/registry.js\";\n\ndescribe(\"service registry\", () => {\n\tit(\"has at least 60 services registered\", () => {\n\t\tconst services = getAllServices();\n\t\texpect(services.length).toBeGreaterThanOrEqual(60);\n\t});\n\n\tit(\"finds redis by ID\", () => {\n\t\tconst redis = getServiceById(\"redis\");\n\t\texpect(redis).toBeDefined();\n\t\texpect(redis!.id).toBe(\"redis\");\n\t\texpect(redis!.name).toBe(\"Redis\");\n\t});\n\n\tit(\"returns undefined for unknown ID\", () => {\n\t\tconst result = getServiceById(\"nonexistent\");\n\t\texpect(result).toBeUndefined();\n\t});\n\n\tit(\"finds tailscale and it is mandatory\", () => {\n\t\tconst tailscale = getServiceById(\"tailscale\");\n\t\texpect(tailscale).toBeDefined();\n\t\texpect(tailscale!.id).toBe(\"tailscale\");\n\t\texpect(tailscale!.mandatory).toBe(true);\n\t});\n\n\tit(\"finds mission-control and it is mandatory with gitSource\", () => {\n\t\tconst mc = getServiceById(\"mission-control\");\n\t\texpect(mc).toBeDefined();\n\t\texpect(mc!.mandatory).toBe(true);\n\t\texpect(mc!.gitSource).toBeDefined();\n\t\texpect(mc!.gitSource!.repoUrl).toContain(\"better-openclaw-mission-control\");\n\t});\n\n\tit(\"finds coolify, dokploy, livekit, and La Suite Meet services by ID\", () => {\n\t\texpect(getServiceById(\"coolify\")).toBeDefined();\n\t\texpect(getServiceById(\"dokploy\")).toBeDefined();\n\t\texpect(getServiceById(\"livekit\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-backend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-frontend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-agents\")).toBeDefined();\n\t});\n\n\tit(\"filters by category\", () => {\n\t\tconst databases = getServicesByCategory(\"database\");\n\t\tconst ids = databases.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(databases.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"filters by tag\", () => {\n\t\tconst cacheServices = getServicesByTag(\"cache\");\n\t\tconst ids = cacheServices.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(cacheServices.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"all service IDs are unique\", () => {\n\t\tconst services = getAllServices();\n\t\tconst ids = services.map((s) => s.id);\n\t\tconst uniqueIds = new Set(ids);\n\t\texpect(uniqueIds.size).toBe(ids.length);\n\t});\n\n\tit(\"no two services have the same exposed host port\", () => {\n\t\tconst services = getAllServices();\n\t\tconst portMap = new Map<number, string[]>();\n\n\t\tfor (const svc of services) {\n\t\t\tfor (const port of svc.ports) {\n\t\t\t\tif (!port.exposed) continue;\n\t\t\t\tconst existing = portMap.get(port.host) ?? [];\n\t\t\t\texisting.push(svc.id);\n\t\t\t\tportMap.set(port.host, existing);\n\t\t\t}\n\t\t}\n\n\t\t// Informational: log any shared ports but don't hard-fail,\n\t\t// since users may not enable all services simultaneously.\n\t\tconst conflicts: string[] = [];\n\t\tfor (const [port, serviceIds] of portMap) {\n\t\t\tif (serviceIds.length > 1) {\n\t\t\t\tconflicts.push(`Port ${port} shared by: ${serviceIds.join(\", \")}`);\n\t\t\t}\n\t\t}\n\n\t\t// This is informational — warn if there are conflicts but still pass.\n\t\t// If you want to enforce unique ports, change the next line to:\n\t\t// expect(conflicts).toHaveLength(0);\n\t\tif (conflicts.length > 0) {\n\t\t\tconsole.warn(\n\t\t\t\t`[informational] ${conflicts.length} port overlap(s) detected:\\n ${conflicts.join(\"\\n \")}`,\n\t\t\t);\n\t\t}\n\n\t\t// At minimum, verify we checked something\n\t\texpect(portMap.size).toBeGreaterThan(0);\n\t});\n});\n"],"mappings":";;;AAQAA,
|
|
1
|
+
{"version":3,"file":"registry.test.cjs","names":["describe","getAllServices","getServiceById","getServicesByCategory","getServicesByTag"],"sources":["../../src/services/registry.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport {\n\tgetAllServices,\n\tgetServiceById,\n\tgetServicesByCategory,\n\tgetServicesByTag,\n} from \"../services/registry.js\";\n\ndescribe(\"service registry\", () => {\n\tit(\"has at least 60 services registered\", () => {\n\t\tconst services = getAllServices();\n\t\texpect(services.length).toBeGreaterThanOrEqual(60);\n\t});\n\n\tit(\"finds redis by ID\", () => {\n\t\tconst redis = getServiceById(\"redis\");\n\t\texpect(redis).toBeDefined();\n\t\texpect(redis!.id).toBe(\"redis\");\n\t\texpect(redis!.name).toBe(\"Redis\");\n\t});\n\n\tit(\"returns undefined for unknown ID\", () => {\n\t\tconst result = getServiceById(\"nonexistent\");\n\t\texpect(result).toBeUndefined();\n\t});\n\n\tit(\"finds tailscale and it is mandatory\", () => {\n\t\tconst tailscale = getServiceById(\"tailscale\");\n\t\texpect(tailscale).toBeDefined();\n\t\texpect(tailscale!.id).toBe(\"tailscale\");\n\t\texpect(tailscale!.mandatory).toBe(true);\n\t});\n\n\tit(\"finds mission-control and it is mandatory with gitSource\", () => {\n\t\tconst mc = getServiceById(\"mission-control\");\n\t\texpect(mc).toBeDefined();\n\t\texpect(mc!.mandatory).toBe(true);\n\t\texpect(mc!.gitSource).toBeDefined();\n\t\texpect(mc!.gitSource!.repoUrl).toContain(\"better-openclaw-mission-control\");\n\t});\n\n\tit(\"finds coolify, dokploy, livekit, and La Suite Meet services by ID\", () => {\n\t\texpect(getServiceById(\"coolify\")).toBeDefined();\n\t\texpect(getServiceById(\"dokploy\")).toBeDefined();\n\t\texpect(getServiceById(\"livekit\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-backend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-frontend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-agents\")).toBeDefined();\n\t});\n\n\tit(\"filters by category\", () => {\n\t\tconst databases = getServicesByCategory(\"database\");\n\t\tconst ids = databases.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(databases.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"filters by tag\", () => {\n\t\tconst cacheServices = getServicesByTag(\"cache\");\n\t\tconst ids = cacheServices.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(cacheServices.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"all service IDs are unique\", () => {\n\t\tconst services = getAllServices();\n\t\tconst ids = services.map((s) => s.id);\n\t\tconst uniqueIds = new Set(ids);\n\t\texpect(uniqueIds.size).toBe(ids.length);\n\t});\n\n\tit(\"no two services have the same exposed host port\", () => {\n\t\tconst services = getAllServices();\n\t\tconst portMap = new Map<number, string[]>();\n\n\t\tfor (const svc of services) {\n\t\t\tfor (const port of svc.ports) {\n\t\t\t\tif (!port.exposed) continue;\n\t\t\t\tconst existing = portMap.get(port.host) ?? [];\n\t\t\t\texisting.push(svc.id);\n\t\t\t\tportMap.set(port.host, existing);\n\t\t\t}\n\t\t}\n\n\t\t// Informational: log any shared ports but don't hard-fail,\n\t\t// since users may not enable all services simultaneously.\n\t\tconst conflicts: string[] = [];\n\t\tfor (const [port, serviceIds] of portMap) {\n\t\t\tif (serviceIds.length > 1) {\n\t\t\t\tconflicts.push(`Port ${port} shared by: ${serviceIds.join(\", \")}`);\n\t\t\t}\n\t\t}\n\n\t\t// This is informational — warn if there are conflicts but still pass.\n\t\t// If you want to enforce unique ports, change the next line to:\n\t\t// expect(conflicts).toHaveLength(0);\n\t\tif (conflicts.length > 0) {\n\t\t\tconsole.warn(\n\t\t\t\t`[informational] ${conflicts.length} port overlap(s) detected:\\n ${conflicts.join(\"\\n \")}`,\n\t\t\t);\n\t\t}\n\n\t\t// At minimum, verify we checked something\n\t\texpect(portMap.size).toBeGreaterThan(0);\n\t});\n});\n"],"mappings":";;;AAQAA,sBAAAA,SAAS,0BAA0B;AAClC,uBAAA,GAAG,6CAA6C;AAE/C,wBAAA,aADiBC,0BAAAA,gBAAgB,CACjB,OAAO,CAAC,uBAAuB,GAAG;GACjD;AAEF,uBAAA,GAAG,2BAA2B;EAC7B,MAAM,QAAQC,0BAAAA,eAAe,QAAQ;AACrC,wBAAA,aAAO,MAAM,CAAC,aAAa;AAC3B,wBAAA,aAAO,MAAO,GAAG,CAAC,KAAK,QAAQ;AAC/B,wBAAA,aAAO,MAAO,KAAK,CAAC,KAAK,QAAQ;GAChC;AAEF,uBAAA,GAAG,0CAA0C;AAE5C,wBAAA,aADeA,0BAAAA,eAAe,cAAc,CAC9B,CAAC,eAAe;GAC7B;AAEF,uBAAA,GAAG,6CAA6C;EAC/C,MAAM,YAAYA,0BAAAA,eAAe,YAAY;AAC7C,wBAAA,aAAO,UAAU,CAAC,aAAa;AAC/B,wBAAA,aAAO,UAAW,GAAG,CAAC,KAAK,YAAY;AACvC,wBAAA,aAAO,UAAW,UAAU,CAAC,KAAK,KAAK;GACtC;AAEF,uBAAA,GAAG,kEAAkE;EACpE,MAAM,KAAKA,0BAAAA,eAAe,kBAAkB;AAC5C,wBAAA,aAAO,GAAG,CAAC,aAAa;AACxB,wBAAA,aAAO,GAAI,UAAU,CAAC,KAAK,KAAK;AAChC,wBAAA,aAAO,GAAI,UAAU,CAAC,aAAa;AACnC,wBAAA,aAAO,GAAI,UAAW,QAAQ,CAAC,UAAU,kCAAkC;GAC1E;AAEF,uBAAA,GAAG,2EAA2E;AAC7E,wBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,wBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,wBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,wBAAA,aAAOA,0BAAAA,eAAe,uBAAuB,CAAC,CAAC,aAAa;AAC5D,wBAAA,aAAOA,0BAAAA,eAAe,wBAAwB,CAAC,CAAC,aAAa;AAC7D,wBAAA,aAAOA,0BAAAA,eAAe,sBAAsB,CAAC,CAAC,aAAa;GAC1D;AAEF,uBAAA,GAAG,6BAA6B;EAC/B,MAAM,YAAYC,0BAAAA,sBAAsB,WAAW;AAEnD,wBAAA,aADY,UAAU,KAAK,MAAM,EAAE,GAAG,CAC3B,CAAC,UAAU,QAAQ;AAC9B,wBAAA,aAAO,UAAU,OAAO,CAAC,uBAAuB,EAAE;GACjD;AAEF,uBAAA,GAAG,wBAAwB;EAC1B,MAAM,gBAAgBC,0BAAAA,iBAAiB,QAAQ;AAE/C,wBAAA,aADY,cAAc,KAAK,MAAM,EAAE,GAAG,CAC/B,CAAC,UAAU,QAAQ;AAC9B,wBAAA,aAAO,cAAc,OAAO,CAAC,uBAAuB,EAAE;GACrD;AAEF,uBAAA,GAAG,oCAAoC;EAEtC,MAAM,MADWH,0BAAAA,gBAAgB,CACZ,KAAK,MAAM,EAAE,GAAG;AAErC,wBAAA,aADkB,IAAI,IAAI,IAAI,CACb,KAAK,CAAC,KAAK,IAAI,OAAO;GACtC;AAEF,uBAAA,GAAG,yDAAyD;EAC3D,MAAM,WAAWA,0BAAAA,gBAAgB;EACjC,MAAM,0BAAU,IAAI,KAAuB;AAE3C,OAAK,MAAM,OAAO,SACjB,MAAK,MAAM,QAAQ,IAAI,OAAO;AAC7B,OAAI,CAAC,KAAK,QAAS;GACnB,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC7C,YAAS,KAAK,IAAI,GAAG;AACrB,WAAQ,IAAI,KAAK,MAAM,SAAS;;EAMlC,MAAM,YAAsB,EAAE;AAC9B,OAAK,MAAM,CAAC,MAAM,eAAe,QAChC,KAAI,WAAW,SAAS,EACvB,WAAU,KAAK,QAAQ,KAAK,cAAc,WAAW,KAAK,KAAK,GAAG;AAOpE,MAAI,UAAU,SAAS,EACtB,SAAQ,KACP,mBAAmB,UAAU,OAAO,gCAAgC,UAAU,KAAK,OAAO,GAC1F;AAIF,wBAAA,aAAO,QAAQ,KAAK,CAAC,gBAAgB,EAAE;GACtC;EACD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "../
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "../test.CTcmp4Su-ClCHJ3FA.mjs";
|
|
2
2
|
import { getAllServices, getServiceById, getServicesByCategory, getServicesByTag } from "./registry.mjs";
|
|
3
3
|
//#region src/services/registry.test.ts
|
|
4
4
|
describe("service registry", () => {
|