@better-openclaw/core 1.0.12 → 1.0.14

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 (75) hide show
  1. package/README.md +70 -0
  2. package/dist/composer.d.mts.map +1 -1
  3. package/dist/composer.mjs +5 -3
  4. package/dist/composer.mjs.map +1 -1
  5. package/dist/generate.d.mts.map +1 -1
  6. package/dist/generate.mjs +11 -0
  7. package/dist/generate.mjs.map +1 -1
  8. package/dist/generators/env.d.mts.map +1 -1
  9. package/dist/generators/env.mjs +21 -1
  10. package/dist/generators/env.mjs.map +1 -1
  11. package/dist/generators/get-shit-done.d.mts +10 -0
  12. package/dist/generators/get-shit-done.d.mts.map +1 -0
  13. package/dist/generators/get-shit-done.mjs +38 -0
  14. package/dist/generators/get-shit-done.mjs.map +1 -0
  15. package/dist/generators/openclaw-json.d.mts +11 -0
  16. package/dist/generators/openclaw-json.d.mts.map +1 -0
  17. package/dist/generators/openclaw-json.mjs +410 -0
  18. package/dist/generators/openclaw-json.mjs.map +1 -0
  19. package/dist/index.d.mts +2 -2
  20. package/dist/{manifest-DSGl8ITO.mjs → manifest-BjK4ALvr.mjs} +49 -1
  21. package/dist/manifest-BjK4ALvr.mjs.map +1 -0
  22. package/dist/resolver.mjs +3 -1
  23. package/dist/resolver.mjs.map +1 -1
  24. package/dist/schema.d.mts +85 -1
  25. package/dist/schema.d.mts.map +1 -1
  26. package/dist/schema.mjs +30 -3
  27. package/dist/schema.mjs.map +1 -1
  28. package/dist/services/definitions/hexstrike.d.mts +7 -0
  29. package/dist/services/definitions/hexstrike.d.mts.map +1 -0
  30. package/dist/services/definitions/hexstrike.mjs +44 -0
  31. package/dist/services/definitions/hexstrike.mjs.map +1 -0
  32. package/dist/services/definitions/index.d.mts +6 -1
  33. package/dist/services/definitions/index.d.mts.map +1 -1
  34. package/dist/services/definitions/index.mjs +12 -2
  35. package/dist/services/definitions/index.mjs.map +1 -1
  36. package/dist/services/definitions/pentagi.d.mts +7 -0
  37. package/dist/services/definitions/pentagi.d.mts.map +1 -0
  38. package/dist/services/definitions/pentagi.mjs +44 -0
  39. package/dist/services/definitions/pentagi.mjs.map +1 -0
  40. package/dist/services/definitions/pentestagent.d.mts +7 -0
  41. package/dist/services/definitions/pentestagent.d.mts.map +1 -0
  42. package/dist/services/definitions/pentestagent.mjs +39 -0
  43. package/dist/services/definitions/pentestagent.mjs.map +1 -0
  44. package/dist/services/definitions/scrapling.d.mts +7 -0
  45. package/dist/services/definitions/scrapling.d.mts.map +1 -0
  46. package/dist/services/definitions/scrapling.mjs +44 -0
  47. package/dist/services/definitions/scrapling.mjs.map +1 -0
  48. package/dist/services/definitions/solidityguard.d.mts +7 -0
  49. package/dist/services/definitions/solidityguard.d.mts.map +1 -0
  50. package/dist/services/definitions/solidityguard.mjs +49 -0
  51. package/dist/services/definitions/solidityguard.mjs.map +1 -0
  52. package/dist/skills/skill-manifest.mjs +1 -1
  53. package/dist/types.d.mts +6 -2
  54. package/dist/types.d.mts.map +1 -1
  55. package/dist/types.mjs +5 -0
  56. package/dist/types.mjs.map +1 -1
  57. package/package.json +1 -1
  58. package/src/composer.ts +12 -3
  59. package/src/generate.ts +15 -0
  60. package/src/generators/env.ts +26 -0
  61. package/src/generators/get-shit-done.ts +43 -0
  62. package/src/generators/openclaw-json.ts +406 -0
  63. package/src/index.ts +2 -0
  64. package/src/resolver.ts +10 -8
  65. package/src/schema.ts +24 -0
  66. package/src/services/definitions/hexstrike.ts +40 -0
  67. package/src/services/definitions/index.ts +15 -0
  68. package/src/services/definitions/pentagi.ts +41 -0
  69. package/src/services/definitions/pentestagent.ts +34 -0
  70. package/src/services/definitions/scrapling.ts +40 -0
  71. package/src/services/definitions/solidityguard.ts +46 -0
  72. package/src/skills/manifest.json +58 -0
  73. package/src/skills/manifest.schema.json +51 -0
  74. package/src/types.ts +7 -0
  75. package/dist/manifest-DSGl8ITO.mjs.map +0 -1
@@ -0,0 +1,39 @@
1
+ //#region src/services/definitions/pentestagent.ts
2
+ const pentestagentDefinition = {
3
+ id: "pentestagent",
4
+ name: "PentestAgent",
5
+ description: "AI agent framework for black-box security testing via internal Docker isolated environments.",
6
+ category: "security",
7
+ icon: "🔍",
8
+ image: "ghcr.io/gh05tcrew/pentestagent",
9
+ imageTag: "latest",
10
+ ports: [],
11
+ volumes: [],
12
+ environment: [],
13
+ command: "tail -f /dev/null",
14
+ dependsOn: [],
15
+ restartPolicy: "unless-stopped",
16
+ networks: ["openclaw-network"],
17
+ skills: [{
18
+ skillId: "pentestagent-runner",
19
+ autoInstall: true
20
+ }],
21
+ openclawEnvVars: [],
22
+ docsUrl: "https://github.com/GH05TCREW/pentestagent",
23
+ tags: [
24
+ "security",
25
+ "pentesting",
26
+ "tui",
27
+ "framework"
28
+ ],
29
+ maturity: "experimental",
30
+ requires: [],
31
+ recommends: [],
32
+ conflictsWith: [],
33
+ minMemoryMB: 1024,
34
+ gpuRequired: false
35
+ };
36
+
37
+ //#endregion
38
+ export { pentestagentDefinition };
39
+ //# sourceMappingURL=pentestagent.mjs.map
@@ -0,0 +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:\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,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/scrapling.d.ts
4
+ declare const scraplingDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { scraplingDefinition };
7
+ //# sourceMappingURL=scrapling.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrapling.d.mts","names":[],"sources":["../../../src/services/definitions/scrapling.ts"],"mappings":";;;cAEa,mBAAA,EAAqB,iBAAA"}
@@ -0,0 +1,44 @@
1
+ //#region src/services/definitions/scrapling.ts
2
+ const scraplingDefinition = {
3
+ id: "scrapling",
4
+ name: "Scrapling",
5
+ description: "Adaptive Web Scraping framework with anti-bot bypass capabilities and MCP server.",
6
+ category: "browser",
7
+ icon: "🕷️",
8
+ image: "ghcr.io/d4vinci/scrapling",
9
+ imageTag: "latest",
10
+ ports: [{
11
+ host: 8e3,
12
+ container: 8e3,
13
+ description: "Scrapling MCP Server",
14
+ exposed: true
15
+ }],
16
+ volumes: [],
17
+ environment: [],
18
+ command: "mcp",
19
+ dependsOn: [],
20
+ restartPolicy: "unless-stopped",
21
+ networks: ["openclaw-network"],
22
+ skills: [{
23
+ skillId: "scrapling-scrape",
24
+ autoInstall: true
25
+ }],
26
+ openclawEnvVars: [],
27
+ docsUrl: "https://scrapling.readthedocs.io",
28
+ tags: [
29
+ "data",
30
+ "scraping",
31
+ "automation",
32
+ "mcp"
33
+ ],
34
+ maturity: "stable",
35
+ requires: [],
36
+ recommends: [],
37
+ conflictsWith: [],
38
+ minMemoryMB: 1024,
39
+ gpuRequired: false
40
+ };
41
+
42
+ //#endregion
43
+ export { scraplingDefinition };
44
+ //# sourceMappingURL=scrapling.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrapling.mjs","names":[],"sources":["../../../src/services/definitions/scrapling.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const scraplingDefinition: ServiceDefinition = {\n\tid: \"scrapling\",\n\tname: \"Scrapling\",\n\tdescription: \"Adaptive Web Scraping framework with anti-bot bypass capabilities and MCP server.\",\n\tcategory: \"browser\",\n\ticon: \"🕷️\",\n\n\timage: \"ghcr.io/d4vinci/scrapling\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 8000,\n\t\t\tcontainer: 8000,\n\t\t\tdescription: \"Scrapling MCP Server\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [],\n\tcommand: \"mcp\",\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"scrapling-scrape\", autoInstall: true }],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://scrapling.readthedocs.io\",\n\ttags: [\"data\", \"scraping\", \"automation\", \"mcp\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 1024,\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,EAAE;CACX,aAAa,EAAE;CACf,SAAS;CACT,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAoB,aAAa;EAAM,CAAC;CAC5D,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAQ;EAAY;EAAc;EAAM;CAC/C,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
@@ -0,0 +1,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/solidityguard.d.ts
4
+ declare const solidityGuardDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { solidityGuardDefinition };
7
+ //# sourceMappingURL=solidityguard.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidityguard.d.mts","names":[],"sources":["../../../src/services/definitions/solidityguard.ts"],"mappings":";;;cAEa,uBAAA,EAAyB,iBAAA"}
@@ -0,0 +1,49 @@
1
+ //#region src/services/definitions/solidityguard.ts
2
+ const solidityGuardDefinition = {
3
+ id: "solidityguard",
4
+ name: "SolidityGuard",
5
+ description: "7-Phase Deep Audit Smart Contract Security Auditor for EVM/Solidity.",
6
+ category: "security",
7
+ icon: "🛡️",
8
+ image: "altresearch/solidityguard",
9
+ imageTag: "latest",
10
+ ports: [{
11
+ host: 8e3,
12
+ container: 8e3,
13
+ description: "SolidityGuard Web Dashboard",
14
+ exposed: true
15
+ }],
16
+ volumes: [{
17
+ name: "./contracts",
18
+ containerPath: "/audit",
19
+ description: "Mounts local contracts for CLI deep auditing."
20
+ }],
21
+ environment: [],
22
+ command: "web",
23
+ dependsOn: [],
24
+ restartPolicy: "unless-stopped",
25
+ networks: ["openclaw-network"],
26
+ skills: [{
27
+ skillId: "solidityguard-audit",
28
+ autoInstall: true
29
+ }],
30
+ openclawEnvVars: [],
31
+ docsUrl: "https://solidityguard.org",
32
+ tags: [
33
+ "security",
34
+ "web3",
35
+ "solidity",
36
+ "evm",
37
+ "audit"
38
+ ],
39
+ maturity: "stable",
40
+ requires: [],
41
+ recommends: [],
42
+ conflictsWith: [],
43
+ minMemoryMB: 2048,
44
+ gpuRequired: false
45
+ };
46
+
47
+ //#endregion
48
+ export { solidityGuardDefinition };
49
+ //# sourceMappingURL=solidityguard.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidityguard.mjs","names":[],"sources":["../../../src/services/definitions/solidityguard.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const solidityGuardDefinition: ServiceDefinition = {\n\tid: \"solidityguard\",\n\tname: \"SolidityGuard\",\n\tdescription: \"7-Phase Deep Audit Smart Contract Security Auditor for EVM/Solidity.\",\n\tcategory: \"security\",\n\ticon: \"🛡️\",\n\n\timage: \"altresearch/solidityguard\", // Presumed standard dockerhub naming format, usually ghcr.io or dockerhub\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 8000,\n\t\t\tcontainer: 8000,\n\t\t\tdescription: \"SolidityGuard Web Dashboard\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"./contracts\",\n\t\t\tcontainerPath: \"/audit\",\n\t\t\tdescription: \"Mounts local contracts for CLI deep auditing.\",\n\t\t},\n\t],\n\tenvironment: [],\n\tcommand: \"web\", // Presumed default startup command for the web UI if no CLI args are given\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"solidityguard-audit\", autoInstall: true }],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://solidityguard.org\",\n\ttags: [\"security\", \"web3\", \"solidity\", \"evm\", \"audit\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 2048,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,0BAA6C;CACzD,IAAI;CACJ,MAAM;CACN,aAAa;CACb,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,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;EAAQ;EAAY;EAAO;EAAQ;CACtD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
@@ -1,4 +1,4 @@
1
- import { t as manifest_default } from "../manifest-DSGl8ITO.mjs";
1
+ import { t as manifest_default } from "../manifest-BjK4ALvr.mjs";
2
2
 
3
3
  //#region src/skills/skill-manifest.ts
4
4
  const manifestData = manifest_default;
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
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;KAoCY,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;+EAE3C,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,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"}
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 CHANGED
@@ -94,6 +94,11 @@ const SERVICE_CATEGORIES = [
94
94
  id: "streaming",
95
95
  name: "Streaming & Relay",
96
96
  icon: "📺"
97
+ },
98
+ {
99
+ id: "security",
100
+ name: "Security & Pentesting",
101
+ icon: "🛡️"
97
102
  }
98
103
  ];
99
104
 
@@ -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];\n"],"mappings":";AA4GA,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-openclaw/core",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
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
  }
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
 
@@ -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
+ }