@better-openclaw/core 1.0.10 → 1.0.12
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/bare-metal-partition.test.mjs +1 -1
- package/dist/composer.snapshot.test.mjs +1 -1
- package/dist/composer.test.mjs +1 -1
- package/dist/generate.d.mts.map +1 -1
- package/dist/generate.mjs +7 -1
- package/dist/generate.mjs.map +1 -1
- package/dist/generate.test.mjs +1 -1
- package/dist/generators/bare-metal-install.test.mjs +1 -1
- package/dist/generators/caddy.test.d.mts +1 -0
- package/dist/generators/caddy.test.mjs +45 -0
- package/dist/generators/caddy.test.mjs.map +1 -0
- package/dist/generators/env.test.d.mts +1 -0
- package/dist/generators/env.test.mjs +60 -0
- package/dist/generators/env.test.mjs.map +1 -0
- package/dist/generators/health-check.d.mts +18 -0
- package/dist/generators/health-check.d.mts.map +1 -0
- package/dist/generators/health-check.mjs +705 -0
- package/dist/generators/health-check.mjs.map +1 -0
- package/dist/generators/health-check.test.d.mts +1 -0
- package/dist/generators/health-check.test.mjs +85 -0
- package/dist/generators/health-check.test.mjs.map +1 -0
- package/dist/generators/scripts.test.d.mts +1 -0
- package/dist/generators/scripts.test.mjs +52 -0
- package/dist/generators/scripts.test.mjs.map +1 -0
- package/dist/generators/traefik.test.mjs +1 -1
- package/dist/generators/traefik.test.mjs.map +1 -1
- package/dist/index.d.mts +4 -2
- package/dist/index.mjs +3 -1
- package/dist/{magic-string.es-1uTtupLe.mjs → magic-string.es-CfFonO_S.mjs} +1 -1
- package/dist/{magic-string.es-1uTtupLe.mjs.map → magic-string.es-CfFonO_S.mjs.map} +1 -1
- package/dist/manifest-DSGl8ITO.mjs +1110 -0
- package/dist/manifest-DSGl8ITO.mjs.map +1 -0
- package/dist/migrations.d.mts.map +1 -1
- package/dist/migrations.mjs.map +1 -1
- package/dist/migrations.test.mjs +1 -1
- package/dist/migrations.test.mjs.map +1 -1
- package/dist/presets/registry.test.mjs +1 -1
- package/dist/resolver.test.mjs +1 -1
- package/dist/schema.test.mjs +1 -1
- package/dist/services/definitions/convex.mjs.map +1 -1
- package/dist/services/definitions/desktop-environment.mjs.map +1 -1
- package/dist/services/definitions/index.d.mts +2 -2
- package/dist/services/definitions/index.mjs +3 -3
- package/dist/services/definitions/index.mjs.map +1 -1
- package/dist/services/definitions/mission-control.mjs.map +1 -1
- package/dist/services/definitions/stream-gateway.mjs.map +1 -1
- package/dist/services/registry.test.mjs +1 -1
- package/dist/skills/registry.d.mts.map +1 -1
- package/dist/skills/registry.mjs +44 -0
- package/dist/skills/registry.mjs.map +1 -1
- package/dist/skills/skill-manifest.d.mts +20 -0
- package/dist/skills/skill-manifest.d.mts.map +1 -0
- package/dist/skills/skill-manifest.mjs +20 -0
- package/dist/skills/skill-manifest.mjs.map +1 -0
- package/dist/validator.test.mjs +1 -1
- package/dist/version-manager.test.mjs +1 -1
- package/dist/version-manager.test.mjs.map +1 -1
- package/dist/{vi.2VT5v0um-YSByewHe.mjs → vi.2VT5v0um-BgmKutxR.mjs} +2 -2
- package/dist/{vi.2VT5v0um-YSByewHe.mjs.map → vi.2VT5v0um-BgmKutxR.mjs.map} +1 -1
- package/package.json +1 -1
- package/src/generate.ts +15 -3
- package/src/generators/caddy.test.ts +56 -0
- package/src/generators/env.test.ts +73 -0
- package/src/generators/health-check.test.ts +118 -0
- package/src/generators/health-check.ts +812 -0
- package/src/generators/scripts.test.ts +60 -0
- package/src/generators/traefik.test.ts +9 -17
- package/src/index.ts +12 -6
- package/src/migrations.test.ts +1 -1
- package/src/migrations.ts +1 -5
- package/src/services/definitions/convex.ts +2 -4
- package/src/services/definitions/desktop-environment.ts +1 -9
- package/src/services/definitions/index.ts +6 -6
- package/src/services/definitions/mission-control.ts +2 -4
- package/src/services/definitions/stream-gateway.ts +1 -2
- package/src/skills/manifest.json +1333 -0
- package/src/skills/registry.ts +55 -71
- package/src/skills/skill-manifest.ts +57 -0
- package/src/version-manager.test.ts +15 -4
- package/tsdown.config.ts +6 -6
package/src/skills/registry.ts
CHANGED
|
@@ -70,12 +70,7 @@ const skillPacks: SkillPack[] = [
|
|
|
70
70
|
description:
|
|
71
71
|
"Full social media content pipeline with scheduling, media processing, analytics, and storage",
|
|
72
72
|
requiredServices: ["postiz", "ffmpeg", "minio", "redis", "postgresql"],
|
|
73
|
-
skills: [
|
|
74
|
-
"ffmpeg-process",
|
|
75
|
-
"minio-storage",
|
|
76
|
-
"redis-cache",
|
|
77
|
-
"postiz-schedule",
|
|
78
|
-
],
|
|
73
|
+
skills: ["ffmpeg-process", "minio-storage", "redis-cache", "postiz-schedule"],
|
|
79
74
|
icon: "📱",
|
|
80
75
|
tags: ["social-media", "content", "scheduling", "analytics"],
|
|
81
76
|
},
|
|
@@ -140,59 +135,34 @@ const skillPacks: SkillPack[] = [
|
|
|
140
135
|
description:
|
|
141
136
|
"Natural language processing with summarization, translation, classification, and embeddings via Ollama",
|
|
142
137
|
requiredServices: ["ollama"],
|
|
143
|
-
skills: [
|
|
144
|
-
"text-summarize",
|
|
145
|
-
"text-translate",
|
|
146
|
-
"text-classify",
|
|
147
|
-
"text-embed",
|
|
148
|
-
"ollama-local-llm",
|
|
149
|
-
],
|
|
138
|
+
skills: ["text-summarize", "text-translate", "text-classify", "text-embed", "ollama-local-llm"],
|
|
150
139
|
icon: "🧠",
|
|
151
140
|
tags: ["nlp", "text", "embeddings", "translation"],
|
|
152
141
|
},
|
|
153
142
|
{
|
|
154
143
|
id: "image-processor",
|
|
155
144
|
name: "Image Processor",
|
|
156
|
-
description:
|
|
157
|
-
"Resize, convert, and OCR images with ImageMagick and Tesseract",
|
|
145
|
+
description: "Resize, convert, and OCR images with ImageMagick and Tesseract",
|
|
158
146
|
requiredServices: ["ffmpeg"],
|
|
159
|
-
skills: [
|
|
160
|
-
"image-resize",
|
|
161
|
-
"image-convert",
|
|
162
|
-
"image-ocr",
|
|
163
|
-
"ffmpeg-process",
|
|
164
|
-
],
|
|
147
|
+
skills: ["image-resize", "image-convert", "image-ocr", "ffmpeg-process"],
|
|
165
148
|
icon: "🖼️",
|
|
166
149
|
tags: ["image", "ocr", "media", "conversion"],
|
|
167
150
|
},
|
|
168
151
|
{
|
|
169
152
|
id: "api-integrator",
|
|
170
153
|
name: "API Integrator",
|
|
171
|
-
description:
|
|
172
|
-
"HTTP requests, webhooks, and GraphQL queries for external API integration",
|
|
154
|
+
description: "HTTP requests, webhooks, and GraphQL queries for external API integration",
|
|
173
155
|
requiredServices: [],
|
|
174
|
-
skills: [
|
|
175
|
-
"http-request",
|
|
176
|
-
"api-webhook",
|
|
177
|
-
"graphql-query",
|
|
178
|
-
],
|
|
156
|
+
skills: ["http-request", "api-webhook", "graphql-query"],
|
|
179
157
|
icon: "🌐",
|
|
180
158
|
tags: ["api", "http", "webhook", "graphql"],
|
|
181
159
|
},
|
|
182
160
|
{
|
|
183
161
|
id: "security-ops",
|
|
184
162
|
name: "Security Ops",
|
|
185
|
-
description:
|
|
186
|
-
"JWT validation, hashing, SSL checks, port scanning, and network diagnostics",
|
|
163
|
+
description: "JWT validation, hashing, SSL checks, port scanning, and network diagnostics",
|
|
187
164
|
requiredServices: [],
|
|
188
|
-
skills: [
|
|
189
|
-
"jwt-manage",
|
|
190
|
-
"hash-generate",
|
|
191
|
-
"ssl-check",
|
|
192
|
-
"dns-lookup",
|
|
193
|
-
"port-scan",
|
|
194
|
-
"ping-check",
|
|
195
|
-
],
|
|
165
|
+
skills: ["jwt-manage", "hash-generate", "ssl-check", "dns-lookup", "port-scan", "ping-check"],
|
|
196
166
|
icon: "🛡️",
|
|
197
167
|
tags: ["security", "networking", "diagnostics"],
|
|
198
168
|
},
|
|
@@ -216,8 +186,7 @@ const skillPacks: SkillPack[] = [
|
|
|
216
186
|
{
|
|
217
187
|
id: "analytics-suite",
|
|
218
188
|
name: "Analytics Suite",
|
|
219
|
-
description:
|
|
220
|
-
"Web and product analytics with Matomo, Umami, OpenPanel, Grafana, and Prometheus",
|
|
189
|
+
description: "Web and product analytics with Matomo, Umami, OpenPanel, Grafana, and Prometheus",
|
|
221
190
|
requiredServices: ["grafana", "prometheus"],
|
|
222
191
|
skills: [
|
|
223
192
|
"matomo-track",
|
|
@@ -253,16 +222,9 @@ const skillPacks: SkillPack[] = [
|
|
|
253
222
|
{
|
|
254
223
|
id: "document-manager",
|
|
255
224
|
name: "Document Manager",
|
|
256
|
-
description:
|
|
257
|
-
"Document processing pipeline with wiki, archival, OCR, Q&A, and PDF extraction",
|
|
225
|
+
description: "Document processing pipeline with wiki, archival, OCR, Q&A, and PDF extraction",
|
|
258
226
|
requiredServices: ["outline", "paperless-ngx"],
|
|
259
|
-
skills: [
|
|
260
|
-
"outline-wiki",
|
|
261
|
-
"paperless-archive",
|
|
262
|
-
"docsgpt-ask",
|
|
263
|
-
"pdf-extract",
|
|
264
|
-
"image-ocr",
|
|
265
|
-
],
|
|
227
|
+
skills: ["outline-wiki", "paperless-archive", "docsgpt-ask", "pdf-extract", "image-ocr"],
|
|
266
228
|
icon: "📑",
|
|
267
229
|
tags: ["documents", "wiki", "ocr", "archive"],
|
|
268
230
|
},
|
|
@@ -307,12 +269,7 @@ const skillPacks: SkillPack[] = [
|
|
|
307
269
|
description:
|
|
308
270
|
"Complete self-hosted infrastructure with cloud storage, photos, media streaming, and password management",
|
|
309
271
|
requiredServices: ["nextcloud", "immich", "jellyfin", "vaultwarden"],
|
|
310
|
-
skills: [
|
|
311
|
-
"nextcloud-files",
|
|
312
|
-
"immich-photos",
|
|
313
|
-
"jellyfin-media",
|
|
314
|
-
"vaultwarden-manage",
|
|
315
|
-
],
|
|
272
|
+
skills: ["nextcloud-files", "immich-photos", "jellyfin-media", "vaultwarden-manage"],
|
|
316
273
|
icon: "☁️",
|
|
317
274
|
tags: ["self-hosted", "cloud", "storage", "media", "security"],
|
|
318
275
|
},
|
|
@@ -335,8 +292,7 @@ const skillPacks: SkillPack[] = [
|
|
|
335
292
|
{
|
|
336
293
|
id: "cicd-pipeline",
|
|
337
294
|
name: "CI/CD Pipeline",
|
|
338
|
-
description:
|
|
339
|
-
"Full CI/CD pipeline with Jenkins, ArgoCD, Woodpecker, and infrastructure as code",
|
|
295
|
+
description: "Full CI/CD pipeline with Jenkins, ArgoCD, Woodpecker, and infrastructure as code",
|
|
340
296
|
requiredServices: ["jenkins"],
|
|
341
297
|
skills: [
|
|
342
298
|
"jenkins-pipeline",
|
|
@@ -385,8 +341,7 @@ const skillPacks: SkillPack[] = [
|
|
|
385
341
|
{
|
|
386
342
|
id: "backend-platform",
|
|
387
343
|
name: "Backend Platform",
|
|
388
|
-
description:
|
|
389
|
-
"Backend-as-a-service with Supabase, Appwrite, PocketBase, and API gateway",
|
|
344
|
+
description: "Backend-as-a-service with Supabase, Appwrite, PocketBase, and API gateway",
|
|
390
345
|
requiredServices: ["supabase"],
|
|
391
346
|
skills: [
|
|
392
347
|
"supabase-query",
|
|
@@ -420,12 +375,7 @@ const skillPacks: SkillPack[] = [
|
|
|
420
375
|
description:
|
|
421
376
|
"Document management with Paperless-ngx, BookStack wiki, Stirling PDF tools, and Excalidraw",
|
|
422
377
|
requiredServices: ["paperless-ngx"],
|
|
423
|
-
skills: [
|
|
424
|
-
"paperless-ngx-docs",
|
|
425
|
-
"bookstack-wiki",
|
|
426
|
-
"stirling-pdf-tools",
|
|
427
|
-
"excalidraw-draw",
|
|
428
|
-
],
|
|
378
|
+
skills: ["paperless-ngx-docs", "bookstack-wiki", "stirling-pdf-tools", "excalidraw-draw"],
|
|
429
379
|
icon: "📑",
|
|
430
380
|
tags: ["documents", "wiki", "pdf", "collaboration"],
|
|
431
381
|
},
|
|
@@ -435,17 +385,51 @@ const skillPacks: SkillPack[] = [
|
|
|
435
385
|
description:
|
|
436
386
|
"Home automation and event-driven workflows with Home Assistant, Huginn, and Activepieces",
|
|
437
387
|
requiredServices: ["homeassistant"],
|
|
438
|
-
skills: [
|
|
439
|
-
"home-assistant-automate",
|
|
440
|
-
"huginn-automate",
|
|
441
|
-
"activepieces-flow",
|
|
442
|
-
],
|
|
388
|
+
skills: ["home-assistant-automate", "huginn-automate", "activepieces-flow"],
|
|
443
389
|
icon: "🏠",
|
|
444
390
|
tags: ["iot", "automation", "smart-home", "workflows"],
|
|
445
391
|
},
|
|
392
|
+
// ── Aura Build Frontend Design Skills ────────────────────────────
|
|
393
|
+
{
|
|
394
|
+
id: "frontend-design",
|
|
395
|
+
name: "Frontend Design",
|
|
396
|
+
description:
|
|
397
|
+
"Front-end design skills for UI systems, web animations, responsive layouts, copywriting, and asset management — sourced from Aura Build",
|
|
398
|
+
requiredServices: [],
|
|
399
|
+
skills: [
|
|
400
|
+
"ui-prompting",
|
|
401
|
+
"pricing-page-design",
|
|
402
|
+
"landing-page-design",
|
|
403
|
+
"gsap-animate",
|
|
404
|
+
"threejs-scene",
|
|
405
|
+
"matterjs-physics",
|
|
406
|
+
"globe-gl-visualize",
|
|
407
|
+
"tailwindcss-style",
|
|
408
|
+
"css-border-gradient",
|
|
409
|
+
"progressive-blur",
|
|
410
|
+
"animation-on-scroll",
|
|
411
|
+
"css-alpha-masking",
|
|
412
|
+
"vantajs-background",
|
|
413
|
+
"cobejs-globe",
|
|
414
|
+
"unicorn-studio-embed",
|
|
415
|
+
"ui-design-system",
|
|
416
|
+
"tailwind-design-system-v4",
|
|
417
|
+
"interaction-design",
|
|
418
|
+
"responsive-design",
|
|
419
|
+
"web-interface-guidelines",
|
|
420
|
+
"threejs-animation",
|
|
421
|
+
"copywriting",
|
|
422
|
+
"frontend-distinctive-design",
|
|
423
|
+
"canvas-design",
|
|
424
|
+
"web-design-reviewer",
|
|
425
|
+
"animejs-animate",
|
|
426
|
+
"aura-asset-images",
|
|
427
|
+
],
|
|
428
|
+
icon: "🎨",
|
|
429
|
+
tags: ["frontend", "design", "animation", "css", "ui", "web-design"],
|
|
430
|
+
},
|
|
446
431
|
];
|
|
447
432
|
|
|
448
|
-
|
|
449
433
|
const packMap = new Map<string, SkillPack>();
|
|
450
434
|
for (const pack of skillPacks) {
|
|
451
435
|
if (packMap.has(pack.id)) {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// import { readFileSync } from "node:fs";
|
|
2
|
+
// import { dirname, resolve } from "node:path";
|
|
3
|
+
// import { fileURLToPath } from "node:url";
|
|
4
|
+
//import manifestJson from "../../../../skills/manifest.json" with { type: "json" };
|
|
5
|
+
import manifestJson from "./manifest.json" with { type: "json" };
|
|
6
|
+
|
|
7
|
+
// ── Types ───────────────────────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
export interface SkillManifestEntry {
|
|
10
|
+
/** Unique skill identifier, e.g. "gsap-animate" */
|
|
11
|
+
id: string;
|
|
12
|
+
/** Relative path to the SKILL.md file */
|
|
13
|
+
path: string;
|
|
14
|
+
/** Display emoji */
|
|
15
|
+
emoji: string;
|
|
16
|
+
/** Docker service IDs this skill depends on (empty for frontend-only skills) */
|
|
17
|
+
services: string[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface SkillManifest {
|
|
21
|
+
skills: SkillManifestEntry[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const manifestData = manifestJson as SkillManifest;
|
|
25
|
+
|
|
26
|
+
// ── Manifest loader ─────────────────────────────────────────────────────────
|
|
27
|
+
// let _cache: SkillManifestEntry[] | null = null;
|
|
28
|
+
|
|
29
|
+
// function loadManifest(): SkillManifestEntry[] {
|
|
30
|
+
// if (_cache) return _cache;
|
|
31
|
+
// // Resolve the manifest relative to this file's location
|
|
32
|
+
// // This file is at packages/core/src/skills/skill-manifest.ts
|
|
33
|
+
// // The manifest is at skills/manifest.json (repo root / skills /)
|
|
34
|
+
// const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
35
|
+
// const manifestPath = resolve(thisDir, "../../../../skills/manifest.json");
|
|
36
|
+
// const raw = readFileSync(manifestPath, "utf-8");
|
|
37
|
+
// const data = JSON.parse(raw) as SkillManifest;
|
|
38
|
+
// _cache = data.skills;
|
|
39
|
+
// return _cache;
|
|
40
|
+
// }
|
|
41
|
+
/** Return all skills defined in the local manifest.json */
|
|
42
|
+
export function getAllManifestSkills(): SkillManifestEntry[] {
|
|
43
|
+
return manifestData.skills;
|
|
44
|
+
//return loadManifest();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Look up a single skill by ID */
|
|
48
|
+
export function getManifestSkillById(id: string): SkillManifestEntry | undefined {
|
|
49
|
+
return manifestData.skills.find((s) => s.id === id);
|
|
50
|
+
//return loadManifest().find((s) => s.id === id);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Return the total count of curated skills */
|
|
54
|
+
export function getManifestSkillCount(): number {
|
|
55
|
+
return manifestData.skills.length;
|
|
56
|
+
//return loadManifest().length;
|
|
57
|
+
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { resolve } from "./resolver.js";
|
|
3
3
|
import { getAllServices, getServiceById } from "./services/registry.js";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
checkCompatibility,
|
|
6
|
+
getImageReference,
|
|
7
|
+
getImageTag,
|
|
8
|
+
pinImageTags,
|
|
9
|
+
} from "./version-manager.js";
|
|
5
10
|
|
|
6
11
|
describe("getImageTag", () => {
|
|
7
12
|
it("returns the tag for a known service", () => {
|
|
@@ -88,7 +93,9 @@ describe("checkCompatibility", () => {
|
|
|
88
93
|
|
|
89
94
|
if (redis && valkey) {
|
|
90
95
|
const warnings = checkCompatibility([redis, valkey]);
|
|
91
|
-
expect(
|
|
96
|
+
expect(
|
|
97
|
+
warnings.some((w) => w.message.includes("Redis") && w.message.includes("Valkey")),
|
|
98
|
+
).toBe(true);
|
|
92
99
|
}
|
|
93
100
|
});
|
|
94
101
|
|
|
@@ -99,7 +106,9 @@ describe("checkCompatibility", () => {
|
|
|
99
106
|
|
|
100
107
|
if (caddy && traefik) {
|
|
101
108
|
const warnings = checkCompatibility([caddy, traefik]);
|
|
102
|
-
expect(
|
|
109
|
+
expect(
|
|
110
|
+
warnings.some((w) => w.message.includes("Caddy") && w.message.includes("Traefik")),
|
|
111
|
+
).toBe(true);
|
|
103
112
|
}
|
|
104
113
|
});
|
|
105
114
|
|
|
@@ -128,7 +137,9 @@ describe("checkCompatibility", () => {
|
|
|
128
137
|
const redis = getServiceById("redis");
|
|
129
138
|
if (redis) {
|
|
130
139
|
const warnings = checkCompatibility([redis]);
|
|
131
|
-
expect(
|
|
140
|
+
expect(
|
|
141
|
+
warnings.filter((w) => w.type === "compatibility" && !w.message.includes("GPU")),
|
|
142
|
+
).toHaveLength(0);
|
|
132
143
|
}
|
|
133
144
|
});
|
|
134
145
|
});
|
package/tsdown.config.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { defineConfig } from "tsdown";
|
|
2
2
|
|
|
3
3
|
export default defineConfig({
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
entry: "src/**/*.ts",
|
|
5
|
+
format: ["esm"],
|
|
6
|
+
sourcemap: true,
|
|
7
|
+
clean: true,
|
|
8
|
+
dts: true, // Turn off dts generation if not needed for an app, speeds up build
|
|
9
|
+
inlineOnly: false,
|
|
10
10
|
});
|