everything-gemini 1.0.1 → 1.2.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/.github/workflows/release.yml +7 -0
- package/.vscode/extensions.json +8 -0
- package/.vscode/settings.json +3 -0
- package/CHANGELOG.md +48 -0
- package/README.md +39 -9
- package/SECURITY.md +38 -0
- package/assets/banner.jpg +0 -0
- package/bin/everything-gemini +263 -3
- package/docs/LAUNCH_KIT.md +157 -0
- package/docs/index.html +558 -0
- package/examples/cli-workflows/README.md +45 -0
- package/examples/cli-workflows/demo_workflow.sh +31 -0
- package/examples/python-sdk/README.md +36 -0
- package/examples/python-sdk/orchestrate_subagents.py +59 -0
- package/package.json +2 -1
- package/skills/agent-evals/SKILL.md +61 -0
- package/skills/ai-first-engineering/SKILL.md +68 -0
- package/skills/docker-compose-orchestrator/SKILL.md +85 -0
- package/skills/gemini-function-calling/SKILL.md +90 -0
- package/skills/github-ops/SKILL.md +102 -0
- package/skills/graphql-architect/SKILL.md +78 -0
- package/skills/rag-architect/SKILL.md +60 -0
- package/templates/full-power/AGENTS.md +12 -0
- package/templates/full-power/GEMINI.md +12 -0
- package/templates/full-power/hooks.json +56 -0
- package/templates/full-power/mcp_config.json +15 -0
- package/templates/recommended/AGENTS.md +11 -0
- package/templates/recommended/GEMINI.md +11 -0
- package/templates/recommended/hooks.json +43 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,54 @@ All notable changes to **Everything Gemini (`everything-gemini`)** will be docum
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [1.2.0] - 2026-10-15
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **30 Progressive Disclosure Skills Milestone**:
|
|
11
|
+
- **`agent-evals`**: Automated evaluation pipelines, LLM-as-a-judge rubrics, golden test datasets, and regression testing.
|
|
12
|
+
- **`docker-compose-orchestrator`**: Multi-container local environments (Postgres + pgvector, Redis), healthcheck dependency wiring, and persistent volumes.
|
|
13
|
+
- **`graphql-architect`**: Schema-first GraphQL APIs, DataLoader N+1 query batching, and Relay cursor-based pagination.
|
|
14
|
+
- **Enterprise Security Policy**: Added [`SECURITY.md`](SECURITY.md) establishing formal vulnerability disclosure workflows.
|
|
15
|
+
- **IDE Extensions**: Added [`.vscode/extensions.json`](.vscode/extensions.json) for developer workspace onboarding.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## [1.1.1] - 2026-10-15
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
- **Social Media Preview Engine**: Rich Open Graph (`og:*`) and Twitter Card (`twitter:*`) metadata embedded in `docs/index.html` for rich link unfurling on social platforms.
|
|
23
|
+
- **Turnkey Launch & Marketing Kit**: Added [`docs/LAUNCH_KIT.md`](docs/LAUNCH_KIT.md) featuring viral launch tweets, a 4-part thread, Reddit discussions, and Hacker News (Show HN) copy.
|
|
24
|
+
- **Enhanced CLI Catalog Discovery**: `everything-gemini list` now dynamically scans and highlights namespaced skills packaged within domain plugins.
|
|
25
|
+
- **Automated NPM Release CI**: Integrated automated npm publishing within `.github/workflows/release.yml` with provenance.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## [1.1.0] - 2026-10-15
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
- **27 Progressive Disclosure Skills Milestone**:
|
|
33
|
+
- **`github-ops`**: End-to-end GitHub automation, PR generation, code review triage, and semantic releases via `gh` CLI and GitHub MCP.
|
|
34
|
+
- **`ai-first-engineering`**: Requirement decomposition, executable acceptance criteria, and blast-radius containment.
|
|
35
|
+
- **`rag-architect`**: RAG engineering with `text-embedding-004`, hybrid search (dense + BM25), and Gemini re-ranking.
|
|
36
|
+
- **`gemini-function-calling`**: Production tool schemas, Pydantic output formatting, parallel execution, and error recovery envelopes.
|
|
37
|
+
- **Interactive Web Catalog Expansion**: Updated [https://salmandev.github.io/everything-gemini/](https://salmandev.github.io/everything-gemini/) to feature all 27 progressive skills with instant search and category filtering.
|
|
38
|
+
- **Enhanced CLI Commands**: Added `everything-gemini init` for quickstart setup, `everything-gemini remove <type> <name>` for component uninstallation, and `everything-gemini test-skill <name>` for validation.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## [1.0.2] - 2026-10-15
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
- **Interactive Web Showcase**: Launched official documentation and interactive skill catalog at [https://salmandev.github.io/everything-gemini/](https://salmandev.github.io/everything-gemini/).
|
|
46
|
+
- **Component Granular Management**: Added `everything-gemini add <type> <name>` to install individual skills, agents, or plugins into any workspace on demand.
|
|
47
|
+
- **Skill Quality Gate**: Added `everything-gemini test-skill <name>` validating frontmatter boundary syntax, descriptions, and script execution bits.
|
|
48
|
+
- **Python SDK Multi-Agent Orchestration**: Complete runnable pipeline example in `examples/python-sdk/` showcasing programmatic leasing of Planner and Reviewer subagents with token streaming.
|
|
49
|
+
- **Frontier Cloud & AI Skills**: Integrated `cloudflare-workers`, `supabase-architect`, `stripe-integration`, and `kubernetes-operator`.
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
- CLI dynamically resolves package version from `package.json`.
|
|
53
|
+
- Updated comprehensive CLI documentation across README and repository references.
|
|
54
|
+
|
|
7
55
|
---
|
|
8
56
|
|
|
9
57
|
## [1.0.1] - 2026-10-15
|
package/README.md
CHANGED
|
@@ -2,15 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
4
|
|
|
5
|
+
<img src="assets/banner.jpg" alt="Everything Gemini Banner" width="100%" style="border-radius: 12px; margin-bottom: 16px;" />
|
|
6
|
+
|
|
7
|
+
[](https://salmandev.github.io/everything-gemini/)
|
|
8
|
+
[](https://www.npmjs.com/package/everything-gemini)
|
|
9
|
+
[](https://github.com/salmandev/everything-gemini/actions/workflows/ci.yml)
|
|
5
10
|
[](LICENSE)
|
|
6
11
|
[](https://antigravity.google)
|
|
7
|
-
[](package.json)
|
|
8
12
|
[](https://github.com/salmandev/everything-gemini)
|
|
9
13
|
[](CONTRIBUTING.md)
|
|
10
14
|
|
|
11
15
|
**The open-source agent harness, multi-agent orchestrator, and performance ecosystem for Google Gemini & Antigravity.**
|
|
12
16
|
|
|
13
|
-
[Quickstart](#-quickstart) • [What is everything-gemini?](#-what-is-everything-gemini) • [Architecture](#-architecture--internals) • [Customization Catalog](#-customization-catalog) • [Surfaces Guide](#-the-4-antigravity-surfaces) • [Contributing](CONTRIBUTING.md)
|
|
17
|
+
[Live Interactive Showcase](https://salmandev.github.io/everything-gemini/) • [Quickstart](#-quickstart) • [What is everything-gemini?](#-what-is-everything-gemini) • [Architecture](#-architecture--internals) • [Customization Catalog](#-customization-catalog) • [Surfaces Guide](#-the-4-antigravity-surfaces) • [Contributing](CONTRIBUTING.md)
|
|
14
18
|
|
|
15
19
|
</div>
|
|
16
20
|
|
|
@@ -141,7 +145,7 @@ everything-gemini/
|
|
|
141
145
|
├── agents/ # Scoped subagent fleet (Planner, Reviewer, Architect, etc.)
|
|
142
146
|
├── scripts/ # Automated installers and harness validators
|
|
143
147
|
├── plugins/ # Reusable modular plugins (web-fullstack, python-ai, security)
|
|
144
|
-
├── skills/ #
|
|
148
|
+
├── skills/ # 30 Progressive disclosure skills (28 core + 2 plugins)
|
|
145
149
|
├── rules/ # Contextual guidelines & standards
|
|
146
150
|
├── hooks/ # Event-driven lifecycle hooks (GeminiShield, Auto-lint)
|
|
147
151
|
├── mcp/ # Production-ready MCP server blueprints
|
|
@@ -171,9 +175,22 @@ Skills in Antigravity are lazy-loaded runbooks. Only their YAML frontmatter (`na
|
|
|
171
175
|
|
|
172
176
|
- **[`gemini-multimodal`](skills/gemini-multimodal/SKILL.md)**: Native visual reasoning over mockups, diagrams, and automated WebP browser recordings.
|
|
173
177
|
- **[`context-caching`](skills/context-caching/SKILL.md)**: 1M-2M token context optimization, static prefix caching, and repository indexing.
|
|
178
|
+
- **[`gemini-grounding`](skills/gemini-grounding/SKILL.md)**: Real-time Google Search grounding, live documentation retrieval, and fact-checking.
|
|
179
|
+
- **[`rag-architect`](skills/rag-architect/SKILL.md)**: RAG pipeline design, AST semantic chunking, hybrid vector-keyword retrieval, and Gemini re-ranking.
|
|
180
|
+
- **[`gemini-function-calling`](skills/gemini-function-calling/SKILL.md)**: Production function declarations, structured JSON output schemas (Pydantic), and parallel tool dispatch.
|
|
181
|
+
- **[`ai-first-engineering`](skills/ai-first-engineering/SKILL.md)**: Requirement decomposition, executable acceptance criteria (BDD), and blast-radius containment.
|
|
182
|
+
- **[`agent-evals`](skills/agent-evals/SKILL.md)**: Automated evaluation pipelines, LLM-as-a-judge scoring, golden test datasets, and prompt regression testing.
|
|
183
|
+
- **[`github-ops`](skills/github-ops/SKILL.md)**: GitHub workflow automation, PR generation, code review triage, and semantic releases with `gh` CLI & GitHub MCP.
|
|
174
184
|
- **[`subagent-handoff`](skills/subagent-handoff/SKILL.md)**: Multi-agent task delegation protocol, scoped contexts, and report synthesis.
|
|
175
185
|
- **[`api-craftsman`](skills/api-craftsman/SKILL.md)**: REST, OpenAPI 3.1 specifications, gRPC protos, and RFC 7807 error envelopes.
|
|
176
186
|
- **[`database-architect`](skills/database-architect/SKILL.md)**: Zero-downtime migrations, concurrent indexing, and ACID schema modeling.
|
|
187
|
+
- **[`fullstack-nextjs`](skills/fullstack-nextjs/SKILL.md)**: Next.js App Router, React Server Components (RSC), hydration error diagnosis, and Server Actions.
|
|
188
|
+
- **[`graphql-architect`](skills/graphql-architect/SKILL.md)**: Schema-first GraphQL APIs, DataLoader N+1 query batching, and Relay cursor pagination.
|
|
189
|
+
- **[`supabase-architect`](skills/supabase-architect/SKILL.md)**: Row Level Security (RLS) policies, pgvector embeddings, and edge function workflows.
|
|
190
|
+
- **[`cloudflare-workers`](skills/cloudflare-workers/SKILL.md)**: Serverless edge functions, Wrangler v3, D1 SQL, and KV low-latency storage.
|
|
191
|
+
- **[`docker-compose-orchestrator`](skills/docker-compose-orchestrator/SKILL.md)**: Multi-container local environments (Postgres + pgvector, Redis) with healthchecks.
|
|
192
|
+
- **[`kubernetes-operator`](skills/kubernetes-operator/SKILL.md)**: Production k8s manifests, HPA autoscaling, zero-downtime rolling updates, and health probes.
|
|
193
|
+
- **[`stripe-integration`](skills/stripe-integration/SKILL.md)**: Webhook signature verification, idempotent payments, and customer portal session flows.
|
|
177
194
|
- **[`devops-pipeline`](skills/devops-pipeline/SKILL.md)**: Multi-stage Dockerfiles and caching GitHub Actions CI/CD workflows.
|
|
178
195
|
- **[`root-cause-debugger`](skills/root-cause-debugger/SKILL.md)**: Regression diagnosis using binary search (`git bisect`) and minimal reproduction harnesses.
|
|
179
196
|
- **[`tdd-workflow`](skills/tdd-workflow/SKILL.md)**: Red-Green-Refactor loop with automated test runners.
|
|
@@ -183,11 +200,6 @@ Skills in Antigravity are lazy-loaded runbooks. Only their YAML frontmatter (`na
|
|
|
183
200
|
- **[`git-craftsman`](skills/git-craftsman/SKILL.md)**: Enforces conventional commits, atomic diffs, and clean PR descriptions.
|
|
184
201
|
- **[`security-audit`](skills/security-audit/SKILL.md)**: Scans for credentials in commit history and audits dependency risks.
|
|
185
202
|
- **[`performance-profiler`](skills/performance-profiler/SKILL.md)**: Identifies CPU/memory bottlenecks, analyzes database queries, and critical paths.
|
|
186
|
-
- **[`gemini-grounding`](skills/gemini-grounding/SKILL.md)**: Real-time Google Search grounding, live documentation retrieval, and fact-checking.
|
|
187
|
-
- **[`supabase-architect`](skills/supabase-architect/SKILL.md)**: Row Level Security (RLS) policies, pgvector embeddings, and edge function workflows.
|
|
188
|
-
- **[`cloudflare-workers`](skills/cloudflare-workers/SKILL.md)**: Serverless edge functions, Wrangler v3, D1 SQL, and KV low-latency storage.
|
|
189
|
-
- **[`kubernetes-operator`](skills/kubernetes-operator/SKILL.md)**: Production k8s manifests, HPA autoscaling, zero-downtime rolling updates, and health probes.
|
|
190
|
-
- **[`stripe-integration`](skills/stripe-integration/SKILL.md)**: Webhook signature verification, idempotent payments, and customer portal session flows.
|
|
191
203
|
- **[`continuous-learning`](skills/continuous-learning/SKILL.md)**: Codifies corrections and developer feedback into enduring Knowledge Items.
|
|
192
204
|
|
|
193
205
|
### 2. Lifecycle Hooks (`hooks/`)
|
|
@@ -281,13 +293,31 @@ The zero-dependency `everything-gemini` CLI manages your configurations effortle
|
|
|
281
293
|
# List all available skills, rules, hooks, and plugins
|
|
282
294
|
./bin/everything-gemini list
|
|
283
295
|
|
|
296
|
+
# Initialize everything-gemini in current workspace
|
|
297
|
+
./bin/everything-gemini init
|
|
298
|
+
|
|
284
299
|
# Add a specific skill to your active workspace
|
|
285
300
|
./bin/everything-gemini add skill tdd-workflow
|
|
286
301
|
|
|
302
|
+
# Remove a skill from your active workspace
|
|
303
|
+
./bin/everything-gemini remove skill tdd-workflow
|
|
304
|
+
|
|
287
305
|
# Add a specific plugin
|
|
288
306
|
./bin/everything-gemini add plugin web-fullstack
|
|
289
307
|
|
|
290
|
-
#
|
|
308
|
+
# Test and validate a specific skill's frontmatter and scripts
|
|
309
|
+
./bin/everything-gemini test-skill gemini-multimodal
|
|
310
|
+
|
|
311
|
+
# View detailed playbook overview and triggers for a skill
|
|
312
|
+
./bin/everything-gemini info agent-evals
|
|
313
|
+
|
|
314
|
+
# Scaffold a new progressive-disclosure skill
|
|
315
|
+
./bin/everything-gemini new-skill my-custom-skill
|
|
316
|
+
|
|
317
|
+
# Scaffold a new scoped subagent
|
|
318
|
+
./bin/everything-gemini new-agent my-worker-agent
|
|
319
|
+
|
|
320
|
+
# Validate all schemas, hooks, and frontmatter
|
|
291
321
|
./bin/everything-gemini validate
|
|
292
322
|
```
|
|
293
323
|
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
We actively provide security patches and dependency updates for the following versions:
|
|
6
|
+
|
|
7
|
+
| Version | Supported |
|
|
8
|
+
| :--- | :--- |
|
|
9
|
+
| 1.x | :white_check_mark: |
|
|
10
|
+
| < 1.0 | :x: |
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Reporting a Vulnerability
|
|
15
|
+
|
|
16
|
+
The Everything Gemini team takes the security of agent systems, lifecycle hooks, and model interactions seriously.
|
|
17
|
+
|
|
18
|
+
If you discover a security vulnerability, prompt injection bypass in safety gates, or credential exposure vector:
|
|
19
|
+
|
|
20
|
+
1. **Do NOT open a public GitHub issue.**
|
|
21
|
+
2. Report the vulnerability privately via **GitHub Security Advisories** on the repository:
|
|
22
|
+
- Go to [https://github.com/salmandev/everything-gemini/security/advisories](https://github.com/salmandev/everything-gemini/security/advisories)
|
|
23
|
+
- Click **"Report a vulnerability"**
|
|
24
|
+
3. Alternatively, email the maintainer directly at `salman@salmandev.com` with the subject:
|
|
25
|
+
`[SECURITY] Everything Gemini Vulnerability Report`.
|
|
26
|
+
|
|
27
|
+
Please include:
|
|
28
|
+
- A clear description of the vulnerability and attack vector.
|
|
29
|
+
- Minimal reproduction steps, sample prompts, or script commands.
|
|
30
|
+
- Potential impact on agent runtimes or host filesystem integrity.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Response Timeline
|
|
35
|
+
|
|
36
|
+
- **Initial Acknowledgment**: Within 48 hours of receipt.
|
|
37
|
+
- **Triage & Assessment**: Within 5 business days.
|
|
38
|
+
- **Remediation & Patch**: Published as an expedited patch release (`v1.x.y`).
|
|
Binary file
|
package/bin/everything-gemini
CHANGED
|
@@ -15,6 +15,11 @@ const GLOBAL_CONFIG_DIR = path.join(os.homedir(), '.gemini', 'config');
|
|
|
15
15
|
const WORKSPACE_DIR = process.cwd();
|
|
16
16
|
const AGENTS_DIR = path.join(WORKSPACE_DIR, '.agents');
|
|
17
17
|
|
|
18
|
+
let VERSION = '1.0.1';
|
|
19
|
+
try {
|
|
20
|
+
VERSION = require(path.join(REPO_ROOT, 'package.json')).version || '1.0.1';
|
|
21
|
+
} catch (_) {}
|
|
22
|
+
|
|
18
23
|
// ANSI Colors
|
|
19
24
|
const RESET = '\x1b[0m';
|
|
20
25
|
const BOLD = '\x1b[1m';
|
|
@@ -27,7 +32,7 @@ const GRAY = '\x1b[90m';
|
|
|
27
32
|
|
|
28
33
|
function printBanner() {
|
|
29
34
|
console.log(`
|
|
30
|
-
${CYAN}${BOLD}🪐 Everything Gemini (${GREEN}everything-gemini${CYAN})
|
|
35
|
+
${CYAN}${BOLD}🪐 Everything Gemini (${GREEN}everything-gemini${CYAN}) v${VERSION}${RESET}
|
|
31
36
|
${GRAY}The open-source agent harness & multi-agent orchestrator for Google Gemini & Antigravity${RESET}
|
|
32
37
|
`);
|
|
33
38
|
}
|
|
@@ -39,10 +44,14 @@ function printHelp() {
|
|
|
39
44
|
console.log(`${BOLD}COMMANDS:${RESET}`);
|
|
40
45
|
console.log(` ${GREEN}doctor${RESET} Inspect system, AGY surfaces, and configuration health`);
|
|
41
46
|
console.log(` ${GREEN}install${RESET} [options] Install everything-gemini profiles into workspace or globally`);
|
|
47
|
+
console.log(` ${GREEN}init${RESET} [options] Initialize everything-gemini in current workspace`);
|
|
42
48
|
console.log(` ${GREEN}list${RESET} Show all available skills, rules, hooks, and plugins`);
|
|
43
49
|
console.log(` ${GREEN}new-skill${RESET} <name> Scaffold a new progressive-disclosure skill`);
|
|
44
50
|
console.log(` ${GREEN}new-agent${RESET} <name> Scaffold a new scoped subagent specification`);
|
|
45
|
-
console.log(` ${GREEN}add${RESET} <type> <name> Add a specific skill,
|
|
51
|
+
console.log(` ${GREEN}add${RESET} <type> <name> Add a specific skill, agent, or plugin to workspace`);
|
|
52
|
+
console.log(` ${GREEN}remove${RESET} <type> <name> Remove a specific skill, agent, or plugin from workspace`);
|
|
53
|
+
console.log(` ${GREEN}test-skill${RESET} <name> Validate a specific skill frontmatter & scripts`);
|
|
54
|
+
console.log(` ${GREEN}info${RESET} <skill-name> Display detailed instructions and trigger for a skill`);
|
|
46
55
|
console.log(` ${GREEN}validate${RESET} Run self-test on frontmatter, JSON schemas & hooks`);
|
|
47
56
|
console.log(` ${GREEN}help${RESET} Show this help message\n`);
|
|
48
57
|
console.log(`${BOLD}OPTIONS for 'install':${RESET}`);
|
|
@@ -141,7 +150,33 @@ function listComponents() {
|
|
|
141
150
|
const match = content.match(/description:\s*>?-?\s*([^\n\r]+)/);
|
|
142
151
|
if (match) desc = match[1].trim();
|
|
143
152
|
}
|
|
144
|
-
console.log(` ${BOLD}${skill.padEnd(
|
|
153
|
+
console.log(` ${BOLD}${skill.padEnd(28)}${RESET} ${GRAY}${desc}${RESET}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Also scan plugin skills
|
|
158
|
+
const pluginsDirForSkills = path.join(REPO_ROOT, 'plugins');
|
|
159
|
+
if (fs.existsSync(pluginsDirForSkills)) {
|
|
160
|
+
const plugins = fs.readdirSync(pluginsDirForSkills, { withFileTypes: true })
|
|
161
|
+
.filter(d => d.isDirectory())
|
|
162
|
+
.map(d => d.name);
|
|
163
|
+
for (const plugin of plugins) {
|
|
164
|
+
const pSkillsDir = path.join(pluginsDirForSkills, plugin, 'skills');
|
|
165
|
+
if (fs.existsSync(pSkillsDir)) {
|
|
166
|
+
const pSkills = fs.readdirSync(pSkillsDir, { withFileTypes: true })
|
|
167
|
+
.filter(d => d.isDirectory())
|
|
168
|
+
.map(d => d.name);
|
|
169
|
+
for (const skill of pSkills) {
|
|
170
|
+
const skillMd = path.join(pSkillsDir, skill, 'SKILL.md');
|
|
171
|
+
let desc = 'No description';
|
|
172
|
+
if (fs.existsSync(skillMd)) {
|
|
173
|
+
const content = fs.readFileSync(skillMd, 'utf8');
|
|
174
|
+
const match = content.match(/description:\s*>?-?\s*([^\n\r]+)/);
|
|
175
|
+
if (match) desc = match[1].trim();
|
|
176
|
+
}
|
|
177
|
+
console.log(` ${BOLD}${skill.padEnd(28)}${RESET} ${CYAN}[${plugin}]${RESET} ${GRAY}${desc}${RESET}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
145
180
|
}
|
|
146
181
|
}
|
|
147
182
|
|
|
@@ -472,6 +507,217 @@ Return structured report to parent agent:
|
|
|
472
507
|
console.log(` 📄 ${targetFile}\n`);
|
|
473
508
|
}
|
|
474
509
|
|
|
510
|
+
function addComponent(type, name) {
|
|
511
|
+
if (!type || !name) {
|
|
512
|
+
console.error(`${RED}Usage: everything-gemini add <skill|agent|plugin> <name>${RESET}`);
|
|
513
|
+
process.exit(1);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
const cleanName = name.trim().toLowerCase();
|
|
517
|
+
const targetWorkspace = path.join(WORKSPACE_DIR, '.agents');
|
|
518
|
+
if (!fs.existsSync(targetWorkspace)) {
|
|
519
|
+
fs.mkdirSync(targetWorkspace, { recursive: true });
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
if (type === 'skill') {
|
|
523
|
+
const src = path.join(REPO_ROOT, 'skills', cleanName);
|
|
524
|
+
if (!fs.existsSync(src)) {
|
|
525
|
+
console.error(`${RED}Skill '${cleanName}' not found in catalog.${RESET}`);
|
|
526
|
+
process.exit(1);
|
|
527
|
+
}
|
|
528
|
+
const dest = path.join(targetWorkspace, 'skills', cleanName);
|
|
529
|
+
copyRecursiveSync(src, dest);
|
|
530
|
+
console.log(`${GREEN}✔ Added skill '${cleanName}' to ${dest}${RESET}`);
|
|
531
|
+
} else if (type === 'agent') {
|
|
532
|
+
const src = path.join(REPO_ROOT, 'agents', `${cleanName}.md`);
|
|
533
|
+
if (!fs.existsSync(src)) {
|
|
534
|
+
console.error(`${RED}Agent '${cleanName}' not found in catalog.${RESET}`);
|
|
535
|
+
process.exit(1);
|
|
536
|
+
}
|
|
537
|
+
const destDir = path.join(targetWorkspace, 'agents');
|
|
538
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
539
|
+
fs.copyFileSync(src, path.join(destDir, `${cleanName}.md`));
|
|
540
|
+
console.log(`${GREEN}✔ Added agent '${cleanName}' to ${destDir}${RESET}`);
|
|
541
|
+
} else if (type === 'plugin') {
|
|
542
|
+
const src = path.join(REPO_ROOT, 'plugins', cleanName);
|
|
543
|
+
if (!fs.existsSync(src)) {
|
|
544
|
+
console.error(`${RED}Plugin '${cleanName}' not found in catalog.${RESET}`);
|
|
545
|
+
process.exit(1);
|
|
546
|
+
}
|
|
547
|
+
const dest = path.join(targetWorkspace, 'plugins', cleanName);
|
|
548
|
+
copyRecursiveSync(src, dest);
|
|
549
|
+
console.log(`${GREEN}✔ Added plugin '${cleanName}' to ${dest}${RESET}`);
|
|
550
|
+
} else {
|
|
551
|
+
console.error(`${RED}Unknown type '${type}'. Use: skill, agent, or plugin.${RESET}`);
|
|
552
|
+
process.exit(1);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
function removeComponent(type, name) {
|
|
557
|
+
if (!type || !name) {
|
|
558
|
+
console.error(`${RED}Usage: everything-gemini remove <skill|agent|plugin> <name>${RESET}`);
|
|
559
|
+
process.exit(1);
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
const cleanName = name.trim().toLowerCase();
|
|
563
|
+
const targetWorkspace = path.join(WORKSPACE_DIR, '.agents');
|
|
564
|
+
|
|
565
|
+
if (type === 'skill') {
|
|
566
|
+
const dest = path.join(targetWorkspace, 'skills', cleanName);
|
|
567
|
+
if (!fs.existsSync(dest)) {
|
|
568
|
+
console.log(`${YELLOW}Skill '${cleanName}' is not installed in ${dest}${RESET}`);
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
fs.rmSync(dest, { recursive: true, force: true });
|
|
572
|
+
console.log(`${GREEN}✔ Removed skill '${cleanName}' from workspace.${RESET}`);
|
|
573
|
+
} else if (type === 'agent') {
|
|
574
|
+
const dest = path.join(targetWorkspace, 'agents', `${cleanName}.md`);
|
|
575
|
+
if (!fs.existsSync(dest)) {
|
|
576
|
+
console.log(`${YELLOW}Agent '${cleanName}' is not installed in ${dest}${RESET}`);
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
fs.unlinkSync(dest);
|
|
580
|
+
console.log(`${GREEN}✔ Removed agent '${cleanName}' from workspace.${RESET}`);
|
|
581
|
+
} else if (type === 'plugin') {
|
|
582
|
+
const dest = path.join(targetWorkspace, 'plugins', cleanName);
|
|
583
|
+
if (!fs.existsSync(dest)) {
|
|
584
|
+
console.log(`${YELLOW}Plugin '${cleanName}' is not installed in ${dest}${RESET}`);
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
fs.rmSync(dest, { recursive: true, force: true });
|
|
588
|
+
console.log(`${GREEN}✔ Removed plugin '${cleanName}' from workspace.${RESET}`);
|
|
589
|
+
} else {
|
|
590
|
+
console.error(`${RED}Unknown type '${type}'. Use: skill, agent, or plugin.${RESET}`);
|
|
591
|
+
process.exit(1);
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
function testSkill(name) {
|
|
596
|
+
if (!name) {
|
|
597
|
+
console.error(`${RED}Usage: everything-gemini test-skill <skill-name>${RESET}`);
|
|
598
|
+
process.exit(1);
|
|
599
|
+
}
|
|
600
|
+
const cleanName = name.trim().toLowerCase();
|
|
601
|
+
const skillDir = path.join(REPO_ROOT, 'skills', cleanName);
|
|
602
|
+
const skillMd = path.join(skillDir, 'SKILL.md');
|
|
603
|
+
|
|
604
|
+
if (!fs.existsSync(skillMd)) {
|
|
605
|
+
console.error(`${RED}✖ SKILL.md not found for skill '${cleanName}' at ${skillDir}${RESET}`);
|
|
606
|
+
process.exit(1);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
const content = fs.readFileSync(skillMd, 'utf8');
|
|
610
|
+
console.log(`${BOLD}🔍 Validating skill: [${CYAN}${cleanName}${RESET}${BOLD}]...${RESET}`);
|
|
611
|
+
|
|
612
|
+
if (!content.startsWith('---')) {
|
|
613
|
+
console.error(` ${RED}✖ Missing YAML frontmatter start (---)${RESET}`);
|
|
614
|
+
process.exit(1);
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
const parts = content.split('---');
|
|
618
|
+
if (parts.length < 3) {
|
|
619
|
+
console.error(` ${RED}✖ Malformed YAML frontmatter boundary${RESET}`);
|
|
620
|
+
process.exit(1);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
const frontmatter = parts[1];
|
|
624
|
+
const nameMatch = frontmatter.match(/name:\s*([^\n\r]+)/);
|
|
625
|
+
const descMatch = frontmatter.match(/description:\s*>?-?\s*([^\n\r]+)/);
|
|
626
|
+
|
|
627
|
+
if (!nameMatch) {
|
|
628
|
+
console.error(` ${RED}✖ Missing 'name' field in frontmatter${RESET}`);
|
|
629
|
+
process.exit(1);
|
|
630
|
+
}
|
|
631
|
+
console.log(` ${GREEN}✔${RESET} Name field: ${BOLD}${nameMatch[1].trim()}${RESET}`);
|
|
632
|
+
|
|
633
|
+
if (!descMatch) {
|
|
634
|
+
console.error(` ${RED}✖ Missing 'description' field in frontmatter${RESET}`);
|
|
635
|
+
process.exit(1);
|
|
636
|
+
}
|
|
637
|
+
console.log(` ${GREEN}✔${RESET} Description trigger: ${GRAY}${descMatch[1].trim()}${RESET}`);
|
|
638
|
+
|
|
639
|
+
const scriptsDir = path.join(skillDir, 'scripts');
|
|
640
|
+
if (fs.existsSync(scriptsDir)) {
|
|
641
|
+
const scripts = fs.readdirSync(scriptsDir).filter(f => f.endsWith('.sh'));
|
|
642
|
+
for (const s of scripts) {
|
|
643
|
+
const fullPath = path.join(scriptsDir, s);
|
|
644
|
+
const stat = fs.statSync(fullPath);
|
|
645
|
+
const isExec = (stat.mode & 0o111) !== 0;
|
|
646
|
+
if (!isExec) {
|
|
647
|
+
console.error(` ${RED}✖ Script ${s} is not executable. Run chmod +x${RESET}`);
|
|
648
|
+
process.exit(1);
|
|
649
|
+
}
|
|
650
|
+
console.log(` ${GREEN}✔${RESET} Script executable: ${s}`);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
console.log(`\n${GREEN}${BOLD}✨ Skill '${cleanName}' passed all validation checks!${RESET}\n`);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
function showSkillInfo(skillName) {
|
|
658
|
+
if (!skillName) {
|
|
659
|
+
console.error(`\n${RED}Error: Please specify a skill name.${RESET}`);
|
|
660
|
+
console.log(`Usage: everything-gemini info <skill-name>\n`);
|
|
661
|
+
process.exit(1);
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
const cleanName = skillName.trim().replace(/^skills\//, '');
|
|
665
|
+
let skillDir = path.join(REPO_ROOT, 'skills', cleanName);
|
|
666
|
+
let pluginName = null;
|
|
667
|
+
|
|
668
|
+
if (!fs.existsSync(skillDir)) {
|
|
669
|
+
const pluginsDir = path.join(REPO_ROOT, 'plugins');
|
|
670
|
+
if (fs.existsSync(pluginsDir)) {
|
|
671
|
+
const plugins = fs.readdirSync(pluginsDir, { withFileTypes: true })
|
|
672
|
+
.filter(d => d.isDirectory())
|
|
673
|
+
.map(d => d.name);
|
|
674
|
+
for (const p of plugins) {
|
|
675
|
+
const candidate = path.join(pluginsDir, p, 'skills', cleanName);
|
|
676
|
+
if (fs.existsSync(candidate)) {
|
|
677
|
+
skillDir = candidate;
|
|
678
|
+
pluginName = p;
|
|
679
|
+
break;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
const skillMd = path.join(skillDir, 'SKILL.md');
|
|
686
|
+
if (!fs.existsSync(skillMd)) {
|
|
687
|
+
console.error(`\n${RED}Error: Skill '${cleanName}' not found in catalog.${RESET}\n`);
|
|
688
|
+
process.exit(1);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
printBanner();
|
|
692
|
+
console.log(`${BOLD}📖 Skill Overview: ${CYAN}${cleanName}${RESET}`);
|
|
693
|
+
if (pluginName) {
|
|
694
|
+
console.log(`Source Plugin: ${YELLOW}${pluginName}${RESET}`);
|
|
695
|
+
}
|
|
696
|
+
console.log(`Path: ${GRAY}${skillMd}${RESET}\n`);
|
|
697
|
+
|
|
698
|
+
const content = fs.readFileSync(skillMd, 'utf8');
|
|
699
|
+
const parts = content.split('---');
|
|
700
|
+
if (parts.length >= 3) {
|
|
701
|
+
const frontmatter = parts[1];
|
|
702
|
+
const descMatch = frontmatter.match(/description:\s*>?-?\s*([^\n\r]+)/);
|
|
703
|
+
if (descMatch) {
|
|
704
|
+
console.log(`${BOLD}🎯 Trigger Description:${RESET}`);
|
|
705
|
+
console.log(` ${descMatch[1].trim()}\n`);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
const body = parts.slice(2).join('---').trim();
|
|
709
|
+
const lines = body.split('\n').slice(0, 22);
|
|
710
|
+
console.log(`${BOLD}📋 Playbook Preview:${RESET}`);
|
|
711
|
+
console.log(lines.join('\n'));
|
|
712
|
+
if (body.split('\n').length > 22) {
|
|
713
|
+
console.log(`\n${GRAY}... (${body.split('\n').length - 22} more lines in ${skillMd})${RESET}`);
|
|
714
|
+
}
|
|
715
|
+
} else {
|
|
716
|
+
console.log(content.split('\n').slice(0, 25).join('\n'));
|
|
717
|
+
}
|
|
718
|
+
console.log('');
|
|
719
|
+
}
|
|
720
|
+
|
|
475
721
|
// CLI Argument Parsing
|
|
476
722
|
const args = process.argv.slice(2);
|
|
477
723
|
const command = args[0] || 'help';
|
|
@@ -489,6 +735,20 @@ switch (command) {
|
|
|
489
735
|
case 'new-agent':
|
|
490
736
|
scaffoldAgent(args[1]);
|
|
491
737
|
break;
|
|
738
|
+
case 'add':
|
|
739
|
+
addComponent(args[1], args[2]);
|
|
740
|
+
break;
|
|
741
|
+
case 'remove':
|
|
742
|
+
removeComponent(args[1], args[2]);
|
|
743
|
+
break;
|
|
744
|
+
case 'test-skill':
|
|
745
|
+
testSkill(args[1]);
|
|
746
|
+
break;
|
|
747
|
+
case 'info':
|
|
748
|
+
case 'show':
|
|
749
|
+
showSkillInfo(args[1]);
|
|
750
|
+
break;
|
|
751
|
+
case 'init':
|
|
492
752
|
case 'install': {
|
|
493
753
|
let profile = 'developer';
|
|
494
754
|
let isGlobal = false;
|