@better-openclaw/core 1.0.19 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.github/dependabot.yml +32 -0
  2. package/.github/workflows/ci.yml +8 -8
  3. package/.github/workflows/publish-core.yml +4 -4
  4. package/SECURITY.md +62 -0
  5. package/dist/deployers/coolify.cjs +61 -50
  6. package/dist/deployers/coolify.cjs.map +1 -1
  7. package/dist/deployers/coolify.d.cts +4 -11
  8. package/dist/deployers/coolify.d.cts.map +1 -1
  9. package/dist/deployers/coolify.d.mts +4 -11
  10. package/dist/deployers/coolify.d.mts.map +1 -1
  11. package/dist/deployers/coolify.mjs +62 -50
  12. package/dist/deployers/coolify.mjs.map +1 -1
  13. package/dist/deployers/dokploy.cjs +106 -29
  14. package/dist/deployers/dokploy.cjs.map +1 -1
  15. package/dist/deployers/dokploy.d.cts +2 -1
  16. package/dist/deployers/dokploy.d.cts.map +1 -1
  17. package/dist/deployers/dokploy.d.mts +2 -1
  18. package/dist/deployers/dokploy.d.mts.map +1 -1
  19. package/dist/deployers/dokploy.mjs +107 -29
  20. package/dist/deployers/dokploy.mjs.map +1 -1
  21. package/dist/deployers/index.cjs.map +1 -1
  22. package/dist/deployers/index.d.cts +2 -2
  23. package/dist/deployers/index.d.cts.map +1 -1
  24. package/dist/deployers/index.d.mts +2 -2
  25. package/dist/deployers/index.d.mts.map +1 -1
  26. package/dist/deployers/index.mjs.map +1 -1
  27. package/dist/deployers/strip-host-ports.cjs +138 -0
  28. package/dist/deployers/strip-host-ports.cjs.map +1 -0
  29. package/dist/deployers/strip-host-ports.d.cts +62 -0
  30. package/dist/deployers/strip-host-ports.d.cts.map +1 -0
  31. package/dist/deployers/strip-host-ports.d.mts +62 -0
  32. package/dist/deployers/strip-host-ports.d.mts.map +1 -0
  33. package/dist/deployers/strip-host-ports.mjs +133 -0
  34. package/dist/deployers/strip-host-ports.mjs.map +1 -0
  35. package/dist/deployers/strip-host-ports.test.cjs +89 -0
  36. package/dist/deployers/strip-host-ports.test.cjs.map +1 -0
  37. package/dist/deployers/strip-host-ports.test.d.cts +1 -0
  38. package/dist/deployers/strip-host-ports.test.d.mts +1 -0
  39. package/dist/deployers/strip-host-ports.test.mjs +90 -0
  40. package/dist/deployers/strip-host-ports.test.mjs.map +1 -0
  41. package/dist/deployers/types.d.cts +173 -2
  42. package/dist/deployers/types.d.cts.map +1 -1
  43. package/dist/deployers/types.d.mts +173 -2
  44. package/dist/deployers/types.d.mts.map +1 -1
  45. package/dist/index.d.cts +2 -2
  46. package/dist/index.d.mts +2 -2
  47. package/dist/services/definitions/usesend.cjs +4 -4
  48. package/dist/services/definitions/usesend.cjs.map +1 -1
  49. package/dist/services/definitions/usesend.mjs +4 -4
  50. package/dist/services/definitions/usesend.mjs.map +1 -1
  51. package/package.json +4 -4
  52. package/src/__snapshots__/composer.snapshot.test.ts.snap +248 -38
  53. package/src/deployers/coolify.ts +198 -103
  54. package/src/deployers/dokploy.ts +209 -55
  55. package/src/deployers/index.ts +1 -0
  56. package/src/deployers/strip-host-ports.test.ts +100 -0
  57. package/src/deployers/strip-host-ports.ts +187 -0
  58. package/src/deployers/types.ts +185 -1
  59. package/src/index.ts +19 -4
  60. package/src/services/definitions/usesend.ts +4 -4
  61. package/tsconfig.tsbuildinfo +1 -0
@@ -7,7 +7,7 @@
7
7
  * registering it in `deployers/index.ts`.
8
8
  *
9
9
  * Architecture:
10
- * Web UI / CLI --> API relay (/v1/deploy) --> PaaS instance (Dokploy/Coolify)
10
+ * Web UI / CLI --> API relay (/api/v1/deploy) --> PaaS instance (Dokploy/Coolify)
11
11
  *
12
12
  * The API server acts as a relay to avoid CORS issues when deploying from the
13
13
  * browser. The CLI calls the deployer directly (no relay needed).
@@ -33,6 +33,8 @@ export interface DeployInput {
33
33
  envContent: string;
34
34
  /** Optional description */
35
35
  description?: string;
36
+ /** Optional server ID to deploy to (for PaaS platforms managing multiple servers) */
37
+ serverId?: string;
36
38
  }
37
39
 
38
40
  /** Step-level status for deploy progress. */
@@ -57,6 +59,16 @@ export interface DeployResult {
57
59
  error?: string;
58
60
  }
59
61
 
62
+ /** Server available on a PaaS platform. */
63
+ export interface PaasServer {
64
+ /** Server ID (used as identifier when deploying) */
65
+ id: string;
66
+ /** Human-readable server name */
67
+ name: string;
68
+ /** Server IP address or hostname */
69
+ ip?: string;
70
+ }
71
+
60
72
  /** Interface that all PaaS deployers implement. */
61
73
  export interface PaasDeployer {
62
74
  /** Human-readable name */
@@ -67,4 +79,176 @@ export interface PaasDeployer {
67
79
  testConnection(target: DeployTarget): Promise<{ ok: boolean; error?: string }>;
68
80
  /** Deploy a compose stack */
69
81
  deploy(input: DeployInput): Promise<DeployResult>;
82
+ /** List available servers on the PaaS instance (optional — not all providers manage multiple servers) */
83
+ listServers?(target: DeployTarget): Promise<PaasServer[]>;
84
+ }
85
+
86
+ export interface ProviderCapabilities {
87
+ compose: boolean;
88
+ dockerImage: boolean;
89
+ volumes: boolean;
90
+ domains: boolean;
91
+ secrets: boolean;
92
+ }
93
+
94
+ export interface DeploymentResult {
95
+ success: boolean;
96
+ url?: string;
97
+ message?: string;
98
+ }
99
+
100
+ export interface DeploymentProvider {
101
+ id: string;
102
+ name: string;
103
+
104
+ capabilities: ProviderCapabilities;
105
+
106
+ deploy(config: NormalizedApp): Promise<DeploymentResult>;
107
+
108
+ createSecret?(key: string, value: string): Promise<void>;
109
+
110
+ createDomain?(service: string, domain: string): Promise<void>;
111
+ }
112
+
113
+ export interface NormalizedApp {
114
+ name: string;
115
+ services: NormalizedService[];
116
+ env: Record<string, string>;
117
+ }
118
+
119
+ export interface NormalizedService {
120
+ name: string;
121
+ image?: string;
122
+ build?: string;
123
+ ports?: number[];
124
+ volumes?: string[];
125
+ env?: Record<string, string>;
126
+ }
127
+
128
+ export interface DokployEnvironment {
129
+ environmentId: string;
130
+ name: string;
131
+ description: string;
132
+ createdAt: string;
133
+ env: string;
134
+ projectId: string;
135
+ isDefault: boolean;
136
+ applications: DokployApplication[];
137
+ mariadb: any[];
138
+ mongo: any[];
139
+ mysql: any[];
140
+ postgres: any[];
141
+ redis: any[];
142
+ compose: any[];
143
+ project: Project;
144
+ }
145
+
146
+ export interface DokployApplication {
147
+ applicationId: string;
148
+ name: string;
149
+ appName: string;
150
+ description: string;
151
+ env: string;
152
+ previewEnv: any;
153
+ watchPaths: any[];
154
+ previewBuildArgs: any;
155
+ previewBuildSecrets: any;
156
+ previewLabels: any;
157
+ previewWildcard: any;
158
+ previewPort: number;
159
+ previewHttps: boolean;
160
+ previewPath: string;
161
+ previewCertificateType: string;
162
+ previewCustomCertResolver: any;
163
+ previewLimit: number;
164
+ isPreviewDeploymentsActive: boolean;
165
+ previewRequireCollaboratorPermissions: boolean;
166
+ rollbackActive: boolean;
167
+ buildArgs: string;
168
+ buildSecrets: string;
169
+ memoryReservation: any;
170
+ memoryLimit: any;
171
+ cpuReservation: any;
172
+ cpuLimit: any;
173
+ title: any;
174
+ enabled: any;
175
+ subtitle: any;
176
+ command: any;
177
+ args: any;
178
+ refreshToken: string;
179
+ sourceType: string;
180
+ cleanCache: boolean;
181
+ repository: string;
182
+ owner: string;
183
+ branch: string;
184
+ buildPath: string;
185
+ triggerType: string;
186
+ autoDeploy: boolean;
187
+ gitlabProjectId: any;
188
+ gitlabRepository: any;
189
+ gitlabOwner: any;
190
+ gitlabBranch: any;
191
+ gitlabBuildPath: string;
192
+ gitlabPathNamespace: any;
193
+ giteaRepository: any;
194
+ giteaOwner: any;
195
+ giteaBranch: any;
196
+ giteaBuildPath: string;
197
+ bitbucketRepository: any;
198
+ bitbucketRepositorySlug: any;
199
+ bitbucketOwner: any;
200
+ bitbucketBranch: any;
201
+ bitbucketBuildPath: string;
202
+ username: any;
203
+ password: any;
204
+ dockerImage: any;
205
+ registryUrl: any;
206
+ customGitUrl: any;
207
+ customGitBranch: any;
208
+ customGitBuildPath: any;
209
+ customGitSSHKeyId: any;
210
+ enableSubmodules: boolean;
211
+ dockerfile: any;
212
+ dockerContextPath: any;
213
+ dockerBuildStage: any;
214
+ dropBuildPath: any;
215
+ healthCheckSwarm: any;
216
+ restartPolicySwarm: any;
217
+ placementSwarm: any;
218
+ updateConfigSwarm: any;
219
+ rollbackConfigSwarm: any;
220
+ modeSwarm: any;
221
+ labelsSwarm: any;
222
+ networkSwarm: any;
223
+ stopGracePeriodSwarm: any;
224
+ endpointSpecSwarm: any;
225
+ ulimitsSwarm: any;
226
+ replicas: number;
227
+ applicationStatus: string;
228
+ buildType: string;
229
+ railpackVersion: string;
230
+ herokuVersion: any;
231
+ publishDirectory: any;
232
+ isStaticSpa: any;
233
+ createEnvFile: boolean;
234
+ createdAt: string;
235
+ registryId: any;
236
+ rollbackRegistryId: any;
237
+ environmentId: string;
238
+ githubId: string;
239
+ gitlabId: any;
240
+ giteaId: any;
241
+ bitbucketId: any;
242
+ serverId: string;
243
+ buildServerId: any;
244
+ buildRegistryId: any;
245
+ }
246
+
247
+ export interface Project {
248
+ projectId: string;
249
+ name: string;
250
+ description: string;
251
+ createdAt: string;
252
+ organizationId: string;
253
+ env: string;
70
254
  }
package/src/index.ts CHANGED
@@ -15,6 +15,7 @@ export type {
15
15
  DeployStep as PaasDeployStep,
16
16
  DeployTarget as PaasDeployTarget,
17
17
  PaasDeployer,
18
+ PaasServer,
18
19
  } from "./deployers/index.js";
19
20
  export {
20
21
  CoolifyDeployer,
@@ -29,10 +30,16 @@ export { generate, generateServicesDoc } from "./generate.js";
29
30
  export { generateCaddyfile } from "./generators/caddy.js";
30
31
  export type { EnvVarGroup } from "./generators/env.js";
31
32
  export { generateEnvFiles, getStructuredEnvVars } from "./generators/env.js";
32
- export { generateGrafanaConfig, generateGrafanaDashboard } from "./generators/grafana.js";
33
+ export {
34
+ generateGrafanaConfig,
35
+ generateGrafanaDashboard,
36
+ } from "./generators/grafana.js";
33
37
  export { generateHealthCheck } from "./generators/health-check.js";
34
38
  export { generateN8nWorkflows } from "./generators/n8n-workflows.js";
35
- export { generatePostgresInit, getDbRequirements } from "./generators/postgres-init.js";
39
+ export {
40
+ generatePostgresInit,
41
+ getDbRequirements,
42
+ } from "./generators/postgres-init.js";
36
43
  export { generatePrometheusConfig } from "./generators/prometheus.js";
37
44
  export { generateReadme } from "./generators/readme.js";
38
45
  export { generateScripts } from "./generators/scripts.js";
@@ -44,12 +51,20 @@ export type {
44
51
  } from "./generators/stack-manifest.js";
45
52
  export { generateStackManifest } from "./generators/stack-manifest.js";
46
53
  // ─── Config Migrations ──────────────────────────────────────────────────────
47
- export { CURRENT_CONFIG_VERSION, migrateConfig, needsMigration } from "./migrations.js";
54
+ export {
55
+ CURRENT_CONFIG_VERSION,
56
+ migrateConfig,
57
+ needsMigration,
58
+ } from "./migrations.js";
48
59
  // ─── Port Scanner ───────────────────────────────────────────────────────────
49
60
  export type { PortConflict } from "./port-scanner.js";
50
61
  export { formatPortConflicts, scanPortConflicts } from "./port-scanner.js";
51
62
  // ─── Presets ────────────────────────────────────────────────────────────────
52
- export { getAllPresets, getPresetById, presetRegistry } from "./presets/registry.js";
63
+ export {
64
+ getAllPresets,
65
+ getPresetById,
66
+ presetRegistry,
67
+ } from "./presets/registry.js";
53
68
  export { resolve } from "./resolver.js";
54
69
  export {
55
70
  AddedDependencySchema,
@@ -36,28 +36,28 @@ export const usesendDefinition: ServiceDefinition = {
36
36
  },
37
37
  {
38
38
  key: "AWS_ACCESS_KEY",
39
- defaultValue: "",
39
+ defaultValue: "your-aws-access-key",
40
40
  secret: true,
41
41
  description: "AWS access key for SES/SNS",
42
42
  required: true,
43
43
  },
44
44
  {
45
45
  key: "AWS_SECRET_KEY",
46
- defaultValue: "",
46
+ defaultValue: "your-aws-secret-key",
47
47
  secret: true,
48
48
  description: "AWS secret key for SES/SNS",
49
49
  required: true,
50
50
  },
51
51
  {
52
52
  key: "GITHUB_ID",
53
- defaultValue: "",
53
+ defaultValue: "your-github-oauth-client-id",
54
54
  secret: false,
55
55
  description: "GitHub OAuth app client ID",
56
56
  required: true,
57
57
  },
58
58
  {
59
59
  key: "GITHUB_SECRET",
60
- defaultValue: "",
60
+ defaultValue: "your-github-oauth-client-secret",
61
61
  secret: true,
62
62
  description: "GitHub OAuth app client secret",
63
63
  required: true,
@@ -0,0 +1 @@
1
+ {"root":["./src/bare-metal-partition.ts","./src/composer.ts","./src/errors.ts","./src/generate.ts","./src/index.ts","./src/migrations.ts","./src/port-scanner.ts","./src/resolver.ts","./src/schema.ts","./src/types.ts","./src/validator.ts","./src/version-manager.ts","./src/deployers/coolify.ts","./src/deployers/dokploy.ts","./src/deployers/index.ts","./src/deployers/strip-host-ports.ts","./src/deployers/types.ts","./src/generators/bare-metal-install.ts","./src/generators/caddy.ts","./src/generators/cloud-init.ts","./src/generators/env.ts","./src/generators/get-shit-done.ts","./src/generators/grafana.ts","./src/generators/health-check.ts","./src/generators/n8n-workflows.ts","./src/generators/native-services.ts","./src/generators/openclaw-install-script.ts","./src/generators/openclaw-json.ts","./src/generators/postgres-init.ts","./src/generators/prometheus.ts","./src/generators/readme.ts","./src/generators/scripts.ts","./src/generators/skills.ts","./src/generators/stack-manifest.ts","./src/generators/traefik.ts","./src/presets/registry.ts","./src/services/registry.ts","./src/services/definitions/anything-llm.ts","./src/services/definitions/appflowy.ts","./src/services/definitions/authentik.ts","./src/services/definitions/beszel.ts","./src/services/definitions/browserless.ts","./src/services/definitions/caddy.ts","./src/services/definitions/cal-com.ts","./src/services/definitions/chromadb.ts","./src/services/definitions/claude-code.ts","./src/services/definitions/code-server.ts","./src/services/definitions/codex.ts","./src/services/definitions/comfyui.ts","./src/services/definitions/convex-dashboard.ts","./src/services/definitions/convex.ts","./src/services/definitions/coolify.ts","./src/services/definitions/crowdsec.ts","./src/services/definitions/desktop-environment.ts","./src/services/definitions/dify.ts","./src/services/definitions/docsgpt.ts","./src/services/definitions/dokploy.ts","./src/services/definitions/dozzle.ts","./src/services/definitions/ffmpeg.ts","./src/services/definitions/flowise.ts","./src/services/definitions/gemini-cli.ts","./src/services/definitions/ghost.ts","./src/services/definitions/gitea.ts","./src/services/definitions/gotify.ts","./src/services/definitions/grafana.ts","./src/services/definitions/headscale.ts","./src/services/definitions/hexstrike.ts","./src/services/definitions/homeassistant.ts","./src/services/definitions/immich.ts","./src/services/definitions/index.ts","./src/services/definitions/jellyfin.ts","./src/services/definitions/jenkins.ts","./src/services/definitions/kimi.ts","./src/services/definitions/lasuite-meet-agents.ts","./src/services/definitions/lasuite-meet-backend.ts","./src/services/definitions/lasuite-meet-frontend.ts","./src/services/definitions/librechat.ts","./src/services/definitions/lightpanda.ts","./src/services/definitions/litellm.ts","./src/services/definitions/livekit.ts","./src/services/definitions/loki.ts","./src/services/definitions/matomo.ts","./src/services/definitions/matrix-synapse.ts","./src/services/definitions/mattermost.ts","./src/services/definitions/meilisearch.ts","./src/services/definitions/milvus.ts","./src/services/definitions/minio.ts","./src/services/definitions/mission-control.ts","./src/services/definitions/mixpost.ts","./src/services/definitions/motion-canvas.ts","./src/services/definitions/n8n.ts","./src/services/definitions/neo4j.ts","./src/services/definitions/nextcloud.ts","./src/services/definitions/nocodb.ts","./src/services/definitions/ntfy.ts","./src/services/definitions/ollama.ts","./src/services/definitions/open-webui.ts","./src/services/definitions/opencode.ts","./src/services/definitions/openpanel.ts","./src/services/definitions/outline.ts","./src/services/definitions/paperless-ngx.ts","./src/services/definitions/pentagi.ts","./src/services/definitions/pentestagent.ts","./src/services/definitions/playwright-server.ts","./src/services/definitions/portainer.ts","./src/services/definitions/postgresql.ts","./src/services/definitions/postiz.ts","./src/services/definitions/prometheus.ts","./src/services/definitions/qdrant.ts","./src/services/definitions/redis.ts","./src/services/definitions/remotion.ts","./src/services/definitions/rocketchat.ts","./src/services/definitions/scrapling.ts","./src/services/definitions/searxng.ts","./src/services/definitions/signoz.ts","./src/services/definitions/solidityguard.ts","./src/services/definitions/stable-diffusion.ts","./src/services/definitions/steel-browser.ts","./src/services/definitions/stream-gateway.ts","./src/services/definitions/supabase.ts","./src/services/definitions/tailscale.ts","./src/services/definitions/temporal.ts","./src/services/definitions/traefik.ts","./src/services/definitions/umami.ts","./src/services/definitions/uptime-kuma.ts","./src/services/definitions/usesend.ts","./src/services/definitions/valkey.ts","./src/services/definitions/vaultwarden.ts","./src/services/definitions/watchtower.ts","./src/services/definitions/weaviate.ts","./src/services/definitions/whisper.ts","./src/services/definitions/xyops.ts","./src/skills/registry.ts","./src/skills/skill-manifest.ts"],"version":"5.9.3"}