aidevops 2.104.0 → 2.105.0
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/README.md +147 -118
- package/VERSION +1 -1
- package/aidevops.sh +54 -13
- package/package.json +1 -1
- package/setup.sh +646 -357
- package/templates/home/AGENTS.md +2 -2
- package/templates/home/git/AGENTS.md +1 -1
- package/templates/opencode-config-agents.md +15 -0
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
The result: AI agents that work *with* your development process, not around it.
|
|
17
17
|
|
|
18
|
-
**Built on proven patterns**: aidevops implements [industry-standard agent design patterns](#agent-design-patterns)
|
|
18
|
+
**Built on proven patterns**: aidevops implements [industry-standard agent design patterns](#agent-design-patterns) - including multi-layer action spaces, context isolation, and iterative execution loops.
|
|
19
19
|
|
|
20
20
|
**[aidevops](https://aidevops.sh)** knows what you need to know.
|
|
21
21
|
|
|
@@ -87,13 +87,14 @@ The result: AI agents that work *with* your development process, not around it.
|
|
|
87
87
|
|
|
88
88
|
- `aidevops init` - Initialize in any project
|
|
89
89
|
- `aidevops update` - Update framework
|
|
90
|
+
- `aidevops secret` - Manage secrets (gopass encrypted, AI-safe)
|
|
90
91
|
- `/onboarding` - Interactive setup wizard (in AI assistant)
|
|
91
92
|
|
|
92
93
|
### Agent Structure
|
|
93
94
|
|
|
94
95
|
- Primary agents (Build+, SEO, Marketing, etc.) with @plan-plus subagent for planning-only mode
|
|
95
|
-
-
|
|
96
|
-
-
|
|
96
|
+
- 765+ subagent markdown files organized by domain
|
|
97
|
+
- 172 helper scripts in `.agents/scripts/`
|
|
97
98
|
- 28 slash commands for common workflows
|
|
98
99
|
|
|
99
100
|
<!-- AI-CONTEXT-END -->
|
|
@@ -151,7 +152,9 @@ git clone https://github.com/marcusquinn/aidevops.git ~/Git/aidevops
|
|
|
151
152
|
- Deploy agents to `~/.aidevops/agents/`
|
|
152
153
|
- Install the `aidevops` CLI command
|
|
153
154
|
- Configure your AI assistants automatically
|
|
155
|
+
- Offer to install Oh My Zsh (optional, opt-in) for enhanced shell experience
|
|
154
156
|
- Guide you through recommended tools (Tabby, Zed, Git CLIs)
|
|
157
|
+
- Ensure all PATH and alias changes work in both bash and zsh
|
|
155
158
|
|
|
156
159
|
**New users: Start [OpenCode](https://opencode.ai/) and type `/onboarding`** to configure your services interactively. OpenCode is the recommended tool for aidevops - all features, agents, and workflows are designed and tested for it first. The onboarding wizard will:
|
|
157
160
|
- Explain what **[aidevops](https://aidevops.sh)** can do
|
|
@@ -291,38 +294,6 @@ opencode auth login
|
|
|
291
294
|
- **Automatic token refresh** - No manual re-authentication needed
|
|
292
295
|
- **Beta features enabled** - Extended thinking modes and latest features
|
|
293
296
|
|
|
294
|
-
### Oh-My-OpenCode Plugin (Optional)
|
|
295
|
-
|
|
296
|
-
The setup offers to install [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) - a complementary plugin that adds **coding productivity features**:
|
|
297
|
-
|
|
298
|
-
| Feature | Description |
|
|
299
|
-
|---------|-------------|
|
|
300
|
-
| **Async Background Agents** | Run multiple agents in parallel (like Claude Code) |
|
|
301
|
-
| **LSP Tools** | 11 tools: hover, goto definition, references, rename, code actions |
|
|
302
|
-
| **AST-Grep** | Semantic code search and replace across 25 languages |
|
|
303
|
-
| **Curated Agents** | OmO (Opus 4.5), Oracle (GPT 5.2), Librarian (Sonnet 4.5), Explore (Grok) |
|
|
304
|
-
| **Claude Code Compatibility** | Full support for hooks, commands, skills from `.claude/` directories |
|
|
305
|
-
| **21 Lifecycle Hooks** | Comment checker, todo enforcer, context window monitor, session recovery |
|
|
306
|
-
|
|
307
|
-
**How they complement each other:**
|
|
308
|
-
|
|
309
|
-
- **aidevops** provides DevOps infrastructure (30+ services: hosting, DNS, WordPress, SEO, code quality)
|
|
310
|
-
- **oh-my-opencode** provides coding productivity (LSP, AST, background agents, hooks)
|
|
311
|
-
|
|
312
|
-
**Usage after installation:**
|
|
313
|
-
|
|
314
|
-
```bash
|
|
315
|
-
# Trigger maximum performance mode
|
|
316
|
-
> ultrawork implement the authentication system
|
|
317
|
-
|
|
318
|
-
# Use curated agents
|
|
319
|
-
> @oracle review this architecture
|
|
320
|
-
> @librarian find examples of this pattern on GitHub
|
|
321
|
-
> @explore search for authentication handling
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
See `.agents/tools/opencode/oh-my-opencode.md` for the full compatibility guide.
|
|
325
|
-
|
|
326
297
|
### GitHub AI Agent Integration
|
|
327
298
|
|
|
328
299
|
Enable AI-powered issue resolution directly from GitHub. Comment `/oc fix this` on any issue and the AI creates a branch, implements the fix, and opens a PR.
|
|
@@ -361,7 +332,7 @@ The secure workflow is included at `.github/workflows/opencode-agent.yml`.
|
|
|
361
332
|
|
|
362
333
|
See `.agents/tools/git/opencode-github-security.md` for the full security documentation.
|
|
363
334
|
|
|
364
|
-
**Supported AI
|
|
335
|
+
**Supported AI Assistant:** [OpenCode](https://opencode.ai/) is the only tested and supported AI coding tool for aidevops. All features, agents, and workflows are designed and tested for OpenCode first. The claude-code CLI is used as a companion tool called from within OpenCode.
|
|
365
336
|
|
|
366
337
|
**Recommended:**
|
|
367
338
|
|
|
@@ -381,38 +352,11 @@ Your terminal tab/window title automatically shows `repo/branch` context when wo
|
|
|
381
352
|
|
|
382
353
|
See `.agents/tools/terminal/terminal-title.md` for customization options.
|
|
383
354
|
|
|
384
|
-
**
|
|
385
|
-
|
|
386
|
-
**IDE-Based:**
|
|
387
|
-
|
|
388
|
-
- **[Cursor](https://cursor.sh/)** - AI-first IDE with MCP support
|
|
389
|
-
- **[Windsurf](https://codeium.com/windsurf)** - Codeium's AI IDE
|
|
390
|
-
- **[Continue.dev](https://continue.dev/)** - VS Code/JetBrains extension
|
|
391
|
-
- **[Cody](https://sourcegraph.com/cody)** - Sourcegraph's AI assistant
|
|
392
|
-
|
|
393
|
-
**Claude Family:**
|
|
394
|
-
|
|
395
|
-
- **[Claude Code](https://claude.ai/)** - CLI version with `claude mcp add`
|
|
396
|
-
- **[Claude Desktop](https://claude.ai/)** - GUI with MCP config
|
|
397
|
-
|
|
398
|
-
**Enterprise & Professional:**
|
|
399
|
-
|
|
400
|
-
- **[Factory AI Droid](https://www.factory.ai/)** - Enterprise-grade agentic AI
|
|
401
|
-
- **[Augment Code](https://www.augmentcode.com/)** - Deep codebase indexing
|
|
402
|
-
- **[GitHub Copilot](https://github.com/features/copilot)** - Agent mode for MCP
|
|
403
|
-
|
|
404
|
-
**Specialized:**
|
|
355
|
+
**Companion tool:**
|
|
405
356
|
|
|
406
|
-
- **[
|
|
407
|
-
- **[Kiro](https://kiro.dev/)** - AWS's AI assistant
|
|
408
|
-
- **[AntiGravity](https://antigravity.dev/)** - AI coding tool
|
|
409
|
-
- **[Gemini CLI](https://ai.google.dev/)** - Google's CLI
|
|
357
|
+
- **[claude-code CLI](https://claude.ai/)** - Called from within OpenCode for sub-tasks and headless dispatch
|
|
410
358
|
|
|
411
|
-
**
|
|
412
|
-
|
|
413
|
-
- **[Aider](https://aider.chat/)** - CLI pair programmer with native MCP
|
|
414
|
-
- **[Warp AI](https://www.warp.dev/)** - Terminal with AI (no native MCP, use OpenCode/Claude in Warp)
|
|
415
|
-
- **[Qwen](https://qwen.ai/)** - Alibaba's CLI (MCP support experimental)
|
|
359
|
+
**Collaborator compatibility:** Projects initialized with `aidevops init` include pointer files (`.cursorrules`, `.windsurfrules`, etc.) that reference `AGENTS.md`, helping collaborators using other editors find project context. aidevops does not install into or configure those tools.
|
|
416
360
|
|
|
417
361
|
## **Core Capabilities**
|
|
418
362
|
|
|
@@ -468,10 +412,29 @@ aidevops skill add clawdhub:<slug> # Import a skill from ClawdHub
|
|
|
468
412
|
aidevops skill list # List imported skills
|
|
469
413
|
aidevops skill check # Check for upstream updates
|
|
470
414
|
aidevops skill update [name] # Update specific or all skills
|
|
415
|
+
aidevops skill scan [name] # Security scan skills (Cisco Skill Scanner)
|
|
471
416
|
aidevops skill remove <name> # Remove an imported skill
|
|
472
417
|
```
|
|
473
418
|
|
|
474
|
-
Skills are registered in `~/.aidevops/agents/configs/skill-sources.json` with upstream tracking for update detection.
|
|
419
|
+
Skills are registered in `~/.aidevops/agents/configs/skill-sources.json` with upstream tracking for update detection.
|
|
420
|
+
|
|
421
|
+
**Security Scanning:**
|
|
422
|
+
|
|
423
|
+
Imported skills are automatically security-scanned using [Cisco Skill Scanner](https://github.com/cisco-ai-defense/skill-scanner) when installed. Scanning runs on both initial import and updates -- pulling a new version of a skill triggers the same security checks as the first import. CRITICAL/HIGH findings block the operation; MEDIUM/LOW findings warn but allow. Telemetry is disabled - no data is sent to third parties.
|
|
424
|
+
|
|
425
|
+
When a [VirusTotal](https://www.virustotal.com/) API key is configured (`aidevops secret set VIRUSTOTAL_MARCUSQUINN`), an advisory second layer scans file hashes against 70+ AV engines and checks domains/URLs referenced in skill content. VT scans are non-blocking -- the Cisco scanner remains the security gate.
|
|
426
|
+
|
|
427
|
+
| Scenario | Security scan runs? | CRITICAL/HIGH blocks? |
|
|
428
|
+
|----------|--------------------|-----------------------|
|
|
429
|
+
| `aidevops skill add <source>` | Yes | Yes |
|
|
430
|
+
| `aidevops skill update [name]` | Yes | Yes |
|
|
431
|
+
| `aidevops skill add <source> --force` | Yes | Yes |
|
|
432
|
+
| `aidevops skill add <source> --skip-security` | Yes (reports only) | No (warns) |
|
|
433
|
+
| `aidevops skill scan [name]` | Yes (standalone) | Report only |
|
|
434
|
+
|
|
435
|
+
The `--force` flag only controls file overwrite behavior (replacing an existing skill without prompting). To bypass security blocking, use `--skip-security` explicitly -- this separation ensures that routine updates and re-imports never silently skip security checks.
|
|
436
|
+
|
|
437
|
+
Scan results are logged to [`.agents/SKILL-SCAN-RESULTS.md`](.agents/SKILL-SCAN-RESULTS.md) automatically on each batch scan and skill import, providing a transparent audit trail of security posture over time.
|
|
475
438
|
|
|
476
439
|
**Browse community skills:** [skills.sh](https://skills.sh) | [ClawdHub](https://clawdhub.com) | **Specification:** [agentskills.io](https://agentskills.io)
|
|
477
440
|
|
|
@@ -485,11 +448,11 @@ Skills are registered in `~/.aidevops/agents/configs/skill-sources.json` with up
|
|
|
485
448
|
|
|
486
449
|
## **Agent Design Patterns**
|
|
487
450
|
|
|
488
|
-
aidevops implements proven agent design patterns identified by [Lance Martin (LangChain)](https://x.com/RLanceMartin/status/2009683038272401719)
|
|
451
|
+
aidevops implements proven agent design patterns identified by [Lance Martin (LangChain)](https://x.com/RLanceMartin/status/2009683038272401719).
|
|
489
452
|
|
|
490
453
|
| Pattern | Description | aidevops Implementation |
|
|
491
454
|
|---------|-------------|------------------------|
|
|
492
|
-
| **Give Agents a Computer** | Filesystem + shell for persistent context | `~/.aidevops/.agent-workspace/`,
|
|
455
|
+
| **Give Agents a Computer** | Filesystem + shell for persistent context | `~/.aidevops/.agent-workspace/`, 172 helper scripts |
|
|
493
456
|
| **Multi-Layer Action Space** | Few tools, push actions to computer | Per-agent MCP filtering (~12-20 tools each) |
|
|
494
457
|
| **Progressive Disclosure** | Load context on-demand | Subagent routing with content summaries, YAML frontmatter, read-on-demand |
|
|
495
458
|
| **Offload Context** | Write results to filesystem | `.agent-workspace/work/[project]/` for persistence |
|
|
@@ -661,9 +624,63 @@ Test suites are JSON files with prompts and validation rules (`expect_contains`,
|
|
|
661
624
|
|
|
662
625
|
**See:** `agent-testing.md` subagent for full documentation and example test suites.
|
|
663
626
|
|
|
664
|
-
### Voice
|
|
627
|
+
### Voice Bridge - Talk to Your AI Agent
|
|
628
|
+
|
|
629
|
+
Speak naturally to your AI coding agent and hear it respond. The voice bridge connects your microphone to OpenCode via a fast local pipeline -- ask questions, give instructions, execute tasks, all by voice.
|
|
630
|
+
|
|
631
|
+
```text
|
|
632
|
+
Mic → Silero VAD → Whisper MLX (1.4s) → OpenCode (4-6s) → Edge TTS (0.4s) → Speaker
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
**Round-trip: ~6-8 seconds** on Apple Silicon. The agent can edit files, run commands, create PRs, and confirm what it did -- all via voice.
|
|
636
|
+
|
|
637
|
+
**Quick start:**
|
|
638
|
+
|
|
639
|
+
```bash
|
|
640
|
+
# Start a voice conversation (installs deps automatically)
|
|
641
|
+
voice-helper.sh talk
|
|
642
|
+
|
|
643
|
+
# Choose engines and voice
|
|
644
|
+
voice-helper.sh talk whisper-mlx edge-tts en-GB-SoniaNeural
|
|
645
|
+
voice-helper.sh talk whisper-mlx macos-say # Offline mode
|
|
646
|
+
|
|
647
|
+
# Utilities
|
|
648
|
+
voice-helper.sh devices # List audio input/output devices
|
|
649
|
+
voice-helper.sh voices # List available TTS voices
|
|
650
|
+
voice-helper.sh benchmark # Test STT/TTS/LLM speeds
|
|
651
|
+
voice-helper.sh status # Check component availability
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
**Features:**
|
|
655
|
+
|
|
656
|
+
| Feature | Details |
|
|
657
|
+
|---------|---------|
|
|
658
|
+
| **Swappable STT** | whisper-mlx (fastest on Apple Silicon), faster-whisper (CPU) |
|
|
659
|
+
| **Swappable TTS** | edge-tts (best quality), macos-say (offline), facebookMMS (local) |
|
|
660
|
+
| **Voice exit** | Say "that's all", "goodbye", "all for now" to end naturally |
|
|
661
|
+
| **STT correction** | LLM sanity-checks transcription errors before acting (e.g. "test.txte" → "test.txt") |
|
|
662
|
+
| **Task execution** | Full tool access -- edit files, git operations, run commands |
|
|
663
|
+
| **Session handback** | Conversation transcript output on exit for calling agent context |
|
|
664
|
+
| **TUI compatible** | Graceful degradation when launched from AI tool's Bash (no tty) |
|
|
665
|
+
|
|
666
|
+
**How it works:** The bridge uses `opencode run --attach` to connect to a running OpenCode server for low-latency responses (~4-6s vs ~30s cold start). It automatically starts `opencode serve` if not already running.
|
|
667
|
+
|
|
668
|
+
**Requirements:** Apple Silicon Mac (for whisper-mlx), Python 3.10+, internet (for edge-tts). The voice helper installs Python dependencies automatically into the S2S venv.
|
|
669
|
+
|
|
670
|
+
### Speech-to-Speech Pipeline (Advanced)
|
|
671
|
+
|
|
672
|
+
For advanced use cases (custom LLMs, server/client deployment, multi-language, phone integration), the full [huggingface/speech-to-speech](https://github.com/huggingface/speech-to-speech) pipeline is also available:
|
|
673
|
+
|
|
674
|
+
```bash
|
|
675
|
+
speech-to-speech-helper.sh setup # Install pipeline
|
|
676
|
+
speech-to-speech-helper.sh start --local-mac # Run on Apple Silicon
|
|
677
|
+
speech-to-speech-helper.sh start --cuda # Run on NVIDIA GPU
|
|
678
|
+
speech-to-speech-helper.sh start --server # Server mode (remote clients)
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
**Supported languages:** English, French, Spanish, Chinese, Japanese, Korean (auto-detect or fixed).
|
|
665
682
|
|
|
666
|
-
|
|
683
|
+
**Additional voice methods:**
|
|
667
684
|
|
|
668
685
|
| Method | Description |
|
|
669
686
|
|--------|-------------|
|
|
@@ -671,6 +688,8 @@ Speech-to-speech AI conversations:
|
|
|
671
688
|
| **iPhone Shortcut** | iOS: dictate → HTTP → speak response |
|
|
672
689
|
| **Pipecat STS** | Full voice pipeline: Soniox STT → AI → Cartesia TTS |
|
|
673
690
|
|
|
691
|
+
**See:** [speech-to-speech.md](.agents/tools/voice/speech-to-speech.md) for full component options, CLI parameters, and integration patterns (Twilio phone, video narration, voice-driven DevOps).
|
|
692
|
+
|
|
674
693
|
### Scheduled Agent Tasks
|
|
675
694
|
|
|
676
695
|
Cron-based agent dispatch for automated workflows:
|
|
@@ -684,6 +703,23 @@ Cron-based agent dispatch for automated workflows:
|
|
|
684
703
|
|
|
685
704
|
## **Requirements**
|
|
686
705
|
|
|
706
|
+
### **Recommended Hardware**
|
|
707
|
+
|
|
708
|
+
aidevops itself is lightweight (shell scripts + markdown), but AI model workloads benefit from capable hardware:
|
|
709
|
+
|
|
710
|
+
| Tier | Machine | CPU | RAM | GPU | Best For |
|
|
711
|
+
|------|---------|-----|-----|-----|----------|
|
|
712
|
+
| **Minimum** | Any modern laptop | 4+ cores | 8GB | None | Framework only, cloud AI APIs |
|
|
713
|
+
| **Recommended** | Mac Studio / desktop | Apple M1+ or 8+ cores | 16GB+ | MPS (Apple) or NVIDIA 8GB+ | Local voice, browser automation, dev servers |
|
|
714
|
+
| **Power User** | Workstation | 8+ cores | 32GB+ | NVIDIA 24GB+ VRAM | Full voice pipeline, local LLMs, parallel agents |
|
|
715
|
+
| **Server** | Cloud GPU | Any | 16GB+ | A100 / H100 | Production voice, multi-user, batch processing |
|
|
716
|
+
|
|
717
|
+
**Cloud GPU providers** for on-demand GPU access: [NVIDIA Cloud](https://www.nvidia.com/en-us/gpu-cloud/), [Vast.ai](https://vast.ai/), [RunPod](https://www.runpod.io/), [Lambda](https://lambdalabs.com/).
|
|
718
|
+
|
|
719
|
+
**Note:** Most aidevops features (infrastructure management, SEO, code quality, Git workflows) require no GPU. GPU is only needed for local AI model inference (voice pipeline, vision models, local LLMs).
|
|
720
|
+
|
|
721
|
+
### **Software Dependencies**
|
|
722
|
+
|
|
687
723
|
```bash
|
|
688
724
|
# Install dependencies (auto-detected by setup.sh)
|
|
689
725
|
brew install sshpass jq curl mkcert dnsmasq fd ripgrep # macOS
|
|
@@ -767,6 +803,7 @@ The setup script offers to install these tools automatically.
|
|
|
767
803
|
|
|
768
804
|
### **Security & Code Quality**
|
|
769
805
|
|
|
806
|
+
- **[gopass](https://github.com/gopasspw/gopass)**: GPG-encrypted secret management with AI-native wrapper (`aidevops secret`) - subprocess injection + output redaction keeps secrets out of AI context
|
|
770
807
|
- **[Vaultwarden](https://github.com/dani-garcia/vaultwarden)**: Password and secrets management
|
|
771
808
|
- **[SonarCloud](https://sonarcloud.io/)**: Security and quality analysis (A-grade ratings)
|
|
772
809
|
- **[CodeFactor](https://www.codefactor.io/)**: Code quality metrics (A+ score)
|
|
@@ -775,6 +812,8 @@ The setup script offers to install these tools automatically.
|
|
|
775
812
|
- **[Snyk](https://snyk.io/)**: Security vulnerability scanning
|
|
776
813
|
- **[Socket](https://socket.dev/)**: Dependency security and supply chain protection
|
|
777
814
|
- **[Sentry](https://sentry.io/)**: Error monitoring and performance tracking
|
|
815
|
+
- **[Cisco Skill Scanner](https://github.com/cisco-ai-defense/skill-scanner)**: Security scanner for AI agent skills (prompt injection, exfiltration, malicious code)
|
|
816
|
+
- **[VirusTotal](https://www.virustotal.com/)**: Advisory threat intelligence via VT API v3 -- file hash scanning (70+ AV engines), domain/URL reputation checks for imported skills
|
|
778
817
|
- **[Secretlint](https://github.com/secretlint/secretlint)**: Detect exposed secrets in code
|
|
779
818
|
- **[OSV Scanner](https://google.github.io/osv-scanner/)**: Google's vulnerability database scanner
|
|
780
819
|
- **[Qlty](https://qlty.sh/)**: Universal code quality platform (70+ linters, auto-fixes)
|
|
@@ -827,6 +866,12 @@ See `.agents/tools/ocr/glm-ocr.md` for batch processing, PDF workflows, and Peek
|
|
|
827
866
|
- **[Remotion](https://remotion.dev/)**: Programmatic video creation with React - create videos using code with 29 specialized rule files
|
|
828
867
|
- **[Video Prompt Design](https://github.com/snubroot/Veo-3-Meta-Framework)**: Structured prompt engineering for AI video generation (Veo 3, 7-component framework, character consistency, audio design)
|
|
829
868
|
|
|
869
|
+
### **Voice AI**
|
|
870
|
+
|
|
871
|
+
- **Voice Bridge**: Talk to your AI coding agent via speech -- Silero VAD → Whisper MLX → OpenCode → Edge TTS (~6-8s round-trip)
|
|
872
|
+
- **[Speech-to-Speech](https://github.com/huggingface/speech-to-speech)**: Open-source modular voice pipeline (VAD → STT → LLM → TTS) with local GPU and cloud GPU deployment
|
|
873
|
+
- **[Pipecat](https://github.com/pipecat-ai/pipecat)**: Real-time voice agent framework with Soniox STT, Cartesia TTS, and multi-LLM support
|
|
874
|
+
|
|
830
875
|
### **Performance & Monitoring**
|
|
831
876
|
|
|
832
877
|
- **[PageSpeed Insights](https://pagespeed.web.dev/)**: Website performance auditing
|
|
@@ -840,9 +885,9 @@ See `.agents/tools/ocr/glm-ocr.md` for batch processing, PDF workflows, and Peek
|
|
|
840
885
|
|
|
841
886
|
## **MCP Integrations**
|
|
842
887
|
|
|
843
|
-
**Model Context Protocol servers for real-time AI assistant integration.** The framework configures these MCPs
|
|
888
|
+
**Model Context Protocol servers for real-time AI assistant integration.** The framework configures these MCPs for **[OpenCode](https://opencode.ai/)** (TUI, Desktop, and Extension for Zed/VSCode/AntiGravity).
|
|
844
889
|
|
|
845
|
-
### **All Supported MCPs (19
|
|
890
|
+
### **All Supported MCPs (19 available)**
|
|
846
891
|
|
|
847
892
|
MCP packages are installed globally via `bun install -g` for instant startup (no `npx` registry lookups). Run `setup.sh` or `aidevops update-tools` to update to latest versions.
|
|
848
893
|
|
|
@@ -860,11 +905,11 @@ MCP packages are installed globally via `bun install -g` for instant startup (no
|
|
|
860
905
|
| [Grep by Vercel](https://grep.app/) | GitHub code search | Per-agent | No |
|
|
861
906
|
| [LocalWP](https://localwp.com/) | WordPress database access | Per-agent | No (local) |
|
|
862
907
|
| [macOS Automator](https://github.com/steipete/macos-automator-mcp) | macOS automation | Per-agent | No |
|
|
863
|
-
| [Outscraper](https://outscraper.com/) | Google Maps & business data | Per-agent | Yes |
|
|
864
908
|
| [Playwriter](https://github.com/nicholasgriffintn/playwriter) | Browser with extensions | Per-agent | No |
|
|
865
909
|
| [QuickFile](https://github.com/marcusquinn/quickfile-mcp) | Accounting API | Per-agent | Yes |
|
|
866
910
|
| [Repomix](https://github.com/yamadashy/repomix) | Codebase packing for AI context | Per-agent | No |
|
|
867
911
|
| [Sentry](https://sentry.io/) | Error tracking | Per-agent | Yes |
|
|
912
|
+
| [shadcn](https://ui.shadcn.com/) | UI component library | Per-agent | No |
|
|
868
913
|
| [Socket](https://socket.dev/) | Dependency security | Per-agent | No |
|
|
869
914
|
| [Unstract](https://github.com/Zipstack/unstract) | Document data extraction | Per-agent | Yes |
|
|
870
915
|
|
|
@@ -872,7 +917,7 @@ MCP packages are installed globally via `bun install -g` for instant startup (no
|
|
|
872
917
|
- **Global** - Tools always available (loaded into every session)
|
|
873
918
|
- **Per-agent** - Tools disabled globally, enabled per-agent via config (zero context overhead when unused)
|
|
874
919
|
|
|
875
|
-
**Performance optimization:** MCP packages are installed globally via `bun install -g` for instant startup (~0.1s vs 2-3s with `npx`). The framework uses a three-tier loading strategy:
|
|
920
|
+
**Performance optimization:** MCP packages are installed globally via `bun install -g` for instant startup (~0.1s vs 2-3s with `npx`). The framework uses a three-tier loading strategy: MCPs load eagerly at startup or on-demand when their subagent is invoked. This reduces OpenCode startup time significantly.
|
|
876
921
|
|
|
877
922
|
### **SEO Integrations (curl subagents - no MCP overhead)**
|
|
878
923
|
|
|
@@ -888,6 +933,7 @@ These use direct API calls via curl, avoiding MCP server startup entirely:
|
|
|
888
933
|
| [WebPageTest](https://www.webpagetest.org/) | Real-world performance testing from 40+ global locations | Yes |
|
|
889
934
|
| [Hostinger](https://developers.hostinger.com/) | Hosting management | Yes |
|
|
890
935
|
| [NeuronWriter](https://neuronwriter.com/) | Content optimization & NLP analysis | Yes |
|
|
936
|
+
| [Outscraper](https://outscraper.com/) | Google Maps & business data extraction | Yes |
|
|
891
937
|
|
|
892
938
|
### **By Category**
|
|
893
939
|
|
|
@@ -934,7 +980,7 @@ These use direct API calls via curl, avoiding MCP server startup entirely:
|
|
|
934
980
|
|
|
935
981
|
**Data Extraction:**
|
|
936
982
|
|
|
937
|
-
- [Outscraper](https://outscraper.com/) - Google Maps, business data, reviews extraction
|
|
983
|
+
- [Outscraper](https://outscraper.com/) - Google Maps, business data, reviews extraction (curl subagent)
|
|
938
984
|
- [curl-copy](.agents/tools/browser/curl-copy.md) - Authenticated scraping via DevTools "Copy as cURL" (no browser automation needed)
|
|
939
985
|
|
|
940
986
|
**Performance & Security:**
|
|
@@ -1262,25 +1308,12 @@ Add to your AI assistant's MCP configuration:
|
|
|
1262
1308
|
}
|
|
1263
1309
|
```
|
|
1264
1310
|
|
|
1265
|
-
**
|
|
1311
|
+
**claude-code CLI**:
|
|
1266
1312
|
|
|
1267
1313
|
```bash
|
|
1268
1314
|
claude mcp add-json auggie-mcp --scope user '{"type":"stdio","command":"auggie","args":["--mcp"]}'
|
|
1269
1315
|
```
|
|
1270
1316
|
|
|
1271
|
-
**Cursor**: Settings → Tools & MCP → New MCP Server:
|
|
1272
|
-
|
|
1273
|
-
```json
|
|
1274
|
-
{
|
|
1275
|
-
"mcpServers": {
|
|
1276
|
-
"augment-context-engine": {
|
|
1277
|
-
"command": "bash",
|
|
1278
|
-
"args": ["-c", "auggie --mcp -m default -w \"${WORKSPACE_FOLDER_PATHS%%,*}\""]
|
|
1279
|
-
}
|
|
1280
|
-
}
|
|
1281
|
-
}
|
|
1282
|
-
```
|
|
1283
|
-
|
|
1284
1317
|
### Verification
|
|
1285
1318
|
|
|
1286
1319
|
Test with this prompt:
|
|
@@ -1300,7 +1333,7 @@ The AI should provide a semantic understanding of your project architecture.
|
|
|
1300
1333
|
| **Architecture review** | Repomix (compress) | 80% token reduction, structure only |
|
|
1301
1334
|
| **CI/CD integration** | Repomix GitHub Action | Automated context in releases |
|
|
1302
1335
|
|
|
1303
|
-
See `.agents/tools/context/augment-context-engine.md` for complete documentation
|
|
1336
|
+
See `.agents/tools/context/augment-context-engine.md` for complete documentation.
|
|
1304
1337
|
|
|
1305
1338
|
### osgrep - Local Alternative (Experimental)
|
|
1306
1339
|
|
|
@@ -1361,11 +1394,7 @@ See `.agents/tools/context/llm-tldr.md` for complete documentation.
|
|
|
1361
1394
|
|
|
1362
1395
|
aidevops implements the [Agent Skills](https://agentskills.io/) standard for cross-tool compatibility. Skills are auto-discovered by compatible AI assistants.
|
|
1363
1396
|
|
|
1364
|
-
**Generated SKILL.md files** in `~/.aidevops/agents/` provide skill metadata
|
|
1365
|
-
- Cursor
|
|
1366
|
-
- Claude Code
|
|
1367
|
-
- VS Code (GitHub Copilot)
|
|
1368
|
-
- Other Agent Skills-compatible tools
|
|
1397
|
+
**Generated SKILL.md files** in `~/.aidevops/agents/` provide skill metadata following the [Agent Skills standard](https://agentskills.io/specification). These are discoverable by any compatible tool.
|
|
1369
1398
|
|
|
1370
1399
|
### Claude Code Plugin Marketplace
|
|
1371
1400
|
|
|
@@ -1376,7 +1405,7 @@ aidevops is registered as a **Claude Code plugin marketplace**. Install with two
|
|
|
1376
1405
|
/plugin install aidevops@aidevops
|
|
1377
1406
|
```
|
|
1378
1407
|
|
|
1379
|
-
This installs the complete framework:
|
|
1408
|
+
This installs the complete framework: 15 primary agents, 765+ subagents, and 172 helper scripts.
|
|
1380
1409
|
|
|
1381
1410
|
### Importing External Skills
|
|
1382
1411
|
|
|
@@ -1404,7 +1433,7 @@ aidevops skill add owner/repo --dry-run # Preview without changes
|
|
|
1404
1433
|
**Supported formats:**
|
|
1405
1434
|
- `SKILL.md` - [Agent Skills standard](https://agentskills.io/specification) (preferred)
|
|
1406
1435
|
- `AGENTS.md` - Claude Code agents format
|
|
1407
|
-
- `.cursorrules` - Cursor rules (auto-converted)
|
|
1436
|
+
- `.cursorrules` - Cursor rules format (auto-converted)
|
|
1408
1437
|
|
|
1409
1438
|
**Features:**
|
|
1410
1439
|
- Auto-detection of skill format and category placement
|
|
@@ -1458,21 +1487,21 @@ Ordered as they appear in OpenCode Tab selector and other AI assistants (15 tota
|
|
|
1458
1487
|
| Marketing | `marketing.md` | Marketing strategy and automation | augment |
|
|
1459
1488
|
| Research | `research.md` | Research and analysis tasks | context7, augment |
|
|
1460
1489
|
| Sales | `sales.md` | Sales operations and CRM | augment |
|
|
1461
|
-
| SEO | `seo.md` | SEO optimization, Search Console, keyword research | gsc, ahrefs,
|
|
1490
|
+
| SEO | `seo.md` | SEO optimization, Search Console, keyword research | gsc, ahrefs, serper, context7, augment |
|
|
1462
1491
|
| Video | `video.md` | AI video generation, prompt engineering, programmatic video | augment |
|
|
1463
1492
|
| WordPress | `wordpress.md` | WordPress ecosystem (dev, admin, MainWP, LocalWP) | localwp, context7, augment |
|
|
1464
1493
|
|
|
1465
1494
|
### **Example Subagents with MCP Integration**
|
|
1466
1495
|
|
|
1467
|
-
These are examples of subagents that have supporting MCPs enabled. See `.agents/` for the full list of
|
|
1496
|
+
These are examples of subagents that have supporting MCPs enabled. See `.agents/` for the full list of 765+ subagents organized by domain.
|
|
1468
1497
|
|
|
1469
1498
|
| Agent | Purpose | MCPs Enabled |
|
|
1470
1499
|
|-------|---------|--------------|
|
|
1471
1500
|
| `@hostinger` | Hosting, WordPress, DNS, domains | hostinger-api |
|
|
1472
1501
|
| `@hetzner` | Cloud servers, firewalls, volumes | hetzner-* (multi-account) |
|
|
1473
1502
|
| `@wordpress` | Local dev, MainWP management | localwp, context7 |
|
|
1474
|
-
| `@seo` | Search Console, keyword research, domain intelligence | gsc, ahrefs,
|
|
1475
|
-
| `@dataforseo` | SERP, keywords, backlinks, on-page analysis |
|
|
1503
|
+
| `@seo` | Search Console, keyword research, domain intelligence | gsc, ahrefs, serper, context7 |
|
|
1504
|
+
| `@dataforseo` | SERP, keywords, backlinks, on-page analysis | (curl subagent) |
|
|
1476
1505
|
| `@domain-research` | DNS intelligence: rDNS, subdomains, CNAMEs (THC + Reconeer) | (API-based) |
|
|
1477
1506
|
| `@serper` | Google Search API (web, images, news, places) | serper |
|
|
1478
1507
|
| `@list-keys` | List all configured API keys and storage locations | (read-only) |
|
|
@@ -1498,28 +1527,16 @@ These are examples of subagents that have supporting MCPs enabled. See `.agents/
|
|
|
1498
1527
|
.agents/scripts/generate-opencode-agents.sh # Shows status after generation
|
|
1499
1528
|
```
|
|
1500
1529
|
|
|
1501
|
-
### **
|
|
1530
|
+
### **Claude Marketplace**
|
|
1502
1531
|
|
|
1503
|
-
|
|
1532
|
+
aidevops is available in the Claude marketplace:
|
|
1504
1533
|
|
|
1505
1534
|
```bash
|
|
1506
1535
|
/plugin marketplace add marcusquinn/aidevops
|
|
1507
1536
|
/plugin install aidevops-all@aidevops
|
|
1508
1537
|
```
|
|
1509
1538
|
|
|
1510
|
-
**Agent Skills-
|
|
1511
|
-
Skills are auto-discovered from `~/.aidevops/agents/` via SKILL.md files after running `setup.sh`.
|
|
1512
|
-
|
|
1513
|
-
**Manual configuration** (other tools):
|
|
1514
|
-
Add to your AI assistant's system prompt:
|
|
1515
|
-
|
|
1516
|
-
```text
|
|
1517
|
-
Before any DevOps operations, read ~/git/aidevops/AGENTS.md for authoritative guidance.
|
|
1518
|
-
|
|
1519
|
-
When working with specific services, read the corresponding .agents/[service].md file
|
|
1520
|
-
for focused guidance. Available services: hostinger, hetzner, wordpress, seo,
|
|
1521
|
-
code-quality, browser-automation, git-platforms.
|
|
1522
|
-
```
|
|
1539
|
+
**Agent Skills (SKILL.md):** Auto-discovered from `~/.aidevops/agents/` after running `setup.sh`. Compatible with any tool that supports the [Agent Skills standard](https://agentskills.io/specification).
|
|
1523
1540
|
|
|
1524
1541
|
### **Continuous Improvement with @agent-review**
|
|
1525
1542
|
|
|
@@ -1955,6 +1972,18 @@ Commands invoke the corresponding workflow subagent with appropriate context.
|
|
|
1955
1972
|
|
|
1956
1973
|
---
|
|
1957
1974
|
|
|
1975
|
+
### **Agent Lifecycle (Three Tiers)**
|
|
1976
|
+
|
|
1977
|
+
User-created agents survive `aidevops update`. Agents progress through tiers as they mature:
|
|
1978
|
+
|
|
1979
|
+
| Tier | Location | Purpose | Survives Update |
|
|
1980
|
+
|------|----------|---------|-----------------|
|
|
1981
|
+
| **Draft** | `~/.aidevops/agents/draft/` | R&D, experimental, auto-created by orchestration tasks | Yes |
|
|
1982
|
+
| **Custom** | `~/.aidevops/agents/custom/` | User's permanent private agents | Yes |
|
|
1983
|
+
| **Shared** | `.agents/` in repo | Open-source, distributed to all users | Managed by repo |
|
|
1984
|
+
|
|
1985
|
+
**Promotion workflow:** Draft agents that prove useful can be promoted to custom (private) or shared (open-source via PR). Orchestration agents can create drafts in `draft/` for reusable parallel processing context.
|
|
1986
|
+
|
|
1958
1987
|
### **Creating Custom Agents**
|
|
1959
1988
|
|
|
1960
1989
|
Create a markdown file in `~/.config/opencode/agent/` (OpenCode) or reference in your AI's system prompt:
|
|
@@ -2099,7 +2128,7 @@ aidevops/
|
|
|
2099
2128
|
├── .agents/ # Agents and documentation
|
|
2100
2129
|
│ ├── AGENTS.md # User guide (deployed to ~/.aidevops/agents/)
|
|
2101
2130
|
│ ├── *.md # 15 primary agents
|
|
2102
|
-
│ ├── scripts/ #
|
|
2131
|
+
│ ├── scripts/ # 172 helper scripts
|
|
2103
2132
|
│ ├── tools/ # Cross-domain utilities (video, browser, git, etc.)
|
|
2104
2133
|
│ ├── services/ # External service integrations
|
|
2105
2134
|
│ └── workflows/ # Development process guides
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.105.0
|
package/aidevops.sh
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# AI DevOps Framework CLI
|
|
4
4
|
# Usage: aidevops <command> [options]
|
|
5
5
|
#
|
|
6
|
-
# Version: 2.
|
|
6
|
+
# Version: 2.105.0
|
|
7
7
|
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
|
|
@@ -492,12 +492,8 @@ cmd_status() {
|
|
|
492
492
|
|
|
493
493
|
local ai_configs=(
|
|
494
494
|
"$HOME/.config/opencode/opencode.json:OpenCode"
|
|
495
|
-
"$HOME/.
|
|
496
|
-
"$HOME/.claude/commands:Claude Code"
|
|
497
|
-
"$HOME/.continue:Continue.dev"
|
|
495
|
+
"$HOME/.claude/commands:Claude Code CLI"
|
|
498
496
|
"$HOME/CLAUDE.md:Claude Code memory"
|
|
499
|
-
"$HOME/GEMINI.md:Gemini CLI memory"
|
|
500
|
-
"$HOME/.cursorrules:Cursor rules"
|
|
501
497
|
)
|
|
502
498
|
|
|
503
499
|
for config in "${ai_configs[@]}"; do
|
|
@@ -724,10 +720,7 @@ cmd_uninstall() {
|
|
|
724
720
|
|
|
725
721
|
local ai_agent_files=(
|
|
726
722
|
"$HOME/.config/opencode/agent/AGENTS.md"
|
|
727
|
-
"$HOME/.cursor/rules/AGENTS.md"
|
|
728
723
|
"$HOME/.claude/commands/AGENTS.md"
|
|
729
|
-
"$HOME/.continue/AGENTS.md"
|
|
730
|
-
"$HOME/.cody/AGENTS.md"
|
|
731
724
|
"$HOME/.opencode/AGENTS.md"
|
|
732
725
|
)
|
|
733
726
|
|
|
@@ -760,10 +753,6 @@ cmd_uninstall() {
|
|
|
760
753
|
print_info "Removing AI memory files..."
|
|
761
754
|
local memory_files=(
|
|
762
755
|
"$HOME/CLAUDE.md"
|
|
763
|
-
"$HOME/GEMINI.md"
|
|
764
|
-
"$HOME/WINDSURF.md"
|
|
765
|
-
"$HOME/.qwen/QWEN.md"
|
|
766
|
-
"$HOME/.factory/DROID.md"
|
|
767
756
|
)
|
|
768
757
|
|
|
769
758
|
for file in "${memory_files[@]}"; do
|
|
@@ -1106,6 +1095,24 @@ EOF
|
|
|
1106
1095
|
fi
|
|
1107
1096
|
fi
|
|
1108
1097
|
|
|
1098
|
+
# Generate collaborator pointer files (lightweight AGENTS.md references)
|
|
1099
|
+
local pointer_content="Read AGENTS.md for all project context and instructions."
|
|
1100
|
+
local pointer_files=(".cursorrules" ".windsurfrules" ".clinerules" ".github/copilot-instructions.md")
|
|
1101
|
+
local pointer_created=0
|
|
1102
|
+
for pf in "${pointer_files[@]}"; do
|
|
1103
|
+
local pf_path="$project_root/$pf"
|
|
1104
|
+
if [[ ! -f "$pf_path" ]]; then
|
|
1105
|
+
mkdir -p "$(dirname "$pf_path")"
|
|
1106
|
+
echo "$pointer_content" > "$pf_path"
|
|
1107
|
+
((pointer_created++))
|
|
1108
|
+
fi
|
|
1109
|
+
done
|
|
1110
|
+
if [[ $pointer_created -gt 0 ]]; then
|
|
1111
|
+
print_success "Created $pointer_created collaborator pointer file(s) (.cursorrules, etc.)"
|
|
1112
|
+
else
|
|
1113
|
+
print_info "Collaborator pointer files already exist"
|
|
1114
|
+
fi
|
|
1115
|
+
|
|
1109
1116
|
# Build features string for registration
|
|
1110
1117
|
local features_list=""
|
|
1111
1118
|
[[ "$enable_planning" == "true" ]] && features_list="${features_list}planning,"
|
|
@@ -1872,6 +1879,15 @@ cmd_skill() {
|
|
|
1872
1879
|
print_info "Generating SKILL.md stubs for cross-tool discovery..."
|
|
1873
1880
|
bash "$generate_script" "$@"
|
|
1874
1881
|
;;
|
|
1882
|
+
scan)
|
|
1883
|
+
local security_script="$AGENTS_DIR/scripts/security-helper.sh"
|
|
1884
|
+
if [[ ! -f "$security_script" ]]; then
|
|
1885
|
+
print_error "security-helper.sh not found"
|
|
1886
|
+
print_info "Run 'aidevops update' to get the latest scripts"
|
|
1887
|
+
return 1
|
|
1888
|
+
fi
|
|
1889
|
+
bash "$security_script" skill-scan "$@"
|
|
1890
|
+
;;
|
|
1875
1891
|
clean)
|
|
1876
1892
|
local generate_script="$AGENTS_DIR/scripts/generate-skills.sh"
|
|
1877
1893
|
if [[ ! -f "$generate_script" ]]; then
|
|
@@ -1895,6 +1911,7 @@ cmd_skill() {
|
|
|
1895
1911
|
echo " check Check for upstream updates"
|
|
1896
1912
|
echo " update [name] Update specific or all skills"
|
|
1897
1913
|
echo " remove <name> Remove an imported skill"
|
|
1914
|
+
echo " scan [name] Security scan imported skills (Cisco Skill Scanner)"
|
|
1898
1915
|
echo " status Show detailed skill status"
|
|
1899
1916
|
echo " generate Generate SKILL.md stubs for cross-tool discovery"
|
|
1900
1917
|
echo " clean Remove generated SKILL.md stubs"
|
|
@@ -1910,6 +1927,8 @@ cmd_skill() {
|
|
|
1910
1927
|
echo " aidevops skill add expo/skills --name expo-dev"
|
|
1911
1928
|
echo " aidevops skill check"
|
|
1912
1929
|
echo " aidevops skill update"
|
|
1930
|
+
echo " aidevops skill scan"
|
|
1931
|
+
echo " aidevops skill scan cloudflare-platform"
|
|
1913
1932
|
echo " aidevops skill generate --dry-run"
|
|
1914
1933
|
echo ""
|
|
1915
1934
|
echo "Imported skills are saved with a -skill suffix to distinguish"
|
|
@@ -1945,6 +1964,7 @@ cmd_help() {
|
|
|
1945
1964
|
echo " upgrade Alias for update"
|
|
1946
1965
|
echo " update-tools Check for outdated tools (--update to auto-update)"
|
|
1947
1966
|
echo " repos [cmd] Manage registered projects (list/add/remove/clean)"
|
|
1967
|
+
echo " secret <cmd> Manage secrets (set/list/run/init/import/status)"
|
|
1948
1968
|
echo " detect Find and register aidevops projects"
|
|
1949
1969
|
echo " uninstall Remove aidevops from your system"
|
|
1950
1970
|
echo " version Show version information"
|
|
@@ -1964,6 +1984,14 @@ cmd_help() {
|
|
|
1964
1984
|
echo " aidevops update-tools -u # Update all outdated tools"
|
|
1965
1985
|
echo " aidevops uninstall # Remove aidevops"
|
|
1966
1986
|
echo ""
|
|
1987
|
+
echo "Secrets:"
|
|
1988
|
+
echo " aidevops secret set NAME # Store a secret (hidden input)"
|
|
1989
|
+
echo " aidevops secret list # List secret names (never values)"
|
|
1990
|
+
echo " aidevops secret run CMD # Run with secrets injected + redacted"
|
|
1991
|
+
echo " aidevops secret init # Initialize gopass encrypted store"
|
|
1992
|
+
echo " aidevops secret import # Import from credentials.sh to gopass"
|
|
1993
|
+
echo " aidevops secret status # Show backend status"
|
|
1994
|
+
echo ""
|
|
1967
1995
|
echo "Skills:"
|
|
1968
1996
|
echo " aidevops skill add <source> # Import a skill from GitHub"
|
|
1969
1997
|
echo " aidevops skill list # List imported skills"
|
|
@@ -2058,6 +2086,19 @@ main() {
|
|
|
2058
2086
|
detect|scan)
|
|
2059
2087
|
cmd_detect
|
|
2060
2088
|
;;
|
|
2089
|
+
secret|secrets)
|
|
2090
|
+
shift
|
|
2091
|
+
local secret_helper="$AGENTS_DIR/scripts/secret-helper.sh"
|
|
2092
|
+
if [[ ! -f "$secret_helper" ]]; then
|
|
2093
|
+
secret_helper="$INSTALL_DIR/.agents/scripts/secret-helper.sh"
|
|
2094
|
+
fi
|
|
2095
|
+
if [[ -f "$secret_helper" ]]; then
|
|
2096
|
+
bash "$secret_helper" "$@"
|
|
2097
|
+
else
|
|
2098
|
+
print_error "secret-helper.sh not found. Run: aidevops update"
|
|
2099
|
+
exit 1
|
|
2100
|
+
fi
|
|
2101
|
+
;;
|
|
2061
2102
|
uninstall|remove)
|
|
2062
2103
|
cmd_uninstall
|
|
2063
2104
|
;;
|