@better-openclaw/core 1.0.13 → 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/composer.mjs.map +1 -1
- package/dist/generate.d.mts.map +1 -1
- package/dist/generate.mjs +11 -0
- package/dist/generate.mjs.map +1 -1
- package/dist/generators/env.d.mts.map +1 -1
- package/dist/generators/env.mjs +21 -1
- package/dist/generators/env.mjs.map +1 -1
- package/dist/generators/get-shit-done.d.mts +10 -0
- package/dist/generators/get-shit-done.d.mts.map +1 -0
- package/dist/generators/get-shit-done.mjs +38 -0
- package/dist/generators/get-shit-done.mjs.map +1 -0
- package/dist/generators/openclaw-json.d.mts +11 -0
- package/dist/generators/openclaw-json.d.mts.map +1 -0
- package/dist/generators/openclaw-json.mjs +410 -0
- package/dist/generators/openclaw-json.mjs.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/resolver.mjs +3 -1
- package/dist/resolver.mjs.map +1 -1
- package/dist/schema.d.mts +81 -1
- package/dist/schema.d.mts.map +1 -1
- package/dist/schema.mjs +28 -2
- package/dist/schema.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/pentagi.mjs.map +1 -1
- package/dist/services/definitions/pentestagent.mjs.map +1 -1
- 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/dist/types.d.mts +6 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +1 -1
- package/src/composer.ts +1 -1
- package/src/generate.ts +15 -0
- package/src/generators/env.ts +26 -0
- package/src/generators/get-shit-done.ts +43 -0
- package/src/generators/openclaw-json.ts +406 -0
- package/src/index.ts +2 -0
- package/src/resolver.ts +2 -0
- package/src/schema.ts +23 -0
- 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/pentagi.ts +2 -1
- package/src/services/definitions/pentestagent.ts +2 -1
- 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/src/types.ts +6 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
//#region src/services/definitions/nextcloud.ts
|
|
2
|
+
const nextcloudDefinition = {
|
|
3
|
+
id: "nextcloud",
|
|
4
|
+
name: "Nextcloud",
|
|
5
|
+
description: "Self-hosted productivity platform that keeps you in control.",
|
|
6
|
+
category: "storage",
|
|
7
|
+
icon: "☁️",
|
|
8
|
+
image: "nextcloud",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 8080,
|
|
12
|
+
container: 80,
|
|
13
|
+
description: "Nextcloud Web Interface",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "nextcloud_data",
|
|
18
|
+
containerPath: "/var/www/html",
|
|
19
|
+
description: "Persistent Nextcloud data storage"
|
|
20
|
+
}],
|
|
21
|
+
environment: [
|
|
22
|
+
{
|
|
23
|
+
key: "MYSQL_DATABASE",
|
|
24
|
+
defaultValue: "nextcloud",
|
|
25
|
+
secret: false,
|
|
26
|
+
description: "Database name",
|
|
27
|
+
required: false
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
key: "MYSQL_USER",
|
|
31
|
+
defaultValue: "nextcloud",
|
|
32
|
+
secret: false,
|
|
33
|
+
description: "Database user",
|
|
34
|
+
required: false
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
key: "MYSQL_PASSWORD",
|
|
38
|
+
defaultValue: "nextcloud_secret",
|
|
39
|
+
secret: true,
|
|
40
|
+
description: "Database password",
|
|
41
|
+
required: false
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: "MYSQL_HOST",
|
|
45
|
+
defaultValue: "postgres",
|
|
46
|
+
secret: false,
|
|
47
|
+
description: "Database hostname",
|
|
48
|
+
required: false
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
healthcheck: {
|
|
52
|
+
test: "curl --fail http://localhost:80/status.php || exit 1",
|
|
53
|
+
interval: "30s",
|
|
54
|
+
timeout: "10s",
|
|
55
|
+
retries: 3,
|
|
56
|
+
startPeriod: "30s"
|
|
57
|
+
},
|
|
58
|
+
dependsOn: ["postgresql"],
|
|
59
|
+
restartPolicy: "unless-stopped",
|
|
60
|
+
networks: ["openclaw-network"],
|
|
61
|
+
skills: [],
|
|
62
|
+
openclawEnvVars: [],
|
|
63
|
+
docsUrl: "https://nextcloud.com/",
|
|
64
|
+
tags: [
|
|
65
|
+
"storage",
|
|
66
|
+
"cloud",
|
|
67
|
+
"productivity",
|
|
68
|
+
"collaboration"
|
|
69
|
+
],
|
|
70
|
+
maturity: "stable",
|
|
71
|
+
requires: [],
|
|
72
|
+
recommends: ["postgresql"],
|
|
73
|
+
conflictsWith: [],
|
|
74
|
+
minMemoryMB: 512,
|
|
75
|
+
gpuRequired: false
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
//#endregion
|
|
79
|
+
export { nextcloudDefinition };
|
|
80
|
+
//# sourceMappingURL=nextcloud.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextcloud.mjs","names":[],"sources":["../../../src/services/definitions/nextcloud.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const nextcloudDefinition: ServiceDefinition = {\n\tid: \"nextcloud\",\n\tname: \"Nextcloud\",\n\tdescription: \"Self-hosted productivity platform that keeps you in control.\",\n\tcategory: \"storage\",\n\ticon: \"☁️\",\n\n\timage: \"nextcloud\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 80,\n\t\t\tdescription: \"Nextcloud Web Interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"nextcloud_data\",\n\t\t\tcontainerPath: \"/var/www/html\",\n\t\t\tdescription: \"Persistent Nextcloud data storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"MYSQL_DATABASE\",\n\t\t\tdefaultValue: \"nextcloud\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Database name\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"MYSQL_USER\",\n\t\t\tdefaultValue: \"nextcloud\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Database user\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"MYSQL_PASSWORD\",\n\t\t\tdefaultValue: \"nextcloud_secret\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Database password\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"MYSQL_HOST\",\n\t\t\tdefaultValue: \"postgres\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Database hostname\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl --fail http://localhost:80/status.php || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"30s\",\n\t},\n\tdependsOn: [\"postgresql\"],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://nextcloud.com/\",\n\ttags: [\"storage\", \"cloud\", \"productivity\", \"collaboration\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"postgresql\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\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,CACD;CACD,SAAS,CACR;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;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,CAAC,aAAa;CACzB,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAW;EAAS;EAAgB;EAAgB;CAC3D,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,aAAa;CAC1B,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pentagi.mjs","names":[],"sources":["../../../src/services/definitions/pentagi.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const pentagiDefinition: ServiceDefinition = {\n\tid: \"pentagi\",\n\tname: \"PentAGI\",\n\tdescription
|
|
1
|
+
{"version":3,"file":"pentagi.mjs","names":[],"sources":["../../../src/services/definitions/pentagi.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const pentagiDefinition: ServiceDefinition = {\n\tid: \"pentagi\",\n\tname: \"PentAGI\",\n\tdescription:\n\t\t\"Fully autonomous AI Agents system capable of performing complex penetration testing tasks.\",\n\tcategory: \"security\",\n\ticon: \"🕵️\",\n\n\timage: \"vxcontrol/pentagi\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 8080, // Assuming default or common port for web UI, might need adjustment based on their docker-compose\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"PentAGI Interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [],\n\tcommand: \"\", // Leave empty to use default image command\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"pentagi-orchestrator\", autoInstall: true }],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://pentagi.com\",\n\ttags: [\"security\", \"pentesting\", \"autonomous\", \"agents\"],\n\tmaturity: \"experimental\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 4096, // Documentation explicitly asks for Minimum 4GB RAM\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,EAAE;CACX,aAAa,EAAE;CACf,SAAS;CACT,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAwB,aAAa;EAAM,CAAC;CAChE,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAY;EAAc;EAAc;EAAS;CACxD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pentestagent.mjs","names":[],"sources":["../../../src/services/definitions/pentestagent.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const pentestagentDefinition: ServiceDefinition = {\n\tid: \"pentestagent\",\n\tname: \"PentestAgent\",\n\tdescription
|
|
1
|
+
{"version":3,"file":"pentestagent.mjs","names":[],"sources":["../../../src/services/definitions/pentestagent.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const pentestagentDefinition: ServiceDefinition = {\n\tid: \"pentestagent\",\n\tname: \"PentestAgent\",\n\tdescription:\n\t\t\"AI agent framework for black-box security testing via internal Docker isolated environments.\",\n\tcategory: \"security\",\n\ticon: \"🔍\",\n\n\timage: \"ghcr.io/gh05tcrew/pentestagent\",\n\timageTag: \"latest\",\n\tports: [], // Typically an internal CLI/TUI\n\tvolumes: [],\n\tenvironment: [],\n\tcommand: \"tail -f /dev/null\", // Keeps container alive for executing interactive TUIs\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"pentestagent-runner\", autoInstall: true }],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://github.com/GH05TCREW/pentestagent\",\n\ttags: [\"security\", \"pentesting\", \"tui\", \"framework\"],\n\tmaturity: \"experimental\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 1024,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,yBAA4C;CACxD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,EAAE;CACT,SAAS,EAAE;CACX,aAAa,EAAE;CACf,SAAS;CACT,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAuB,aAAa;EAAM,CAAC;CAC/D,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAY;EAAc;EAAO;EAAY;CACpD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signoz.d.mts","names":[],"sources":["../../../src/services/definitions/signoz.ts"],"mappings":";;;cAEa,gBAAA,EAAkB,iBAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//#region src/services/definitions/signoz.ts
|
|
2
|
+
const signozDefinition = {
|
|
3
|
+
id: "signoz",
|
|
4
|
+
name: "SigNoz",
|
|
5
|
+
description: "Open-source observability platform serving as a lighter alternative to DataDog.",
|
|
6
|
+
category: "monitoring",
|
|
7
|
+
icon: "📈",
|
|
8
|
+
image: "signoz/signoz-frontend",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 3301,
|
|
12
|
+
container: 3301,
|
|
13
|
+
description: "SigNoz Web UI",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [],
|
|
17
|
+
environment: [{
|
|
18
|
+
key: "FRONTEND_PUBLIC_TELEMETRY",
|
|
19
|
+
defaultValue: "false",
|
|
20
|
+
secret: false,
|
|
21
|
+
description: "Enable anonymized usage telemetry",
|
|
22
|
+
required: false
|
|
23
|
+
}],
|
|
24
|
+
healthcheck: {
|
|
25
|
+
test: "wget -q --spider http://localhost:3301 || exit 1",
|
|
26
|
+
interval: "30s",
|
|
27
|
+
timeout: "10s",
|
|
28
|
+
retries: 3,
|
|
29
|
+
startPeriod: "15s"
|
|
30
|
+
},
|
|
31
|
+
dependsOn: [],
|
|
32
|
+
restartPolicy: "unless-stopped",
|
|
33
|
+
networks: ["openclaw-network"],
|
|
34
|
+
skills: [],
|
|
35
|
+
openclawEnvVars: [],
|
|
36
|
+
docsUrl: "https://signoz.io/docs/",
|
|
37
|
+
tags: [
|
|
38
|
+
"observability",
|
|
39
|
+
"metrics",
|
|
40
|
+
"traces",
|
|
41
|
+
"logs",
|
|
42
|
+
"opentelemetry"
|
|
43
|
+
],
|
|
44
|
+
maturity: "stable",
|
|
45
|
+
requires: [],
|
|
46
|
+
recommends: [],
|
|
47
|
+
conflictsWith: [],
|
|
48
|
+
minMemoryMB: 1024,
|
|
49
|
+
gpuRequired: false
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { signozDefinition };
|
|
54
|
+
//# sourceMappingURL=signoz.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signoz.mjs","names":[],"sources":["../../../src/services/definitions/signoz.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const signozDefinition: ServiceDefinition = {\n\tid: \"signoz\",\n\tname: \"SigNoz\",\n\tdescription: \"Open-source observability platform serving as a lighter alternative to DataDog.\",\n\tcategory: \"monitoring\",\n\ticon: \"📈\",\n\n\timage: \"signoz/signoz-frontend\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3301,\n\t\t\tcontainer: 3301,\n\t\t\tdescription: \"SigNoz Web UI\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"FRONTEND_PUBLIC_TELEMETRY\",\n\t\t\tdefaultValue: \"false\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Enable anonymized usage telemetry\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:3301 || 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://signoz.io/docs/\",\n\ttags: [\"observability\", \"metrics\", \"traces\", \"logs\", \"opentelemetry\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\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,EAAE;CACX,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;EAAiB;EAAW;EAAU;EAAQ;EAAgB;CACrE,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.d.mts","names":[],"sources":["../../../src/services/definitions/supabase.ts"],"mappings":";;;cAEa,kBAAA,EAAoB,iBAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
//#region src/services/definitions/supabase.ts
|
|
2
|
+
const supabaseDefinition = {
|
|
3
|
+
id: "supabase",
|
|
4
|
+
name: "Supabase",
|
|
5
|
+
description: "The open source Firebase alternative. Build production-grade backends instantly.",
|
|
6
|
+
category: "database",
|
|
7
|
+
icon: "⚡",
|
|
8
|
+
image: "supabase/studio",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 3e3,
|
|
12
|
+
container: 3e3,
|
|
13
|
+
description: "Supabase Studio Web Dashboard",
|
|
14
|
+
exposed: true
|
|
15
|
+
}, {
|
|
16
|
+
host: 8e3,
|
|
17
|
+
container: 8e3,
|
|
18
|
+
description: "Supabase API Gateway",
|
|
19
|
+
exposed: true
|
|
20
|
+
}],
|
|
21
|
+
volumes: [{
|
|
22
|
+
name: "supabase_db",
|
|
23
|
+
containerPath: "/var/lib/postgresql/data",
|
|
24
|
+
description: "Supabase Postgres database storage"
|
|
25
|
+
}],
|
|
26
|
+
environment: [{
|
|
27
|
+
key: "STUDIO_DEFAULT_ORGANIZATION",
|
|
28
|
+
defaultValue: "Default Organization",
|
|
29
|
+
secret: false,
|
|
30
|
+
description: "Default organization name",
|
|
31
|
+
required: false
|
|
32
|
+
}, {
|
|
33
|
+
key: "STUDIO_DEFAULT_PROJECT",
|
|
34
|
+
defaultValue: "Default Project",
|
|
35
|
+
secret: false,
|
|
36
|
+
description: "Default project name",
|
|
37
|
+
required: false
|
|
38
|
+
}],
|
|
39
|
+
healthcheck: {
|
|
40
|
+
test: "wget -q --spider http://localhost:3000/api/profile || exit 1",
|
|
41
|
+
interval: "30s",
|
|
42
|
+
timeout: "10s",
|
|
43
|
+
retries: 3,
|
|
44
|
+
startPeriod: "30s"
|
|
45
|
+
},
|
|
46
|
+
dependsOn: ["postgresql"],
|
|
47
|
+
restartPolicy: "unless-stopped",
|
|
48
|
+
networks: ["openclaw-network"],
|
|
49
|
+
skills: [],
|
|
50
|
+
openclawEnvVars: [],
|
|
51
|
+
docsUrl: "https://supabase.com/docs/guides/self-hosting",
|
|
52
|
+
tags: [
|
|
53
|
+
"database",
|
|
54
|
+
"auth",
|
|
55
|
+
"storage",
|
|
56
|
+
"realtime",
|
|
57
|
+
"edge-functions"
|
|
58
|
+
],
|
|
59
|
+
maturity: "stable",
|
|
60
|
+
requires: ["postgresql"],
|
|
61
|
+
recommends: [],
|
|
62
|
+
conflictsWith: [],
|
|
63
|
+
minMemoryMB: 2048,
|
|
64
|
+
gpuRequired: false
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
export { supabaseDefinition };
|
|
69
|
+
//# sourceMappingURL=supabase.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.mjs","names":[],"sources":["../../../src/services/definitions/supabase.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const supabaseDefinition: ServiceDefinition = {\n\tid: \"supabase\",\n\tname: \"Supabase\",\n\tdescription: \"The open source Firebase alternative. Build production-grade backends instantly.\",\n\tcategory: \"database\",\n\ticon: \"⚡\",\n\n\timage: \"supabase/studio\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3000,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"Supabase Studio Web Dashboard\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 8000,\n\t\t\tcontainer: 8000,\n\t\t\tdescription: \"Supabase API Gateway\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"supabase_db\",\n\t\t\tcontainerPath: \"/var/lib/postgresql/data\",\n\t\t\tdescription: \"Supabase Postgres database storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"STUDIO_DEFAULT_ORGANIZATION\",\n\t\t\tdefaultValue: \"Default Organization\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Default organization name\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"STUDIO_DEFAULT_PROJECT\",\n\t\t\tdefaultValue: \"Default Project\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Default project name\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:3000/api/profile || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"30s\",\n\t},\n\tdependsOn: [\"postgresql\"],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://supabase.com/docs/guides/self-hosting\",\n\ttags: [\"database\", \"auth\", \"storage\", \"realtime\", \"edge-functions\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"postgresql\"],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 2048,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,qBAAwC;CACpD,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,CACD;CACD,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,CAAC,aAAa;CACzB,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAY;EAAQ;EAAW;EAAY;EAAiB;CACnE,UAAU;CAEV,UAAU,CAAC,aAAa;CACxB,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultwarden.d.mts","names":[],"sources":["../../../src/services/definitions/vaultwarden.ts"],"mappings":";;;cAEa,qBAAA,EAAuB,iBAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
//#region src/services/definitions/vaultwarden.ts
|
|
2
|
+
const vaultwardenDefinition = {
|
|
3
|
+
id: "vaultwarden",
|
|
4
|
+
name: "Vaultwarden",
|
|
5
|
+
description: "Unofficial Bitwarden compatible server written in Rust, perfect for self-hosted deployments.",
|
|
6
|
+
category: "security",
|
|
7
|
+
icon: "🔐",
|
|
8
|
+
image: "vaultwarden/server",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 80,
|
|
12
|
+
container: 80,
|
|
13
|
+
description: "Vaultwarden Web Interface / API",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "vaultwarden_data",
|
|
18
|
+
containerPath: "/data",
|
|
19
|
+
description: "Persistent Vaultwarden data storage"
|
|
20
|
+
}],
|
|
21
|
+
environment: [{
|
|
22
|
+
key: "WEBSOCKET_ENABLED",
|
|
23
|
+
defaultValue: "true",
|
|
24
|
+
secret: false,
|
|
25
|
+
description: "Enable WebSocket notifications",
|
|
26
|
+
required: false
|
|
27
|
+
}, {
|
|
28
|
+
key: "SIGNUPS_ALLOWED",
|
|
29
|
+
defaultValue: "true",
|
|
30
|
+
secret: false,
|
|
31
|
+
description: "Allow new user signups",
|
|
32
|
+
required: false
|
|
33
|
+
}],
|
|
34
|
+
healthcheck: {
|
|
35
|
+
test: "curl --fail http://localhost:80/alive || exit 1",
|
|
36
|
+
interval: "30s",
|
|
37
|
+
timeout: "10s",
|
|
38
|
+
retries: 3,
|
|
39
|
+
startPeriod: "15s"
|
|
40
|
+
},
|
|
41
|
+
dependsOn: [],
|
|
42
|
+
restartPolicy: "unless-stopped",
|
|
43
|
+
networks: ["openclaw-network"],
|
|
44
|
+
skills: [],
|
|
45
|
+
openclawEnvVars: [],
|
|
46
|
+
docsUrl: "https://github.com/dani-garcia/vaultwarden/wiki",
|
|
47
|
+
tags: [
|
|
48
|
+
"security",
|
|
49
|
+
"passwords",
|
|
50
|
+
"bitwarden",
|
|
51
|
+
"secrets"
|
|
52
|
+
],
|
|
53
|
+
maturity: "stable",
|
|
54
|
+
requires: [],
|
|
55
|
+
recommends: ["caddy", "traefik"],
|
|
56
|
+
conflictsWith: [],
|
|
57
|
+
minMemoryMB: 128,
|
|
58
|
+
gpuRequired: false
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
export { vaultwardenDefinition };
|
|
63
|
+
//# sourceMappingURL=vaultwarden.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultwarden.mjs","names":[],"sources":["../../../src/services/definitions/vaultwarden.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const vaultwardenDefinition: ServiceDefinition = {\n\tid: \"vaultwarden\",\n\tname: \"Vaultwarden\",\n\tdescription:\n\t\t\"Unofficial Bitwarden compatible server written in Rust, perfect for self-hosted deployments.\",\n\tcategory: \"security\",\n\ticon: \"🔐\",\n\n\timage: \"vaultwarden/server\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 80, // User should probably proxy this or change it to avoid conflicts\n\t\t\tcontainer: 80,\n\t\t\tdescription: \"Vaultwarden Web Interface / API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"vaultwarden_data\",\n\t\t\tcontainerPath: \"/data\",\n\t\t\tdescription: \"Persistent Vaultwarden data storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"WEBSOCKET_ENABLED\",\n\t\t\tdefaultValue: \"true\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Enable WebSocket notifications\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"SIGNUPS_ALLOWED\",\n\t\t\tdefaultValue: \"true\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Allow new user signups\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl --fail http://localhost:80/alive || 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/dani-garcia/vaultwarden/wiki\",\n\ttags: [\"security\", \"passwords\", \"bitwarden\", \"secrets\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"caddy\", \"traefik\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 128,\n\tgpuRequired: false,\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,aAAa;EACb,CACD;CACD,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAY;EAAa;EAAa;EAAU;CACvD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,SAAS,UAAU;CAChC,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
package/dist/types.d.mts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { AddedDependencySchema, ApiErrorSchema, ComposeOptionsSchema, DeploySchema, DeploymentTargetSchema, DeploymentTypeSchema, EnvVariableSchema, ErrorSchema, GenerationInputSchema, HealthCheckSchema, MaturitySchema, NativePlatformSchema, NativeRecipeSchema, OutputFormatSchema, PlatformSchema, PortMappingSchema, PresetSchema, ProxyTypeSchema, ResolvedServiceSchema, ResolverOutputSchema, ResourceLimitsSchema, RestartPolicySchema, ServiceCategorySchema, ServiceDefinitionSchema, SkillBindingSchema, SkillPackSchema, ValidateRequestSchema, ValidateResponseSchema, VolumeMappingSchema, WarningSchema } from "./schema.mjs";
|
|
1
|
+
import { AddedDependencySchema, AiProviderSchema, ApiErrorSchema, ComposeOptionsSchema, DeploySchema, DeploymentTargetSchema, DeploymentTypeSchema, EnvVariableSchema, ErrorSchema, GenerationInputSchema, GsdRuntimeSchema, HealthCheckSchema, MaturitySchema, NativePlatformSchema, NativeRecipeSchema, OutputFormatSchema, PlatformSchema, PortMappingSchema, PresetSchema, ProxyTypeSchema, ResolvedServiceSchema, ResolverOutputSchema, ResourceLimitsSchema, RestartPolicySchema, ServiceCategorySchema, ServiceDefinitionSchema, SkillBindingSchema, SkillPackSchema, ValidateRequestSchema, ValidateResponseSchema, VolumeMappingSchema, WarningSchema } from "./schema.mjs";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
|
|
4
4
|
//#region src/types.d.ts
|
|
5
|
+
type AiProvider = z.infer<typeof AiProviderSchema>;
|
|
6
|
+
type GsdRuntime = z.infer<typeof GsdRuntimeSchema>;
|
|
5
7
|
type ServiceCategory = z.infer<typeof ServiceCategorySchema>;
|
|
6
8
|
type Maturity = z.infer<typeof MaturitySchema>;
|
|
7
9
|
type Platform = z.infer<typeof PlatformSchema>;
|
|
@@ -37,6 +39,8 @@ type ApiError = z.infer<typeof ApiErrorSchema>;
|
|
|
37
39
|
interface ResolverInput {
|
|
38
40
|
services: string[];
|
|
39
41
|
skillPacks: string[];
|
|
42
|
+
aiProviders?: AiProvider[];
|
|
43
|
+
gsdRuntimes?: GsdRuntime[];
|
|
40
44
|
proxy?: ProxyType;
|
|
41
45
|
gpu?: boolean;
|
|
42
46
|
platform?: Platform;
|
|
@@ -67,5 +71,5 @@ interface CategoryInfo {
|
|
|
67
71
|
}
|
|
68
72
|
declare const SERVICE_CATEGORIES: CategoryInfo[];
|
|
69
73
|
//#endregion
|
|
70
|
-
export { AddedDependency, ApiError, CategoryInfo, ComposeOptions, Deploy, DeploymentTarget, DeploymentType, EnvVariable, GeneratedFiles, GenerationInput, GenerationMetadata, GenerationResult, HealthCheck, Maturity, NativePlatform, NativeRecipe, OutputFormat, Platform, PortMapping, Preset, ProxyType, ResolvedService, ResolverError, ResolverInput, ResolverOutput, ResourceLimits, RestartPolicy, SERVICE_CATEGORIES, ServiceCategory, ServiceDefinition, SkillBinding, SkillPack, ValidateRequest, ValidateResponse, VolumeMapping, Warning };
|
|
74
|
+
export { AddedDependency, AiProvider, ApiError, CategoryInfo, ComposeOptions, Deploy, DeploymentTarget, DeploymentType, EnvVariable, GeneratedFiles, GenerationInput, GenerationMetadata, GenerationResult, GsdRuntime, HealthCheck, Maturity, NativePlatform, NativeRecipe, OutputFormat, Platform, PortMapping, Preset, ProxyType, ResolvedService, ResolverError, ResolverInput, ResolverOutput, ResourceLimits, RestartPolicy, SERVICE_CATEGORIES, ServiceCategory, ServiceDefinition, SkillBinding, SkillPack, ValidateRequest, ValidateResponse, VolumeMapping, Warning };
|
|
71
75
|
//# sourceMappingURL=types.d.mts.map
|
package/dist/types.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;KAsCY,UAAA,GAAa,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,KAC5B,UAAA,GAAa,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,KAC5B,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KAC1B,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KAC1B,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KAC/B,SAAA,GAAY,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAC3B,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,sBAAA;AAAA,KAClC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAC9B,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAE9B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KAC/B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAChC,MAAA,GAAS,CAAA,CAAE,KAAA,QAAa,YAAA;AAAA,KACxB,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAE9B,iBAAA,GAAoB,CAAA,CAAE,KAAA,QAAa,uBAAA;AAAA,KACnC,SAAA,GAAY,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAC3B,MAAA,GAAS,CAAA,CAAE,KAAA,QAAa,YAAA;AAAA,KAExB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;EAxBd,6EA0B7B,aAAA,GAAgB,GAAA,SAAY,MAAA;AAAA;AAAA,KAEjB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,OAAA,GAAU,CAAA,CAAE,KAAA,QAAa,aAAA;AAAA,KACzB,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,WAAA;AAAA,KAC/B,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KAEhC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KACjC,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,sBAAA;AAAA,KAClC,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,UAIrB,aAAA;EAChB,QAAA;EACA,UAAA;EACA,WAAA,GAAc,UAAA;EACd,WAAA,GAAc,UAAA;EACd,KAAA,GAAQ,SAAA;EACR,GAAA;EACA,QAAA,GAAW,QAAA;EACX,UAAA;EACA,gBAAA;IAAqB,IAAA;IAAc,OAAA;IAAiB,QAAA;EAAA;AAAA;AAAA,UAGpC,cAAA;EAAA,CACf,IAAA;AAAA;AAAA,UAGe,kBAAA;EAChB,YAAA;EACA,UAAA;EACA,iBAAA;EACA,WAAA;AAAA;AAAA,UAGgB,gBAAA;EAChB,KAAA,EAAO,cAAA;EACP,QAAA,EAAU,kBAAA;AAAA;AAAA,UAGM,YAAA;EAChB,EAAA,EAAI,eAAA;EACJ,IAAA;EACA,IAAA;AAAA;AAAA,cAGY,kBAAA,EAAoB,YAAA"}
|
package/dist/types.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport type {\n\tAddedDependencySchema,\n\tApiErrorSchema,\n\tComposeOptionsSchema,\n\tDeploymentTargetSchema,\n\tDeploymentTypeSchema,\n\tDeploySchema,\n\tEnvVariableSchema,\n\tErrorSchema,\n\tGenerationInputSchema,\n\tHealthCheckSchema,\n\tMaturitySchema,\n\tNativePlatformSchema,\n\tNativeRecipeSchema,\n\tOutputFormatSchema,\n\tPlatformSchema,\n\tPortMappingSchema,\n\tPresetSchema,\n\tProxyTypeSchema,\n\tResolvedServiceSchema,\n\tResolverOutputSchema,\n\tResourceLimitsSchema,\n\tRestartPolicySchema,\n\tServiceCategorySchema,\n\tServiceDefinitionSchema,\n\tSkillBindingSchema,\n\tSkillPackSchema,\n\tValidateRequestSchema,\n\tValidateResponseSchema,\n\tVolumeMappingSchema,\n\tWarningSchema,\n} from \"./schema.js\";\n\n// ─── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type ServiceCategory = z.infer<typeof ServiceCategorySchema>;\nexport type Maturity = z.infer<typeof MaturitySchema>;\nexport type Platform = z.infer<typeof PlatformSchema>;\nexport type RestartPolicy = z.infer<typeof RestartPolicySchema>;\nexport type ProxyType = z.infer<typeof ProxyTypeSchema>;\nexport type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;\nexport type DeploymentType = z.infer<typeof DeploymentTypeSchema>;\nexport type NativePlatform = z.infer<typeof NativePlatformSchema>;\nexport type NativeRecipe = z.infer<typeof NativeRecipeSchema>;\nexport type OutputFormat = z.infer<typeof OutputFormatSchema>;\n\nexport type PortMapping = z.infer<typeof PortMappingSchema>;\nexport type VolumeMapping = z.infer<typeof VolumeMappingSchema>;\nexport type EnvVariable = z.infer<typeof EnvVariableSchema>;\nexport type HealthCheck = z.infer<typeof HealthCheckSchema>;\nexport type ResourceLimits = z.infer<typeof ResourceLimitsSchema>;\nexport type Deploy = z.infer<typeof DeploySchema>;\nexport type SkillBinding = z.infer<typeof SkillBindingSchema>;\n\nexport type ServiceDefinition = z.infer<typeof ServiceDefinitionSchema>;\nexport type SkillPack = z.infer<typeof SkillPackSchema>;\nexport type Preset = z.infer<typeof PresetSchema>;\n\nexport type GenerationInput = z.infer<typeof GenerationInputSchema>;\nexport type ComposeOptions = z.infer<typeof ComposeOptionsSchema> & {\n\t/** Dynamic Traefik labels per service, computed by the Traefik generator. */\n\ttraefikLabels?: Map<string, Record<string, string>>;\n};\nexport type ResolvedService = z.infer<typeof ResolvedServiceSchema>;\nexport type AddedDependency = z.infer<typeof AddedDependencySchema>;\nexport type Warning = z.infer<typeof WarningSchema>;\nexport type ResolverError = z.infer<typeof ErrorSchema>;\nexport type ResolverOutput = z.infer<typeof ResolverOutputSchema>;\n\nexport type ValidateRequest = z.infer<typeof ValidateRequestSchema>;\nexport type ValidateResponse = z.infer<typeof ValidateResponseSchema>;\nexport type ApiError = z.infer<typeof ApiErrorSchema>;\n\n// ─── Additional Types ───────────────────────────────────────────────────────\n\nexport interface ResolverInput {\n\tservices: string[];\n\tskillPacks: string[];\n\tproxy?: ProxyType;\n\tgpu?: boolean;\n\tplatform?: Platform;\n\tmonitoring?: boolean;\n\tmemoryThresholds?: { info: number; warning: number; critical: number };\n}\n\nexport interface GeneratedFiles {\n\t[path: string]: string;\n}\n\nexport interface GenerationMetadata {\n\tserviceCount: number;\n\tskillCount: number;\n\testimatedMemoryMB: number;\n\tgeneratedAt: string;\n}\n\nexport interface GenerationResult {\n\tfiles: GeneratedFiles;\n\tmetadata: GenerationMetadata;\n}\n\nexport interface CategoryInfo {\n\tid: ServiceCategory;\n\tname: string;\n\ticon: string;\n}\n\nexport const SERVICE_CATEGORIES: CategoryInfo[] = [\n\t{ id: \"coding-agent\", name: \"AI Coding Agents\", icon: \"💻\" },\n\t{ id: \"ai-platform\", name: \"AI Platforms & Chat UIs\", icon: \"🧪\" },\n\t{ id: \"ai\", name: \"AI / Local Models\", icon: \"🤖\" },\n\t{ id: \"automation\", name: \"Automation & Workflows\", icon: \"🔄\" },\n\t{ id: \"vector-db\", name: \"Vector Databases\", icon: \"🧠\" },\n\t{ id: \"media\", name: \"Media & Video\", icon: \"🎬\" },\n\t{ id: \"social-media\", name: \"Social Media\", icon: \"📱\" },\n\t{ id: \"analytics\", name: \"Analytics\", icon: \"📊\" },\n\t{ id: \"knowledge\", name: \"Knowledge & Documents\", icon: \"📚\" },\n\t{ id: \"storage\", name: \"Object Storage\", icon: \"💾\" },\n\t{ id: \"database\", name: \"Databases & Caching\", icon: \"🗄️\" },\n\t{ id: \"dev-tools\", name: \"Developer Tools\", icon: \"🛠️\" },\n\t{ id: \"proxy\", name: \"Reverse Proxy\", icon: \"🌐\" },\n\t{ id: \"monitoring\", name: \"Monitoring\", icon: \"📡\" },\n\t{ id: \"browser\", name: \"Browser Automation\", icon: \"🌐\" },\n\t{ id: \"search\", name: \"Search\", icon: \"🔍\" },\n\t{ id: \"communication\", name: \"Notifications\", icon: \"🔔\" },\n\t{ id: \"desktop\", name: \"Desktop Environment\", icon: \"🖥️\" },\n\t{ id: \"streaming\", name: \"Streaming & Relay\", icon: \"📺\" },\n\t{ id: \"security\", name: \"Security & Pentesting\", icon: \"🛡️\" },\n];\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport type {\n\tAddedDependencySchema,\n\tAiProviderSchema,\n\tApiErrorSchema,\n\tComposeOptionsSchema,\n\tDeploymentTargetSchema,\n\tDeploymentTypeSchema,\n\tDeploySchema,\n\tEnvVariableSchema,\n\tErrorSchema,\n\tGenerationInputSchema,\n\tGsdRuntimeSchema,\n\tHealthCheckSchema,\n\tMaturitySchema,\n\tNativePlatformSchema,\n\tNativeRecipeSchema,\n\tOutputFormatSchema,\n\tPlatformSchema,\n\tPortMappingSchema,\n\tPresetSchema,\n\tProxyTypeSchema,\n\tResolvedServiceSchema,\n\tResolverOutputSchema,\n\tResourceLimitsSchema,\n\tRestartPolicySchema,\n\tServiceCategorySchema,\n\tServiceDefinitionSchema,\n\tSkillBindingSchema,\n\tSkillPackSchema,\n\tValidateRequestSchema,\n\tValidateResponseSchema,\n\tVolumeMappingSchema,\n\tWarningSchema,\n} from \"./schema.js\";\n\n// ─── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type AiProvider = z.infer<typeof AiProviderSchema>;\nexport type GsdRuntime = z.infer<typeof GsdRuntimeSchema>;\nexport type ServiceCategory = z.infer<typeof ServiceCategorySchema>;\nexport type Maturity = z.infer<typeof MaturitySchema>;\nexport type Platform = z.infer<typeof PlatformSchema>;\nexport type RestartPolicy = z.infer<typeof RestartPolicySchema>;\nexport type ProxyType = z.infer<typeof ProxyTypeSchema>;\nexport type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;\nexport type DeploymentType = z.infer<typeof DeploymentTypeSchema>;\nexport type NativePlatform = z.infer<typeof NativePlatformSchema>;\nexport type NativeRecipe = z.infer<typeof NativeRecipeSchema>;\nexport type OutputFormat = z.infer<typeof OutputFormatSchema>;\n\nexport type PortMapping = z.infer<typeof PortMappingSchema>;\nexport type VolumeMapping = z.infer<typeof VolumeMappingSchema>;\nexport type EnvVariable = z.infer<typeof EnvVariableSchema>;\nexport type HealthCheck = z.infer<typeof HealthCheckSchema>;\nexport type ResourceLimits = z.infer<typeof ResourceLimitsSchema>;\nexport type Deploy = z.infer<typeof DeploySchema>;\nexport type SkillBinding = z.infer<typeof SkillBindingSchema>;\n\nexport type ServiceDefinition = z.infer<typeof ServiceDefinitionSchema>;\nexport type SkillPack = z.infer<typeof SkillPackSchema>;\nexport type Preset = z.infer<typeof PresetSchema>;\n\nexport type GenerationInput = z.infer<typeof GenerationInputSchema>;\nexport type ComposeOptions = z.infer<typeof ComposeOptionsSchema> & {\n\t/** Dynamic Traefik labels per service, computed by the Traefik generator. */\n\ttraefikLabels?: Map<string, Record<string, string>>;\n};\nexport type ResolvedService = z.infer<typeof ResolvedServiceSchema>;\nexport type AddedDependency = z.infer<typeof AddedDependencySchema>;\nexport type Warning = z.infer<typeof WarningSchema>;\nexport type ResolverError = z.infer<typeof ErrorSchema>;\nexport type ResolverOutput = z.infer<typeof ResolverOutputSchema>;\n\nexport type ValidateRequest = z.infer<typeof ValidateRequestSchema>;\nexport type ValidateResponse = z.infer<typeof ValidateResponseSchema>;\nexport type ApiError = z.infer<typeof ApiErrorSchema>;\n\n// ─── Additional Types ───────────────────────────────────────────────────────\n\nexport interface ResolverInput {\n\tservices: string[];\n\tskillPacks: string[];\n\taiProviders?: AiProvider[];\n\tgsdRuntimes?: GsdRuntime[];\n\tproxy?: ProxyType;\n\tgpu?: boolean;\n\tplatform?: Platform;\n\tmonitoring?: boolean;\n\tmemoryThresholds?: { info: number; warning: number; critical: number };\n}\n\nexport interface GeneratedFiles {\n\t[path: string]: string;\n}\n\nexport interface GenerationMetadata {\n\tserviceCount: number;\n\tskillCount: number;\n\testimatedMemoryMB: number;\n\tgeneratedAt: string;\n}\n\nexport interface GenerationResult {\n\tfiles: GeneratedFiles;\n\tmetadata: GenerationMetadata;\n}\n\nexport interface CategoryInfo {\n\tid: ServiceCategory;\n\tname: string;\n\ticon: string;\n}\n\nexport const SERVICE_CATEGORIES: CategoryInfo[] = [\n\t{ id: \"coding-agent\", name: \"AI Coding Agents\", icon: \"💻\" },\n\t{ id: \"ai-platform\", name: \"AI Platforms & Chat UIs\", icon: \"🧪\" },\n\t{ id: \"ai\", name: \"AI / Local Models\", icon: \"🤖\" },\n\t{ id: \"automation\", name: \"Automation & Workflows\", icon: \"🔄\" },\n\t{ id: \"vector-db\", name: \"Vector Databases\", icon: \"🧠\" },\n\t{ id: \"media\", name: \"Media & Video\", icon: \"🎬\" },\n\t{ id: \"social-media\", name: \"Social Media\", icon: \"📱\" },\n\t{ id: \"analytics\", name: \"Analytics\", icon: \"📊\" },\n\t{ id: \"knowledge\", name: \"Knowledge & Documents\", icon: \"📚\" },\n\t{ id: \"storage\", name: \"Object Storage\", icon: \"💾\" },\n\t{ id: \"database\", name: \"Databases & Caching\", icon: \"🗄️\" },\n\t{ id: \"dev-tools\", name: \"Developer Tools\", icon: \"🛠️\" },\n\t{ id: \"proxy\", name: \"Reverse Proxy\", icon: \"🌐\" },\n\t{ id: \"monitoring\", name: \"Monitoring\", icon: \"📡\" },\n\t{ id: \"browser\", name: \"Browser Automation\", icon: \"🌐\" },\n\t{ id: \"search\", name: \"Search\", icon: \"🔍\" },\n\t{ id: \"communication\", name: \"Notifications\", icon: \"🔔\" },\n\t{ id: \"desktop\", name: \"Desktop Environment\", icon: \"🖥️\" },\n\t{ id: \"streaming\", name: \"Streaming & Relay\", icon: \"📺\" },\n\t{ id: \"security\", name: \"Security & Pentesting\", icon: \"🛡️\" },\n];\n"],"mappings":";AAkHA,MAAa,qBAAqC;CACjD;EAAE,IAAI;EAAgB,MAAM;EAAoB,MAAM;EAAM;CAC5D;EAAE,IAAI;EAAe,MAAM;EAA2B,MAAM;EAAM;CAClE;EAAE,IAAI;EAAM,MAAM;EAAqB,MAAM;EAAM;CACnD;EAAE,IAAI;EAAc,MAAM;EAA0B,MAAM;EAAM;CAChE;EAAE,IAAI;EAAa,MAAM;EAAoB,MAAM;EAAM;CACzD;EAAE,IAAI;EAAS,MAAM;EAAiB,MAAM;EAAM;CAClD;EAAE,IAAI;EAAgB,MAAM;EAAgB,MAAM;EAAM;CACxD;EAAE,IAAI;EAAa,MAAM;EAAa,MAAM;EAAM;CAClD;EAAE,IAAI;EAAa,MAAM;EAAyB,MAAM;EAAM;CAC9D;EAAE,IAAI;EAAW,MAAM;EAAkB,MAAM;EAAM;CACrD;EAAE,IAAI;EAAY,MAAM;EAAuB,MAAM;EAAO;CAC5D;EAAE,IAAI;EAAa,MAAM;EAAmB,MAAM;EAAO;CACzD;EAAE,IAAI;EAAS,MAAM;EAAiB,MAAM;EAAM;CAClD;EAAE,IAAI;EAAc,MAAM;EAAc,MAAM;EAAM;CACpD;EAAE,IAAI;EAAW,MAAM;EAAsB,MAAM;EAAM;CACzD;EAAE,IAAI;EAAU,MAAM;EAAU,MAAM;EAAM;CAC5C;EAAE,IAAI;EAAiB,MAAM;EAAiB,MAAM;EAAM;CAC1D;EAAE,IAAI;EAAW,MAAM;EAAuB,MAAM;EAAO;CAC3D;EAAE,IAAI;EAAa,MAAM;EAAqB,MAAM;EAAM;CAC1D;EAAE,IAAI;EAAY,MAAM;EAAyB,MAAM;EAAO;CAC9D"}
|
package/package.json
CHANGED
package/src/composer.ts
CHANGED
|
@@ -178,7 +178,7 @@ function buildCompanionService(
|
|
|
178
178
|
svc.volumes = def.volumes.map((v) => {
|
|
179
179
|
const isBindMount =
|
|
180
180
|
v.name.startsWith("./") || v.name.startsWith("/") || v.name.startsWith("~");
|
|
181
|
-
|
|
181
|
+
|
|
182
182
|
if (!isBindMount) {
|
|
183
183
|
allVolumes.add(v.name);
|
|
184
184
|
volumeNames.push(v.name);
|
package/src/generate.ts
CHANGED
|
@@ -8,10 +8,12 @@ import { StackConfigError, ValidationError } from "./errors.js";
|
|
|
8
8
|
import { generateBareMetalInstall } from "./generators/bare-metal-install.js";
|
|
9
9
|
import { generateCaddyfile } from "./generators/caddy.js";
|
|
10
10
|
import { generateEnvFiles } from "./generators/env.js";
|
|
11
|
+
import { generateGsdScripts } from "./generators/get-shit-done.js";
|
|
11
12
|
import { generateGrafanaConfig, generateGrafanaDashboard } from "./generators/grafana.js";
|
|
12
13
|
import { generateHealthCheck } from "./generators/health-check.js";
|
|
13
14
|
import { generateN8nWorkflows } from "./generators/n8n-workflows.js";
|
|
14
15
|
import { generateNativeInstallScripts } from "./generators/native-services.js";
|
|
16
|
+
import { generateOpenClawConfig } from "./generators/openclaw-json.js";
|
|
15
17
|
import { generatePostgresInit } from "./generators/postgres-init.js";
|
|
16
18
|
import { generatePrometheusConfig } from "./generators/prometheus.js";
|
|
17
19
|
import { generateReadme } from "./generators/readme.js";
|
|
@@ -49,6 +51,7 @@ export function generate(rawInput: GenerationInput): GenerationResult {
|
|
|
49
51
|
const resolverInput: ResolverInput = {
|
|
50
52
|
services: input.services,
|
|
51
53
|
skillPacks: input.skillPacks,
|
|
54
|
+
aiProviders: input.aiProviders,
|
|
52
55
|
proxy: input.proxy,
|
|
53
56
|
gpu: input.gpu,
|
|
54
57
|
platform: composePlatform,
|
|
@@ -142,6 +145,9 @@ export function generate(rawInput: GenerationInput): GenerationResult {
|
|
|
142
145
|
files[path] = content;
|
|
143
146
|
}
|
|
144
147
|
|
|
148
|
+
// OpenClaw Core Configuration
|
|
149
|
+
files["openclaw/config/openclaw.json"] = generateOpenClawConfig(resolved);
|
|
150
|
+
|
|
145
151
|
// README
|
|
146
152
|
files["README.md"] = generateReadme(resolved, {
|
|
147
153
|
projectName: input.projectName,
|
|
@@ -239,6 +245,15 @@ export function generate(rawInput: GenerationInput): GenerationResult {
|
|
|
239
245
|
}
|
|
240
246
|
}
|
|
241
247
|
|
|
248
|
+
// Get-Shit-Done setup scripts
|
|
249
|
+
if (input.gsdRuntimes && input.gsdRuntimes.length > 0) {
|
|
250
|
+
const gsdScripts = generateGsdScripts(input.gsdRuntimes);
|
|
251
|
+
if (gsdScripts) {
|
|
252
|
+
files["openclaw/scripts/setup-gsd.sh"] = gsdScripts.sh;
|
|
253
|
+
files["openclaw/scripts/setup-gsd.ps1"] = gsdScripts.ps1;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
242
257
|
// 5. Calculate metadata
|
|
243
258
|
const skillCount = resolved.services.reduce((sum, s) => sum + s.definition.skills.length, 0);
|
|
244
259
|
|
package/src/generators/env.ts
CHANGED
|
@@ -125,6 +125,30 @@ export function generateEnvFiles(
|
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
+
// ── AI Provider API Keys ─────────────────────────────────────────────────
|
|
129
|
+
|
|
130
|
+
if (resolved.aiProviders && resolved.aiProviders.length > 0) {
|
|
131
|
+
lines.push({
|
|
132
|
+
comment:
|
|
133
|
+
"\n# ═══════════════════════════════════════════════════════════════════════════════\n# AI Provider API Keys\n# ═══════════════════════════════════════════════════════════════════════════════",
|
|
134
|
+
key: "",
|
|
135
|
+
exampleValue: "",
|
|
136
|
+
actualValue: "",
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
for (const provider of resolved.aiProviders) {
|
|
140
|
+
if (provider === "ollama" || provider === "lmstudio" || provider === "vllm") continue;
|
|
141
|
+
|
|
142
|
+
const envKey = `${provider.toUpperCase()}_API_KEY`;
|
|
143
|
+
lines.push({
|
|
144
|
+
comment: formatComment(`API Key for ${provider} AI models`, "OpenClaw Core", true, true),
|
|
145
|
+
key: envKey,
|
|
146
|
+
exampleValue: `your_${provider.toLowerCase()}_api_key_here`,
|
|
147
|
+
actualValue: "",
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
128
152
|
// Claude web-provider session variables (optional)
|
|
129
153
|
lines.push({
|
|
130
154
|
comment:
|
|
@@ -203,6 +227,7 @@ export function generateEnvFiles(
|
|
|
203
227
|
// ── Service-Specific Variables ───────────────────────────────────────────
|
|
204
228
|
|
|
205
229
|
const dbPasswordKeys = dbReqs.map((r) => r.passwordEnvVar);
|
|
230
|
+
const aiProviderKeys = (resolved.aiProviders || []).map((p) => `${p.toUpperCase()}_API_KEY`);
|
|
206
231
|
const seenKeys = new Set<string>([
|
|
207
232
|
"OPENCLAW_VERSION",
|
|
208
233
|
"OPENCLAW_GATEWAY_TOKEN",
|
|
@@ -217,6 +242,7 @@ export function generateEnvFiles(
|
|
|
217
242
|
"CLAUDE_WEB_SESSION_KEY",
|
|
218
243
|
"CLAUDE_WEB_COOKIE",
|
|
219
244
|
...dbPasswordKeys,
|
|
245
|
+
...aiProviderKeys,
|
|
220
246
|
]);
|
|
221
247
|
|
|
222
248
|
for (const { definition } of resolved.services) {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { GsdRuntime } from "../types.js";
|
|
2
|
+
|
|
3
|
+
export function generateGsdScripts(
|
|
4
|
+
runtimes: GsdRuntime[] | undefined,
|
|
5
|
+
): { sh: string; ps1: string } | undefined {
|
|
6
|
+
if (!runtimes || runtimes.length === 0) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// Map runtimes to their corresponding CLI flags for GSD installer
|
|
11
|
+
const flags = runtimes.map((r) => `--${r}`).join(" ");
|
|
12
|
+
|
|
13
|
+
const sh = `#!/usr/bin/env bash
|
|
14
|
+
# Automatically generated by Better-OpenClaw
|
|
15
|
+
|
|
16
|
+
if ! command -v npx &> /dev/null; then
|
|
17
|
+
echo "Error: Node.js (npx) is not installed. Please install Node.js."
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
echo "Installing Get-Shit-Done workflows for requested runtimes: ${runtimes.join(", ")}"
|
|
22
|
+
npx yes | npx get-shit-done-cc@latest --local ${flags}
|
|
23
|
+
|
|
24
|
+
echo "GSD Integration Complete!"
|
|
25
|
+
echo "Check the injected folders matching your target platform (e.g. .claude, .codex)."
|
|
26
|
+
`;
|
|
27
|
+
|
|
28
|
+
const ps1 = `# Automatically generated by Better-OpenClaw
|
|
29
|
+
|
|
30
|
+
if (!(Get-Command npx -ErrorAction SilentlyContinue)) {
|
|
31
|
+
Write-Error "Error: Node.js (npx) is not installed. Please install Node.js."
|
|
32
|
+
exit 1
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
Write-Host "Installing Get-Shit-Done workflows for requested runtimes: ${runtimes.join(", ")}"
|
|
36
|
+
npx get-shit-done-cc@latest --local ${flags}
|
|
37
|
+
|
|
38
|
+
Write-Host "GSD Integration Complete!"
|
|
39
|
+
Write-Host "Check the injected folders matching your target platform (e.g. .claude, .codex)."
|
|
40
|
+
`;
|
|
41
|
+
|
|
42
|
+
return { sh, ps1 };
|
|
43
|
+
}
|