@better-openclaw/core 1.0.9 → 1.0.10

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.
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { partitionBareMetal, platformToNativePlatform, resolvedWithOnlyServices } from "./bare-metal-partition.mjs";
3
3
  import { resolve } from "./resolver.mjs";
4
4
 
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { resolve } from "./resolver.mjs";
3
3
  import { composeMultiFile } from "./composer.mjs";
4
4
 
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { resolve } from "./resolver.mjs";
3
3
  import { compose } from "./composer.mjs";
4
4
  import { parse } from "yaml";
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { generate } from "./generate.mjs";
3
3
  import { parse } from "yaml";
4
4
 
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { generateBareMetalInstall } from "./bare-metal-install.mjs";
3
3
 
4
4
  //#region src/generators/bare-metal-install.test.ts
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { resolve } from "../resolver.mjs";
3
3
  import { generateTraefikConfig } from "./traefik.mjs";
4
4
 
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { CURRENT_CONFIG_VERSION, migrateConfig, needsMigration } from "./migrations.mjs";
3
3
 
4
4
  //#region src/migrations.test.ts
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { getAllPresets, getPresetById } from "./registry.mjs";
3
3
 
4
4
  //#region src/presets/registry.test.ts
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { resolve } from "./resolver.mjs";
3
3
 
4
4
  //#region src/resolver.test.ts
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.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,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-YSByewHe.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":";;;cA8Ga,iBAAA,EAAmB,WAAA,SAAoB,SAAA;AAAA,iBAEpC,gBAAA,CAAiB,EAAA,WAAa,SAAA;AAAA,iBAI9B,gBAAA,CAAA,GAAoB,SAAA;;iBAKpB,uBAAA,CAAwB,mBAAA,aAAgC,SAAA"}
1
+ {"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/skills/registry.ts"],"mappings":";;;cAwca,iBAAA,EAAmB,WAAA,SAAoB,SAAA;AAAA,iBAEpC,gBAAA,CAAiB,EAAA,WAAa,SAAA;AAAA,iBAI9B,gBAAA,CAAA,GAAoB,SAAA;;iBAKpB,uBAAA,CAAwB,mBAAA,aAAgC,SAAA"}
@@ -74,7 +74,13 @@ const skillPacks = [
74
74
  "grafana",
75
75
  "prometheus"
76
76
  ],
77
- skills: ["n8n-trigger", "redis-cache"],
77
+ skills: [
78
+ "n8n-trigger",
79
+ "redis-cache",
80
+ "grafana-dashboard",
81
+ "prometheus-query",
82
+ "uptime-kuma-monitor"
83
+ ],
78
84
  icon: "⚙️",
79
85
  tags: [
80
86
  "devops",
@@ -91,7 +97,11 @@ const skillPacks = [
91
97
  "postgresql",
92
98
  "meilisearch"
93
99
  ],
94
- skills: ["qdrant-memory"],
100
+ skills: [
101
+ "qdrant-memory",
102
+ "postgresql-query",
103
+ "meilisearch-index"
104
+ ],
95
105
  icon: "📚",
96
106
  tags: [
97
107
  "knowledge",
@@ -126,7 +136,8 @@ const skillPacks = [
126
136
  skills: [
127
137
  "ffmpeg-process",
128
138
  "minio-storage",
129
- "redis-cache"
139
+ "redis-cache",
140
+ "postiz-schedule"
130
141
  ],
131
142
  icon: "📱",
132
143
  tags: [
@@ -145,7 +156,11 @@ const skillPacks = [
145
156
  "open-webui",
146
157
  "litellm"
147
158
  ],
148
- skills: ["ollama-local-llm"],
159
+ skills: [
160
+ "ollama-local-llm",
161
+ "open-webui-chat",
162
+ "litellm-gateway"
163
+ ],
149
164
  icon: "🧪",
150
165
  tags: [
151
166
  "ai",
@@ -163,7 +178,11 @@ const skillPacks = [
163
178
  "gitea",
164
179
  "code-server"
165
180
  ],
166
- skills: [],
181
+ skills: [
182
+ "claude-code-assist",
183
+ "gitea-repo",
184
+ "code-server-develop"
185
+ ],
167
186
  icon: "💻",
168
187
  tags: [
169
188
  "coding",
@@ -183,7 +202,13 @@ const skillPacks = [
183
202
  "postgresql",
184
203
  "redis"
185
204
  ],
186
- skills: ["qdrant-memory"],
205
+ skills: [
206
+ "qdrant-memory",
207
+ "outline-wiki",
208
+ "paperless-archive",
209
+ "postgresql-query",
210
+ "redis-cache"
211
+ ],
187
212
  icon: "📚",
188
213
  tags: [
189
214
  "knowledge",
@@ -191,6 +216,429 @@ const skillPacks = [
191
216
  "documents",
192
217
  "search"
193
218
  ]
219
+ },
220
+ {
221
+ id: "data-engineer",
222
+ name: "Data Engineer",
223
+ description: "Process and transform data with PostgreSQL, CSV/JSON/XML transforms, and PDF extraction",
224
+ requiredServices: ["postgresql"],
225
+ skills: [
226
+ "postgresql-query",
227
+ "csv-transform",
228
+ "json-transform",
229
+ "xml-parse",
230
+ "pdf-extract",
231
+ "excel-process",
232
+ "markdown-convert"
233
+ ],
234
+ icon: "🔧",
235
+ tags: [
236
+ "data",
237
+ "etl",
238
+ "transform",
239
+ "processing"
240
+ ]
241
+ },
242
+ {
243
+ id: "nlp-pipeline",
244
+ name: "NLP Pipeline",
245
+ description: "Natural language processing with summarization, translation, classification, and embeddings via Ollama",
246
+ requiredServices: ["ollama"],
247
+ skills: [
248
+ "text-summarize",
249
+ "text-translate",
250
+ "text-classify",
251
+ "text-embed",
252
+ "ollama-local-llm"
253
+ ],
254
+ icon: "🧠",
255
+ tags: [
256
+ "nlp",
257
+ "text",
258
+ "embeddings",
259
+ "translation"
260
+ ]
261
+ },
262
+ {
263
+ id: "image-processor",
264
+ name: "Image Processor",
265
+ description: "Resize, convert, and OCR images with ImageMagick and Tesseract",
266
+ requiredServices: ["ffmpeg"],
267
+ skills: [
268
+ "image-resize",
269
+ "image-convert",
270
+ "image-ocr",
271
+ "ffmpeg-process"
272
+ ],
273
+ icon: "🖼️",
274
+ tags: [
275
+ "image",
276
+ "ocr",
277
+ "media",
278
+ "conversion"
279
+ ]
280
+ },
281
+ {
282
+ id: "api-integrator",
283
+ name: "API Integrator",
284
+ description: "HTTP requests, webhooks, and GraphQL queries for external API integration",
285
+ requiredServices: [],
286
+ skills: [
287
+ "http-request",
288
+ "api-webhook",
289
+ "graphql-query"
290
+ ],
291
+ icon: "🌐",
292
+ tags: [
293
+ "api",
294
+ "http",
295
+ "webhook",
296
+ "graphql"
297
+ ]
298
+ },
299
+ {
300
+ id: "security-ops",
301
+ name: "Security Ops",
302
+ description: "JWT validation, hashing, SSL checks, port scanning, and network diagnostics",
303
+ requiredServices: [],
304
+ skills: [
305
+ "jwt-manage",
306
+ "hash-generate",
307
+ "ssl-check",
308
+ "dns-lookup",
309
+ "port-scan",
310
+ "ping-check"
311
+ ],
312
+ icon: "🛡️",
313
+ tags: [
314
+ "security",
315
+ "networking",
316
+ "diagnostics"
317
+ ]
318
+ },
319
+ {
320
+ id: "communication-hub",
321
+ name: "Communication Hub",
322
+ description: "Multi-channel messaging with Matrix, Mattermost, Rocket.Chat, email, and push notifications",
323
+ requiredServices: ["matrix-synapse", "gotify"],
324
+ skills: [
325
+ "matrix-message",
326
+ "mattermost-post",
327
+ "rocketchat-send",
328
+ "gotify-notify",
329
+ "ntfy-publish",
330
+ "email-send"
331
+ ],
332
+ icon: "📨",
333
+ tags: [
334
+ "messaging",
335
+ "notifications",
336
+ "email",
337
+ "chat"
338
+ ]
339
+ },
340
+ {
341
+ id: "analytics-suite",
342
+ name: "Analytics Suite",
343
+ description: "Web and product analytics with Matomo, Umami, OpenPanel, Grafana, and Prometheus",
344
+ requiredServices: ["grafana", "prometheus"],
345
+ skills: [
346
+ "matomo-track",
347
+ "umami-analytics",
348
+ "openpanel-analyze",
349
+ "grafana-dashboard",
350
+ "prometheus-query"
351
+ ],
352
+ icon: "📊",
353
+ tags: [
354
+ "analytics",
355
+ "monitoring",
356
+ "metrics",
357
+ "dashboards"
358
+ ]
359
+ },
360
+ {
361
+ id: "full-devops",
362
+ name: "Full DevOps",
363
+ description: "Complete DevOps toolkit with Git hosting, container management, deployments, monitoring, and log viewing",
364
+ requiredServices: [
365
+ "gitea",
366
+ "portainer",
367
+ "coolify",
368
+ "grafana",
369
+ "prometheus"
370
+ ],
371
+ skills: [
372
+ "gitea-repo",
373
+ "portainer-manage",
374
+ "coolify-deploy",
375
+ "dokploy-deploy",
376
+ "watchtower-update",
377
+ "dozzle-logs",
378
+ "grafana-dashboard",
379
+ "prometheus-query",
380
+ "uptime-kuma-monitor",
381
+ "beszel-monitor"
382
+ ],
383
+ icon: "🏗️",
384
+ tags: [
385
+ "devops",
386
+ "ci-cd",
387
+ "containers",
388
+ "deployment"
389
+ ]
390
+ },
391
+ {
392
+ id: "document-manager",
393
+ name: "Document Manager",
394
+ description: "Document processing pipeline with wiki, archival, OCR, Q&A, and PDF extraction",
395
+ requiredServices: ["outline", "paperless-ngx"],
396
+ skills: [
397
+ "outline-wiki",
398
+ "paperless-archive",
399
+ "docsgpt-ask",
400
+ "pdf-extract",
401
+ "image-ocr"
402
+ ],
403
+ icon: "📑",
404
+ tags: [
405
+ "documents",
406
+ "wiki",
407
+ "ocr",
408
+ "archive"
409
+ ]
410
+ },
411
+ {
412
+ id: "ai-coding-team",
413
+ name: "AI Coding Team",
414
+ description: "Multi-agent AI coding ensemble with Claude Code, Codex, Gemini CLI, OpenCode, and browser IDE",
415
+ requiredServices: ["code-server", "gitea"],
416
+ skills: [
417
+ "claude-code-assist",
418
+ "codex-generate",
419
+ "gemini-cli-query",
420
+ "opencode-develop",
421
+ "code-server-develop",
422
+ "gitea-repo"
423
+ ],
424
+ icon: "🤖",
425
+ tags: [
426
+ "ai-coding",
427
+ "agents",
428
+ "development",
429
+ "ide"
430
+ ]
431
+ },
432
+ {
433
+ id: "rag-pipeline",
434
+ name: "RAG Pipeline",
435
+ description: "Build retrieval-augmented generation systems with LangChain, LlamaIndex, Haystack, and vector databases",
436
+ requiredServices: ["milvus"],
437
+ skills: [
438
+ "langchain-agent",
439
+ "llamaindex-query",
440
+ "haystack-rag",
441
+ "ragflow-pipeline",
442
+ "milvus-vectors",
443
+ "firecrawl-scrape"
444
+ ],
445
+ icon: "🧠",
446
+ tags: [
447
+ "rag",
448
+ "ai",
449
+ "embeddings",
450
+ "search",
451
+ "llm"
452
+ ]
453
+ },
454
+ {
455
+ id: "self-hosted-cloud",
456
+ name: "Self-Hosted Cloud",
457
+ description: "Complete self-hosted infrastructure with cloud storage, photos, media streaming, and password management",
458
+ requiredServices: [
459
+ "nextcloud",
460
+ "immich",
461
+ "jellyfin",
462
+ "vaultwarden"
463
+ ],
464
+ skills: [
465
+ "nextcloud-files",
466
+ "immich-photos",
467
+ "jellyfin-media",
468
+ "vaultwarden-manage"
469
+ ],
470
+ icon: "☁️",
471
+ tags: [
472
+ "self-hosted",
473
+ "cloud",
474
+ "storage",
475
+ "media",
476
+ "security"
477
+ ]
478
+ },
479
+ {
480
+ id: "ai-agent-orchestra",
481
+ name: "AI Agent Orchestra",
482
+ description: "Multi-agent AI orchestration with CrewAI, AutoGPT, LangChain, Langflow, and Open Interpreter",
483
+ requiredServices: [],
484
+ skills: [
485
+ "crewai-orchestrate",
486
+ "autogpt-autonomous",
487
+ "langchain-agent",
488
+ "langflow-build",
489
+ "open-interpreter-run"
490
+ ],
491
+ icon: "🎭",
492
+ tags: [
493
+ "ai",
494
+ "agents",
495
+ "multi-agent",
496
+ "orchestration",
497
+ "autonomous"
498
+ ]
499
+ },
500
+ {
501
+ id: "cicd-pipeline",
502
+ name: "CI/CD Pipeline",
503
+ description: "Full CI/CD pipeline with Jenkins, ArgoCD, Woodpecker, and infrastructure as code",
504
+ requiredServices: ["jenkins"],
505
+ skills: [
506
+ "jenkins-pipeline",
507
+ "argocd-deploy",
508
+ "woodpecker-ci",
509
+ "terraform-provision",
510
+ "ansible-configure"
511
+ ],
512
+ icon: "🔄",
513
+ tags: [
514
+ "ci-cd",
515
+ "devops",
516
+ "gitops",
517
+ "infrastructure"
518
+ ]
519
+ },
520
+ {
521
+ id: "zero-trust-security",
522
+ name: "Zero-Trust Security",
523
+ description: "Enterprise security with SSO, secrets management, VPN, intrusion detection, and feature flags",
524
+ requiredServices: ["authentik", "crowdsec"],
525
+ skills: [
526
+ "authentik-auth",
527
+ "keycloak-auth",
528
+ "vault-secrets",
529
+ "infisical-secrets",
530
+ "netbird-vpn",
531
+ "teleport-access",
532
+ "crowdsec-protect"
533
+ ],
534
+ icon: "🔒",
535
+ tags: [
536
+ "security",
537
+ "zero-trust",
538
+ "sso",
539
+ "secrets",
540
+ "vpn"
541
+ ]
542
+ },
543
+ {
544
+ id: "content-platform",
545
+ name: "Content Platform",
546
+ description: "Publishing and CMS platform with Ghost, Strapi, Directus, and newsletter management",
547
+ requiredServices: ["ghost"],
548
+ skills: [
549
+ "ghost-publish",
550
+ "strapi-cms",
551
+ "directus-cms",
552
+ "listmonk-email",
553
+ "plausible-analytics"
554
+ ],
555
+ icon: "📝",
556
+ tags: [
557
+ "cms",
558
+ "publishing",
559
+ "blog",
560
+ "newsletter",
561
+ "analytics"
562
+ ]
563
+ },
564
+ {
565
+ id: "backend-platform",
566
+ name: "Backend Platform",
567
+ description: "Backend-as-a-service with Supabase, Appwrite, PocketBase, and API gateway",
568
+ requiredServices: ["supabase"],
569
+ skills: [
570
+ "supabase-query",
571
+ "appwrite-backend",
572
+ "pocketbase-backend",
573
+ "kong-gateway",
574
+ "rabbitmq-queue"
575
+ ],
576
+ icon: "⚡",
577
+ tags: [
578
+ "backend",
579
+ "baas",
580
+ "api",
581
+ "database",
582
+ "messaging"
583
+ ]
584
+ },
585
+ {
586
+ id: "observability-stack",
587
+ name: "Observability Stack",
588
+ description: "Full observability with Loki logs, SigNoz APM, Sentry errors, Gatus health, and Elasticsearch",
589
+ requiredServices: ["loki", "signoz"],
590
+ skills: [
591
+ "loki-logs",
592
+ "signoz-observe",
593
+ "sentry-errors",
594
+ "gatus-health",
595
+ "elasticsearch-search"
596
+ ],
597
+ icon: "📡",
598
+ tags: [
599
+ "observability",
600
+ "logs",
601
+ "apm",
602
+ "errors",
603
+ "health"
604
+ ]
605
+ },
606
+ {
607
+ id: "document-hub",
608
+ name: "Document Hub",
609
+ description: "Document management with Paperless-ngx, BookStack wiki, Stirling PDF tools, and Excalidraw",
610
+ requiredServices: ["paperless-ngx"],
611
+ skills: [
612
+ "paperless-ngx-docs",
613
+ "bookstack-wiki",
614
+ "stirling-pdf-tools",
615
+ "excalidraw-draw"
616
+ ],
617
+ icon: "📑",
618
+ tags: [
619
+ "documents",
620
+ "wiki",
621
+ "pdf",
622
+ "collaboration"
623
+ ]
624
+ },
625
+ {
626
+ id: "smart-home",
627
+ name: "Smart Home",
628
+ description: "Home automation and event-driven workflows with Home Assistant, Huginn, and Activepieces",
629
+ requiredServices: ["homeassistant"],
630
+ skills: [
631
+ "home-assistant-automate",
632
+ "huginn-automate",
633
+ "activepieces-flow"
634
+ ],
635
+ icon: "🏠",
636
+ tags: [
637
+ "iot",
638
+ "automation",
639
+ "smart-home",
640
+ "workflows"
641
+ ]
194
642
  }
195
643
  ];
196
644
  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: [\"n8n-trigger\", \"redis-cache\"],\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\"],\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\"],\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\"],\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: [],\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: [\"qdrant-memory\"],\n\t\ticon: \"📚\",\n\t\ttags: [\"knowledge\", \"wiki\", \"documents\", \"search\"],\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":";AAEA,MAAM,aAA0B;CAC/B;EACC,IAAI;EACJ,MAAM;EACN,aACC;EACD,kBAAkB;GAAC;GAAU;GAAY;GAAQ;EACjD,QAAQ;GAAC;GAAkB;GAAmB;GAAgB;EAC9D,MAAM;EACN,MAAM;GAAC;GAAS;GAAS;GAAY;EACrC;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,kBAAkB;GAAC;GAAU;GAAW;GAAc;EACtD,QAAQ;GAAC;GAAiB;GAAkB;GAAqB;EACjE,MAAM;EACN,MAAM;GAAC;GAAY;GAAO;GAAe;EACzC;CACD;EACC,IAAI;EACJ,MAAM;EACN,aACC;EACD,kBAAkB;GAAC;GAAU;GAAS;GAAQ;EAC9C,QAAQ;GAAC;GAAkB;GAAe;GAAgB;EAC1D,MAAM;EACN,MAAM;GAAC;GAAU;GAAW;GAAa;EACzC;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,kBAAkB;GAAC;GAAO;GAAS;GAAe;GAAW;GAAa;EAC1E,QAAQ,CAAC,eAAe,cAAc;EACtC,MAAM;EACN,MAAM;GAAC;GAAU;GAAc;GAAa;EAC5C;CACD;EACC,IAAI;EACJ,MAAM;EACN,aACC;EACD,kBAAkB;GAAC;GAAU;GAAc;GAAc;EACzD,QAAQ,CAAC,gBAAgB;EACzB,MAAM;EACN,MAAM;GAAC;GAAa;GAAU;GAAW;EACzC;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,kBAAkB,CAAC,UAAU,UAAU;EACvC,QAAQ,CAAC,oBAAoB,qBAAqB;EAClD,MAAM;EACN,MAAM;GAAC;GAAa;GAAiB;GAAU;EAC/C;CACD;EACC,IAAI;EACJ,MAAM;EACN,aACC;EACD,kBAAkB;GAAC;GAAU;GAAU;GAAS;GAAS;GAAa;EACtE,QAAQ;GAAC;GAAkB;GAAiB;GAAc;EAC1D,MAAM;EACN,MAAM;GAAC;GAAgB;GAAW;GAAc;GAAY;EAC5D;CACD;EACC,IAAI;EACJ,MAAM;EACN,aACC;EACD,kBAAkB;GAAC;GAAU;GAAc;GAAU;EACrD,QAAQ,CAAC,mBAAmB;EAC5B,MAAM;EACN,MAAM;GAAC;GAAM;GAAO;GAAc;GAAkB;EACpD;CACD;EACC,IAAI;EACJ,MAAM;EACN,aACC;EACD,kBAAkB;GAAC;GAAe;GAAS;GAAc;EACzD,QAAQ,EAAE;EACV,MAAM;EACN,MAAM;GAAC;GAAU;GAAe;GAAO;GAAM;EAC7C;CACD;EACC,IAAI;EACJ,MAAM;EACN,aACC;EACD,kBAAkB;GAAC;GAAW;GAAiB;GAAU;GAAc;GAAQ;EAC/E,QAAQ,CAAC,gBAAgB;EACzB,MAAM;EACN,MAAM;GAAC;GAAa;GAAQ;GAAa;GAAS;EAClD;CACD;AAED,MAAM,0BAAU,IAAI,KAAwB;AAC5C,KAAK,MAAM,QAAQ,YAAY;AAC9B,KAAI,QAAQ,IAAI,KAAK,GAAG,CACvB,OAAM,IAAI,MAAM,6BAA6B,KAAK,GAAG,GAAG;AAEzD,SAAQ,IAAI,KAAK,IAAI,KAAK;;AAG3B,MAAa,oBAAoD;AAEjE,SAAgB,iBAAiB,IAAmC;AACnE,QAAO,QAAQ,IAAI,GAAG;;AAGvB,SAAgB,mBAAgC;AAC/C,QAAO,CAAC,GAAG,WAAW;;;AAIvB,SAAgB,wBAAwB,qBAA4C;AACnF,QAAO,WAAW,QAAQ,SACzB,KAAK,iBAAiB,OAAO,QAAQ,oBAAoB,SAAS,IAAI,CAAC,CACvE"}
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,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.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-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-YSByewHe.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";