@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-DSGl8ITO.mjs","names":[],"sources":["../src/skills/manifest.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.mts","names":[],"sources":["../src/migrations.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"migrations.d.mts","names":[],"sources":["../src/migrations.ts"],"mappings":";cAAa,sBAAA;AAAb;;;;AAAA,iBAiBgB,aAAA,CAAc,KAAA,EAAO,MAAA,oBAA0B,MAAA;AAA/D;;;AAAA,iBAwBgB,cAAA,CAAe,KAAA,EAAO,MAAA"}
|
package/dist/migrations.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.mjs","names":[],"sources":["../src/migrations.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"migrations.mjs","names":[],"sources":["../src/migrations.ts"],"sourcesContent":["export const CURRENT_CONFIG_VERSION = 2;\n\ntype MigrationFn = (input: Record<string, unknown>) => Record<string, unknown>;\n\nconst migrations: Record<number, MigrationFn> = {\n\t// v1 → v2: ensure deploymentType field exists (defaulting to \"docker\")\n\t1: (input) => ({\n\t\t...input,\n\t\tconfigVersion: 2,\n\t\tdeploymentType: (input.deploymentType as string) ?? \"docker\",\n\t}),\n};\n\n/**\n * Applies sequential migrations to bring a config from its current version\n * to CURRENT_CONFIG_VERSION. Returns the config unchanged if already current.\n */\nexport function migrateConfig(input: Record<string, unknown>): Record<string, unknown> {\n\tlet version = (input.configVersion as number) ?? 1;\n\n\tif (version > CURRENT_CONFIG_VERSION) {\n\t\tthrow new Error(`No migration path from config version ${version}`);\n\t}\n\n\tlet current = { ...input };\n\n\twhile (version < CURRENT_CONFIG_VERSION) {\n\t\tconst migrationFn = migrations[version];\n\t\tif (!migrationFn) {\n\t\t\tthrow new Error(`No migration path from config version ${version}`);\n\t\t}\n\t\tcurrent = migrationFn(current);\n\t\tversion++;\n\t}\n\n\treturn current;\n}\n\n/**\n * Returns true if the config needs migration to the current version.\n */\nexport function needsMigration(input: Record<string, unknown>): boolean {\n\tconst version = (input.configVersion as number) ?? 1;\n\treturn version < CURRENT_CONFIG_VERSION;\n}\n"],"mappings":";AAAA,MAAa,yBAAyB;AAItC,MAAM,aAA0C,EAE/C,IAAI,WAAW;CACd,GAAG;CACH,eAAe;CACf,gBAAiB,MAAM,kBAA6B;CACpD,GACD;;;;;AAMD,SAAgB,cAAc,OAAyD;CACtF,IAAI,UAAW,MAAM,iBAA4B;AAEjD,KAAI,UAAU,uBACb,OAAM,IAAI,MAAM,yCAAyC,UAAU;CAGpE,IAAI,UAAU,EAAE,GAAG,OAAO;AAE1B,QAAO,UAAU,wBAAwB;EACxC,MAAM,cAAc,WAAW;AAC/B,MAAI,CAAC,YACJ,OAAM,IAAI,MAAM,yCAAyC,UAAU;AAEpE,YAAU,YAAY,QAAQ;AAC9B;;AAGD,QAAO;;;;;AAMR,SAAgB,eAAe,OAAyC;AAEvE,SADiB,MAAM,iBAA4B,KAClC"}
|
package/dist/migrations.test.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-BgmKutxR.mjs";
|
|
2
2
|
import { CURRENT_CONFIG_VERSION, migrateConfig, needsMigration } from "./migrations.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/migrations.test.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.test.mjs","names":[],"sources":["../src/migrations.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { migrateConfig, needsMigration
|
|
1
|
+
{"version":3,"file":"migrations.test.mjs","names":[],"sources":["../src/migrations.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { CURRENT_CONFIG_VERSION, migrateConfig, needsMigration } from \"./migrations.js\";\n\ndescribe(\"config migrations\", () => {\n\tit(\"migrates v1 config to current version\", () => {\n\t\tconst v1 = { projectName: \"test\", services: [\"redis\"], skillPacks: [] };\n\t\tconst result = migrateConfig(v1);\n\t\texpect(result.configVersion).toBe(CURRENT_CONFIG_VERSION);\n\t\texpect(result.deploymentType).toBe(\"docker\");\n\t});\n\n\tit(\"preserves existing deploymentType during migration\", () => {\n\t\tconst v1 = { configVersion: 1, deploymentType: \"bare-metal\" };\n\t\tconst result = migrateConfig(v1);\n\t\texpect(result.deploymentType).toBe(\"bare-metal\");\n\t});\n\n\tit(\"passes through current version unchanged\", () => {\n\t\tconst current = { configVersion: CURRENT_CONFIG_VERSION, projectName: \"test\" };\n\t\tconst result = migrateConfig(current);\n\t\texpect(result).toEqual(current);\n\t});\n\n\tit(\"needsMigration returns true for old configs\", () => {\n\t\texpect(needsMigration({ configVersion: 1 })).toBe(true);\n\t\texpect(needsMigration({})).toBe(true); // no version = v1\n\t});\n\n\tit(\"needsMigration returns false for current configs\", () => {\n\t\texpect(needsMigration({ configVersion: CURRENT_CONFIG_VERSION })).toBe(false);\n\t});\n\n\tit(\"throws for unknown version with no migration path\", () => {\n\t\texpect(() => migrateConfig({ configVersion: 99 })).toThrow(\"No migration path\");\n\t});\n});\n"],"mappings":";;;;AAGA,SAAS,2BAA2B;AACnC,IAAG,+CAA+C;EAEjD,MAAM,SAAS,cADJ;GAAE,aAAa;GAAQ,UAAU,CAAC,QAAQ;GAAE,YAAY,EAAE;GAAE,CACvC;AAChC,eAAO,OAAO,cAAc,CAAC,KAAK,uBAAuB;AACzD,eAAO,OAAO,eAAe,CAAC,KAAK,SAAS;GAC3C;AAEF,IAAG,4DAA4D;AAG9D,eADe,cADJ;GAAE,eAAe;GAAG,gBAAgB;GAAc,CAC7B,CAClB,eAAe,CAAC,KAAK,aAAa;GAC/C;AAEF,IAAG,kDAAkD;EACpD,MAAM,UAAU;GAAE,eAAe;GAAwB,aAAa;GAAQ;AAE9E,eADe,cAAc,QAAQ,CACvB,CAAC,QAAQ,QAAQ;GAC9B;AAEF,IAAG,qDAAqD;AACvD,eAAO,eAAe,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK;AACvD,eAAO,eAAe,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK;GACpC;AAEF,IAAG,0DAA0D;AAC5D,eAAO,eAAe,EAAE,eAAe,wBAAwB,CAAC,CAAC,CAAC,KAAK,MAAM;GAC5E;AAEF,IAAG,2DAA2D;AAC7D,qBAAa,cAAc,EAAE,eAAe,IAAI,CAAC,CAAC,CAAC,QAAQ,oBAAoB;GAC9E;EACD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-BgmKutxR.mjs";
|
|
2
2
|
import { getAllPresets, getPresetById } from "./registry.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/presets/registry.test.ts
|
package/dist/resolver.test.mjs
CHANGED
package/dist/schema.test.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-BgmKutxR.mjs";
|
|
2
2
|
import { EnvVariableSchema, GenerationInputSchema, HealthCheckSchema, PortMappingSchema, PresetSchema, ServiceCategorySchema, ServiceDefinitionSchema, SkillPackSchema, VolumeMappingSchema } from "./schema.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/schema.test.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convex.mjs","names":[],"sources":["../../../src/services/definitions/convex.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const convexDefinition: ServiceDefinition = {\n\tid: \"convex\",\n\tname: \"Convex\",\n\tdescription:\n\t\t\"Self-hosted Convex reactive backend. Real-time database, server functions, and file storage in a single service. Required by Mission Control.\",\n\tcategory: \"database\",\n\ticon: \"⚡\",\n\n\timage: \"ghcr.io/get-convex/convex-backend\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3210,\n\t\t\tcontainer: 3210,\n\t\t\tdescription: \"Convex API (client connections & CLI)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 3211,\n\t\t\tcontainer: 3211,\n\t\t\tdescription: \"Convex HTTP actions / site proxy\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"convex-data\",\n\t\t\tcontainerPath: \"/convex/data\",\n\t\t\tdescription: \"Convex data directory (SQLite by default)\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"CONVEX_CLOUD_ORIGIN\",\n\t\t\tdefaultValue: \"http://127.0.0.1:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Public URL for the Convex API endpoint\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SITE_ORIGIN\",\n\t\t\tdefaultValue: \"http://127.0.0.1:3211\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Public URL for Convex HTTP actions\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"INSTANCE_NAME\",\n\t\t\tdefaultValue: \"openclaw-convex\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Instance name for this Convex deployment\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"INSTANCE_SECRET\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Instance secret (generate a random value for production)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"DATABASE_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription
|
|
1
|
+
{"version":3,"file":"convex.mjs","names":[],"sources":["../../../src/services/definitions/convex.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const convexDefinition: ServiceDefinition = {\n\tid: \"convex\",\n\tname: \"Convex\",\n\tdescription:\n\t\t\"Self-hosted Convex reactive backend. Real-time database, server functions, and file storage in a single service. Required by Mission Control.\",\n\tcategory: \"database\",\n\ticon: \"⚡\",\n\n\timage: \"ghcr.io/get-convex/convex-backend\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3210,\n\t\t\tcontainer: 3210,\n\t\t\tdescription: \"Convex API (client connections & CLI)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 3211,\n\t\t\tcontainer: 3211,\n\t\t\tdescription: \"Convex HTTP actions / site proxy\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"convex-data\",\n\t\t\tcontainerPath: \"/convex/data\",\n\t\t\tdescription: \"Convex data directory (SQLite by default)\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"CONVEX_CLOUD_ORIGIN\",\n\t\t\tdefaultValue: \"http://127.0.0.1:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Public URL for the Convex API endpoint\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SITE_ORIGIN\",\n\t\t\tdefaultValue: \"http://127.0.0.1:3211\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Public URL for Convex HTTP actions\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"INSTANCE_NAME\",\n\t\t\tdefaultValue: \"openclaw-convex\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Instance name for this Convex deployment\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"INSTANCE_SECRET\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Instance secret (generate a random value for production)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"DATABASE_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Optional Postgres connection string for production (leave empty to use SQLite)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"RUST_LOG\",\n\t\t\tdefaultValue: \"info\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Log level for the Convex backend (debug, info, warn, error)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"DISABLE_BEACON\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Set to any value to disable anonymous usage telemetry\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SELF_HOSTED_ADMIN_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"Admin key for CLI access. Generate with: docker compose exec convex ./generate_admin_key.sh\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -f http://localhost:3210/version\",\n\t\tinterval: \"5s\",\n\t\ttimeout: \"5s\",\n\t\tretries: 5,\n\t\tstartPeriod: \"10s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://github.com/get-convex/convex-backend\",\n\tselfHostedDocsUrl: \"https://github.com/get-convex/convex-backend/blob/main/self-hosted/README.md\",\n\ttags: [\"convex\", \"database\", \"reactive\", \"real-time\", \"backend\", \"self-hosted\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [\"convex-dashboard\"],\n\tconflictsWith: [],\n\tmandatory: true,\n\tremovalWarning:\n\t\t\"Convex is the backend for Mission Control. Without it, Mission Control will not be able to store or retrieve any data and will be completely non-functional.\",\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,mBAAsC;CAClD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,EACD;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,mBAAmB;CACnB,MAAM;EAAC;EAAU;EAAY;EAAY;EAAa;EAAW;EAAc;CAC/E,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,mBAAmB;CAChC,eAAe,EAAE;CACjB,WAAW;CACX,gBACC;CAED,aAAa;CACb,aAAa;CACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktop-environment.mjs","names":[],"sources":["../../../src/services/definitions/desktop-environment.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const desktopEnvironmentDefinition: ServiceDefinition = {\n\tid: \"desktop-environment\",\n\tname: \"Desktop Environment\",\n\tdescription:\n\t\t\"Isolated KasmVNC-based Linux desktop that gives AI agents full computer-use capabilities — screen vision, mouse/keyboard control, file management, and application launching (VS Code, Chrome, Firefox). OBS Studio is pre-installed for optional recording or live-streaming.\",\n\tcategory: \"desktop\",\n\ticon: \"🖥️\",\n\n\timage: \"kasmweb/core-ubuntu-jammy\",\n\timageTag: \"1.16.0\",\n\tports: [\n\t\t{\n\t\t\thost: 6901,\n\t\t\tcontainer: 6901,\n\t\t\tdescription: \"KasmVNC web interface (browser-based desktop access)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 5900,\n\t\t\tcontainer: 5900,\n\t\t\tdescription: \"VNC protocol port (native VNC clients)\",\n\t\t\texposed: false,\n\t\t},\n\t\t{\n\t\t\thost: 4455,\n\t\t\tcontainer: 4455,\n\t\t\tdescription: \"OBS WebSocket control port (when OBS is running)\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"desktop-config\",\n\t\t\tcontainerPath: \"/home/kasm-user\",\n\t\t\tdescription: \"Desktop user home with config persistence\",\n\t\t},\n\t\t{\n\t\t\tname: \"desktop-workspace\",\n\t\t\tcontainerPath: \"/home/kasm-user/workspace\",\n\t\t\tdescription: \"Shared workspace directory for files and projects\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"VNC_PW\",\n\t\t\tdefaultValue: \"changeme\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Password for VNC / KasmVNC web access\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"VNC_RESOLUTION\",\n\t\t\tdefaultValue: \"1920x1080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Desktop screen resolution (WidthxHeight)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"SSL_VNC_ONLY\",\n\t\t\tdefaultValue: \"false\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"When false, allows HTTP/WS connections without SSL (useful for local/Docker networking)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OBS_WS_PORT\",\n\t\t\tdefaultValue: \"4455\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"OBS WebSocket port (used when OBS is launched manually)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OBS_PASSWORD\",\n\t\t\tdefaultValue: \"changeme\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"OBS WebSocket password (used when OBS is launched manually)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sfk https://localhost:6901/ > /dev/null || curl -sf http://localhost:6901/ > /dev/null || exit 1\",\n\t\tinterval: \"10s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 6,\n\t\tstartPeriod: \"60s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tdeploy: {\n\t\tresources: {\n\t\t\tlimits: { cpus: \"4.0\", memory: \"8G\" },\n\t\t\treservations: { cpus: \"2.0\", memory: \"4G\" },\n\t\t},\n\t},\n\n\tskills: [{ skillId: \"desktop-use\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"DESKTOP_HOST\",\n\t\t\tdefaultValue: \"desktop-environment\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Hostname of the desktop-environment container\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DESKTOP_VNC_PORT\",\n\t\t\tdefaultValue: \"6901\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"KasmVNC web port\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DESKTOP_VNC_PASSWORD\",\n\t\t\tdefaultValue: \"${VNC_PW}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"VNC password (references service password)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://www.kasmweb.com/docs/latest/index.html\",\n\ttags: [\
|
|
1
|
+
{"version":3,"file":"desktop-environment.mjs","names":[],"sources":["../../../src/services/definitions/desktop-environment.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const desktopEnvironmentDefinition: ServiceDefinition = {\n\tid: \"desktop-environment\",\n\tname: \"Desktop Environment\",\n\tdescription:\n\t\t\"Isolated KasmVNC-based Linux desktop that gives AI agents full computer-use capabilities — screen vision, mouse/keyboard control, file management, and application launching (VS Code, Chrome, Firefox). OBS Studio is pre-installed for optional recording or live-streaming.\",\n\tcategory: \"desktop\",\n\ticon: \"🖥️\",\n\n\timage: \"kasmweb/core-ubuntu-jammy\",\n\timageTag: \"1.16.0\",\n\tports: [\n\t\t{\n\t\t\thost: 6901,\n\t\t\tcontainer: 6901,\n\t\t\tdescription: \"KasmVNC web interface (browser-based desktop access)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 5900,\n\t\t\tcontainer: 5900,\n\t\t\tdescription: \"VNC protocol port (native VNC clients)\",\n\t\t\texposed: false,\n\t\t},\n\t\t{\n\t\t\thost: 4455,\n\t\t\tcontainer: 4455,\n\t\t\tdescription: \"OBS WebSocket control port (when OBS is running)\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"desktop-config\",\n\t\t\tcontainerPath: \"/home/kasm-user\",\n\t\t\tdescription: \"Desktop user home with config persistence\",\n\t\t},\n\t\t{\n\t\t\tname: \"desktop-workspace\",\n\t\t\tcontainerPath: \"/home/kasm-user/workspace\",\n\t\t\tdescription: \"Shared workspace directory for files and projects\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"VNC_PW\",\n\t\t\tdefaultValue: \"changeme\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Password for VNC / KasmVNC web access\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"VNC_RESOLUTION\",\n\t\t\tdefaultValue: \"1920x1080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Desktop screen resolution (WidthxHeight)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"SSL_VNC_ONLY\",\n\t\t\tdefaultValue: \"false\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"When false, allows HTTP/WS connections without SSL (useful for local/Docker networking)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OBS_WS_PORT\",\n\t\t\tdefaultValue: \"4455\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"OBS WebSocket port (used when OBS is launched manually)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"OBS_PASSWORD\",\n\t\t\tdefaultValue: \"changeme\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"OBS WebSocket password (used when OBS is launched manually)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sfk https://localhost:6901/ > /dev/null || curl -sf http://localhost:6901/ > /dev/null || exit 1\",\n\t\tinterval: \"10s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 6,\n\t\tstartPeriod: \"60s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tdeploy: {\n\t\tresources: {\n\t\t\tlimits: { cpus: \"4.0\", memory: \"8G\" },\n\t\t\treservations: { cpus: \"2.0\", memory: \"4G\" },\n\t\t},\n\t},\n\n\tskills: [{ skillId: \"desktop-use\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"DESKTOP_HOST\",\n\t\t\tdefaultValue: \"desktop-environment\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Hostname of the desktop-environment container\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DESKTOP_VNC_PORT\",\n\t\t\tdefaultValue: \"6901\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"KasmVNC web port\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DESKTOP_VNC_PASSWORD\",\n\t\t\tdefaultValue: \"${VNC_PW}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"VNC password (references service password)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://www.kasmweb.com/docs/latest/index.html\",\n\ttags: [\"computer-use\", \"vnc\", \"desktop\", \"screen-capture\", \"automation\", \"obs\", \"kasm\"],\n\tmaturity: \"experimental\",\n\n\trequires: [],\n\trecommends: [\"stream-gateway\"],\n\tconflictsWith: [],\n\n\tremovalWarning:\n\t\t\"⚠️ HEAVY RESOURCE USAGE: The desktop environment requires at least 4 GB RAM (8 GB recommended) and 2+ CPU cores. It runs a full Linux desktop with XFCE inside KasmVNC. OBS Studio is pre-installed but NOT auto-started — launch it manually or via agent tools when needed. Ensure your deployment target can handle these resources alongside other services.\",\n\tminMemoryMB: 4096,\n\tgpuRequired: false,\n\n\tnativeSupported: true,\n\tnativeRecipes: [\n\t\t{\n\t\t\tplatform: \"linux\",\n\t\t\tinstallSteps: [\n\t\t\t\t\"command -v Xvfb >/dev/null 2>&1 || (command -v apt-get >/dev/null 2>&1 && sudo apt-get update -qq && sudo apt-get install -y -qq xvfb xfce4 xfce4-terminal tigervnc-standalone-server scrot xdotool xclip)\",\n\t\t\t\t\"command -v obs >/dev/null 2>&1 || (sudo add-apt-repository -y ppa:obsproject/obs-studio && sudo apt-get update -qq && sudo apt-get install -y -qq obs-studio)\",\n\t\t\t],\n\t\t\tstartCommand:\n\t\t\t\t\"vncserver :1 -geometry 1920x1080 -depth 24 -localhost no 2>/dev/null || Xvfb :1 -screen 0 1920x1080x24 &\",\n\t\t\tstopCommand: \"vncserver -kill :1 2>/dev/null; killall Xvfb 2>/dev/null\",\n\t\t\tconfigPath: \"/etc/vnc/xstartup\",\n\t\t\tconfigTemplate:\n\t\t\t\t\"#!/bin/sh\\n# Generated for OpenClaw bare-metal desktop\\nexport DISPLAY=:1\\nstartxfce4 &\\n\",\n\t\t},\n\t],\n};\n"],"mappings":";AAEA,MAAa,+BAAkD;CAC9D,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO;EACN;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;GACC,MAAM;GACN,WAAW;GACX,aAAa;GACb,SAAS;GACT;EACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,EACD;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EACP,WAAW;EACV,QAAQ;GAAE,MAAM;GAAO,QAAQ;GAAM;EACrC,cAAc;GAAE,MAAM;GAAO,QAAQ;GAAM;EAC3C,EACD;CAED,QAAQ,CAAC;EAAE,SAAS;EAAe,aAAa;EAAM,CAAC;CACvD,iBAAiB;EAChB;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CAED,SAAS;CACT,MAAM;EAAC;EAAgB;EAAO;EAAW;EAAkB;EAAc;EAAO;EAAO;CACvF,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,iBAAiB;CAC9B,eAAe,EAAE;CAEjB,gBACC;CACD,aAAa;CACb,aAAa;CAEb,iBAAiB;CACjB,eAAe,CACd;EACC,UAAU;EACV,cAAc,CACb,8MACA,gKACA;EACD,cACC;EACD,aAAa;EACb,YAAY;EACZ,gBACC;EACD,CACD;CACD"}
|
|
@@ -36,8 +36,8 @@ import { matomoDefinition } from "./matomo.mjs";
|
|
|
36
36
|
import { matrixSynapseDefinition } from "./matrix-synapse.mjs";
|
|
37
37
|
import { mattermostDefinition } from "./mattermost.mjs";
|
|
38
38
|
import { meilisearchDefinition } from "./meilisearch.mjs";
|
|
39
|
-
import { missionControlDefinition } from "./mission-control.mjs";
|
|
40
39
|
import { minioDefinition } from "./minio.mjs";
|
|
40
|
+
import { missionControlDefinition } from "./mission-control.mjs";
|
|
41
41
|
import { mixpostDefinition } from "./mixpost.mjs";
|
|
42
42
|
import { motionCanvasDefinition } from "./motion-canvas.mjs";
|
|
43
43
|
import { n8nDefinition } from "./n8n.mjs";
|
|
@@ -67,8 +67,8 @@ import { tailscaleDefinition } from "./tailscale.mjs";
|
|
|
67
67
|
import { temporalDefinition } from "./temporal.mjs";
|
|
68
68
|
import { traefikDefinition } from "./traefik.mjs";
|
|
69
69
|
import { umamiDefinition } from "./umami.mjs";
|
|
70
|
-
import { usesendDefinition } from "./usesend.mjs";
|
|
71
70
|
import { uptimeKumaDefinition } from "./uptime-kuma.mjs";
|
|
71
|
+
import { usesendDefinition } from "./usesend.mjs";
|
|
72
72
|
import { valkeyDefinition } from "./valkey.mjs";
|
|
73
73
|
import { watchtowerDefinition } from "./watchtower.mjs";
|
|
74
74
|
import { weaviateDefinition } from "./weaviate.mjs";
|
|
@@ -7,10 +7,10 @@ import { calComDefinition } from "./cal-com.mjs";
|
|
|
7
7
|
import { chromadbDefinition } from "./chromadb.mjs";
|
|
8
8
|
import { claudeCodeDefinition } from "./claude-code.mjs";
|
|
9
9
|
import { codeServerDefinition } from "./code-server.mjs";
|
|
10
|
+
import { codexDefinition } from "./codex.mjs";
|
|
10
11
|
import { comfyuiDefinition } from "./comfyui.mjs";
|
|
11
12
|
import { convexDefinition } from "./convex.mjs";
|
|
12
13
|
import { convexDashboardDefinition } from "./convex-dashboard.mjs";
|
|
13
|
-
import { codexDefinition } from "./codex.mjs";
|
|
14
14
|
import { coolifyDefinition } from "./coolify.mjs";
|
|
15
15
|
import { desktopEnvironmentDefinition } from "./desktop-environment.mjs";
|
|
16
16
|
import { difyDefinition } from "./dify.mjs";
|
|
@@ -35,8 +35,8 @@ import { matomoDefinition } from "./matomo.mjs";
|
|
|
35
35
|
import { matrixSynapseDefinition } from "./matrix-synapse.mjs";
|
|
36
36
|
import { mattermostDefinition } from "./mattermost.mjs";
|
|
37
37
|
import { meilisearchDefinition } from "./meilisearch.mjs";
|
|
38
|
-
import { missionControlDefinition } from "./mission-control.mjs";
|
|
39
38
|
import { minioDefinition } from "./minio.mjs";
|
|
39
|
+
import { missionControlDefinition } from "./mission-control.mjs";
|
|
40
40
|
import { mixpostDefinition } from "./mixpost.mjs";
|
|
41
41
|
import { motionCanvasDefinition } from "./motion-canvas.mjs";
|
|
42
42
|
import { n8nDefinition } from "./n8n.mjs";
|
|
@@ -66,8 +66,8 @@ import { tailscaleDefinition } from "./tailscale.mjs";
|
|
|
66
66
|
import { temporalDefinition } from "./temporal.mjs";
|
|
67
67
|
import { traefikDefinition } from "./traefik.mjs";
|
|
68
68
|
import { umamiDefinition } from "./umami.mjs";
|
|
69
|
-
import { usesendDefinition } from "./usesend.mjs";
|
|
70
69
|
import { uptimeKumaDefinition } from "./uptime-kuma.mjs";
|
|
70
|
+
import { usesendDefinition } from "./usesend.mjs";
|
|
71
71
|
import { valkeyDefinition } from "./valkey.mjs";
|
|
72
72
|
import { watchtowerDefinition } from "./watchtower.mjs";
|
|
73
73
|
import { weaviateDefinition } from "./weaviate.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/definitions/index.ts"],"sourcesContent":["export { anythingLlmDefinition } from \"./anything-llm.js\";\nexport { appflowyDefinition } from \"./appflowy.js\";\nexport { beszelDefinition } from \"./beszel.js\";\nexport { browserlessDefinition } from \"./browserless.js\";\nexport { caddyDefinition } from \"./caddy.js\";\nexport { calComDefinition } from \"./cal-com.js\";\nexport { chromadbDefinition } from \"./chromadb.js\";\nexport { claudeCodeDefinition } from \"./claude-code.js\";\nexport { codeServerDefinition } from \"./code-server.js\";\nexport { comfyuiDefinition } from \"./comfyui.js\";\nexport { convexDefinition } from \"./convex.js\";\nexport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nexport { codexDefinition } from \"./codex.js\";\nexport { coolifyDefinition } from \"./coolify.js\";\nexport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nexport { difyDefinition } from \"./dify.js\";\nexport { docsgptDefinition } from \"./docsgpt.js\";\nexport { dokployDefinition } from \"./dokploy.js\";\nexport { dozzleDefinition } from \"./dozzle.js\";\nexport { ffmpegDefinition } from \"./ffmpeg.js\";\nexport { flowiseDefinition } from \"./flowise.js\";\nexport { geminiCliDefinition } from \"./gemini-cli.js\";\nexport { giteaDefinition } from \"./gitea.js\";\nexport { gotifyDefinition } from \"./gotify.js\";\nexport { grafanaDefinition } from \"./grafana.js\";\nexport { kimiDefinition } from \"./kimi.js\";\nexport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nexport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nexport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nexport { librechatDefinition } from \"./librechat.js\";\nexport { lightpandaDefinition } from \"./lightpanda.js\";\nexport { litellmDefinition } from \"./litellm.js\";\nexport { livekitDefinition } from \"./livekit.js\";\nexport { matomoDefinition } from \"./matomo.js\";\nexport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nexport { mattermostDefinition } from \"./mattermost.js\";\nexport { meilisearchDefinition } from \"./meilisearch.js\";\nexport { missionControlDefinition } from \"./mission-control.js\";\nexport { minioDefinition } from \"./minio.js\";\nexport { mixpostDefinition } from \"./mixpost.js\";\nexport { motionCanvasDefinition } from \"./motion-canvas.js\";\nexport { n8nDefinition } from \"./n8n.js\";\nexport { neo4jDefinition } from \"./neo4j.js\";\nexport { nocodbDefinition } from \"./nocodb.js\";\nexport { ntfyDefinition } from \"./ntfy.js\";\nexport { ollamaDefinition } from \"./ollama.js\";\nexport { openWebuiDefinition } from \"./open-webui.js\";\nexport { opencodeDefinition } from \"./opencode.js\";\nexport { openpanelDefinition } from \"./openpanel.js\";\nexport { outlineDefinition } from \"./outline.js\";\nexport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nexport { playwrightServerDefinition } from \"./playwright-server.js\";\nexport { portainerDefinition } from \"./portainer.js\";\nexport { postgresqlDefinition } from \"./postgresql.js\";\nexport { postizDefinition } from \"./postiz.js\";\nexport { prometheusDefinition } from \"./prometheus.js\";\nexport { qdrantDefinition } from \"./qdrant.js\";\nexport { redisDefinition } from \"./redis.js\";\nexport { remotionDefinition } from \"./remotion.js\";\nexport { rocketchatDefinition } from \"./rocketchat.js\";\nexport { searxngDefinition } from \"./searxng.js\";\nexport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nexport { steelBrowserDefinition } from \"./steel-browser.js\";\nexport { streamGatewayDefinition } from \"./stream-gateway.js\";\nexport { tailscaleDefinition } from \"./tailscale.js\";\nexport { temporalDefinition } from \"./temporal.js\";\nexport { traefikDefinition } from \"./traefik.js\";\nexport { umamiDefinition } from \"./umami.js\";\nexport { usesendDefinition } from \"./usesend.js\";\nexport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nexport { valkeyDefinition } from \"./valkey.js\";\nexport { watchtowerDefinition } from \"./watchtower.js\";\nexport { weaviateDefinition } from \"./weaviate.js\";\nexport { whisperDefinition } from \"./whisper.js\";\nexport { xyopsDefinition } from \"./xyops.js\";\n\nimport type { ServiceDefinition } from \"../../types.js\";\nimport { anythingLlmDefinition } from \"./anything-llm.js\";\nimport { appflowyDefinition } from \"./appflowy.js\";\nimport { beszelDefinition } from \"./beszel.js\";\nimport { browserlessDefinition } from \"./browserless.js\";\nimport { caddyDefinition } from \"./caddy.js\";\nimport { calComDefinition } from \"./cal-com.js\";\nimport { chromadbDefinition } from \"./chromadb.js\";\nimport { claudeCodeDefinition } from \"./claude-code.js\";\nimport { codeServerDefinition } from \"./code-server.js\";\nimport { comfyuiDefinition } from \"./comfyui.js\";\nimport { convexDefinition } from \"./convex.js\";\nimport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nimport { codexDefinition } from \"./codex.js\";\nimport { coolifyDefinition } from \"./coolify.js\";\nimport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nimport { difyDefinition } from \"./dify.js\";\nimport { docsgptDefinition } from \"./docsgpt.js\";\nimport { dokployDefinition } from \"./dokploy.js\";\nimport { dozzleDefinition } from \"./dozzle.js\";\nimport { ffmpegDefinition } from \"./ffmpeg.js\";\nimport { flowiseDefinition } from \"./flowise.js\";\nimport { geminiCliDefinition } from \"./gemini-cli.js\";\nimport { giteaDefinition } from \"./gitea.js\";\nimport { gotifyDefinition } from \"./gotify.js\";\nimport { grafanaDefinition } from \"./grafana.js\";\nimport { kimiDefinition } from \"./kimi.js\";\nimport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nimport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nimport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nimport { librechatDefinition } from \"./librechat.js\";\nimport { lightpandaDefinition } from \"./lightpanda.js\";\nimport { litellmDefinition } from \"./litellm.js\";\nimport { livekitDefinition } from \"./livekit.js\";\nimport { matomoDefinition } from \"./matomo.js\";\nimport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nimport { mattermostDefinition } from \"./mattermost.js\";\nimport { meilisearchDefinition } from \"./meilisearch.js\";\nimport { missionControlDefinition } from \"./mission-control.js\";\nimport { minioDefinition } from \"./minio.js\";\nimport { mixpostDefinition } from \"./mixpost.js\";\nimport { motionCanvasDefinition } from \"./motion-canvas.js\";\nimport { n8nDefinition } from \"./n8n.js\";\nimport { neo4jDefinition } from \"./neo4j.js\";\nimport { nocodbDefinition } from \"./nocodb.js\";\nimport { ntfyDefinition } from \"./ntfy.js\";\nimport { ollamaDefinition } from \"./ollama.js\";\nimport { openWebuiDefinition } from \"./open-webui.js\";\nimport { opencodeDefinition } from \"./opencode.js\";\nimport { openpanelDefinition } from \"./openpanel.js\";\nimport { outlineDefinition } from \"./outline.js\";\nimport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nimport { playwrightServerDefinition } from \"./playwright-server.js\";\nimport { portainerDefinition } from \"./portainer.js\";\nimport { postgresqlDefinition } from \"./postgresql.js\";\nimport { postizDefinition } from \"./postiz.js\";\nimport { prometheusDefinition } from \"./prometheus.js\";\nimport { qdrantDefinition } from \"./qdrant.js\";\nimport { redisDefinition } from \"./redis.js\";\nimport { remotionDefinition } from \"./remotion.js\";\nimport { rocketchatDefinition } from \"./rocketchat.js\";\nimport { searxngDefinition } from \"./searxng.js\";\nimport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nimport { steelBrowserDefinition } from \"./steel-browser.js\";\nimport { streamGatewayDefinition } from \"./stream-gateway.js\";\nimport { tailscaleDefinition } from \"./tailscale.js\";\nimport { temporalDefinition } from \"./temporal.js\";\nimport { traefikDefinition } from \"./traefik.js\";\nimport { umamiDefinition } from \"./umami.js\";\nimport { usesendDefinition } from \"./usesend.js\";\nimport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nimport { valkeyDefinition } from \"./valkey.js\";\nimport { watchtowerDefinition } from \"./watchtower.js\";\nimport { weaviateDefinition } from \"./weaviate.js\";\nimport { whisperDefinition } from \"./whisper.js\";\nimport { xyopsDefinition } from \"./xyops.js\";\n\nexport const allServiceDefinitions: ServiceDefinition[] = [\n\tredisDefinition,\n\tqdrantDefinition,\n\tn8nDefinition,\n\tffmpegDefinition,\n\tminioDefinition,\n\tpostgresqlDefinition,\n\tcaddyDefinition,\n\ttraefikDefinition,\n\tuptimeKumaDefinition,\n\tgrafanaDefinition,\n\tprometheusDefinition,\n\tbrowserlessDefinition,\n\tsearxngDefinition,\n\tmeilisearchDefinition,\n\tollamaDefinition,\n\twhisperDefinition,\n\tchromadbDefinition,\n\tweaviateDefinition,\n\tvalkeyDefinition,\n\tgotifyDefinition,\n\tntfyDefinition,\n\tremotionDefinition,\n\tmotionCanvasDefinition,\n\ttemporalDefinition,\n\toutlineDefinition,\n\tdocsgptDefinition,\n\tpaperlessNgxDefinition,\n\tnocodbDefinition,\n\tappflowyDefinition,\n\tmatrixSynapseDefinition,\n\trocketchatDefinition,\n\tmattermostDefinition,\n\tstableDiffusionDefinition,\n\tcomfyuiDefinition,\n\tplaywrightServerDefinition,\n\topenWebuiDefinition,\n\tlibrechatDefinition,\n\tanythingLlmDefinition,\n\tdifyDefinition,\n\tflowiseDefinition,\n\tlitellmDefinition,\n\tgiteaDefinition,\n\tcodeServerDefinition,\n\tportainerDefinition,\n\twatchtowerDefinition,\n\tdozzleDefinition,\n\tbeszelDefinition,\n\tconvexDefinition,\n\tconvexDashboardDefinition,\n\tclaudeCodeDefinition,\n\topencodeDefinition,\n\tcodexDefinition,\n\tgeminiCliDefinition,\n\tkimiDefinition,\n\tpostizDefinition,\n\tmixpostDefinition,\n\tmatomoDefinition,\n\tumamiDefinition,\n\tusesendDefinition,\n\tmissionControlDefinition,\n\topenpanelDefinition,\n\tlightpandaDefinition,\n\tsteelBrowserDefinition,\n\tcoolifyDefinition,\n\tdokployDefinition,\n\ttailscaleDefinition,\n\tlivekitDefinition,\n\tlasuiteMeetBackendDefinition,\n\tlasuiteMeetFrontendDefinition,\n\tlasuiteMeetAgentsDefinition,\n\tdesktopEnvironmentDefinition,\n\tstreamGatewayDefinition,\n\tneo4jDefinition,\n\tcalComDefinition,\n\txyopsDefinition,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJA,MAAa,wBAA6C;CACzD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/definitions/index.ts"],"sourcesContent":["export { anythingLlmDefinition } from \"./anything-llm.js\";\nexport { appflowyDefinition } from \"./appflowy.js\";\nexport { beszelDefinition } from \"./beszel.js\";\nexport { browserlessDefinition } from \"./browserless.js\";\nexport { caddyDefinition } from \"./caddy.js\";\nexport { calComDefinition } from \"./cal-com.js\";\nexport { chromadbDefinition } from \"./chromadb.js\";\nexport { claudeCodeDefinition } from \"./claude-code.js\";\nexport { codeServerDefinition } from \"./code-server.js\";\nexport { codexDefinition } from \"./codex.js\";\nexport { comfyuiDefinition } from \"./comfyui.js\";\nexport { convexDefinition } from \"./convex.js\";\nexport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nexport { coolifyDefinition } from \"./coolify.js\";\nexport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nexport { difyDefinition } from \"./dify.js\";\nexport { docsgptDefinition } from \"./docsgpt.js\";\nexport { dokployDefinition } from \"./dokploy.js\";\nexport { dozzleDefinition } from \"./dozzle.js\";\nexport { ffmpegDefinition } from \"./ffmpeg.js\";\nexport { flowiseDefinition } from \"./flowise.js\";\nexport { geminiCliDefinition } from \"./gemini-cli.js\";\nexport { giteaDefinition } from \"./gitea.js\";\nexport { gotifyDefinition } from \"./gotify.js\";\nexport { grafanaDefinition } from \"./grafana.js\";\nexport { kimiDefinition } from \"./kimi.js\";\nexport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nexport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nexport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nexport { librechatDefinition } from \"./librechat.js\";\nexport { lightpandaDefinition } from \"./lightpanda.js\";\nexport { litellmDefinition } from \"./litellm.js\";\nexport { livekitDefinition } from \"./livekit.js\";\nexport { matomoDefinition } from \"./matomo.js\";\nexport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nexport { mattermostDefinition } from \"./mattermost.js\";\nexport { meilisearchDefinition } from \"./meilisearch.js\";\nexport { minioDefinition } from \"./minio.js\";\nexport { missionControlDefinition } from \"./mission-control.js\";\nexport { mixpostDefinition } from \"./mixpost.js\";\nexport { motionCanvasDefinition } from \"./motion-canvas.js\";\nexport { n8nDefinition } from \"./n8n.js\";\nexport { neo4jDefinition } from \"./neo4j.js\";\nexport { nocodbDefinition } from \"./nocodb.js\";\nexport { ntfyDefinition } from \"./ntfy.js\";\nexport { ollamaDefinition } from \"./ollama.js\";\nexport { openWebuiDefinition } from \"./open-webui.js\";\nexport { opencodeDefinition } from \"./opencode.js\";\nexport { openpanelDefinition } from \"./openpanel.js\";\nexport { outlineDefinition } from \"./outline.js\";\nexport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nexport { playwrightServerDefinition } from \"./playwright-server.js\";\nexport { portainerDefinition } from \"./portainer.js\";\nexport { postgresqlDefinition } from \"./postgresql.js\";\nexport { postizDefinition } from \"./postiz.js\";\nexport { prometheusDefinition } from \"./prometheus.js\";\nexport { qdrantDefinition } from \"./qdrant.js\";\nexport { redisDefinition } from \"./redis.js\";\nexport { remotionDefinition } from \"./remotion.js\";\nexport { rocketchatDefinition } from \"./rocketchat.js\";\nexport { searxngDefinition } from \"./searxng.js\";\nexport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nexport { steelBrowserDefinition } from \"./steel-browser.js\";\nexport { streamGatewayDefinition } from \"./stream-gateway.js\";\nexport { tailscaleDefinition } from \"./tailscale.js\";\nexport { temporalDefinition } from \"./temporal.js\";\nexport { traefikDefinition } from \"./traefik.js\";\nexport { umamiDefinition } from \"./umami.js\";\nexport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nexport { usesendDefinition } from \"./usesend.js\";\nexport { valkeyDefinition } from \"./valkey.js\";\nexport { watchtowerDefinition } from \"./watchtower.js\";\nexport { weaviateDefinition } from \"./weaviate.js\";\nexport { whisperDefinition } from \"./whisper.js\";\nexport { xyopsDefinition } from \"./xyops.js\";\n\nimport type { ServiceDefinition } from \"../../types.js\";\nimport { anythingLlmDefinition } from \"./anything-llm.js\";\nimport { appflowyDefinition } from \"./appflowy.js\";\nimport { beszelDefinition } from \"./beszel.js\";\nimport { browserlessDefinition } from \"./browserless.js\";\nimport { caddyDefinition } from \"./caddy.js\";\nimport { calComDefinition } from \"./cal-com.js\";\nimport { chromadbDefinition } from \"./chromadb.js\";\nimport { claudeCodeDefinition } from \"./claude-code.js\";\nimport { codeServerDefinition } from \"./code-server.js\";\nimport { codexDefinition } from \"./codex.js\";\nimport { comfyuiDefinition } from \"./comfyui.js\";\nimport { convexDefinition } from \"./convex.js\";\nimport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nimport { coolifyDefinition } from \"./coolify.js\";\nimport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nimport { difyDefinition } from \"./dify.js\";\nimport { docsgptDefinition } from \"./docsgpt.js\";\nimport { dokployDefinition } from \"./dokploy.js\";\nimport { dozzleDefinition } from \"./dozzle.js\";\nimport { ffmpegDefinition } from \"./ffmpeg.js\";\nimport { flowiseDefinition } from \"./flowise.js\";\nimport { geminiCliDefinition } from \"./gemini-cli.js\";\nimport { giteaDefinition } from \"./gitea.js\";\nimport { gotifyDefinition } from \"./gotify.js\";\nimport { grafanaDefinition } from \"./grafana.js\";\nimport { kimiDefinition } from \"./kimi.js\";\nimport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nimport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nimport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nimport { librechatDefinition } from \"./librechat.js\";\nimport { lightpandaDefinition } from \"./lightpanda.js\";\nimport { litellmDefinition } from \"./litellm.js\";\nimport { livekitDefinition } from \"./livekit.js\";\nimport { matomoDefinition } from \"./matomo.js\";\nimport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nimport { mattermostDefinition } from \"./mattermost.js\";\nimport { meilisearchDefinition } from \"./meilisearch.js\";\nimport { minioDefinition } from \"./minio.js\";\nimport { missionControlDefinition } from \"./mission-control.js\";\nimport { mixpostDefinition } from \"./mixpost.js\";\nimport { motionCanvasDefinition } from \"./motion-canvas.js\";\nimport { n8nDefinition } from \"./n8n.js\";\nimport { neo4jDefinition } from \"./neo4j.js\";\nimport { nocodbDefinition } from \"./nocodb.js\";\nimport { ntfyDefinition } from \"./ntfy.js\";\nimport { ollamaDefinition } from \"./ollama.js\";\nimport { openWebuiDefinition } from \"./open-webui.js\";\nimport { opencodeDefinition } from \"./opencode.js\";\nimport { openpanelDefinition } from \"./openpanel.js\";\nimport { outlineDefinition } from \"./outline.js\";\nimport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nimport { playwrightServerDefinition } from \"./playwright-server.js\";\nimport { portainerDefinition } from \"./portainer.js\";\nimport { postgresqlDefinition } from \"./postgresql.js\";\nimport { postizDefinition } from \"./postiz.js\";\nimport { prometheusDefinition } from \"./prometheus.js\";\nimport { qdrantDefinition } from \"./qdrant.js\";\nimport { redisDefinition } from \"./redis.js\";\nimport { remotionDefinition } from \"./remotion.js\";\nimport { rocketchatDefinition } from \"./rocketchat.js\";\nimport { searxngDefinition } from \"./searxng.js\";\nimport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nimport { steelBrowserDefinition } from \"./steel-browser.js\";\nimport { streamGatewayDefinition } from \"./stream-gateway.js\";\nimport { tailscaleDefinition } from \"./tailscale.js\";\nimport { temporalDefinition } from \"./temporal.js\";\nimport { traefikDefinition } from \"./traefik.js\";\nimport { umamiDefinition } from \"./umami.js\";\nimport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nimport { usesendDefinition } from \"./usesend.js\";\nimport { valkeyDefinition } from \"./valkey.js\";\nimport { watchtowerDefinition } from \"./watchtower.js\";\nimport { weaviateDefinition } from \"./weaviate.js\";\nimport { whisperDefinition } from \"./whisper.js\";\nimport { xyopsDefinition } from \"./xyops.js\";\n\nexport const allServiceDefinitions: ServiceDefinition[] = [\n\tredisDefinition,\n\tqdrantDefinition,\n\tn8nDefinition,\n\tffmpegDefinition,\n\tminioDefinition,\n\tpostgresqlDefinition,\n\tcaddyDefinition,\n\ttraefikDefinition,\n\tuptimeKumaDefinition,\n\tgrafanaDefinition,\n\tprometheusDefinition,\n\tbrowserlessDefinition,\n\tsearxngDefinition,\n\tmeilisearchDefinition,\n\tollamaDefinition,\n\twhisperDefinition,\n\tchromadbDefinition,\n\tweaviateDefinition,\n\tvalkeyDefinition,\n\tgotifyDefinition,\n\tntfyDefinition,\n\tremotionDefinition,\n\tmotionCanvasDefinition,\n\ttemporalDefinition,\n\toutlineDefinition,\n\tdocsgptDefinition,\n\tpaperlessNgxDefinition,\n\tnocodbDefinition,\n\tappflowyDefinition,\n\tmatrixSynapseDefinition,\n\trocketchatDefinition,\n\tmattermostDefinition,\n\tstableDiffusionDefinition,\n\tcomfyuiDefinition,\n\tplaywrightServerDefinition,\n\topenWebuiDefinition,\n\tlibrechatDefinition,\n\tanythingLlmDefinition,\n\tdifyDefinition,\n\tflowiseDefinition,\n\tlitellmDefinition,\n\tgiteaDefinition,\n\tcodeServerDefinition,\n\tportainerDefinition,\n\twatchtowerDefinition,\n\tdozzleDefinition,\n\tbeszelDefinition,\n\tconvexDefinition,\n\tconvexDashboardDefinition,\n\tclaudeCodeDefinition,\n\topencodeDefinition,\n\tcodexDefinition,\n\tgeminiCliDefinition,\n\tkimiDefinition,\n\tpostizDefinition,\n\tmixpostDefinition,\n\tmatomoDefinition,\n\tumamiDefinition,\n\tusesendDefinition,\n\tmissionControlDefinition,\n\topenpanelDefinition,\n\tlightpandaDefinition,\n\tsteelBrowserDefinition,\n\tcoolifyDefinition,\n\tdokployDefinition,\n\ttailscaleDefinition,\n\tlivekitDefinition,\n\tlasuiteMeetBackendDefinition,\n\tlasuiteMeetFrontendDefinition,\n\tlasuiteMeetAgentsDefinition,\n\tdesktopEnvironmentDefinition,\n\tstreamGatewayDefinition,\n\tneo4jDefinition,\n\tcalComDefinition,\n\txyopsDefinition,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJA,MAAa,wBAA6C;CACzD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mission-control.mjs","names":[],"sources":["../../../src/services/definitions/mission-control.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const missionControlDefinition: ServiceDefinition = {\n\tid: \"mission-control\",\n\tname: \"Mission Control\",\n\tdescription:\n\t\t\"Real-time agent oversight dashboard for OpenClaw. Kanban task board, live activity feed, document browser, and message threads — powered by Convex.\",\n\tcategory: \"dev-tools\",\n\ticon: \"🛸\",\n\n\timage: \"ghcr.io/bidewio/mission-control\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3660,\n\t\t\tcontainer: 3660,\n\t\t\tdescription: \"Mission Control Web UI\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"VITE_CONVEX_URL\",\n\t\t\tdefaultValue: \"http://127.0.0.1:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Convex backend URL as seen from the browser (build-time, embedded in JS bundle)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SELF_HOSTED_URL\",\n\t\t\tdefaultValue: \"http://convex:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription
|
|
1
|
+
{"version":3,"file":"mission-control.mjs","names":[],"sources":["../../../src/services/definitions/mission-control.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const missionControlDefinition: ServiceDefinition = {\n\tid: \"mission-control\",\n\tname: \"Mission Control\",\n\tdescription:\n\t\t\"Real-time agent oversight dashboard for OpenClaw. Kanban task board, live activity feed, document browser, and message threads — powered by Convex.\",\n\tcategory: \"dev-tools\",\n\ticon: \"🛸\",\n\n\timage: \"ghcr.io/bidewio/mission-control\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3660,\n\t\t\tcontainer: 3660,\n\t\t\tdescription: \"Mission Control Web UI\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"VITE_CONVEX_URL\",\n\t\t\tdefaultValue: \"http://127.0.0.1:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Convex backend URL as seen from the browser (build-time, embedded in JS bundle)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SELF_HOSTED_URL\",\n\t\t\tdefaultValue: \"http://convex:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Internal Docker URL for pushing Convex functions during build\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SELF_HOSTED_ADMIN_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"Admin key for the self-hosted Convex backend. Generate with: docker compose exec convex ./generate_admin_key.sh\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\tdependsOn: [\"convex\"],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://github.com/bidewio/better-openclaw/tree/main/packages/mission-control\",\n\tselfHostedDocsUrl:\n\t\t\"https://github.com/bidewio/better-openclaw/tree/main/packages/mission-control\",\n\ttags: [\"openclaw\", \"dashboard\", \"monitoring\", \"agents\", \"analytics\", \"convex\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"convex\"],\n\trecommends: [\"convex-dashboard\"],\n\tconflictsWith: [],\n\tmandatory: true,\n\tremovalWarning:\n\t\t\"Mission Control is the primary dashboard for monitoring your OpenClaw agents. Removing it will eliminate real-time agent oversight, task management, and activity tracking.\",\n\n\tminMemoryMB: 128,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,2BAA8C;CAC1D,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,EAAE;CACX,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;CACD,WAAW,CAAC,SAAS;CACrB,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,mBACC;CACD,MAAM;EAAC;EAAY;EAAa;EAAc;EAAU;EAAa;EAAS;CAC9E,UAAU;CAEV,UAAU,CAAC,SAAS;CACpB,YAAY,CAAC,mBAAmB;CAChC,eAAe,EAAE;CACjB,WAAW;CACX,gBACC;CAED,aAAa;CACb,aAAa;CACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-gateway.mjs","names":[],"sources":["../../../src/services/definitions/stream-gateway.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const streamGatewayDefinition: ServiceDefinition = {\n\tid: \"stream-gateway\",\n\tname: \"Stream Gateway\",\n\tdescription:\n\t\t\"NGINX-RTMP relay server that receives a local RTMP stream (e.g. from OBS in the desktop-environment) and fans it out to YouTube, Twitch, TikTok, and Telegram simultaneously. Also serves an HLS preview on HTTP for local viewing.\",\n\tcategory: \"streaming\",\n\ticon: \"📺\",\n\n\timage: \"tiangolo/nginx-rtmp\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 1935,\n\t\t\tcontainer: 1935,\n\t\t\tdescription: \"RTMP ingest (receives stream from OBS or ffmpeg)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"HTTP server for HLS preview and stats\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"stream-gateway-hls\",\n\t\t\tcontainerPath: \"/tmp/hls\",\n\t\t\tdescription: \"HLS segment storage for live preview playback\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"YOUTUBE_STREAM_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"YouTube Live stream key (leave empty to skip YouTube relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TWITCH_STREAM_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Twitch stream key (leave empty to skip Twitch relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TIKTOK_STREAM_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription
|
|
1
|
+
{"version":3,"file":"stream-gateway.mjs","names":[],"sources":["../../../src/services/definitions/stream-gateway.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const streamGatewayDefinition: ServiceDefinition = {\n\tid: \"stream-gateway\",\n\tname: \"Stream Gateway\",\n\tdescription:\n\t\t\"NGINX-RTMP relay server that receives a local RTMP stream (e.g. from OBS in the desktop-environment) and fans it out to YouTube, Twitch, TikTok, and Telegram simultaneously. Also serves an HLS preview on HTTP for local viewing.\",\n\tcategory: \"streaming\",\n\ticon: \"📺\",\n\n\timage: \"tiangolo/nginx-rtmp\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 1935,\n\t\t\tcontainer: 1935,\n\t\t\tdescription: \"RTMP ingest (receives stream from OBS or ffmpeg)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"HTTP server for HLS preview and stats\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"stream-gateway-hls\",\n\t\t\tcontainerPath: \"/tmp/hls\",\n\t\t\tdescription: \"HLS segment storage for live preview playback\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"YOUTUBE_STREAM_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"YouTube Live stream key (leave empty to skip YouTube relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TWITCH_STREAM_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Twitch stream key (leave empty to skip Twitch relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TIKTOK_STREAM_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Full TikTok RTMP URL from TikTok Studio (leave empty to skip TikTok relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TELEGRAM_STREAM_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"Full Telegram RTMPS URL including stream key (leave empty to skip Telegram relay)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:8080/health || exit 1\",\n\t\tinterval: \"15s\",\n\t\ttimeout: \"5s\",\n\t\tretries: 3,\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tdeploy: {\n\t\tresources: {\n\t\t\tlimits: { cpus: \"2.0\", memory: \"2G\" },\n\t\t\treservations: { cpus: \"0.5\", memory: \"512M\" },\n\t\t},\n\t},\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_HOST\",\n\t\t\tdefaultValue: \"stream-gateway\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Hostname of the stream-gateway container\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_RTMP_PORT\",\n\t\t\tdefaultValue: \"1935\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"RTMP ingest port on the stream-gateway\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_HLS_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"HTTP port for HLS preview on the stream-gateway\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://github.com/tiangolo/nginx-rtmp-docker\",\n\ttags: [\n\t\t\"streaming\",\n\t\t\"rtmp\",\n\t\t\"hls\",\n\t\t\"relay\",\n\t\t\"youtube\",\n\t\t\"twitch\",\n\t\t\"tiktok\",\n\t\t\"telegram\",\n\t\t\"obs\",\n\t\t\"nginx\",\n\t],\n\tmaturity: \"experimental\",\n\n\trequires: [],\n\trecommends: [\"desktop-environment\"],\n\tconflictsWith: [],\n\n\tremovalWarning:\n\t\t\"⚠️ STREAMING KEYS REQUIRED: To relay to platforms you must provide at least one stream key. Without any keys configured the gateway will still accept RTMP input and serve HLS locally but nothing will be forwarded.\",\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n\n\tnativeSupported: true,\n\tnativeRecipes: [\n\t\t{\n\t\t\tplatform: \"linux\",\n\t\t\tinstallSteps: [\n\t\t\t\t\"command -v nginx >/dev/null 2>&1 || (command -v apt-get >/dev/null 2>&1 && sudo apt-get update -qq && sudo apt-get install -y -qq nginx libnginx-mod-rtmp ffmpeg)\",\n\t\t\t\t\"command -v nginx >/dev/null 2>&1 || (command -v dnf >/dev/null 2>&1 && sudo dnf install -y nginx nginx-mod-rtmp ffmpeg)\",\n\t\t\t],\n\t\t\tstartCommand: \"sudo systemctl start nginx\",\n\t\t\tstopCommand: \"sudo systemctl stop nginx\",\n\t\t\tconfigPath: \"/etc/nginx/nginx.conf\",\n\t\t\tconfigTemplate:\n\t\t\t\t'# Generated for OpenClaw bare-metal\\nworker_processes auto;\\nrtmp_auto_push on;\\n\\nevents { worker_connections 1024; }\\n\\nrtmp {\\n server {\\n listen 1935;\\n chunk_size 4096;\\n application live {\\n live on;\\n record off;\\n hls on;\\n hls_path /tmp/hls;\\n hls_fragment 3;\\n hls_playlist_length 60;\\n }\\n }\\n}\\n\\nhttp {\\n server {\\n listen 8080;\\n location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; }\\n location /health { return 200 \"OK\"; }\\n }\\n}\\n',\n\t\t\tsystemdUnit: \"nginx\",\n\t\t},\n\t],\n};\n"],"mappings":";AAEA,MAAa,0BAA6C;CACzD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,EACD;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EACP,WAAW;EACV,QAAQ;GAAE,MAAM;GAAO,QAAQ;GAAM;EACrC,cAAc;GAAE,MAAM;GAAO,QAAQ;GAAQ;EAC7C,EACD;CAED,QAAQ,EAAE;CACV,iBAAiB;EAChB;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CAED,SAAS;CACT,MAAM;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,sBAAsB;CACnC,eAAe,EAAE;CAEjB,gBACC;CACD,aAAa;CACb,aAAa;CAEb,iBAAiB;CACjB,eAAe,CACd;EACC,UAAU;EACV,cAAc,CACb,qKACA,0HACA;EACD,cAAc;EACd,aAAa;EACb,YAAY;EACZ,gBACC;EACD,aAAa;EACb,CACD;CACD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-BgmKutxR.mjs";
|
|
2
2
|
import { getAllServices, getServiceById, getServicesByCategory, getServicesByTag } from "./registry.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/services/registry.test.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/skills/registry.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/skills/registry.ts"],"mappings":";;;cAwba,iBAAA,EAAmB,WAAA,SAAoB,SAAA;AAAA,iBAEpC,gBAAA,CAAiB,EAAA,WAAa,SAAA;AAAA,iBAI9B,gBAAA,CAAA,GAAoB,SAAA;;iBAKpB,uBAAA,CAAwB,mBAAA,aAAgC,SAAA"}
|
package/dist/skills/registry.mjs
CHANGED
|
@@ -639,6 +639,50 @@ const skillPacks = [
|
|
|
639
639
|
"smart-home",
|
|
640
640
|
"workflows"
|
|
641
641
|
]
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
id: "frontend-design",
|
|
645
|
+
name: "Frontend Design",
|
|
646
|
+
description: "Front-end design skills for UI systems, web animations, responsive layouts, copywriting, and asset management — sourced from Aura Build",
|
|
647
|
+
requiredServices: [],
|
|
648
|
+
skills: [
|
|
649
|
+
"ui-prompting",
|
|
650
|
+
"pricing-page-design",
|
|
651
|
+
"landing-page-design",
|
|
652
|
+
"gsap-animate",
|
|
653
|
+
"threejs-scene",
|
|
654
|
+
"matterjs-physics",
|
|
655
|
+
"globe-gl-visualize",
|
|
656
|
+
"tailwindcss-style",
|
|
657
|
+
"css-border-gradient",
|
|
658
|
+
"progressive-blur",
|
|
659
|
+
"animation-on-scroll",
|
|
660
|
+
"css-alpha-masking",
|
|
661
|
+
"vantajs-background",
|
|
662
|
+
"cobejs-globe",
|
|
663
|
+
"unicorn-studio-embed",
|
|
664
|
+
"ui-design-system",
|
|
665
|
+
"tailwind-design-system-v4",
|
|
666
|
+
"interaction-design",
|
|
667
|
+
"responsive-design",
|
|
668
|
+
"web-interface-guidelines",
|
|
669
|
+
"threejs-animation",
|
|
670
|
+
"copywriting",
|
|
671
|
+
"frontend-distinctive-design",
|
|
672
|
+
"canvas-design",
|
|
673
|
+
"web-design-reviewer",
|
|
674
|
+
"animejs-animate",
|
|
675
|
+
"aura-asset-images"
|
|
676
|
+
],
|
|
677
|
+
icon: "🎨",
|
|
678
|
+
tags: [
|
|
679
|
+
"frontend",
|
|
680
|
+
"design",
|
|
681
|
+
"animation",
|
|
682
|
+
"css",
|
|
683
|
+
"ui",
|
|
684
|
+
"web-design"
|
|
685
|
+
]
|
|
642
686
|
}
|
|
643
687
|
];
|
|
644
688
|
const packMap = /* @__PURE__ */ new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.mjs","names":[],"sources":["../../src/skills/registry.ts"],"sourcesContent":["import type { SkillPack } from \"../types.js\";\n\nconst skillPacks: SkillPack[] = [\n\t{\n\t\tid: \"video-creator\",\n\t\tname: \"Video Creator\",\n\t\tdescription:\n\t\t\t\"Create and process videos programmatically with FFmpeg, Remotion, and MinIO storage\",\n\t\trequiredServices: [\"ffmpeg\", \"remotion\", \"minio\"],\n\t\tskills: [\"ffmpeg-process\", \"remotion-render\", \"minio-storage\"],\n\t\ticon: \"🎬\",\n\t\ttags: [\"video\", \"media\", \"rendering\"],\n\t},\n\t{\n\t\tid: \"research-agent\",\n\t\tname: \"Research Agent\",\n\t\tdescription: \"Research the web, store findings in vector memory, and scrape full pages\",\n\t\trequiredServices: [\"qdrant\", \"searxng\", \"browserless\"],\n\t\tskills: [\"qdrant-memory\", \"searxng-search\", \"browserless-browse\"],\n\t\ticon: \"🔬\",\n\t\ttags: [\"research\", \"rag\", \"web-scraping\"],\n\t},\n\t{\n\t\tid: \"social-media\",\n\t\tname: \"Social Media\",\n\t\tdescription:\n\t\t\t\"Process and manage social media content with video tools, caching, and asset storage\",\n\t\trequiredServices: [\"ffmpeg\", \"redis\", \"minio\"],\n\t\tskills: [\"ffmpeg-process\", \"redis-cache\", \"minio-storage\"],\n\t\ticon: \"📱\",\n\t\ttags: [\"social\", \"content\", \"scheduling\"],\n\t},\n\t{\n\t\tid: \"dev-ops\",\n\t\tname: \"DevOps\",\n\t\tdescription: \"Monitor services, automate workflows, and manage infrastructure alerts\",\n\t\trequiredServices: [\"n8n\", \"redis\", \"uptime-kuma\", \"grafana\", \"prometheus\"],\n\t\tskills: [\n\t\t\t\"n8n-trigger\",\n\t\t\t\"redis-cache\",\n\t\t\t\"grafana-dashboard\",\n\t\t\t\"prometheus-query\",\n\t\t\t\"uptime-kuma-monitor\",\n\t\t],\n\t\ticon: \"⚙️\",\n\t\ttags: [\"devops\", \"monitoring\", \"automation\"],\n\t},\n\t{\n\t\tid: \"knowledge-base\",\n\t\tname: \"Knowledge Base\",\n\t\tdescription:\n\t\t\t\"Index documents with vector search and full-text search for comprehensive retrieval\",\n\t\trequiredServices: [\"qdrant\", \"postgresql\", \"meilisearch\"],\n\t\tskills: [\"qdrant-memory\", \"postgresql-query\", \"meilisearch-index\"],\n\t\ticon: \"📚\",\n\t\ttags: [\"knowledge\", \"search\", \"indexing\"],\n\t},\n\t{\n\t\tid: \"local-ai\",\n\t\tname: \"Local AI\",\n\t\tdescription: \"Run local LLM inference and speech-to-text transcription without external APIs\",\n\t\trequiredServices: [\"ollama\", \"whisper\"],\n\t\tskills: [\"ollama-local-llm\", \"whisper-transcribe\"],\n\t\ticon: \"🤖\",\n\t\ttags: [\"local-llm\", \"transcription\", \"offline\"],\n\t},\n\t{\n\t\tid: \"content-creator\",\n\t\tname: \"Content Creator\",\n\t\tdescription:\n\t\t\t\"Full social media content pipeline with scheduling, media processing, analytics, and storage\",\n\t\trequiredServices: [\"postiz\", \"ffmpeg\", \"minio\", \"redis\", \"postgresql\"],\n\t\tskills: [\n\t\t\t\"ffmpeg-process\",\n\t\t\t\"minio-storage\",\n\t\t\t\"redis-cache\",\n\t\t\t\"postiz-schedule\",\n\t\t],\n\t\ticon: \"📱\",\n\t\ttags: [\"social-media\", \"content\", \"scheduling\", \"analytics\"],\n\t},\n\t{\n\t\tid: \"ai-playground\",\n\t\tname: \"AI Playground\",\n\t\tdescription:\n\t\t\t\"Full AI experimentation stack with chat UIs, LLM gateway, local models, and document chat\",\n\t\trequiredServices: [\"ollama\", \"open-webui\", \"litellm\"],\n\t\tskills: [\"ollama-local-llm\", \"open-webui-chat\", \"litellm-gateway\"],\n\t\ticon: \"🧪\",\n\t\ttags: [\"ai\", \"llm\", \"playground\", \"experimentation\"],\n\t},\n\t{\n\t\tid: \"coding-team\",\n\t\tname: \"Coding Team\",\n\t\tdescription:\n\t\t\t\"AI-powered development environment with coding agents, Git hosting, and browser IDE\",\n\t\trequiredServices: [\"claude-code\", \"gitea\", \"code-server\"],\n\t\tskills: [\"claude-code-assist\", \"gitea-repo\", \"code-server-develop\"],\n\t\ticon: \"💻\",\n\t\ttags: [\"coding\", \"development\", \"ide\", \"git\"],\n\t},\n\t{\n\t\tid: \"knowledge-hub\",\n\t\tname: \"Knowledge Hub\",\n\t\tdescription:\n\t\t\t\"Enterprise knowledge management with wiki, document processing, analytics, and vector search\",\n\t\trequiredServices: [\"outline\", \"paperless-ngx\", \"qdrant\", \"postgresql\", \"redis\"],\n\t\tskills: [\n\t\t\t\"qdrant-memory\",\n\t\t\t\"outline-wiki\",\n\t\t\t\"paperless-archive\",\n\t\t\t\"postgresql-query\",\n\t\t\t\"redis-cache\",\n\t\t],\n\t\ticon: \"📚\",\n\t\ttags: [\"knowledge\", \"wiki\", \"documents\", \"search\"],\n\t},\n\t// ── New Skill Packs ───────────────────────────────────────────────\n\t{\n\t\tid: \"data-engineer\",\n\t\tname: \"Data Engineer\",\n\t\tdescription:\n\t\t\t\"Process and transform data with PostgreSQL, CSV/JSON/XML transforms, and PDF extraction\",\n\t\trequiredServices: [\"postgresql\"],\n\t\tskills: [\n\t\t\t\"postgresql-query\",\n\t\t\t\"csv-transform\",\n\t\t\t\"json-transform\",\n\t\t\t\"xml-parse\",\n\t\t\t\"pdf-extract\",\n\t\t\t\"excel-process\",\n\t\t\t\"markdown-convert\",\n\t\t],\n\t\ticon: \"🔧\",\n\t\ttags: [\"data\", \"etl\", \"transform\", \"processing\"],\n\t},\n\t{\n\t\tid: \"nlp-pipeline\",\n\t\tname: \"NLP Pipeline\",\n\t\tdescription:\n\t\t\t\"Natural language processing with summarization, translation, classification, and embeddings via Ollama\",\n\t\trequiredServices: [\"ollama\"],\n\t\tskills: [\n\t\t\t\"text-summarize\",\n\t\t\t\"text-translate\",\n\t\t\t\"text-classify\",\n\t\t\t\"text-embed\",\n\t\t\t\"ollama-local-llm\",\n\t\t],\n\t\ticon: \"🧠\",\n\t\ttags: [\"nlp\", \"text\", \"embeddings\", \"translation\"],\n\t},\n\t{\n\t\tid: \"image-processor\",\n\t\tname: \"Image Processor\",\n\t\tdescription:\n\t\t\t\"Resize, convert, and OCR images with ImageMagick and Tesseract\",\n\t\trequiredServices: [\"ffmpeg\"],\n\t\tskills: [\n\t\t\t\"image-resize\",\n\t\t\t\"image-convert\",\n\t\t\t\"image-ocr\",\n\t\t\t\"ffmpeg-process\",\n\t\t],\n\t\ticon: \"🖼️\",\n\t\ttags: [\"image\", \"ocr\", \"media\", \"conversion\"],\n\t},\n\t{\n\t\tid: \"api-integrator\",\n\t\tname: \"API Integrator\",\n\t\tdescription:\n\t\t\t\"HTTP requests, webhooks, and GraphQL queries for external API integration\",\n\t\trequiredServices: [],\n\t\tskills: [\n\t\t\t\"http-request\",\n\t\t\t\"api-webhook\",\n\t\t\t\"graphql-query\",\n\t\t],\n\t\ticon: \"🌐\",\n\t\ttags: [\"api\", \"http\", \"webhook\", \"graphql\"],\n\t},\n\t{\n\t\tid: \"security-ops\",\n\t\tname: \"Security Ops\",\n\t\tdescription:\n\t\t\t\"JWT validation, hashing, SSL checks, port scanning, and network diagnostics\",\n\t\trequiredServices: [],\n\t\tskills: [\n\t\t\t\"jwt-manage\",\n\t\t\t\"hash-generate\",\n\t\t\t\"ssl-check\",\n\t\t\t\"dns-lookup\",\n\t\t\t\"port-scan\",\n\t\t\t\"ping-check\",\n\t\t],\n\t\ticon: \"🛡️\",\n\t\ttags: [\"security\", \"networking\", \"diagnostics\"],\n\t},\n\t{\n\t\tid: \"communication-hub\",\n\t\tname: \"Communication Hub\",\n\t\tdescription:\n\t\t\t\"Multi-channel messaging with Matrix, Mattermost, Rocket.Chat, email, and push notifications\",\n\t\trequiredServices: [\"matrix-synapse\", \"gotify\"],\n\t\tskills: [\n\t\t\t\"matrix-message\",\n\t\t\t\"mattermost-post\",\n\t\t\t\"rocketchat-send\",\n\t\t\t\"gotify-notify\",\n\t\t\t\"ntfy-publish\",\n\t\t\t\"email-send\",\n\t\t],\n\t\ticon: \"📨\",\n\t\ttags: [\"messaging\", \"notifications\", \"email\", \"chat\"],\n\t},\n\t{\n\t\tid: \"analytics-suite\",\n\t\tname: \"Analytics Suite\",\n\t\tdescription:\n\t\t\t\"Web and product analytics with Matomo, Umami, OpenPanel, Grafana, and Prometheus\",\n\t\trequiredServices: [\"grafana\", \"prometheus\"],\n\t\tskills: [\n\t\t\t\"matomo-track\",\n\t\t\t\"umami-analytics\",\n\t\t\t\"openpanel-analyze\",\n\t\t\t\"grafana-dashboard\",\n\t\t\t\"prometheus-query\",\n\t\t],\n\t\ticon: \"📊\",\n\t\ttags: [\"analytics\", \"monitoring\", \"metrics\", \"dashboards\"],\n\t},\n\t{\n\t\tid: \"full-devops\",\n\t\tname: \"Full DevOps\",\n\t\tdescription:\n\t\t\t\"Complete DevOps toolkit with Git hosting, container management, deployments, monitoring, and log viewing\",\n\t\trequiredServices: [\"gitea\", \"portainer\", \"coolify\", \"grafana\", \"prometheus\"],\n\t\tskills: [\n\t\t\t\"gitea-repo\",\n\t\t\t\"portainer-manage\",\n\t\t\t\"coolify-deploy\",\n\t\t\t\"dokploy-deploy\",\n\t\t\t\"watchtower-update\",\n\t\t\t\"dozzle-logs\",\n\t\t\t\"grafana-dashboard\",\n\t\t\t\"prometheus-query\",\n\t\t\t\"uptime-kuma-monitor\",\n\t\t\t\"beszel-monitor\",\n\t\t],\n\t\ticon: \"🏗️\",\n\t\ttags: [\"devops\", \"ci-cd\", \"containers\", \"deployment\"],\n\t},\n\t{\n\t\tid: \"document-manager\",\n\t\tname: \"Document Manager\",\n\t\tdescription:\n\t\t\t\"Document processing pipeline with wiki, archival, OCR, Q&A, and PDF extraction\",\n\t\trequiredServices: [\"outline\", \"paperless-ngx\"],\n\t\tskills: [\n\t\t\t\"outline-wiki\",\n\t\t\t\"paperless-archive\",\n\t\t\t\"docsgpt-ask\",\n\t\t\t\"pdf-extract\",\n\t\t\t\"image-ocr\",\n\t\t],\n\t\ticon: \"📑\",\n\t\ttags: [\"documents\", \"wiki\", \"ocr\", \"archive\"],\n\t},\n\t{\n\t\tid: \"ai-coding-team\",\n\t\tname: \"AI Coding Team\",\n\t\tdescription:\n\t\t\t\"Multi-agent AI coding ensemble with Claude Code, Codex, Gemini CLI, OpenCode, and browser IDE\",\n\t\trequiredServices: [\"code-server\", \"gitea\"],\n\t\tskills: [\n\t\t\t\"claude-code-assist\",\n\t\t\t\"codex-generate\",\n\t\t\t\"gemini-cli-query\",\n\t\t\t\"opencode-develop\",\n\t\t\t\"code-server-develop\",\n\t\t\t\"gitea-repo\",\n\t\t],\n\t\ticon: \"🤖\",\n\t\ttags: [\"ai-coding\", \"agents\", \"development\", \"ide\"],\n\t},\n\t// ── Internet-Verified Skill Packs ────────────────────────────────\n\t{\n\t\tid: \"rag-pipeline\",\n\t\tname: \"RAG Pipeline\",\n\t\tdescription:\n\t\t\t\"Build retrieval-augmented generation systems with LangChain, LlamaIndex, Haystack, and vector databases\",\n\t\trequiredServices: [\"milvus\"],\n\t\tskills: [\n\t\t\t\"langchain-agent\",\n\t\t\t\"llamaindex-query\",\n\t\t\t\"haystack-rag\",\n\t\t\t\"ragflow-pipeline\",\n\t\t\t\"milvus-vectors\",\n\t\t\t\"firecrawl-scrape\",\n\t\t],\n\t\ticon: \"🧠\",\n\t\ttags: [\"rag\", \"ai\", \"embeddings\", \"search\", \"llm\"],\n\t},\n\t{\n\t\tid: \"self-hosted-cloud\",\n\t\tname: \"Self-Hosted Cloud\",\n\t\tdescription:\n\t\t\t\"Complete self-hosted infrastructure with cloud storage, photos, media streaming, and password management\",\n\t\trequiredServices: [\"nextcloud\", \"immich\", \"jellyfin\", \"vaultwarden\"],\n\t\tskills: [\n\t\t\t\"nextcloud-files\",\n\t\t\t\"immich-photos\",\n\t\t\t\"jellyfin-media\",\n\t\t\t\"vaultwarden-manage\",\n\t\t],\n\t\ticon: \"☁️\",\n\t\ttags: [\"self-hosted\", \"cloud\", \"storage\", \"media\", \"security\"],\n\t},\n\t{\n\t\tid: \"ai-agent-orchestra\",\n\t\tname: \"AI Agent Orchestra\",\n\t\tdescription:\n\t\t\t\"Multi-agent AI orchestration with CrewAI, AutoGPT, LangChain, Langflow, and Open Interpreter\",\n\t\trequiredServices: [],\n\t\tskills: [\n\t\t\t\"crewai-orchestrate\",\n\t\t\t\"autogpt-autonomous\",\n\t\t\t\"langchain-agent\",\n\t\t\t\"langflow-build\",\n\t\t\t\"open-interpreter-run\",\n\t\t],\n\t\ticon: \"🎭\",\n\t\ttags: [\"ai\", \"agents\", \"multi-agent\", \"orchestration\", \"autonomous\"],\n\t},\n\t{\n\t\tid: \"cicd-pipeline\",\n\t\tname: \"CI/CD Pipeline\",\n\t\tdescription:\n\t\t\t\"Full CI/CD pipeline with Jenkins, ArgoCD, Woodpecker, and infrastructure as code\",\n\t\trequiredServices: [\"jenkins\"],\n\t\tskills: [\n\t\t\t\"jenkins-pipeline\",\n\t\t\t\"argocd-deploy\",\n\t\t\t\"woodpecker-ci\",\n\t\t\t\"terraform-provision\",\n\t\t\t\"ansible-configure\",\n\t\t],\n\t\ticon: \"🔄\",\n\t\ttags: [\"ci-cd\", \"devops\", \"gitops\", \"infrastructure\"],\n\t},\n\t{\n\t\tid: \"zero-trust-security\",\n\t\tname: \"Zero-Trust Security\",\n\t\tdescription:\n\t\t\t\"Enterprise security with SSO, secrets management, VPN, intrusion detection, and feature flags\",\n\t\trequiredServices: [\"authentik\", \"crowdsec\"],\n\t\tskills: [\n\t\t\t\"authentik-auth\",\n\t\t\t\"keycloak-auth\",\n\t\t\t\"vault-secrets\",\n\t\t\t\"infisical-secrets\",\n\t\t\t\"netbird-vpn\",\n\t\t\t\"teleport-access\",\n\t\t\t\"crowdsec-protect\",\n\t\t],\n\t\ticon: \"🔒\",\n\t\ttags: [\"security\", \"zero-trust\", \"sso\", \"secrets\", \"vpn\"],\n\t},\n\t{\n\t\tid: \"content-platform\",\n\t\tname: \"Content Platform\",\n\t\tdescription:\n\t\t\t\"Publishing and CMS platform with Ghost, Strapi, Directus, and newsletter management\",\n\t\trequiredServices: [\"ghost\"],\n\t\tskills: [\n\t\t\t\"ghost-publish\",\n\t\t\t\"strapi-cms\",\n\t\t\t\"directus-cms\",\n\t\t\t\"listmonk-email\",\n\t\t\t\"plausible-analytics\",\n\t\t],\n\t\ticon: \"📝\",\n\t\ttags: [\"cms\", \"publishing\", \"blog\", \"newsletter\", \"analytics\"],\n\t},\n\t{\n\t\tid: \"backend-platform\",\n\t\tname: \"Backend Platform\",\n\t\tdescription:\n\t\t\t\"Backend-as-a-service with Supabase, Appwrite, PocketBase, and API gateway\",\n\t\trequiredServices: [\"supabase\"],\n\t\tskills: [\n\t\t\t\"supabase-query\",\n\t\t\t\"appwrite-backend\",\n\t\t\t\"pocketbase-backend\",\n\t\t\t\"kong-gateway\",\n\t\t\t\"rabbitmq-queue\",\n\t\t],\n\t\ticon: \"⚡\",\n\t\ttags: [\"backend\", \"baas\", \"api\", \"database\", \"messaging\"],\n\t},\n\t{\n\t\tid: \"observability-stack\",\n\t\tname: \"Observability Stack\",\n\t\tdescription:\n\t\t\t\"Full observability with Loki logs, SigNoz APM, Sentry errors, Gatus health, and Elasticsearch\",\n\t\trequiredServices: [\"loki\", \"signoz\"],\n\t\tskills: [\n\t\t\t\"loki-logs\",\n\t\t\t\"signoz-observe\",\n\t\t\t\"sentry-errors\",\n\t\t\t\"gatus-health\",\n\t\t\t\"elasticsearch-search\",\n\t\t],\n\t\ticon: \"📡\",\n\t\ttags: [\"observability\", \"logs\", \"apm\", \"errors\", \"health\"],\n\t},\n\t{\n\t\tid: \"document-hub\",\n\t\tname: \"Document Hub\",\n\t\tdescription:\n\t\t\t\"Document management with Paperless-ngx, BookStack wiki, Stirling PDF tools, and Excalidraw\",\n\t\trequiredServices: [\"paperless-ngx\"],\n\t\tskills: [\n\t\t\t\"paperless-ngx-docs\",\n\t\t\t\"bookstack-wiki\",\n\t\t\t\"stirling-pdf-tools\",\n\t\t\t\"excalidraw-draw\",\n\t\t],\n\t\ticon: \"📑\",\n\t\ttags: [\"documents\", \"wiki\", \"pdf\", \"collaboration\"],\n\t},\n\t{\n\t\tid: \"smart-home\",\n\t\tname: \"Smart Home\",\n\t\tdescription:\n\t\t\t\"Home automation and event-driven workflows with Home Assistant, Huginn, and Activepieces\",\n\t\trequiredServices: [\"homeassistant\"],\n\t\tskills: [\n\t\t\t\"home-assistant-automate\",\n\t\t\t\"huginn-automate\",\n\t\t\t\"activepieces-flow\",\n\t\t],\n\t\ticon: \"🏠\",\n\t\ttags: [\"iot\", \"automation\", \"smart-home\", \"workflows\"],\n\t},\n];\n\n\nconst packMap = new Map<string, SkillPack>();\nfor (const pack of skillPacks) {\n\tif (packMap.has(pack.id)) {\n\t\tthrow new Error(`Duplicate skill pack ID: \"${pack.id}\"`);\n\t}\n\tpackMap.set(pack.id, pack);\n}\n\nexport const skillPackRegistry: ReadonlyMap<string, SkillPack> = packMap;\n\nexport function getSkillPackById(id: string): SkillPack | undefined {\n\treturn packMap.get(id);\n}\n\nexport function getAllSkillPacks(): SkillPack[] {\n\treturn [...skillPacks];\n}\n\n/** Get skill packs whose required services are all present in the given service list */\nexport function getCompatibleSkillPacks(availableServiceIds: string[]): SkillPack[] {\n\treturn skillPacks.filter((pack) =>\n\t\tpack.requiredServices.every((req) => availableServiceIds.includes(req)),\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.mjs","names":[],"sources":["../../src/skills/registry.ts"],"sourcesContent":["import type { SkillPack } from \"../types.js\";\n\nconst skillPacks: SkillPack[] = [\n\t{\n\t\tid: \"video-creator\",\n\t\tname: \"Video Creator\",\n\t\tdescription:\n\t\t\t\"Create and process videos programmatically with FFmpeg, Remotion, and MinIO storage\",\n\t\trequiredServices: [\"ffmpeg\", \"remotion\", \"minio\"],\n\t\tskills: [\"ffmpeg-process\", \"remotion-render\", \"minio-storage\"],\n\t\ticon: \"🎬\",\n\t\ttags: [\"video\", \"media\", \"rendering\"],\n\t},\n\t{\n\t\tid: \"research-agent\",\n\t\tname: \"Research Agent\",\n\t\tdescription: \"Research the web, store findings in vector memory, and scrape full pages\",\n\t\trequiredServices: [\"qdrant\", \"searxng\", \"browserless\"],\n\t\tskills: [\"qdrant-memory\", \"searxng-search\", \"browserless-browse\"],\n\t\ticon: \"🔬\",\n\t\ttags: [\"research\", \"rag\", \"web-scraping\"],\n\t},\n\t{\n\t\tid: \"social-media\",\n\t\tname: \"Social Media\",\n\t\tdescription:\n\t\t\t\"Process and manage social media content with video tools, caching, and asset storage\",\n\t\trequiredServices: [\"ffmpeg\", \"redis\", \"minio\"],\n\t\tskills: [\"ffmpeg-process\", \"redis-cache\", \"minio-storage\"],\n\t\ticon: \"📱\",\n\t\ttags: [\"social\", \"content\", \"scheduling\"],\n\t},\n\t{\n\t\tid: \"dev-ops\",\n\t\tname: \"DevOps\",\n\t\tdescription: \"Monitor services, automate workflows, and manage infrastructure alerts\",\n\t\trequiredServices: [\"n8n\", \"redis\", \"uptime-kuma\", \"grafana\", \"prometheus\"],\n\t\tskills: [\n\t\t\t\"n8n-trigger\",\n\t\t\t\"redis-cache\",\n\t\t\t\"grafana-dashboard\",\n\t\t\t\"prometheus-query\",\n\t\t\t\"uptime-kuma-monitor\",\n\t\t],\n\t\ticon: \"⚙️\",\n\t\ttags: [\"devops\", \"monitoring\", \"automation\"],\n\t},\n\t{\n\t\tid: \"knowledge-base\",\n\t\tname: \"Knowledge Base\",\n\t\tdescription:\n\t\t\t\"Index documents with vector search and full-text search for comprehensive retrieval\",\n\t\trequiredServices: [\"qdrant\", \"postgresql\", \"meilisearch\"],\n\t\tskills: [\"qdrant-memory\", \"postgresql-query\", \"meilisearch-index\"],\n\t\ticon: \"📚\",\n\t\ttags: [\"knowledge\", \"search\", \"indexing\"],\n\t},\n\t{\n\t\tid: \"local-ai\",\n\t\tname: \"Local AI\",\n\t\tdescription: \"Run local LLM inference and speech-to-text transcription without external APIs\",\n\t\trequiredServices: [\"ollama\", \"whisper\"],\n\t\tskills: [\"ollama-local-llm\", \"whisper-transcribe\"],\n\t\ticon: \"🤖\",\n\t\ttags: [\"local-llm\", \"transcription\", \"offline\"],\n\t},\n\t{\n\t\tid: \"content-creator\",\n\t\tname: \"Content Creator\",\n\t\tdescription:\n\t\t\t\"Full social media content pipeline with scheduling, media processing, analytics, and storage\",\n\t\trequiredServices: [\"postiz\", \"ffmpeg\", \"minio\", \"redis\", \"postgresql\"],\n\t\tskills: [\"ffmpeg-process\", \"minio-storage\", \"redis-cache\", \"postiz-schedule\"],\n\t\ticon: \"📱\",\n\t\ttags: [\"social-media\", \"content\", \"scheduling\", \"analytics\"],\n\t},\n\t{\n\t\tid: \"ai-playground\",\n\t\tname: \"AI Playground\",\n\t\tdescription:\n\t\t\t\"Full AI experimentation stack with chat UIs, LLM gateway, local models, and document chat\",\n\t\trequiredServices: [\"ollama\", \"open-webui\", \"litellm\"],\n\t\tskills: [\"ollama-local-llm\", \"open-webui-chat\", \"litellm-gateway\"],\n\t\ticon: \"🧪\",\n\t\ttags: [\"ai\", \"llm\", \"playground\", \"experimentation\"],\n\t},\n\t{\n\t\tid: \"coding-team\",\n\t\tname: \"Coding Team\",\n\t\tdescription:\n\t\t\t\"AI-powered development environment with coding agents, Git hosting, and browser IDE\",\n\t\trequiredServices: [\"claude-code\", \"gitea\", \"code-server\"],\n\t\tskills: [\"claude-code-assist\", \"gitea-repo\", \"code-server-develop\"],\n\t\ticon: \"💻\",\n\t\ttags: [\"coding\", \"development\", \"ide\", \"git\"],\n\t},\n\t{\n\t\tid: \"knowledge-hub\",\n\t\tname: \"Knowledge Hub\",\n\t\tdescription:\n\t\t\t\"Enterprise knowledge management with wiki, document processing, analytics, and vector search\",\n\t\trequiredServices: [\"outline\", \"paperless-ngx\", \"qdrant\", \"postgresql\", \"redis\"],\n\t\tskills: [\n\t\t\t\"qdrant-memory\",\n\t\t\t\"outline-wiki\",\n\t\t\t\"paperless-archive\",\n\t\t\t\"postgresql-query\",\n\t\t\t\"redis-cache\",\n\t\t],\n\t\ticon: \"📚\",\n\t\ttags: [\"knowledge\", \"wiki\", \"documents\", \"search\"],\n\t},\n\t// ── New Skill Packs ───────────────────────────────────────────────\n\t{\n\t\tid: \"data-engineer\",\n\t\tname: \"Data Engineer\",\n\t\tdescription:\n\t\t\t\"Process and transform data with PostgreSQL, CSV/JSON/XML transforms, and PDF extraction\",\n\t\trequiredServices: [\"postgresql\"],\n\t\tskills: [\n\t\t\t\"postgresql-query\",\n\t\t\t\"csv-transform\",\n\t\t\t\"json-transform\",\n\t\t\t\"xml-parse\",\n\t\t\t\"pdf-extract\",\n\t\t\t\"excel-process\",\n\t\t\t\"markdown-convert\",\n\t\t],\n\t\ticon: \"🔧\",\n\t\ttags: [\"data\", \"etl\", \"transform\", \"processing\"],\n\t},\n\t{\n\t\tid: \"nlp-pipeline\",\n\t\tname: \"NLP Pipeline\",\n\t\tdescription:\n\t\t\t\"Natural language processing with summarization, translation, classification, and embeddings via Ollama\",\n\t\trequiredServices: [\"ollama\"],\n\t\tskills: [\"text-summarize\", \"text-translate\", \"text-classify\", \"text-embed\", \"ollama-local-llm\"],\n\t\ticon: \"🧠\",\n\t\ttags: [\"nlp\", \"text\", \"embeddings\", \"translation\"],\n\t},\n\t{\n\t\tid: \"image-processor\",\n\t\tname: \"Image Processor\",\n\t\tdescription: \"Resize, convert, and OCR images with ImageMagick and Tesseract\",\n\t\trequiredServices: [\"ffmpeg\"],\n\t\tskills: [\"image-resize\", \"image-convert\", \"image-ocr\", \"ffmpeg-process\"],\n\t\ticon: \"🖼️\",\n\t\ttags: [\"image\", \"ocr\", \"media\", \"conversion\"],\n\t},\n\t{\n\t\tid: \"api-integrator\",\n\t\tname: \"API Integrator\",\n\t\tdescription: \"HTTP requests, webhooks, and GraphQL queries for external API integration\",\n\t\trequiredServices: [],\n\t\tskills: [\"http-request\", \"api-webhook\", \"graphql-query\"],\n\t\ticon: \"🌐\",\n\t\ttags: [\"api\", \"http\", \"webhook\", \"graphql\"],\n\t},\n\t{\n\t\tid: \"security-ops\",\n\t\tname: \"Security Ops\",\n\t\tdescription: \"JWT validation, hashing, SSL checks, port scanning, and network diagnostics\",\n\t\trequiredServices: [],\n\t\tskills: [\"jwt-manage\", \"hash-generate\", \"ssl-check\", \"dns-lookup\", \"port-scan\", \"ping-check\"],\n\t\ticon: \"🛡️\",\n\t\ttags: [\"security\", \"networking\", \"diagnostics\"],\n\t},\n\t{\n\t\tid: \"communication-hub\",\n\t\tname: \"Communication Hub\",\n\t\tdescription:\n\t\t\t\"Multi-channel messaging with Matrix, Mattermost, Rocket.Chat, email, and push notifications\",\n\t\trequiredServices: [\"matrix-synapse\", \"gotify\"],\n\t\tskills: [\n\t\t\t\"matrix-message\",\n\t\t\t\"mattermost-post\",\n\t\t\t\"rocketchat-send\",\n\t\t\t\"gotify-notify\",\n\t\t\t\"ntfy-publish\",\n\t\t\t\"email-send\",\n\t\t],\n\t\ticon: \"📨\",\n\t\ttags: [\"messaging\", \"notifications\", \"email\", \"chat\"],\n\t},\n\t{\n\t\tid: \"analytics-suite\",\n\t\tname: \"Analytics Suite\",\n\t\tdescription: \"Web and product analytics with Matomo, Umami, OpenPanel, Grafana, and Prometheus\",\n\t\trequiredServices: [\"grafana\", \"prometheus\"],\n\t\tskills: [\n\t\t\t\"matomo-track\",\n\t\t\t\"umami-analytics\",\n\t\t\t\"openpanel-analyze\",\n\t\t\t\"grafana-dashboard\",\n\t\t\t\"prometheus-query\",\n\t\t],\n\t\ticon: \"📊\",\n\t\ttags: [\"analytics\", \"monitoring\", \"metrics\", \"dashboards\"],\n\t},\n\t{\n\t\tid: \"full-devops\",\n\t\tname: \"Full DevOps\",\n\t\tdescription:\n\t\t\t\"Complete DevOps toolkit with Git hosting, container management, deployments, monitoring, and log viewing\",\n\t\trequiredServices: [\"gitea\", \"portainer\", \"coolify\", \"grafana\", \"prometheus\"],\n\t\tskills: [\n\t\t\t\"gitea-repo\",\n\t\t\t\"portainer-manage\",\n\t\t\t\"coolify-deploy\",\n\t\t\t\"dokploy-deploy\",\n\t\t\t\"watchtower-update\",\n\t\t\t\"dozzle-logs\",\n\t\t\t\"grafana-dashboard\",\n\t\t\t\"prometheus-query\",\n\t\t\t\"uptime-kuma-monitor\",\n\t\t\t\"beszel-monitor\",\n\t\t],\n\t\ticon: \"🏗️\",\n\t\ttags: [\"devops\", \"ci-cd\", \"containers\", \"deployment\"],\n\t},\n\t{\n\t\tid: \"document-manager\",\n\t\tname: \"Document Manager\",\n\t\tdescription: \"Document processing pipeline with wiki, archival, OCR, Q&A, and PDF extraction\",\n\t\trequiredServices: [\"outline\", \"paperless-ngx\"],\n\t\tskills: [\"outline-wiki\", \"paperless-archive\", \"docsgpt-ask\", \"pdf-extract\", \"image-ocr\"],\n\t\ticon: \"📑\",\n\t\ttags: [\"documents\", \"wiki\", \"ocr\", \"archive\"],\n\t},\n\t{\n\t\tid: \"ai-coding-team\",\n\t\tname: \"AI Coding Team\",\n\t\tdescription:\n\t\t\t\"Multi-agent AI coding ensemble with Claude Code, Codex, Gemini CLI, OpenCode, and browser IDE\",\n\t\trequiredServices: [\"code-server\", \"gitea\"],\n\t\tskills: [\n\t\t\t\"claude-code-assist\",\n\t\t\t\"codex-generate\",\n\t\t\t\"gemini-cli-query\",\n\t\t\t\"opencode-develop\",\n\t\t\t\"code-server-develop\",\n\t\t\t\"gitea-repo\",\n\t\t],\n\t\ticon: \"🤖\",\n\t\ttags: [\"ai-coding\", \"agents\", \"development\", \"ide\"],\n\t},\n\t// ── Internet-Verified Skill Packs ────────────────────────────────\n\t{\n\t\tid: \"rag-pipeline\",\n\t\tname: \"RAG Pipeline\",\n\t\tdescription:\n\t\t\t\"Build retrieval-augmented generation systems with LangChain, LlamaIndex, Haystack, and vector databases\",\n\t\trequiredServices: [\"milvus\"],\n\t\tskills: [\n\t\t\t\"langchain-agent\",\n\t\t\t\"llamaindex-query\",\n\t\t\t\"haystack-rag\",\n\t\t\t\"ragflow-pipeline\",\n\t\t\t\"milvus-vectors\",\n\t\t\t\"firecrawl-scrape\",\n\t\t],\n\t\ticon: \"🧠\",\n\t\ttags: [\"rag\", \"ai\", \"embeddings\", \"search\", \"llm\"],\n\t},\n\t{\n\t\tid: \"self-hosted-cloud\",\n\t\tname: \"Self-Hosted Cloud\",\n\t\tdescription:\n\t\t\t\"Complete self-hosted infrastructure with cloud storage, photos, media streaming, and password management\",\n\t\trequiredServices: [\"nextcloud\", \"immich\", \"jellyfin\", \"vaultwarden\"],\n\t\tskills: [\"nextcloud-files\", \"immich-photos\", \"jellyfin-media\", \"vaultwarden-manage\"],\n\t\ticon: \"☁️\",\n\t\ttags: [\"self-hosted\", \"cloud\", \"storage\", \"media\", \"security\"],\n\t},\n\t{\n\t\tid: \"ai-agent-orchestra\",\n\t\tname: \"AI Agent Orchestra\",\n\t\tdescription:\n\t\t\t\"Multi-agent AI orchestration with CrewAI, AutoGPT, LangChain, Langflow, and Open Interpreter\",\n\t\trequiredServices: [],\n\t\tskills: [\n\t\t\t\"crewai-orchestrate\",\n\t\t\t\"autogpt-autonomous\",\n\t\t\t\"langchain-agent\",\n\t\t\t\"langflow-build\",\n\t\t\t\"open-interpreter-run\",\n\t\t],\n\t\ticon: \"🎭\",\n\t\ttags: [\"ai\", \"agents\", \"multi-agent\", \"orchestration\", \"autonomous\"],\n\t},\n\t{\n\t\tid: \"cicd-pipeline\",\n\t\tname: \"CI/CD Pipeline\",\n\t\tdescription: \"Full CI/CD pipeline with Jenkins, ArgoCD, Woodpecker, and infrastructure as code\",\n\t\trequiredServices: [\"jenkins\"],\n\t\tskills: [\n\t\t\t\"jenkins-pipeline\",\n\t\t\t\"argocd-deploy\",\n\t\t\t\"woodpecker-ci\",\n\t\t\t\"terraform-provision\",\n\t\t\t\"ansible-configure\",\n\t\t],\n\t\ticon: \"🔄\",\n\t\ttags: [\"ci-cd\", \"devops\", \"gitops\", \"infrastructure\"],\n\t},\n\t{\n\t\tid: \"zero-trust-security\",\n\t\tname: \"Zero-Trust Security\",\n\t\tdescription:\n\t\t\t\"Enterprise security with SSO, secrets management, VPN, intrusion detection, and feature flags\",\n\t\trequiredServices: [\"authentik\", \"crowdsec\"],\n\t\tskills: [\n\t\t\t\"authentik-auth\",\n\t\t\t\"keycloak-auth\",\n\t\t\t\"vault-secrets\",\n\t\t\t\"infisical-secrets\",\n\t\t\t\"netbird-vpn\",\n\t\t\t\"teleport-access\",\n\t\t\t\"crowdsec-protect\",\n\t\t],\n\t\ticon: \"🔒\",\n\t\ttags: [\"security\", \"zero-trust\", \"sso\", \"secrets\", \"vpn\"],\n\t},\n\t{\n\t\tid: \"content-platform\",\n\t\tname: \"Content Platform\",\n\t\tdescription:\n\t\t\t\"Publishing and CMS platform with Ghost, Strapi, Directus, and newsletter management\",\n\t\trequiredServices: [\"ghost\"],\n\t\tskills: [\n\t\t\t\"ghost-publish\",\n\t\t\t\"strapi-cms\",\n\t\t\t\"directus-cms\",\n\t\t\t\"listmonk-email\",\n\t\t\t\"plausible-analytics\",\n\t\t],\n\t\ticon: \"📝\",\n\t\ttags: [\"cms\", \"publishing\", \"blog\", \"newsletter\", \"analytics\"],\n\t},\n\t{\n\t\tid: \"backend-platform\",\n\t\tname: \"Backend Platform\",\n\t\tdescription: \"Backend-as-a-service with Supabase, Appwrite, PocketBase, and API gateway\",\n\t\trequiredServices: [\"supabase\"],\n\t\tskills: [\n\t\t\t\"supabase-query\",\n\t\t\t\"appwrite-backend\",\n\t\t\t\"pocketbase-backend\",\n\t\t\t\"kong-gateway\",\n\t\t\t\"rabbitmq-queue\",\n\t\t],\n\t\ticon: \"⚡\",\n\t\ttags: [\"backend\", \"baas\", \"api\", \"database\", \"messaging\"],\n\t},\n\t{\n\t\tid: \"observability-stack\",\n\t\tname: \"Observability Stack\",\n\t\tdescription:\n\t\t\t\"Full observability with Loki logs, SigNoz APM, Sentry errors, Gatus health, and Elasticsearch\",\n\t\trequiredServices: [\"loki\", \"signoz\"],\n\t\tskills: [\n\t\t\t\"loki-logs\",\n\t\t\t\"signoz-observe\",\n\t\t\t\"sentry-errors\",\n\t\t\t\"gatus-health\",\n\t\t\t\"elasticsearch-search\",\n\t\t],\n\t\ticon: \"📡\",\n\t\ttags: [\"observability\", \"logs\", \"apm\", \"errors\", \"health\"],\n\t},\n\t{\n\t\tid: \"document-hub\",\n\t\tname: \"Document Hub\",\n\t\tdescription:\n\t\t\t\"Document management with Paperless-ngx, BookStack wiki, Stirling PDF tools, and Excalidraw\",\n\t\trequiredServices: [\"paperless-ngx\"],\n\t\tskills: [\"paperless-ngx-docs\", \"bookstack-wiki\", \"stirling-pdf-tools\", \"excalidraw-draw\"],\n\t\ticon: \"📑\",\n\t\ttags: [\"documents\", \"wiki\", \"pdf\", \"collaboration\"],\n\t},\n\t{\n\t\tid: \"smart-home\",\n\t\tname: \"Smart Home\",\n\t\tdescription:\n\t\t\t\"Home automation and event-driven workflows with Home Assistant, Huginn, and Activepieces\",\n\t\trequiredServices: [\"homeassistant\"],\n\t\tskills: [\"home-assistant-automate\", \"huginn-automate\", \"activepieces-flow\"],\n\t\ticon: \"🏠\",\n\t\ttags: [\"iot\", \"automation\", \"smart-home\", \"workflows\"],\n\t},\n\t// ── Aura Build Frontend Design Skills ────────────────────────────\n\t{\n\t\tid: \"frontend-design\",\n\t\tname: \"Frontend Design\",\n\t\tdescription:\n\t\t\t\"Front-end design skills for UI systems, web animations, responsive layouts, copywriting, and asset management — sourced from Aura Build\",\n\t\trequiredServices: [],\n\t\tskills: [\n\t\t\t\"ui-prompting\",\n\t\t\t\"pricing-page-design\",\n\t\t\t\"landing-page-design\",\n\t\t\t\"gsap-animate\",\n\t\t\t\"threejs-scene\",\n\t\t\t\"matterjs-physics\",\n\t\t\t\"globe-gl-visualize\",\n\t\t\t\"tailwindcss-style\",\n\t\t\t\"css-border-gradient\",\n\t\t\t\"progressive-blur\",\n\t\t\t\"animation-on-scroll\",\n\t\t\t\"css-alpha-masking\",\n\t\t\t\"vantajs-background\",\n\t\t\t\"cobejs-globe\",\n\t\t\t\"unicorn-studio-embed\",\n\t\t\t\"ui-design-system\",\n\t\t\t\"tailwind-design-system-v4\",\n\t\t\t\"interaction-design\",\n\t\t\t\"responsive-design\",\n\t\t\t\"web-interface-guidelines\",\n\t\t\t\"threejs-animation\",\n\t\t\t\"copywriting\",\n\t\t\t\"frontend-distinctive-design\",\n\t\t\t\"canvas-design\",\n\t\t\t\"web-design-reviewer\",\n\t\t\t\"animejs-animate\",\n\t\t\t\"aura-asset-images\",\n\t\t],\n\t\ticon: \"🎨\",\n\t\ttags: [\"frontend\", \"design\", \"animation\", \"css\", \"ui\", \"web-design\"],\n\t},\n];\n\nconst packMap = new Map<string, SkillPack>();\nfor (const pack of skillPacks) {\n\tif (packMap.has(pack.id)) {\n\t\tthrow new Error(`Duplicate skill pack ID: \"${pack.id}\"`);\n\t}\n\tpackMap.set(pack.id, pack);\n}\n\nexport const skillPackRegistry: ReadonlyMap<string, SkillPack> = packMap;\n\nexport function getSkillPackById(id: string): SkillPack | undefined {\n\treturn packMap.get(id);\n}\n\nexport function getAllSkillPacks(): SkillPack[] {\n\treturn [...skillPacks];\n}\n\n/** Get skill packs whose required services are all present in the given service list */\nexport function getCompatibleSkillPacks(availableServiceIds: string[]): SkillPack[] {\n\treturn skillPacks.filter((pack) =>\n\t\tpack.requiredServices.every((req) => availableServiceIds.includes(req)),\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/skills/skill-manifest.d.ts
|
|
2
|
+
interface SkillManifestEntry {
|
|
3
|
+
/** Unique skill identifier, e.g. "gsap-animate" */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Relative path to the SKILL.md file */
|
|
6
|
+
path: string;
|
|
7
|
+
/** Display emoji */
|
|
8
|
+
emoji: string;
|
|
9
|
+
/** Docker service IDs this skill depends on (empty for frontend-only skills) */
|
|
10
|
+
services: string[];
|
|
11
|
+
}
|
|
12
|
+
/** Return all skills defined in the local manifest.json */
|
|
13
|
+
declare function getAllManifestSkills(): SkillManifestEntry[];
|
|
14
|
+
/** Look up a single skill by ID */
|
|
15
|
+
declare function getManifestSkillById(id: string): SkillManifestEntry | undefined;
|
|
16
|
+
/** Return the total count of curated skills */
|
|
17
|
+
declare function getManifestSkillCount(): number;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { SkillManifestEntry, getAllManifestSkills, getManifestSkillById, getManifestSkillCount };
|
|
20
|
+
//# sourceMappingURL=skill-manifest.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-manifest.d.mts","names":[],"sources":["../../src/skills/skill-manifest.ts"],"mappings":";UAQiB,kBAAA;EAAA;EAEhB,EAAA;;EAEA,IAAA;EAFA;EAIA,KAAA;EAAA;EAEA,QAAA;AAAA;;iBAyBe,oBAAA,CAAA,GAAwB,kBAAA;;iBAMxB,oBAAA,CAAqB,EAAA,WAAa,kBAAA;;iBAMlC,qBAAA,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { t as manifest_default } from "../manifest-DSGl8ITO.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/skills/skill-manifest.ts
|
|
4
|
+
const manifestData = manifest_default;
|
|
5
|
+
/** Return all skills defined in the local manifest.json */
|
|
6
|
+
function getAllManifestSkills() {
|
|
7
|
+
return manifestData.skills;
|
|
8
|
+
}
|
|
9
|
+
/** Look up a single skill by ID */
|
|
10
|
+
function getManifestSkillById(id) {
|
|
11
|
+
return manifestData.skills.find((s) => s.id === id);
|
|
12
|
+
}
|
|
13
|
+
/** Return the total count of curated skills */
|
|
14
|
+
function getManifestSkillCount() {
|
|
15
|
+
return manifestData.skills.length;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { getAllManifestSkills, getManifestSkillById, getManifestSkillCount };
|
|
20
|
+
//# sourceMappingURL=skill-manifest.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-manifest.mjs","names":["manifestJson"],"sources":["../../src/skills/skill-manifest.ts"],"sourcesContent":["// import { readFileSync } from \"node:fs\";\n// import { dirname, resolve } from \"node:path\";\n// import { fileURLToPath } from \"node:url\";\n//import manifestJson from \"../../../../skills/manifest.json\" with { type: \"json\" };\nimport manifestJson from \"./manifest.json\" with { type: \"json\" };\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SkillManifestEntry {\n\t/** Unique skill identifier, e.g. \"gsap-animate\" */\n\tid: string;\n\t/** Relative path to the SKILL.md file */\n\tpath: string;\n\t/** Display emoji */\n\temoji: string;\n\t/** Docker service IDs this skill depends on (empty for frontend-only skills) */\n\tservices: string[];\n}\n\ninterface SkillManifest {\n\tskills: SkillManifestEntry[];\n}\n\nconst manifestData = manifestJson as SkillManifest;\n\n// ── Manifest loader ─────────────────────────────────────────────────────────\n// let _cache: SkillManifestEntry[] | null = null;\n\n// function loadManifest(): SkillManifestEntry[] {\n// \tif (_cache) return _cache;\n// \t// Resolve the manifest relative to this file's location\n// \t// This file is at packages/core/src/skills/skill-manifest.ts\n// \t// The manifest is at skills/manifest.json (repo root / skills /)\n// \tconst thisDir = dirname(fileURLToPath(import.meta.url));\n// \tconst manifestPath = resolve(thisDir, \"../../../../skills/manifest.json\");\n// \tconst raw = readFileSync(manifestPath, \"utf-8\");\n// \tconst data = JSON.parse(raw) as SkillManifest;\n// \t_cache = data.skills;\n// \treturn _cache;\n// }\n/** Return all skills defined in the local manifest.json */\nexport function getAllManifestSkills(): SkillManifestEntry[] {\n\treturn manifestData.skills;\n\t//return loadManifest();\n}\n\n/** Look up a single skill by ID */\nexport function getManifestSkillById(id: string): SkillManifestEntry | undefined {\n\treturn manifestData.skills.find((s) => s.id === id);\n\t//return loadManifest().find((s) => s.id === id);\n}\n\n/** Return the total count of curated skills */\nexport function getManifestSkillCount(): number {\n\treturn manifestData.skills.length;\n\t//return loadManifest().length;\n}\n"],"mappings":";;;AAuBA,MAAM,eAAeA;;AAkBrB,SAAgB,uBAA6C;AAC5D,QAAO,aAAa;;;AAKrB,SAAgB,qBAAqB,IAA4C;AAChF,QAAO,aAAa,OAAO,MAAM,MAAM,EAAE,OAAO,GAAG;;;AAKpD,SAAgB,wBAAgC;AAC/C,QAAO,aAAa,OAAO"}
|
package/dist/validator.test.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-BgmKutxR.mjs";
|
|
2
2
|
import { resolve } from "./resolver.mjs";
|
|
3
3
|
import { compose } from "./composer.mjs";
|
|
4
4
|
import { validate } from "./validator.mjs";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-BgmKutxR.mjs";
|
|
2
2
|
import { getAllServices, getServiceById } from "./services/registry.mjs";
|
|
3
3
|
import { resolve } from "./resolver.mjs";
|
|
4
4
|
import { checkCompatibility, getImageReference, getImageTag, pinImageTags } from "./version-manager.mjs";
|