@better-openclaw/core 1.0.11 → 1.0.13

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 (78) hide show
  1. package/README.md +70 -0
  2. package/dist/bare-metal-partition.test.mjs +1 -1
  3. package/dist/composer.d.mts.map +1 -1
  4. package/dist/composer.mjs +5 -3
  5. package/dist/composer.mjs.map +1 -1
  6. package/dist/composer.snapshot.test.mjs +1 -1
  7. package/dist/composer.test.mjs +1 -1
  8. package/dist/generate.test.mjs +1 -1
  9. package/dist/generators/bare-metal-install.test.mjs +1 -1
  10. package/dist/generators/caddy.test.mjs +1 -1
  11. package/dist/generators/env.test.mjs +1 -1
  12. package/dist/generators/health-check.mjs.map +1 -1
  13. package/dist/generators/health-check.test.mjs +1 -1
  14. package/dist/generators/scripts.test.mjs +1 -1
  15. package/dist/generators/traefik.test.mjs +1 -1
  16. package/dist/{magic-string.es-1uTtupLe.mjs → magic-string.es-CfFonO_S.mjs} +1 -1
  17. package/dist/{magic-string.es-1uTtupLe.mjs.map → magic-string.es-CfFonO_S.mjs.map} +1 -1
  18. package/dist/manifest-BjK4ALvr.mjs +1158 -0
  19. package/dist/manifest-BjK4ALvr.mjs.map +1 -0
  20. package/dist/migrations.d.mts.map +1 -1
  21. package/dist/migrations.mjs.map +1 -1
  22. package/dist/migrations.test.mjs +1 -1
  23. package/dist/presets/registry.test.mjs +1 -1
  24. package/dist/resolver.test.mjs +1 -1
  25. package/dist/schema.d.mts +4 -0
  26. package/dist/schema.d.mts.map +1 -1
  27. package/dist/schema.mjs +2 -1
  28. package/dist/schema.mjs.map +1 -1
  29. package/dist/schema.test.mjs +1 -1
  30. package/dist/services/definitions/hexstrike.d.mts +7 -0
  31. package/dist/services/definitions/hexstrike.d.mts.map +1 -0
  32. package/dist/services/definitions/hexstrike.mjs +44 -0
  33. package/dist/services/definitions/hexstrike.mjs.map +1 -0
  34. package/dist/services/definitions/index.d.mts +6 -1
  35. package/dist/services/definitions/index.d.mts.map +1 -1
  36. package/dist/services/definitions/index.mjs +12 -2
  37. package/dist/services/definitions/index.mjs.map +1 -1
  38. package/dist/services/definitions/pentagi.d.mts +7 -0
  39. package/dist/services/definitions/pentagi.d.mts.map +1 -0
  40. package/dist/services/definitions/pentagi.mjs +44 -0
  41. package/dist/services/definitions/pentagi.mjs.map +1 -0
  42. package/dist/services/definitions/pentestagent.d.mts +7 -0
  43. package/dist/services/definitions/pentestagent.d.mts.map +1 -0
  44. package/dist/services/definitions/pentestagent.mjs +39 -0
  45. package/dist/services/definitions/pentestagent.mjs.map +1 -0
  46. package/dist/services/definitions/scrapling.d.mts +7 -0
  47. package/dist/services/definitions/scrapling.d.mts.map +1 -0
  48. package/dist/services/definitions/scrapling.mjs +44 -0
  49. package/dist/services/definitions/scrapling.mjs.map +1 -0
  50. package/dist/services/definitions/solidityguard.d.mts +7 -0
  51. package/dist/services/definitions/solidityguard.d.mts.map +1 -0
  52. package/dist/services/definitions/solidityguard.mjs +49 -0
  53. package/dist/services/definitions/solidityguard.mjs.map +1 -0
  54. package/dist/services/registry.test.mjs +1 -1
  55. package/dist/skills/skill-manifest.d.mts.map +1 -1
  56. package/dist/skills/skill-manifest.mjs +5 -13
  57. package/dist/skills/skill-manifest.mjs.map +1 -1
  58. package/dist/types.mjs +5 -0
  59. package/dist/types.mjs.map +1 -1
  60. package/dist/validator.test.mjs +1 -1
  61. package/dist/version-manager.test.mjs +1 -1
  62. package/dist/{vi.2VT5v0um-YSByewHe.mjs → vi.2VT5v0um-BgmKutxR.mjs} +2 -2
  63. package/dist/{vi.2VT5v0um-YSByewHe.mjs.map → vi.2VT5v0um-BgmKutxR.mjs.map} +1 -1
  64. package/package.json +1 -1
  65. package/src/composer.ts +12 -3
  66. package/src/generators/health-check.ts +46 -8
  67. package/src/migrations.ts +0 -1
  68. package/src/schema.ts +1 -0
  69. package/src/services/definitions/hexstrike.ts +40 -0
  70. package/src/services/definitions/index.ts +15 -0
  71. package/src/services/definitions/pentagi.ts +40 -0
  72. package/src/services/definitions/pentestagent.ts +33 -0
  73. package/src/services/definitions/scrapling.ts +40 -0
  74. package/src/services/definitions/solidityguard.ts +46 -0
  75. package/src/skills/manifest.json +1391 -0
  76. package/src/skills/manifest.schema.json +51 -0
  77. package/src/skills/skill-manifest.ts +27 -22
  78. package/src/types.ts +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-openclaw/core",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "private": false,
5
5
  "description": "Core logic for better-openclaw: schemas, service registry, resolver, composer, validators and more",
6
6
  "packageManager": "pnpm@9.15.4",
package/src/composer.ts CHANGED
@@ -74,7 +74,11 @@ function buildGatewayServices(
74
74
  }
75
75
  if (def.openclawVolumeMounts) {
76
76
  for (const vol of def.openclawVolumeMounts) {
77
- allVolumes.add(vol.name);
77
+ const isBindMount =
78
+ vol.name.startsWith("./") || vol.name.startsWith("/") || vol.name.startsWith("~");
79
+ if (!isBindMount) {
80
+ allVolumes.add(vol.name);
81
+ }
78
82
  gatewayVolumes.push(`${vol.name}:${vol.containerPath}`);
79
83
  }
80
84
  }
@@ -172,8 +176,13 @@ function buildCompanionService(
172
176
 
173
177
  if (def.volumes.length > 0) {
174
178
  svc.volumes = def.volumes.map((v) => {
175
- allVolumes.add(v.name);
176
- volumeNames.push(v.name);
179
+ const isBindMount =
180
+ v.name.startsWith("./") || v.name.startsWith("/") || v.name.startsWith("~");
181
+
182
+ if (!isBindMount) {
183
+ allVolumes.add(v.name);
184
+ volumeNames.push(v.name);
185
+ }
177
186
  return `${v.name}:${v.containerPath}`;
178
187
  });
179
188
  }
@@ -75,7 +75,9 @@ function generateBashScript(resolved: ResolverOutput, options: HealthCheckOption
75
75
  dockerChecks.push(L(" # ── ", svc.icon, " ", svc.name, " ──"));
76
76
  dockerChecks.push(L(' check_container "', svc.id, '" "', svc.name, '" "', svc.icon, '"'));
77
77
  for (const p of svc.ports.filter((pp) => pp.exposed)) {
78
- dockerChecks.push(L(' check_port "', svc.id, '" ', String(p.host), ' "', p.description, '"'));
78
+ dockerChecks.push(
79
+ L(' check_port "', svc.id, '" ', String(p.host), ' "', p.description, '"'),
80
+ );
79
81
  }
80
82
  if (svc.healthCheckCmd) {
81
83
  dockerChecks.push(
@@ -253,8 +255,8 @@ function generateBashScript(resolved: ResolverOutput, options: HealthCheckOption
253
255
  " fi",
254
256
  "",
255
257
  " local state health_status",
256
- " state=$(echo \"$status\" | grep -o '\"State\":\"[^\"]*\"' | cut -d'\"' -f4 || echo \"unknown\")",
257
- " health_status=$(echo \"$status\" | grep -o '\"Health\":\"[^\"]*\"' | cut -d'\"' -f4 || echo \"none\")",
258
+ ' state=$(echo "$status" | grep -o \'"State":"[^"]*"\' | cut -d\'"\' -f4 || echo "unknown")',
259
+ ' health_status=$(echo "$status" | grep -o \'"Health":"[^"]*"\' | cut -d\'"\' -f4 || echo "none")',
258
260
  "",
259
261
  ' restarts=$(docker inspect --format="{{.RestartCount}}" "$(docker compose ps -q "$id" 2>/dev/null | head -1)" 2>/dev/null || echo "0")',
260
262
  "",
@@ -463,11 +465,27 @@ function generatePowerShellScript(resolved: ResolverOutput, options: HealthCheck
463
465
  for (const svc of checks) {
464
466
  dockerChecks.push(L(" # ", svc.icon, " ", svc.name));
465
467
  dockerChecks.push(
466
- L(' Test-Container -ServiceId "', svc.id, '" -ServiceName "', svc.name, '" -Icon "', svc.icon, '"'),
468
+ L(
469
+ ' Test-Container -ServiceId "',
470
+ svc.id,
471
+ '" -ServiceName "',
472
+ svc.name,
473
+ '" -Icon "',
474
+ svc.icon,
475
+ '"',
476
+ ),
467
477
  );
468
478
  for (const p of svc.ports.filter((pp) => pp.exposed)) {
469
479
  dockerChecks.push(
470
- L(' Test-Port -ServiceId "', svc.id, '" -Port ', String(p.host), ' -Description "', p.description, '"'),
480
+ L(
481
+ ' Test-Port -ServiceId "',
482
+ svc.id,
483
+ '" -Port ',
484
+ String(p.host),
485
+ ' -Description "',
486
+ p.description,
487
+ '"',
488
+ ),
471
489
  );
472
490
  }
473
491
  dockerChecks.push("");
@@ -478,11 +496,27 @@ function generatePowerShellScript(resolved: ResolverOutput, options: HealthCheck
478
496
  for (const svc of checks) {
479
497
  bmChecks.push(L(" # ", svc.icon, " ", svc.name));
480
498
  bmChecks.push(
481
- L(' Test-ProcessRunning -ServiceId "', svc.id, '" -ServiceName "', svc.name, '" -Icon "', svc.icon, '"'),
499
+ L(
500
+ ' Test-ProcessRunning -ServiceId "',
501
+ svc.id,
502
+ '" -ServiceName "',
503
+ svc.name,
504
+ '" -Icon "',
505
+ svc.icon,
506
+ '"',
507
+ ),
482
508
  );
483
509
  for (const p of svc.ports.filter((pp) => pp.exposed)) {
484
510
  bmChecks.push(
485
- L(' Test-Port -ServiceId "', svc.id, '" -Port ', String(p.host), ' -Description "', p.description, '"'),
511
+ L(
512
+ ' Test-Port -ServiceId "',
513
+ svc.id,
514
+ '" -Port ',
515
+ String(p.host),
516
+ ' -Description "',
517
+ p.description,
518
+ '"',
519
+ ),
486
520
  );
487
521
  }
488
522
  bmChecks.push("");
@@ -498,7 +532,11 @@ function generatePowerShellScript(resolved: ResolverOutput, options: HealthCheck
498
532
  "",
499
533
  ".DESCRIPTION",
500
534
  " Auto-generated verification script for your stack.",
501
- L(" Checks ", String(total), " services: container status, port reachability, and log errors."),
535
+ L(
536
+ " Checks ",
537
+ String(total),
538
+ " services: container status, port reachability, and log errors.",
539
+ ),
502
540
  "",
503
541
  ".PARAMETER Quick",
504
542
  " Skip log scanning for faster results.",
package/src/migrations.ts CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  export const CURRENT_CONFIG_VERSION = 2;
3
2
 
4
3
  type MigrationFn = (input: Record<string, unknown>) => Record<string, unknown>;
package/src/schema.ts CHANGED
@@ -22,6 +22,7 @@ export const ServiceCategorySchema = z.enum([
22
22
  "knowledge",
23
23
  "desktop",
24
24
  "streaming",
25
+ "security",
25
26
  ]);
26
27
 
27
28
  export const MaturitySchema = z.enum(["stable", "beta", "experimental"]);
@@ -0,0 +1,40 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const hexstrikeDefinition: ServiceDefinition = {
4
+ id: "hexstrike",
5
+ name: "HexStrike AI",
6
+ description: "AI-Powered MCP Cybersecurity Automation Platform with 150+ pentesting tools.",
7
+ category: "security",
8
+ icon: "⚔️",
9
+
10
+ image: "ghcr.io/0x4m4/hexstrike-ai",
11
+ imageTag: "latest",
12
+ ports: [
13
+ {
14
+ host: 8888,
15
+ container: 8888,
16
+ description: "HexStrike MCP Server",
17
+ exposed: true,
18
+ },
19
+ ],
20
+ volumes: [],
21
+ environment: [],
22
+ command: "mcp", // Instructs standard Python/Docker runtime to serve the MCP endpoint
23
+ dependsOn: [],
24
+ restartPolicy: "unless-stopped",
25
+ networks: ["openclaw-network"],
26
+
27
+ skills: [{ skillId: "hexstrike-mcp", autoInstall: true }],
28
+ openclawEnvVars: [],
29
+
30
+ docsUrl: "https://github.com/0x4m4/hexstrike-ai",
31
+ tags: ["security", "pentesting", "mcp", "agent"],
32
+ maturity: "experimental",
33
+
34
+ requires: [],
35
+ recommends: [],
36
+ conflictsWith: [],
37
+
38
+ minMemoryMB: 2048,
39
+ gpuRequired: false,
40
+ };
@@ -23,6 +23,7 @@ export { geminiCliDefinition } from "./gemini-cli.js";
23
23
  export { giteaDefinition } from "./gitea.js";
24
24
  export { gotifyDefinition } from "./gotify.js";
25
25
  export { grafanaDefinition } from "./grafana.js";
26
+ export { hexstrikeDefinition } from "./hexstrike.js";
26
27
  export { kimiDefinition } from "./kimi.js";
27
28
  export { lasuiteMeetAgentsDefinition } from "./lasuite-meet-agents.js";
28
29
  export { lasuiteMeetBackendDefinition } from "./lasuite-meet-backend.js";
@@ -49,6 +50,8 @@ export { opencodeDefinition } from "./opencode.js";
49
50
  export { openpanelDefinition } from "./openpanel.js";
50
51
  export { outlineDefinition } from "./outline.js";
51
52
  export { paperlessNgxDefinition } from "./paperless-ngx.js";
53
+ export { pentagiDefinition } from "./pentagi.js";
54
+ export { pentestagentDefinition } from "./pentestagent.js";
52
55
  export { playwrightServerDefinition } from "./playwright-server.js";
53
56
  export { portainerDefinition } from "./portainer.js";
54
57
  export { postgresqlDefinition } from "./postgresql.js";
@@ -58,7 +61,9 @@ export { qdrantDefinition } from "./qdrant.js";
58
61
  export { redisDefinition } from "./redis.js";
59
62
  export { remotionDefinition } from "./remotion.js";
60
63
  export { rocketchatDefinition } from "./rocketchat.js";
64
+ export { scraplingDefinition } from "./scrapling.js";
61
65
  export { searxngDefinition } from "./searxng.js";
66
+ export { solidityGuardDefinition } from "./solidityguard.js";
62
67
  export { stableDiffusionDefinition } from "./stable-diffusion.js";
63
68
  export { steelBrowserDefinition } from "./steel-browser.js";
64
69
  export { streamGatewayDefinition } from "./stream-gateway.js";
@@ -100,6 +105,7 @@ import { geminiCliDefinition } from "./gemini-cli.js";
100
105
  import { giteaDefinition } from "./gitea.js";
101
106
  import { gotifyDefinition } from "./gotify.js";
102
107
  import { grafanaDefinition } from "./grafana.js";
108
+ import { hexstrikeDefinition } from "./hexstrike.js";
103
109
  import { kimiDefinition } from "./kimi.js";
104
110
  import { lasuiteMeetAgentsDefinition } from "./lasuite-meet-agents.js";
105
111
  import { lasuiteMeetBackendDefinition } from "./lasuite-meet-backend.js";
@@ -126,6 +132,8 @@ import { opencodeDefinition } from "./opencode.js";
126
132
  import { openpanelDefinition } from "./openpanel.js";
127
133
  import { outlineDefinition } from "./outline.js";
128
134
  import { paperlessNgxDefinition } from "./paperless-ngx.js";
135
+ import { pentagiDefinition } from "./pentagi.js";
136
+ import { pentestagentDefinition } from "./pentestagent.js";
129
137
  import { playwrightServerDefinition } from "./playwright-server.js";
130
138
  import { portainerDefinition } from "./portainer.js";
131
139
  import { postgresqlDefinition } from "./postgresql.js";
@@ -135,7 +143,9 @@ import { qdrantDefinition } from "./qdrant.js";
135
143
  import { redisDefinition } from "./redis.js";
136
144
  import { remotionDefinition } from "./remotion.js";
137
145
  import { rocketchatDefinition } from "./rocketchat.js";
146
+ import { scraplingDefinition } from "./scrapling.js";
138
147
  import { searxngDefinition } from "./searxng.js";
148
+ import { solidityGuardDefinition } from "./solidityguard.js";
139
149
  import { stableDiffusionDefinition } from "./stable-diffusion.js";
140
150
  import { steelBrowserDefinition } from "./steel-browser.js";
141
151
  import { streamGatewayDefinition } from "./stream-gateway.js";
@@ -227,4 +237,9 @@ export const allServiceDefinitions: ServiceDefinition[] = [
227
237
  neo4jDefinition,
228
238
  calComDefinition,
229
239
  xyopsDefinition,
240
+ scraplingDefinition,
241
+ hexstrikeDefinition,
242
+ solidityGuardDefinition,
243
+ pentagiDefinition,
244
+ pentestagentDefinition,
230
245
  ];
@@ -0,0 +1,40 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const pentagiDefinition: ServiceDefinition = {
4
+ id: "pentagi",
5
+ name: "PentAGI",
6
+ description: "Fully autonomous AI Agents system capable of performing complex penetration testing tasks.",
7
+ category: "security",
8
+ icon: "🕵️",
9
+
10
+ image: "vxcontrol/pentagi",
11
+ imageTag: "latest",
12
+ ports: [
13
+ {
14
+ host: 8080, // Assuming default or common port for web UI, might need adjustment based on their docker-compose
15
+ container: 8080,
16
+ description: "PentAGI Interface",
17
+ exposed: true,
18
+ },
19
+ ],
20
+ volumes: [],
21
+ environment: [],
22
+ command: "", // Leave empty to use default image command
23
+ dependsOn: [],
24
+ restartPolicy: "unless-stopped",
25
+ networks: ["openclaw-network"],
26
+
27
+ skills: [{ skillId: "pentagi-orchestrator", autoInstall: true }],
28
+ openclawEnvVars: [],
29
+
30
+ docsUrl: "https://pentagi.com",
31
+ tags: ["security", "pentesting", "autonomous", "agents"],
32
+ maturity: "experimental",
33
+
34
+ requires: [],
35
+ recommends: [],
36
+ conflictsWith: [],
37
+
38
+ minMemoryMB: 4096, // Documentation explicitly asks for Minimum 4GB RAM
39
+ gpuRequired: false,
40
+ };
@@ -0,0 +1,33 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const pentestagentDefinition: ServiceDefinition = {
4
+ id: "pentestagent",
5
+ name: "PentestAgent",
6
+ description: "AI agent framework for black-box security testing via internal Docker isolated environments.",
7
+ category: "security",
8
+ icon: "🔍",
9
+
10
+ image: "ghcr.io/gh05tcrew/pentestagent",
11
+ imageTag: "latest",
12
+ ports: [], // Typically an internal CLI/TUI
13
+ volumes: [],
14
+ environment: [],
15
+ command: "tail -f /dev/null", // Keeps container alive for executing interactive TUIs
16
+ dependsOn: [],
17
+ restartPolicy: "unless-stopped",
18
+ networks: ["openclaw-network"],
19
+
20
+ skills: [{ skillId: "pentestagent-runner", autoInstall: true }],
21
+ openclawEnvVars: [],
22
+
23
+ docsUrl: "https://github.com/GH05TCREW/pentestagent",
24
+ tags: ["security", "pentesting", "tui", "framework"],
25
+ maturity: "experimental",
26
+
27
+ requires: [],
28
+ recommends: [],
29
+ conflictsWith: [],
30
+
31
+ minMemoryMB: 1024,
32
+ gpuRequired: false,
33
+ };
@@ -0,0 +1,40 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const scraplingDefinition: ServiceDefinition = {
4
+ id: "scrapling",
5
+ name: "Scrapling",
6
+ description: "Adaptive Web Scraping framework with anti-bot bypass capabilities and MCP server.",
7
+ category: "browser",
8
+ icon: "🕷️",
9
+
10
+ image: "ghcr.io/d4vinci/scrapling",
11
+ imageTag: "latest",
12
+ ports: [
13
+ {
14
+ host: 8000,
15
+ container: 8000,
16
+ description: "Scrapling MCP Server",
17
+ exposed: true,
18
+ },
19
+ ],
20
+ volumes: [],
21
+ environment: [],
22
+ command: "mcp",
23
+ dependsOn: [],
24
+ restartPolicy: "unless-stopped",
25
+ networks: ["openclaw-network"],
26
+
27
+ skills: [{ skillId: "scrapling-scrape", autoInstall: true }],
28
+ openclawEnvVars: [],
29
+
30
+ docsUrl: "https://scrapling.readthedocs.io",
31
+ tags: ["data", "scraping", "automation", "mcp"],
32
+ maturity: "stable",
33
+
34
+ requires: [],
35
+ recommends: [],
36
+ conflictsWith: [],
37
+
38
+ minMemoryMB: 1024,
39
+ gpuRequired: false,
40
+ };
@@ -0,0 +1,46 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const solidityGuardDefinition: ServiceDefinition = {
4
+ id: "solidityguard",
5
+ name: "SolidityGuard",
6
+ description: "7-Phase Deep Audit Smart Contract Security Auditor for EVM/Solidity.",
7
+ category: "security",
8
+ icon: "🛡️",
9
+
10
+ image: "altresearch/solidityguard", // Presumed standard dockerhub naming format, usually ghcr.io or dockerhub
11
+ imageTag: "latest",
12
+ ports: [
13
+ {
14
+ host: 8000,
15
+ container: 8000,
16
+ description: "SolidityGuard Web Dashboard",
17
+ exposed: true,
18
+ },
19
+ ],
20
+ volumes: [
21
+ {
22
+ name: "./contracts",
23
+ containerPath: "/audit",
24
+ description: "Mounts local contracts for CLI deep auditing.",
25
+ },
26
+ ],
27
+ environment: [],
28
+ command: "web", // Presumed default startup command for the web UI if no CLI args are given
29
+ dependsOn: [],
30
+ restartPolicy: "unless-stopped",
31
+ networks: ["openclaw-network"],
32
+
33
+ skills: [{ skillId: "solidityguard-audit", autoInstall: true }],
34
+ openclawEnvVars: [],
35
+
36
+ docsUrl: "https://solidityguard.org",
37
+ tags: ["security", "web3", "solidity", "evm", "audit"],
38
+ maturity: "stable",
39
+
40
+ requires: [],
41
+ recommends: [],
42
+ conflictsWith: [],
43
+
44
+ minMemoryMB: 2048,
45
+ gpuRequired: false,
46
+ };