mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-02 15:13:28 +08:00
Compare commits
15 Commits
ecc-tools/
...
ecc-tools/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5145e24222 | ||
|
|
a16676fe9a | ||
|
|
36e47c6099 | ||
|
|
4203ed1baf | ||
|
|
0665df15db | ||
|
|
c700028be9 | ||
|
|
0bd78cf996 | ||
|
|
03c1a516b6 | ||
|
|
0eca0d1c46 | ||
|
|
19c0f59836 | ||
|
|
f5ab500e8f | ||
|
|
b32e022a24 | ||
|
|
b5d28c7354 | ||
|
|
62b838f230 | ||
|
|
0c65f4031d |
@@ -1,188 +1,409 @@
|
||||
```markdown
|
||||
# everything-claude-code Development Patterns
|
||||
---
|
||||
name: everything-claude-code-conventions
|
||||
description: Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.
|
||||
---
|
||||
|
||||
> Auto-generated skill from repository analysis
|
||||
# Everything Claude Code Conventions
|
||||
|
||||
> Generated from [affaan-m/everything-claude-code](https://github.com/affaan-m/everything-claude-code) on 2026-04-01
|
||||
|
||||
## Overview
|
||||
|
||||
This skill documents the core development patterns, coding conventions, and agentic workflows used in the `everything-claude-code` (ECC) repository. The project is written in JavaScript (no framework detected) and implements modular, agent-driven automation and installable skills. This guide covers how to contribute new skills, commands, install targets, agent definitions, and more, following the repository's conventions and workflows.
|
||||
This skill teaches Claude the development patterns and conventions used in everything-claude-code.
|
||||
|
||||
## Coding Conventions
|
||||
## Tech Stack
|
||||
|
||||
ECC follows consistent JavaScript coding and repository organization conventions:
|
||||
- **Primary Language**: JavaScript
|
||||
- **Architecture**: hybrid module organization
|
||||
- **Test Location**: separate
|
||||
|
||||
### File Naming
|
||||
## When to Use This Skill
|
||||
|
||||
- Use **camelCase** for JavaScript files and modules.
|
||||
- Example: `myModule.js`, `installTarget.js`
|
||||
Activate this skill when:
|
||||
- Making changes to this repository
|
||||
- Adding new features following established patterns
|
||||
- Writing tests that match project conventions
|
||||
- Creating commits with proper message format
|
||||
|
||||
### Import Style
|
||||
## Commit Conventions
|
||||
|
||||
- Use **relative imports** for internal modules.
|
||||
```js
|
||||
// Good
|
||||
const utils = require('./utils');
|
||||
import { doThing } from '../lib/doThing.js';
|
||||
```
|
||||
Follow these commit message conventions based on 500 analyzed commits.
|
||||
|
||||
### Export Style
|
||||
### Commit Style: Conventional Commits
|
||||
|
||||
- Both **CommonJS** and **ES module** exports are used, depending on context.
|
||||
```js
|
||||
// CommonJS
|
||||
module.exports = function doSomething() { ... };
|
||||
### Prefixes Used
|
||||
|
||||
// ES Module
|
||||
export function doSomethingElse() { ... }
|
||||
```
|
||||
- `fix`
|
||||
- `feat`
|
||||
- `docs`
|
||||
- `chore`
|
||||
|
||||
### Commit Messages
|
||||
### Message Guidelines
|
||||
|
||||
- Prefix with `fix:`, `feat:`, `docs:`, or `chore:`
|
||||
- Keep messages concise (average ~56 characters)
|
||||
```
|
||||
feat: add support for new install target
|
||||
fix: resolve agent prompt parsing bug
|
||||
```
|
||||
- Average message length: ~56 characters
|
||||
- Keep first line concise and descriptive
|
||||
- Use imperative mood ("Add feature" not "Added feature")
|
||||
|
||||
## Workflows
|
||||
|
||||
### Add or Update a Skill
|
||||
*Commit message example*
|
||||
|
||||
**Trigger:** When introducing or updating a skill for agentic workflows
|
||||
**Command:** `/add-skill`
|
||||
|
||||
1. Create or update a `SKILL.md` file under `skills/{skill-name}/` or `.agents/skills/{skill-name}/`.
|
||||
2. Optionally update `AGENTS.md`, `README.md`, and localized docs (e.g., `README.zh-CN.md`).
|
||||
3. Update `manifests/install-modules.json` and/or `install-components.json` if the skill is installable.
|
||||
4. Optionally add or update related agent markdown files.
|
||||
5. Optionally update tests or scripts if the skill introduces new hooks or behaviors.
|
||||
|
||||
**Example:**
|
||||
```shell
|
||||
mkdir -p skills/myNewSkill
|
||||
touch skills/myNewSkill/SKILL.md
|
||||
# Edit SKILL.md with documentation
|
||||
```text
|
||||
refactor: simplify redundant checks; normalize getInstalledPlugin inputs
|
||||
```
|
||||
|
||||
---
|
||||
*Commit message example*
|
||||
|
||||
### Add or Update a Command Workflow
|
||||
|
||||
**Trigger:** When adding or updating a repeatable workflow command
|
||||
**Command:** `/add-command`
|
||||
|
||||
1. Create or update a markdown file in `commands/` (e.g., `prp-*.md`, `gan-*.md`, `santa-loop.md`).
|
||||
2. Document workflow phases, usage, and outputs in the file.
|
||||
3. Optionally update related skills or agent definitions.
|
||||
4. Optionally add shell scripts or orchestrators if automation is needed.
|
||||
5. Optionally update `AGENTS.md` or `README.md` to reference the new command.
|
||||
|
||||
**Example:**
|
||||
```shell
|
||||
touch commands/prp-myworkflow.md
|
||||
# Document the workflow steps in markdown
|
||||
```text
|
||||
fix: preserve file permissions in writeJsonAtomic
|
||||
```
|
||||
|
||||
---
|
||||
*Commit message example*
|
||||
|
||||
### Add or Update an Install Target
|
||||
|
||||
**Trigger:** When supporting a new IDE/platform or updating install logic
|
||||
**Command:** `/add-install-target`
|
||||
|
||||
1. Add or update install scripts (`install.sh`, `install.js`, `uninstall.sh`, `uninstall.js`) in a new or existing directory (e.g., `.codebuddy/`).
|
||||
2. Update `manifests/install-modules.json` and `schemas/ecc-install-config.schema.json`.
|
||||
3. Update `scripts/lib/install-manifests.js` and `scripts/lib/install-targets/{target}.js`.
|
||||
4. Add or update tests for install targets.
|
||||
5. Optionally update `README.md` or `AGENTS.md`.
|
||||
|
||||
**Example:**
|
||||
```shell
|
||||
mkdir -p .codebuddy
|
||||
touch .codebuddy/install.sh
|
||||
# Implement install logic
|
||||
```text
|
||||
style: apply linter formatting to pluginRegistry.js
|
||||
```
|
||||
|
||||
---
|
||||
*Commit message example*
|
||||
|
||||
### Update Hooks and Hook Tests
|
||||
```text
|
||||
chore: update yarn.lock
|
||||
```
|
||||
|
||||
**Trigger:** When refactoring, fixing, or extending system hooks
|
||||
**Command:** `/update-hook`
|
||||
*Commit message example*
|
||||
|
||||
1. Edit `hooks/hooks.json` to change configuration or add/remove hooks.
|
||||
2. Edit or add `scripts/hooks/*.js` to implement hook logic.
|
||||
3. Edit or add `tests/hooks/*.test.js` to cover new or changed behaviors.
|
||||
4. Optionally update related scripts or documentation.
|
||||
```text
|
||||
feat(plugin): add marketplace add/install system
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```json
|
||||
// hooks/hooks.json
|
||||
{
|
||||
"pre-commit": ["format", "typecheck"]
|
||||
*Commit message example*
|
||||
|
||||
```text
|
||||
fix: ship marketplaces.json as empty stub to prevent duplicate-add error
|
||||
```
|
||||
|
||||
*Commit message example*
|
||||
|
||||
```text
|
||||
fix: normalize lookups, atomic writes, reject empty marketplace specifier
|
||||
```
|
||||
|
||||
*Commit message example*
|
||||
|
||||
```text
|
||||
refactor: extract shared readJsonFile helper; fix single-dash flag parsing
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
### Project Structure: Single Package
|
||||
|
||||
This project uses **hybrid** module organization.
|
||||
|
||||
### Configuration Files
|
||||
|
||||
- `.github/workflows/ci.yml`
|
||||
- `.github/workflows/maintenance.yml`
|
||||
- `.github/workflows/monthly-metrics.yml`
|
||||
- `.github/workflows/release.yml`
|
||||
- `.github/workflows/reusable-release.yml`
|
||||
- `.github/workflows/reusable-test.yml`
|
||||
- `.github/workflows/reusable-validate.yml`
|
||||
- `.opencode/package.json`
|
||||
- `.opencode/tsconfig.json`
|
||||
- `.prettierrc`
|
||||
- `eslint.config.js`
|
||||
- `package.json`
|
||||
|
||||
### Guidelines
|
||||
|
||||
- This project uses a hybrid organization
|
||||
- Follow existing patterns when adding new code
|
||||
|
||||
## Code Style
|
||||
|
||||
### Language: JavaScript
|
||||
|
||||
### Naming Conventions
|
||||
|
||||
| Element | Convention |
|
||||
|---------|------------|
|
||||
| Files | camelCase |
|
||||
| Functions | camelCase |
|
||||
| Classes | PascalCase |
|
||||
| Constants | SCREAMING_SNAKE_CASE |
|
||||
|
||||
### Import Style: Relative Imports
|
||||
|
||||
### Export Style: Mixed Style
|
||||
|
||||
|
||||
*Preferred import style*
|
||||
|
||||
```typescript
|
||||
// Use relative imports
|
||||
import { Button } from '../components/Button'
|
||||
import { useAuth } from './hooks/useAuth'
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Test Framework
|
||||
|
||||
No specific test framework detected — use the repository's existing test patterns.
|
||||
|
||||
### File Pattern: `*.test.js`
|
||||
|
||||
### Test Types
|
||||
|
||||
- **Unit tests**: Test individual functions and components in isolation
|
||||
- **Integration tests**: Test interactions between multiple components/services
|
||||
|
||||
### Coverage
|
||||
|
||||
This project has coverage reporting configured. Aim for 80%+ coverage.
|
||||
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Error Handling Style: Try-Catch Blocks
|
||||
|
||||
|
||||
*Standard error handling pattern*
|
||||
|
||||
```typescript
|
||||
try {
|
||||
const result = await riskyOperation()
|
||||
return result
|
||||
} catch (error) {
|
||||
console.error('Operation failed:', error)
|
||||
throw new Error('User-friendly message')
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
## Common Workflows
|
||||
|
||||
### Dependency Bump via Dependabot
|
||||
These workflows were detected from analyzing commit patterns.
|
||||
|
||||
**Trigger:** When updating dependencies for security or features
|
||||
**Command:** `/bump-dependency`
|
||||
### Feature Development
|
||||
|
||||
1. Update dependency version in `package.json`, `yarn.lock`, or workflow YAML files.
|
||||
2. Commit with a standardized message (often by dependabot).
|
||||
3. Optionally update related documentation or changelogs.
|
||||
Standard feature implementation workflow
|
||||
|
||||
**Example:**
|
||||
```json
|
||||
// package.json
|
||||
"dependencies": {
|
||||
"some-lib": "^2.0.0"
|
||||
}
|
||||
**Frequency**: ~14 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Add feature implementation
|
||||
2. Add tests for feature
|
||||
3. Update documentation
|
||||
|
||||
**Files typically involved**:
|
||||
- `.opencode/*`
|
||||
- `.opencode/plugins/*`
|
||||
- `.opencode/plugins/lib/*`
|
||||
- `**/*.test.*`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
feat(team-builder): use `claude agents` command for agent discovery (#1021)
|
||||
fix: extract inline SessionStart bootstrap to separate file (#1035)
|
||||
feat: add hexagonal architecture SKILL. (#1034)
|
||||
```
|
||||
|
||||
### Add New Command Or Agentic Workflow
|
||||
|
||||
Adds a new command or agentic workflow to the system, often including new .md command files, agent definitions, and skill orchestrators.
|
||||
|
||||
**Frequency**: ~3 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Create one or more new command markdown files in commands/ (e.g., gan-build.md, santa-loop.md, prp-*.md)
|
||||
2. Add or update agent definitions in agents/ (e.g., gan-generator.md, opensource-forker.md)
|
||||
3. Add or update skill orchestrator in skills/ (e.g., skills/gan-style-harness/SKILL.md, skills/opensource-pipeline/SKILL.md)
|
||||
4. Optionally add shell orchestrators or scripts (e.g., scripts/gan-harness.sh)
|
||||
5. Optionally add documentation or examples
|
||||
|
||||
**Files typically involved**:
|
||||
- `commands/*.md`
|
||||
- `agents/*.md`
|
||||
- `skills/*/SKILL.md`
|
||||
- `scripts/*.sh`
|
||||
- `examples/*`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Create one or more new command markdown files in commands/ (e.g., gan-build.md, santa-loop.md, prp-*.md)
|
||||
Add or update agent definitions in agents/ (e.g., gan-generator.md, opensource-forker.md)
|
||||
Add or update skill orchestrator in skills/ (e.g., skills/gan-style-harness/SKILL.md, skills/opensource-pipeline/SKILL.md)
|
||||
Optionally add shell orchestrators or scripts (e.g., scripts/gan-harness.sh)
|
||||
Optionally add documentation or examples
|
||||
```
|
||||
|
||||
### Add Or Update Plugin Marketplace System
|
||||
|
||||
Implements or refines the plugin marketplace system, including registry helpers, CLI scripts, JSON stubs, and documentation.
|
||||
|
||||
**Frequency**: ~2 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Edit or create scripts/lib/pluginRegistry.js for registry helpers
|
||||
2. Edit or create scripts/pluginMarketplace.js and/or scripts/pluginInstall.js for CLI commands
|
||||
3. Edit .claude-plugin/marketplaces.json and/or .claude-plugin/installed-plugins.json as stubs or for schema changes
|
||||
4. Update or add tests in tests/lib/pluginRegistry.test.js
|
||||
5. Update or create documentation in commands/plugin-marketplace.md and/or commands/plugin-install.md
|
||||
6. Optionally update root docs (README.md, AGENTS.md, etc.)
|
||||
|
||||
**Files typically involved**:
|
||||
- `scripts/lib/pluginRegistry.js`
|
||||
- `scripts/pluginMarketplace.js`
|
||||
- `scripts/pluginInstall.js`
|
||||
- `.claude-plugin/marketplaces.json`
|
||||
- `.claude-plugin/installed-plugins.json`
|
||||
- `tests/lib/pluginRegistry.test.js`
|
||||
- `commands/plugin-marketplace.md`
|
||||
- `commands/plugin-install.md`
|
||||
- `README.md`
|
||||
- `AGENTS.md`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Edit or create scripts/lib/pluginRegistry.js for registry helpers
|
||||
Edit or create scripts/pluginMarketplace.js and/or scripts/pluginInstall.js for CLI commands
|
||||
Edit .claude-plugin/marketplaces.json and/or .claude-plugin/installed-plugins.json as stubs or for schema changes
|
||||
Update or add tests in tests/lib/pluginRegistry.test.js
|
||||
Update or create documentation in commands/plugin-marketplace.md and/or commands/plugin-install.md
|
||||
Optionally update root docs (README.md, AGENTS.md, etc.)
|
||||
```
|
||||
|
||||
### Add New Install Target Or Adaptation
|
||||
|
||||
Adds a new install target (e.g., Gemini, CodeBuddy) to the system, including scripts, schemas, and tests.
|
||||
|
||||
**Frequency**: ~2 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Add new install scripts and docs under a dedicated directory (e.g., .gemini/, .codebuddy/)
|
||||
2. Update manifests/install-modules.json to register the new target
|
||||
3. Update or add schema files (schemas/ecc-install-config.schema.json, schemas/install-modules.schema.json)
|
||||
4. Edit or add scripts/lib/install-manifests.js and scripts/lib/install-targets/*.js for logic
|
||||
5. Add or update tests in tests/lib/install-targets.test.js
|
||||
6. Update documentation (README.md, .gemini/GEMINI.md, etc.)
|
||||
|
||||
**Files typically involved**:
|
||||
- `.gemini/*`
|
||||
- `.codebuddy/*`
|
||||
- `manifests/install-modules.json`
|
||||
- `schemas/ecc-install-config.schema.json`
|
||||
- `schemas/install-modules.schema.json`
|
||||
- `scripts/lib/install-manifests.js`
|
||||
- `scripts/lib/install-targets/*.js`
|
||||
- `tests/lib/install-targets.test.js`
|
||||
- `README.md`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Add new install scripts and docs under a dedicated directory (e.g., .gemini/, .codebuddy/)
|
||||
Update manifests/install-modules.json to register the new target
|
||||
Update or add schema files (schemas/ecc-install-config.schema.json, schemas/install-modules.schema.json)
|
||||
Edit or add scripts/lib/install-manifests.js and scripts/lib/install-targets/*.js for logic
|
||||
Add or update tests in tests/lib/install-targets.test.js
|
||||
Update documentation (README.md, .gemini/GEMINI.md, etc.)
|
||||
```
|
||||
|
||||
### Add Or Update Hook Or Session Management
|
||||
|
||||
Implements or refines hooks and session management logic, including accumulator patterns, session start/end, and related tests.
|
||||
|
||||
**Frequency**: ~2 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Edit or create scripts/hooks/*.js for hook logic (e.g., post-edit-accumulator.js, stop-format-typecheck.js, session-start.js)
|
||||
2. Update hooks/hooks.json for hook configuration
|
||||
3. Add or update tests in tests/hooks/*.test.js
|
||||
4. Optionally update shell scripts (scripts/hooks/*.sh)
|
||||
5. Optionally update adapters (.cursor/hooks/after-file-edit.js)
|
||||
|
||||
**Files typically involved**:
|
||||
- `scripts/hooks/*.js`
|
||||
- `hooks/hooks.json`
|
||||
- `tests/hooks/*.test.js`
|
||||
- `scripts/hooks/*.sh`
|
||||
- `.cursor/hooks/after-file-edit.js`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Edit or create scripts/hooks/*.js for hook logic (e.g., post-edit-accumulator.js, stop-format-typecheck.js, session-start.js)
|
||||
Update hooks/hooks.json for hook configuration
|
||||
Add or update tests in tests/hooks/*.test.js
|
||||
Optionally update shell scripts (scripts/hooks/*.sh)
|
||||
Optionally update adapters (.cursor/hooks/after-file-edit.js)
|
||||
```
|
||||
|
||||
### Add Or Update Skill Or Agent
|
||||
|
||||
Adds or updates a skill or agent definition, often including a new SKILL.md and/or agent .md, sometimes with supporting config.
|
||||
|
||||
**Frequency**: ~2 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Create or edit skills/*/SKILL.md
|
||||
2. Create or edit agents/*.md
|
||||
3. Optionally update mcp-configs/mcp-servers.json or other config files
|
||||
4. Optionally update AGENTS.md or related documentation
|
||||
|
||||
**Files typically involved**:
|
||||
- `skills/*/SKILL.md`
|
||||
- `agents/*.md`
|
||||
- `mcp-configs/mcp-servers.json`
|
||||
- `AGENTS.md`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Create or edit skills/*/SKILL.md
|
||||
Create or edit agents/*.md
|
||||
Optionally update mcp-configs/mcp-servers.json or other config files
|
||||
Optionally update AGENTS.md or related documentation
|
||||
```
|
||||
|
||||
### Dependabot Or Automated Dependency Update
|
||||
|
||||
Automated workflow to update dependencies via Dependabot or similar, touching lockfiles and workflow YAMLs.
|
||||
|
||||
**Frequency**: ~4 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Update package.json and/or yarn.lock
|
||||
2. Update .github/workflows/*.yml as needed for new dependency versions
|
||||
3. Commit with a standardized message referencing the dependency and version
|
||||
|
||||
**Files typically involved**:
|
||||
- `package.json`
|
||||
- `yarn.lock`
|
||||
- `.github/workflows/*.yml`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Update package.json and/or yarn.lock
|
||||
Update .github/workflows/*.yml as needed for new dependency versions
|
||||
Commit with a standardized message referencing the dependency and version
|
||||
```
|
||||
|
||||
|
||||
## Best Practices
|
||||
|
||||
Based on analysis of the codebase, follow these practices:
|
||||
|
||||
### Do
|
||||
|
||||
- Use conventional commit format (feat:, fix:, etc.)
|
||||
- Follow *.test.js naming pattern
|
||||
- Use camelCase for file names
|
||||
- Prefer mixed exports
|
||||
|
||||
### Don't
|
||||
|
||||
- Don't write vague commit messages
|
||||
- Don't skip tests for new features
|
||||
- Don't deviate from established patterns without discussion
|
||||
|
||||
---
|
||||
|
||||
### Add or Update Agent Definition
|
||||
|
||||
**Trigger:** When adding or modifying agent definitions/prompts
|
||||
**Command:** `/add-agent`
|
||||
|
||||
1. Add or update agent markdown files (`agents/*.md`).
|
||||
2. Add or update prompt files (`.opencode/prompts/agents/*.txt`).
|
||||
3. Update `.opencode/opencode.json` to register new agents.
|
||||
4. Update `AGENTS.md` to document new agents.
|
||||
5. Optionally update related skills or orchestrators.
|
||||
|
||||
**Example:**
|
||||
```shell
|
||||
touch agents/myAgent.md
|
||||
touch .opencode/prompts/agents/myAgent.txt
|
||||
```
|
||||
|
||||
## Testing Patterns
|
||||
|
||||
- Test files follow the pattern `*.test.js`.
|
||||
- Testing framework is **unknown** (not detected), but test files are placed alongside code or in `tests/` directories.
|
||||
- Example test file:
|
||||
```js
|
||||
// tests/hooks/formatHook.test.js
|
||||
const formatHook = require('../../scripts/hooks/formatHook');
|
||||
test('should format code correctly', () => {
|
||||
// test implementation
|
||||
});
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
| Command | Purpose |
|
||||
|--------------------|----------------------------------------------------------------|
|
||||
| /add-skill | Add or update a skill and its documentation |
|
||||
| /add-command | Add or update a workflow command |
|
||||
| /add-install-target| Add or update an install target (IDE/platform/environment) |
|
||||
| /update-hook | Refactor, fix, or extend system hooks and their tests |
|
||||
| /bump-dependency | Update dependency versions in package or workflow files |
|
||||
| /add-agent | Add or update agent definitions and prompts |
|
||||
```
|
||||
*This skill was auto-generated by [ECC Tools](https://ecc.tools). Review and customize as needed for your team.*
|
||||
|
||||
41
.claude/commands/add-new-command-or-agentic-workflow.md
Normal file
41
.claude/commands/add-new-command-or-agentic-workflow.md
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
name: add-new-command-or-agentic-workflow
|
||||
description: Workflow command scaffold for add-new-command-or-agentic-workflow in everything-claude-code.
|
||||
allowed_tools: ["Bash", "Read", "Write", "Grep", "Glob"]
|
||||
---
|
||||
|
||||
# /add-new-command-or-agentic-workflow
|
||||
|
||||
Use this workflow when working on **add-new-command-or-agentic-workflow** in `everything-claude-code`.
|
||||
|
||||
## Goal
|
||||
|
||||
Adds a new command or agentic workflow to the system, often including new .md command files, agent definitions, and skill orchestrators.
|
||||
|
||||
## Common Files
|
||||
|
||||
- `commands/*.md`
|
||||
- `agents/*.md`
|
||||
- `skills/*/SKILL.md`
|
||||
- `scripts/*.sh`
|
||||
- `examples/*`
|
||||
|
||||
## Suggested Sequence
|
||||
|
||||
1. Understand the current state and failure mode before editing.
|
||||
2. Make the smallest coherent change that satisfies the workflow goal.
|
||||
3. Run the most relevant verification for touched files.
|
||||
4. Summarize what changed and what still needs review.
|
||||
|
||||
## Typical Commit Signals
|
||||
|
||||
- Create one or more new command markdown files in commands/ (e.g., gan-build.md, santa-loop.md, prp-*.md)
|
||||
- Add or update agent definitions in agents/ (e.g., gan-generator.md, opensource-forker.md)
|
||||
- Add or update skill orchestrator in skills/ (e.g., skills/gan-style-harness/SKILL.md, skills/opensource-pipeline/SKILL.md)
|
||||
- Optionally add shell orchestrators or scripts (e.g., scripts/gan-harness.sh)
|
||||
- Optionally add documentation or examples
|
||||
|
||||
## Notes
|
||||
|
||||
- Treat this as a scaffold, not a hard-coded script.
|
||||
- Update the command if the workflow evolves materially.
|
||||
42
.claude/commands/add-or-update-plugin-marketplace-system.md
Normal file
42
.claude/commands/add-or-update-plugin-marketplace-system.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
name: add-or-update-plugin-marketplace-system
|
||||
description: Workflow command scaffold for add-or-update-plugin-marketplace-system in everything-claude-code.
|
||||
allowed_tools: ["Bash", "Read", "Write", "Grep", "Glob"]
|
||||
---
|
||||
|
||||
# /add-or-update-plugin-marketplace-system
|
||||
|
||||
Use this workflow when working on **add-or-update-plugin-marketplace-system** in `everything-claude-code`.
|
||||
|
||||
## Goal
|
||||
|
||||
Implements or refines the plugin marketplace system, including registry helpers, CLI scripts, JSON stubs, and documentation.
|
||||
|
||||
## Common Files
|
||||
|
||||
- `scripts/lib/pluginRegistry.js`
|
||||
- `scripts/pluginMarketplace.js`
|
||||
- `scripts/pluginInstall.js`
|
||||
- `.claude-plugin/marketplaces.json`
|
||||
- `.claude-plugin/installed-plugins.json`
|
||||
- `tests/lib/pluginRegistry.test.js`
|
||||
|
||||
## Suggested Sequence
|
||||
|
||||
1. Understand the current state and failure mode before editing.
|
||||
2. Make the smallest coherent change that satisfies the workflow goal.
|
||||
3. Run the most relevant verification for touched files.
|
||||
4. Summarize what changed and what still needs review.
|
||||
|
||||
## Typical Commit Signals
|
||||
|
||||
- Edit or create scripts/lib/pluginRegistry.js for registry helpers
|
||||
- Edit or create scripts/pluginMarketplace.js and/or scripts/pluginInstall.js for CLI commands
|
||||
- Edit .claude-plugin/marketplaces.json and/or .claude-plugin/installed-plugins.json as stubs or for schema changes
|
||||
- Update or add tests in tests/lib/pluginRegistry.test.js
|
||||
- Update or create documentation in commands/plugin-marketplace.md and/or commands/plugin-install.md
|
||||
|
||||
## Notes
|
||||
|
||||
- Treat this as a scaffold, not a hard-coded script.
|
||||
- Update the command if the workflow evolves materially.
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
name: add-or-update-skill
|
||||
description: Workflow command scaffold for add-or-update-skill in everything-claude-code.
|
||||
allowed_tools: ["Bash", "Read", "Write", "Grep", "Glob"]
|
||||
---
|
||||
|
||||
# /add-or-update-skill
|
||||
|
||||
Use this workflow when working on **add-or-update-skill** in `everything-claude-code`.
|
||||
|
||||
## Goal
|
||||
|
||||
Adds a new skill or updates an existing skill for an agentic workflow, including documentation and sometimes related manifests.
|
||||
|
||||
## Common Files
|
||||
|
||||
- `skills/*/SKILL.md`
|
||||
- `.agents/skills/*/SKILL.md`
|
||||
- `AGENTS.md`
|
||||
- `README.md`
|
||||
- `README.zh-CN.md`
|
||||
- `docs/zh-CN/AGENTS.md`
|
||||
|
||||
## Suggested Sequence
|
||||
|
||||
1. Understand the current state and failure mode before editing.
|
||||
2. Make the smallest coherent change that satisfies the workflow goal.
|
||||
3. Run the most relevant verification for touched files.
|
||||
4. Summarize what changed and what still needs review.
|
||||
|
||||
## Typical Commit Signals
|
||||
|
||||
- Create or update a SKILL.md file under skills/{skill-name}/ or .agents/skills/{skill-name}/
|
||||
- Optionally update AGENTS.md, README.md, and localized docs
|
||||
- Update manifests/install-modules.json and/or install-components.json if the skill is part of installable modules
|
||||
- Optionally add or update related agent markdown files
|
||||
- Optionally update tests or scripts if the skill introduces new hooks or behaviors
|
||||
|
||||
## Notes
|
||||
|
||||
- Treat this as a scaffold, not a hard-coded script.
|
||||
- Update the command if the workflow evolves materially.
|
||||
@@ -1,35 +0,0 @@
|
||||
---
|
||||
name: refactoring
|
||||
description: Workflow command scaffold for refactoring in everything-claude-code.
|
||||
allowed_tools: ["Bash", "Read", "Write", "Grep", "Glob"]
|
||||
---
|
||||
|
||||
# /refactoring
|
||||
|
||||
Use this workflow when working on **refactoring** in `everything-claude-code`.
|
||||
|
||||
## Goal
|
||||
|
||||
Code refactoring and cleanup workflow
|
||||
|
||||
## Common Files
|
||||
|
||||
- `src/**/*`
|
||||
|
||||
## Suggested Sequence
|
||||
|
||||
1. Understand the current state and failure mode before editing.
|
||||
2. Make the smallest coherent change that satisfies the workflow goal.
|
||||
3. Run the most relevant verification for touched files.
|
||||
4. Summarize what changed and what still needs review.
|
||||
|
||||
## Typical Commit Signals
|
||||
|
||||
- Ensure tests pass before refactor
|
||||
- Refactor code structure
|
||||
- Verify tests still pass
|
||||
|
||||
## Notes
|
||||
|
||||
- Treat this as a scaffold, not a hard-coded script.
|
||||
- Update the command if the workflow evolves materially.
|
||||
@@ -2,7 +2,7 @@
|
||||
"version": "1.3",
|
||||
"schemaVersion": "1.0",
|
||||
"generatedBy": "ecc-tools",
|
||||
"generatedAt": "2026-04-01T23:05:46.781Z",
|
||||
"generatedAt": "2026-04-01T22:56:13.232Z",
|
||||
"repo": "https://github.com/affaan-m/everything-claude-code",
|
||||
"profiles": {
|
||||
"requested": "full",
|
||||
@@ -149,8 +149,8 @@
|
||||
".claude/team/everything-claude-code-team-config.json",
|
||||
".claude/enterprise/controls.md",
|
||||
".claude/commands/feature-development.md",
|
||||
".claude/commands/refactoring.md",
|
||||
".claude/commands/add-or-update-skill.md"
|
||||
".claude/commands/add-new-command-or-agentic-workflow.md",
|
||||
".claude/commands/add-or-update-plugin-marketplace-system.md"
|
||||
],
|
||||
"packageFiles": {
|
||||
"runtime-core": [
|
||||
@@ -179,8 +179,8 @@
|
||||
],
|
||||
"workflow-pack": [
|
||||
".claude/commands/feature-development.md",
|
||||
".claude/commands/refactoring.md",
|
||||
".claude/commands/add-or-update-skill.md"
|
||||
".claude/commands/add-new-command-or-agentic-workflow.md",
|
||||
".claude/commands/add-or-update-plugin-marketplace-system.md"
|
||||
]
|
||||
},
|
||||
"moduleFiles": {
|
||||
@@ -210,8 +210,8 @@
|
||||
],
|
||||
"workflow-pack": [
|
||||
".claude/commands/feature-development.md",
|
||||
".claude/commands/refactoring.md",
|
||||
".claude/commands/add-or-update-skill.md"
|
||||
".claude/commands/add-new-command-or-agentic-workflow.md",
|
||||
".claude/commands/add-or-update-plugin-marketplace-system.md"
|
||||
]
|
||||
},
|
||||
"files": [
|
||||
@@ -292,13 +292,13 @@
|
||||
},
|
||||
{
|
||||
"moduleId": "workflow-pack",
|
||||
"path": ".claude/commands/refactoring.md",
|
||||
"description": "Workflow command scaffold for refactoring."
|
||||
"path": ".claude/commands/add-new-command-or-agentic-workflow.md",
|
||||
"description": "Workflow command scaffold for add-new-command-or-agentic-workflow."
|
||||
},
|
||||
{
|
||||
"moduleId": "workflow-pack",
|
||||
"path": ".claude/commands/add-or-update-skill.md",
|
||||
"description": "Workflow command scaffold for add-or-update-skill."
|
||||
"path": ".claude/commands/add-or-update-plugin-marketplace-system.md",
|
||||
"description": "Workflow command scaffold for add-or-update-plugin-marketplace-system."
|
||||
}
|
||||
],
|
||||
"workflows": [
|
||||
@@ -307,12 +307,12 @@
|
||||
"path": ".claude/commands/feature-development.md"
|
||||
},
|
||||
{
|
||||
"command": "refactoring",
|
||||
"path": ".claude/commands/refactoring.md"
|
||||
"command": "add-new-command-or-agentic-workflow",
|
||||
"path": ".claude/commands/add-new-command-or-agentic-workflow.md"
|
||||
},
|
||||
{
|
||||
"command": "add-or-update-skill",
|
||||
"path": ".claude/commands/add-or-update-skill.md"
|
||||
"command": "add-or-update-plugin-marketplace-system",
|
||||
"path": ".claude/commands/add-or-update-plugin-marketplace-system.md"
|
||||
}
|
||||
],
|
||||
"adapters": {
|
||||
@@ -321,8 +321,8 @@
|
||||
"identityPath": ".claude/identity.json",
|
||||
"commandPaths": [
|
||||
".claude/commands/feature-development.md",
|
||||
".claude/commands/refactoring.md",
|
||||
".claude/commands/add-or-update-skill.md"
|
||||
".claude/commands/add-new-command-or-agentic-workflow.md",
|
||||
".claude/commands/add-or-update-plugin-marketplace-system.md"
|
||||
]
|
||||
},
|
||||
"codex": {
|
||||
|
||||
@@ -10,5 +10,5 @@
|
||||
"javascript"
|
||||
],
|
||||
"suggestedBy": "ecc-tools-repo-analysis",
|
||||
"createdAt": "2026-04-01T23:06:31.168Z"
|
||||
"createdAt": "2026-04-01T22:56:57.484Z"
|
||||
}
|
||||
@@ -18,4 +18,4 @@ Use this when the task is documentation-heavy, source-sensitive, or requires bro
|
||||
|
||||
- Primary language: JavaScript
|
||||
- Framework: Not detected
|
||||
- Workflows detected: 8
|
||||
- Workflows detected: 7
|
||||
@@ -4,7 +4,7 @@ Generated by ECC Tools from repository history. Review before treating it as a h
|
||||
|
||||
## Commit Workflow
|
||||
|
||||
- Prefer `mixed` commit messaging with prefixes such as fix, feat, docs, chore.
|
||||
- Prefer `conventional` commit messaging with prefixes such as fix, feat, docs, chore.
|
||||
- Keep new changes aligned with the existing pull-request and review flow already present in the repo.
|
||||
|
||||
## Architecture
|
||||
@@ -25,8 +25,8 @@ Generated by ECC Tools from repository history. Review before treating it as a h
|
||||
## Detected Workflows
|
||||
|
||||
- feature-development: Standard feature implementation workflow
|
||||
- refactoring: Code refactoring and cleanup workflow
|
||||
- add-or-update-skill: Adds a new skill or updates an existing skill for an agentic workflow, including documentation and sometimes related manifests.
|
||||
- add-new-command-or-agentic-workflow: Adds a new command or agentic workflow to the system, often including new .md command files, agent definitions, and skill orchestrators.
|
||||
- add-or-update-plugin-marketplace-system: Implements or refines the plugin marketplace system, including registry helpers, CLI scripts, JSON stubs, and documentation.
|
||||
|
||||
## Review Reminder
|
||||
|
||||
|
||||
@@ -1,188 +1,409 @@
|
||||
```markdown
|
||||
# everything-claude-code Development Patterns
|
||||
---
|
||||
name: everything-claude-code-conventions
|
||||
description: Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.
|
||||
---
|
||||
|
||||
> Auto-generated skill from repository analysis
|
||||
# Everything Claude Code Conventions
|
||||
|
||||
> Generated from [affaan-m/everything-claude-code](https://github.com/affaan-m/everything-claude-code) on 2026-04-01
|
||||
|
||||
## Overview
|
||||
|
||||
This skill documents the core development patterns, coding conventions, and agentic workflows used in the `everything-claude-code` (ECC) repository. The project is written in JavaScript (no framework detected) and implements modular, agent-driven automation and installable skills. This guide covers how to contribute new skills, commands, install targets, agent definitions, and more, following the repository's conventions and workflows.
|
||||
This skill teaches Claude the development patterns and conventions used in everything-claude-code.
|
||||
|
||||
## Coding Conventions
|
||||
## Tech Stack
|
||||
|
||||
ECC follows consistent JavaScript coding and repository organization conventions:
|
||||
- **Primary Language**: JavaScript
|
||||
- **Architecture**: hybrid module organization
|
||||
- **Test Location**: separate
|
||||
|
||||
### File Naming
|
||||
## When to Use This Skill
|
||||
|
||||
- Use **camelCase** for JavaScript files and modules.
|
||||
- Example: `myModule.js`, `installTarget.js`
|
||||
Activate this skill when:
|
||||
- Making changes to this repository
|
||||
- Adding new features following established patterns
|
||||
- Writing tests that match project conventions
|
||||
- Creating commits with proper message format
|
||||
|
||||
### Import Style
|
||||
## Commit Conventions
|
||||
|
||||
- Use **relative imports** for internal modules.
|
||||
```js
|
||||
// Good
|
||||
const utils = require('./utils');
|
||||
import { doThing } from '../lib/doThing.js';
|
||||
```
|
||||
Follow these commit message conventions based on 500 analyzed commits.
|
||||
|
||||
### Export Style
|
||||
### Commit Style: Conventional Commits
|
||||
|
||||
- Both **CommonJS** and **ES module** exports are used, depending on context.
|
||||
```js
|
||||
// CommonJS
|
||||
module.exports = function doSomething() { ... };
|
||||
### Prefixes Used
|
||||
|
||||
// ES Module
|
||||
export function doSomethingElse() { ... }
|
||||
```
|
||||
- `fix`
|
||||
- `feat`
|
||||
- `docs`
|
||||
- `chore`
|
||||
|
||||
### Commit Messages
|
||||
### Message Guidelines
|
||||
|
||||
- Prefix with `fix:`, `feat:`, `docs:`, or `chore:`
|
||||
- Keep messages concise (average ~56 characters)
|
||||
```
|
||||
feat: add support for new install target
|
||||
fix: resolve agent prompt parsing bug
|
||||
```
|
||||
- Average message length: ~56 characters
|
||||
- Keep first line concise and descriptive
|
||||
- Use imperative mood ("Add feature" not "Added feature")
|
||||
|
||||
## Workflows
|
||||
|
||||
### Add or Update a Skill
|
||||
*Commit message example*
|
||||
|
||||
**Trigger:** When introducing or updating a skill for agentic workflows
|
||||
**Command:** `/add-skill`
|
||||
|
||||
1. Create or update a `SKILL.md` file under `skills/{skill-name}/` or `.agents/skills/{skill-name}/`.
|
||||
2. Optionally update `AGENTS.md`, `README.md`, and localized docs (e.g., `README.zh-CN.md`).
|
||||
3. Update `manifests/install-modules.json` and/or `install-components.json` if the skill is installable.
|
||||
4. Optionally add or update related agent markdown files.
|
||||
5. Optionally update tests or scripts if the skill introduces new hooks or behaviors.
|
||||
|
||||
**Example:**
|
||||
```shell
|
||||
mkdir -p skills/myNewSkill
|
||||
touch skills/myNewSkill/SKILL.md
|
||||
# Edit SKILL.md with documentation
|
||||
```text
|
||||
refactor: simplify redundant checks; normalize getInstalledPlugin inputs
|
||||
```
|
||||
|
||||
---
|
||||
*Commit message example*
|
||||
|
||||
### Add or Update a Command Workflow
|
||||
|
||||
**Trigger:** When adding or updating a repeatable workflow command
|
||||
**Command:** `/add-command`
|
||||
|
||||
1. Create or update a markdown file in `commands/` (e.g., `prp-*.md`, `gan-*.md`, `santa-loop.md`).
|
||||
2. Document workflow phases, usage, and outputs in the file.
|
||||
3. Optionally update related skills or agent definitions.
|
||||
4. Optionally add shell scripts or orchestrators if automation is needed.
|
||||
5. Optionally update `AGENTS.md` or `README.md` to reference the new command.
|
||||
|
||||
**Example:**
|
||||
```shell
|
||||
touch commands/prp-myworkflow.md
|
||||
# Document the workflow steps in markdown
|
||||
```text
|
||||
fix: preserve file permissions in writeJsonAtomic
|
||||
```
|
||||
|
||||
---
|
||||
*Commit message example*
|
||||
|
||||
### Add or Update an Install Target
|
||||
|
||||
**Trigger:** When supporting a new IDE/platform or updating install logic
|
||||
**Command:** `/add-install-target`
|
||||
|
||||
1. Add or update install scripts (`install.sh`, `install.js`, `uninstall.sh`, `uninstall.js`) in a new or existing directory (e.g., `.codebuddy/`).
|
||||
2. Update `manifests/install-modules.json` and `schemas/ecc-install-config.schema.json`.
|
||||
3. Update `scripts/lib/install-manifests.js` and `scripts/lib/install-targets/{target}.js`.
|
||||
4. Add or update tests for install targets.
|
||||
5. Optionally update `README.md` or `AGENTS.md`.
|
||||
|
||||
**Example:**
|
||||
```shell
|
||||
mkdir -p .codebuddy
|
||||
touch .codebuddy/install.sh
|
||||
# Implement install logic
|
||||
```text
|
||||
style: apply linter formatting to pluginRegistry.js
|
||||
```
|
||||
|
||||
---
|
||||
*Commit message example*
|
||||
|
||||
### Update Hooks and Hook Tests
|
||||
```text
|
||||
chore: update yarn.lock
|
||||
```
|
||||
|
||||
**Trigger:** When refactoring, fixing, or extending system hooks
|
||||
**Command:** `/update-hook`
|
||||
*Commit message example*
|
||||
|
||||
1. Edit `hooks/hooks.json` to change configuration or add/remove hooks.
|
||||
2. Edit or add `scripts/hooks/*.js` to implement hook logic.
|
||||
3. Edit or add `tests/hooks/*.test.js` to cover new or changed behaviors.
|
||||
4. Optionally update related scripts or documentation.
|
||||
```text
|
||||
feat(plugin): add marketplace add/install system
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```json
|
||||
// hooks/hooks.json
|
||||
{
|
||||
"pre-commit": ["format", "typecheck"]
|
||||
*Commit message example*
|
||||
|
||||
```text
|
||||
fix: ship marketplaces.json as empty stub to prevent duplicate-add error
|
||||
```
|
||||
|
||||
*Commit message example*
|
||||
|
||||
```text
|
||||
fix: normalize lookups, atomic writes, reject empty marketplace specifier
|
||||
```
|
||||
|
||||
*Commit message example*
|
||||
|
||||
```text
|
||||
refactor: extract shared readJsonFile helper; fix single-dash flag parsing
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
### Project Structure: Single Package
|
||||
|
||||
This project uses **hybrid** module organization.
|
||||
|
||||
### Configuration Files
|
||||
|
||||
- `.github/workflows/ci.yml`
|
||||
- `.github/workflows/maintenance.yml`
|
||||
- `.github/workflows/monthly-metrics.yml`
|
||||
- `.github/workflows/release.yml`
|
||||
- `.github/workflows/reusable-release.yml`
|
||||
- `.github/workflows/reusable-test.yml`
|
||||
- `.github/workflows/reusable-validate.yml`
|
||||
- `.opencode/package.json`
|
||||
- `.opencode/tsconfig.json`
|
||||
- `.prettierrc`
|
||||
- `eslint.config.js`
|
||||
- `package.json`
|
||||
|
||||
### Guidelines
|
||||
|
||||
- This project uses a hybrid organization
|
||||
- Follow existing patterns when adding new code
|
||||
|
||||
## Code Style
|
||||
|
||||
### Language: JavaScript
|
||||
|
||||
### Naming Conventions
|
||||
|
||||
| Element | Convention |
|
||||
|---------|------------|
|
||||
| Files | camelCase |
|
||||
| Functions | camelCase |
|
||||
| Classes | PascalCase |
|
||||
| Constants | SCREAMING_SNAKE_CASE |
|
||||
|
||||
### Import Style: Relative Imports
|
||||
|
||||
### Export Style: Mixed Style
|
||||
|
||||
|
||||
*Preferred import style*
|
||||
|
||||
```typescript
|
||||
// Use relative imports
|
||||
import { Button } from '../components/Button'
|
||||
import { useAuth } from './hooks/useAuth'
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Test Framework
|
||||
|
||||
No specific test framework detected — use the repository's existing test patterns.
|
||||
|
||||
### File Pattern: `*.test.js`
|
||||
|
||||
### Test Types
|
||||
|
||||
- **Unit tests**: Test individual functions and components in isolation
|
||||
- **Integration tests**: Test interactions between multiple components/services
|
||||
|
||||
### Coverage
|
||||
|
||||
This project has coverage reporting configured. Aim for 80%+ coverage.
|
||||
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Error Handling Style: Try-Catch Blocks
|
||||
|
||||
|
||||
*Standard error handling pattern*
|
||||
|
||||
```typescript
|
||||
try {
|
||||
const result = await riskyOperation()
|
||||
return result
|
||||
} catch (error) {
|
||||
console.error('Operation failed:', error)
|
||||
throw new Error('User-friendly message')
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
## Common Workflows
|
||||
|
||||
### Dependency Bump via Dependabot
|
||||
These workflows were detected from analyzing commit patterns.
|
||||
|
||||
**Trigger:** When updating dependencies for security or features
|
||||
**Command:** `/bump-dependency`
|
||||
### Feature Development
|
||||
|
||||
1. Update dependency version in `package.json`, `yarn.lock`, or workflow YAML files.
|
||||
2. Commit with a standardized message (often by dependabot).
|
||||
3. Optionally update related documentation or changelogs.
|
||||
Standard feature implementation workflow
|
||||
|
||||
**Example:**
|
||||
```json
|
||||
// package.json
|
||||
"dependencies": {
|
||||
"some-lib": "^2.0.0"
|
||||
}
|
||||
**Frequency**: ~14 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Add feature implementation
|
||||
2. Add tests for feature
|
||||
3. Update documentation
|
||||
|
||||
**Files typically involved**:
|
||||
- `.opencode/*`
|
||||
- `.opencode/plugins/*`
|
||||
- `.opencode/plugins/lib/*`
|
||||
- `**/*.test.*`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
feat(team-builder): use `claude agents` command for agent discovery (#1021)
|
||||
fix: extract inline SessionStart bootstrap to separate file (#1035)
|
||||
feat: add hexagonal architecture SKILL. (#1034)
|
||||
```
|
||||
|
||||
### Add New Command Or Agentic Workflow
|
||||
|
||||
Adds a new command or agentic workflow to the system, often including new .md command files, agent definitions, and skill orchestrators.
|
||||
|
||||
**Frequency**: ~3 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Create one or more new command markdown files in commands/ (e.g., gan-build.md, santa-loop.md, prp-*.md)
|
||||
2. Add or update agent definitions in agents/ (e.g., gan-generator.md, opensource-forker.md)
|
||||
3. Add or update skill orchestrator in skills/ (e.g., skills/gan-style-harness/SKILL.md, skills/opensource-pipeline/SKILL.md)
|
||||
4. Optionally add shell orchestrators or scripts (e.g., scripts/gan-harness.sh)
|
||||
5. Optionally add documentation or examples
|
||||
|
||||
**Files typically involved**:
|
||||
- `commands/*.md`
|
||||
- `agents/*.md`
|
||||
- `skills/*/SKILL.md`
|
||||
- `scripts/*.sh`
|
||||
- `examples/*`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Create one or more new command markdown files in commands/ (e.g., gan-build.md, santa-loop.md, prp-*.md)
|
||||
Add or update agent definitions in agents/ (e.g., gan-generator.md, opensource-forker.md)
|
||||
Add or update skill orchestrator in skills/ (e.g., skills/gan-style-harness/SKILL.md, skills/opensource-pipeline/SKILL.md)
|
||||
Optionally add shell orchestrators or scripts (e.g., scripts/gan-harness.sh)
|
||||
Optionally add documentation or examples
|
||||
```
|
||||
|
||||
### Add Or Update Plugin Marketplace System
|
||||
|
||||
Implements or refines the plugin marketplace system, including registry helpers, CLI scripts, JSON stubs, and documentation.
|
||||
|
||||
**Frequency**: ~2 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Edit or create scripts/lib/pluginRegistry.js for registry helpers
|
||||
2. Edit or create scripts/pluginMarketplace.js and/or scripts/pluginInstall.js for CLI commands
|
||||
3. Edit .claude-plugin/marketplaces.json and/or .claude-plugin/installed-plugins.json as stubs or for schema changes
|
||||
4. Update or add tests in tests/lib/pluginRegistry.test.js
|
||||
5. Update or create documentation in commands/plugin-marketplace.md and/or commands/plugin-install.md
|
||||
6. Optionally update root docs (README.md, AGENTS.md, etc.)
|
||||
|
||||
**Files typically involved**:
|
||||
- `scripts/lib/pluginRegistry.js`
|
||||
- `scripts/pluginMarketplace.js`
|
||||
- `scripts/pluginInstall.js`
|
||||
- `.claude-plugin/marketplaces.json`
|
||||
- `.claude-plugin/installed-plugins.json`
|
||||
- `tests/lib/pluginRegistry.test.js`
|
||||
- `commands/plugin-marketplace.md`
|
||||
- `commands/plugin-install.md`
|
||||
- `README.md`
|
||||
- `AGENTS.md`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Edit or create scripts/lib/pluginRegistry.js for registry helpers
|
||||
Edit or create scripts/pluginMarketplace.js and/or scripts/pluginInstall.js for CLI commands
|
||||
Edit .claude-plugin/marketplaces.json and/or .claude-plugin/installed-plugins.json as stubs or for schema changes
|
||||
Update or add tests in tests/lib/pluginRegistry.test.js
|
||||
Update or create documentation in commands/plugin-marketplace.md and/or commands/plugin-install.md
|
||||
Optionally update root docs (README.md, AGENTS.md, etc.)
|
||||
```
|
||||
|
||||
### Add New Install Target Or Adaptation
|
||||
|
||||
Adds a new install target (e.g., Gemini, CodeBuddy) to the system, including scripts, schemas, and tests.
|
||||
|
||||
**Frequency**: ~2 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Add new install scripts and docs under a dedicated directory (e.g., .gemini/, .codebuddy/)
|
||||
2. Update manifests/install-modules.json to register the new target
|
||||
3. Update or add schema files (schemas/ecc-install-config.schema.json, schemas/install-modules.schema.json)
|
||||
4. Edit or add scripts/lib/install-manifests.js and scripts/lib/install-targets/*.js for logic
|
||||
5. Add or update tests in tests/lib/install-targets.test.js
|
||||
6. Update documentation (README.md, .gemini/GEMINI.md, etc.)
|
||||
|
||||
**Files typically involved**:
|
||||
- `.gemini/*`
|
||||
- `.codebuddy/*`
|
||||
- `manifests/install-modules.json`
|
||||
- `schemas/ecc-install-config.schema.json`
|
||||
- `schemas/install-modules.schema.json`
|
||||
- `scripts/lib/install-manifests.js`
|
||||
- `scripts/lib/install-targets/*.js`
|
||||
- `tests/lib/install-targets.test.js`
|
||||
- `README.md`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Add new install scripts and docs under a dedicated directory (e.g., .gemini/, .codebuddy/)
|
||||
Update manifests/install-modules.json to register the new target
|
||||
Update or add schema files (schemas/ecc-install-config.schema.json, schemas/install-modules.schema.json)
|
||||
Edit or add scripts/lib/install-manifests.js and scripts/lib/install-targets/*.js for logic
|
||||
Add or update tests in tests/lib/install-targets.test.js
|
||||
Update documentation (README.md, .gemini/GEMINI.md, etc.)
|
||||
```
|
||||
|
||||
### Add Or Update Hook Or Session Management
|
||||
|
||||
Implements or refines hooks and session management logic, including accumulator patterns, session start/end, and related tests.
|
||||
|
||||
**Frequency**: ~2 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Edit or create scripts/hooks/*.js for hook logic (e.g., post-edit-accumulator.js, stop-format-typecheck.js, session-start.js)
|
||||
2. Update hooks/hooks.json for hook configuration
|
||||
3. Add or update tests in tests/hooks/*.test.js
|
||||
4. Optionally update shell scripts (scripts/hooks/*.sh)
|
||||
5. Optionally update adapters (.cursor/hooks/after-file-edit.js)
|
||||
|
||||
**Files typically involved**:
|
||||
- `scripts/hooks/*.js`
|
||||
- `hooks/hooks.json`
|
||||
- `tests/hooks/*.test.js`
|
||||
- `scripts/hooks/*.sh`
|
||||
- `.cursor/hooks/after-file-edit.js`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Edit or create scripts/hooks/*.js for hook logic (e.g., post-edit-accumulator.js, stop-format-typecheck.js, session-start.js)
|
||||
Update hooks/hooks.json for hook configuration
|
||||
Add or update tests in tests/hooks/*.test.js
|
||||
Optionally update shell scripts (scripts/hooks/*.sh)
|
||||
Optionally update adapters (.cursor/hooks/after-file-edit.js)
|
||||
```
|
||||
|
||||
### Add Or Update Skill Or Agent
|
||||
|
||||
Adds or updates a skill or agent definition, often including a new SKILL.md and/or agent .md, sometimes with supporting config.
|
||||
|
||||
**Frequency**: ~2 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Create or edit skills/*/SKILL.md
|
||||
2. Create or edit agents/*.md
|
||||
3. Optionally update mcp-configs/mcp-servers.json or other config files
|
||||
4. Optionally update AGENTS.md or related documentation
|
||||
|
||||
**Files typically involved**:
|
||||
- `skills/*/SKILL.md`
|
||||
- `agents/*.md`
|
||||
- `mcp-configs/mcp-servers.json`
|
||||
- `AGENTS.md`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Create or edit skills/*/SKILL.md
|
||||
Create or edit agents/*.md
|
||||
Optionally update mcp-configs/mcp-servers.json or other config files
|
||||
Optionally update AGENTS.md or related documentation
|
||||
```
|
||||
|
||||
### Dependabot Or Automated Dependency Update
|
||||
|
||||
Automated workflow to update dependencies via Dependabot or similar, touching lockfiles and workflow YAMLs.
|
||||
|
||||
**Frequency**: ~4 times per month
|
||||
|
||||
**Steps**:
|
||||
1. Update package.json and/or yarn.lock
|
||||
2. Update .github/workflows/*.yml as needed for new dependency versions
|
||||
3. Commit with a standardized message referencing the dependency and version
|
||||
|
||||
**Files typically involved**:
|
||||
- `package.json`
|
||||
- `yarn.lock`
|
||||
- `.github/workflows/*.yml`
|
||||
|
||||
**Example commit sequence**:
|
||||
```
|
||||
Update package.json and/or yarn.lock
|
||||
Update .github/workflows/*.yml as needed for new dependency versions
|
||||
Commit with a standardized message referencing the dependency and version
|
||||
```
|
||||
|
||||
|
||||
## Best Practices
|
||||
|
||||
Based on analysis of the codebase, follow these practices:
|
||||
|
||||
### Do
|
||||
|
||||
- Use conventional commit format (feat:, fix:, etc.)
|
||||
- Follow *.test.js naming pattern
|
||||
- Use camelCase for file names
|
||||
- Prefer mixed exports
|
||||
|
||||
### Don't
|
||||
|
||||
- Don't write vague commit messages
|
||||
- Don't skip tests for new features
|
||||
- Don't deviate from established patterns without discussion
|
||||
|
||||
---
|
||||
|
||||
### Add or Update Agent Definition
|
||||
|
||||
**Trigger:** When adding or modifying agent definitions/prompts
|
||||
**Command:** `/add-agent`
|
||||
|
||||
1. Add or update agent markdown files (`agents/*.md`).
|
||||
2. Add or update prompt files (`.opencode/prompts/agents/*.txt`).
|
||||
3. Update `.opencode/opencode.json` to register new agents.
|
||||
4. Update `AGENTS.md` to document new agents.
|
||||
5. Optionally update related skills or orchestrators.
|
||||
|
||||
**Example:**
|
||||
```shell
|
||||
touch agents/myAgent.md
|
||||
touch .opencode/prompts/agents/myAgent.txt
|
||||
```
|
||||
|
||||
## Testing Patterns
|
||||
|
||||
- Test files follow the pattern `*.test.js`.
|
||||
- Testing framework is **unknown** (not detected), but test files are placed alongside code or in `tests/` directories.
|
||||
- Example test file:
|
||||
```js
|
||||
// tests/hooks/formatHook.test.js
|
||||
const formatHook = require('../../scripts/hooks/formatHook');
|
||||
test('should format code correctly', () => {
|
||||
// test implementation
|
||||
});
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
| Command | Purpose |
|
||||
|--------------------|----------------------------------------------------------------|
|
||||
| /add-skill | Add or update a skill and its documentation |
|
||||
| /add-command | Add or update a workflow command |
|
||||
| /add-install-target| Add or update an install target (IDE/platform/environment) |
|
||||
| /update-hook | Refactor, fix, or extend system hooks and their tests |
|
||||
| /bump-dependency | Update dependency versions in package or workflow files |
|
||||
| /add-agent | Add or update agent definitions and prompts |
|
||||
```
|
||||
*This skill was auto-generated by [ECC Tools](https://ecc.tools). Review and customize as needed for your team.*
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
],
|
||||
"commandFiles": [
|
||||
".claude/commands/feature-development.md",
|
||||
".claude/commands/refactoring.md",
|
||||
".claude/commands/add-or-update-skill.md"
|
||||
".claude/commands/add-new-command-or-agentic-workflow.md",
|
||||
".claude/commands/add-or-update-plugin-marketplace-system.md"
|
||||
],
|
||||
"updatedAt": "2026-04-01T23:05:46.781Z"
|
||||
"updatedAt": "2026-04-01T22:56:13.232Z"
|
||||
}
|
||||
@@ -59,8 +59,6 @@ Public ECC plugin repo for agents, skills, commands, hooks, rules, install surfa
|
||||
- Direct-port candidates landed after audit:
|
||||
- `#1078` hook-id dedupe for managed Claude hook reinstalls
|
||||
- `#844` ui-demo skill
|
||||
- `#1110` install-time Claude hook root resolution
|
||||
- `#1106` portable Codex Context7 key extraction
|
||||
- Port or rebuild inside ECC after full audit:
|
||||
- `#894` Jira integration
|
||||
- `#814` + `#808` rebuild as a single consolidated notifications lane for Opencode and cross-harness surfaces
|
||||
@@ -99,6 +97,3 @@ Keep this file detailed for only the current sprint, blockers, and next actions.
|
||||
- 2026-04-01: Collapsed the obvious command/skill duplicates into thin legacy shims so `skills/` now hold the maintained bodies for NanoClaw, context-budget, DevFleet, docs lookup, E2E, evals, orchestration, prompt optimization, rules distillation, TDD, and verification.
|
||||
- 2026-04-01: Ported the self-contained core of `#844` directly into `main` as `skills/ui-demo/SKILL.md` and registered it under the `media-generation` install module instead of merging the PR wholesale.
|
||||
- 2026-04-01: Added the first connected-workflow operator lane as ECC-native skills instead of leaving the surface as raw plugins or APIs: `workspace-surface-audit`, `customer-billing-ops`, `project-flow-ops`, and `google-workspace-ops`. These are tracked under the new `operator-workflows` install module.
|
||||
- 2026-04-01: Direct-ported the real fix from the unresolved hook-path PR lane into the active installer. Claude installs now replace `${CLAUDE_PLUGIN_ROOT}` with the concrete install root in both `settings.json` and the copied `hooks/hooks.json`, which keeps PreToolUse/PostToolUse hooks working outside plugin-managed env injection.
|
||||
- 2026-04-01: Replaced the GNU-only `grep -P` parser in `scripts/sync-ecc-to-codex.sh` with a portable Node parser for Context7 key extraction. Added source-level regression coverage so BSD/macOS syncs do not drift back to non-portable parsing.
|
||||
- 2026-04-01: Targeted regression suite after the direct ports is green: `tests/scripts/install-apply.test.js`, `tests/scripts/sync-ecc-to-codex.test.js`, and `tests/scripts/codex-hooks.test.js`.
|
||||
|
||||
@@ -20,43 +20,16 @@ function readJsonObject(filePath, label) {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
function replacePluginRootPlaceholders(value, pluginRoot) {
|
||||
if (!pluginRoot) {
|
||||
return value;
|
||||
}
|
||||
|
||||
if (typeof value === 'string') {
|
||||
return value.split('${CLAUDE_PLUGIN_ROOT}').join(pluginRoot);
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(item => replacePluginRootPlaceholders(item, pluginRoot));
|
||||
}
|
||||
|
||||
if (value && typeof value === 'object') {
|
||||
return Object.fromEntries(
|
||||
Object.entries(value).map(([key, nestedValue]) => [
|
||||
key,
|
||||
replacePluginRootPlaceholders(nestedValue, pluginRoot),
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
function buildLegacyHookSignature(entry, pluginRoot) {
|
||||
function buildLegacyHookSignature(entry) {
|
||||
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const normalizedEntry = replacePluginRootPlaceholders(entry, pluginRoot);
|
||||
|
||||
if (typeof normalizedEntry.matcher !== 'string' || !Array.isArray(normalizedEntry.hooks)) {
|
||||
if (typeof entry.matcher !== 'string' || !Array.isArray(entry.hooks)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const hookSignature = normalizedEntry.hooks.map(hook => JSON.stringify({
|
||||
const hookSignature = entry.hooks.map(hook => JSON.stringify({
|
||||
type: hook && typeof hook === 'object' ? hook.type : undefined,
|
||||
command: hook && typeof hook === 'object' ? hook.command : undefined,
|
||||
timeout: hook && typeof hook === 'object' ? hook.timeout : undefined,
|
||||
@@ -64,35 +37,33 @@ function buildLegacyHookSignature(entry, pluginRoot) {
|
||||
}));
|
||||
|
||||
return JSON.stringify({
|
||||
matcher: normalizedEntry.matcher,
|
||||
matcher: entry.matcher,
|
||||
hooks: hookSignature,
|
||||
});
|
||||
}
|
||||
|
||||
function getHookEntryAliases(entry, pluginRoot) {
|
||||
function getHookEntryAliases(entry) {
|
||||
const aliases = [];
|
||||
|
||||
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
||||
return aliases;
|
||||
}
|
||||
|
||||
const normalizedEntry = replacePluginRootPlaceholders(entry, pluginRoot);
|
||||
|
||||
if (typeof normalizedEntry.id === 'string' && normalizedEntry.id.trim().length > 0) {
|
||||
aliases.push(`id:${normalizedEntry.id.trim()}`);
|
||||
if (typeof entry.id === 'string' && entry.id.trim().length > 0) {
|
||||
aliases.push(`id:${entry.id.trim()}`);
|
||||
}
|
||||
|
||||
const legacySignature = buildLegacyHookSignature(normalizedEntry, pluginRoot);
|
||||
const legacySignature = buildLegacyHookSignature(entry);
|
||||
if (legacySignature) {
|
||||
aliases.push(`legacy:${legacySignature}`);
|
||||
}
|
||||
|
||||
aliases.push(`json:${JSON.stringify(normalizedEntry)}`);
|
||||
aliases.push(`json:${JSON.stringify(entry)}`);
|
||||
|
||||
return aliases;
|
||||
}
|
||||
|
||||
function mergeHookEntries(existingEntries, incomingEntries, pluginRoot) {
|
||||
function mergeHookEntries(existingEntries, incomingEntries) {
|
||||
const mergedEntries = [];
|
||||
const seenEntries = new Set();
|
||||
|
||||
@@ -105,7 +76,7 @@ function mergeHookEntries(existingEntries, incomingEntries, pluginRoot) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const aliases = getHookEntryAliases(entry, pluginRoot);
|
||||
const aliases = getHookEntryAliases(entry);
|
||||
if (aliases.some(alias => seenEntries.has(alias))) {
|
||||
continue;
|
||||
}
|
||||
@@ -113,7 +84,7 @@ function mergeHookEntries(existingEntries, incomingEntries, pluginRoot) {
|
||||
for (const alias of aliases) {
|
||||
seenEntries.add(alias);
|
||||
}
|
||||
mergedEntries.push(replacePluginRootPlaceholders(entry, pluginRoot));
|
||||
mergedEntries.push(entry);
|
||||
}
|
||||
|
||||
return mergedEntries;
|
||||
@@ -129,7 +100,6 @@ function buildMergedSettings(plan) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const pluginRoot = plan.targetRoot;
|
||||
const hooksDestinationPath = path.join(plan.targetRoot, 'hooks', 'hooks.json');
|
||||
const hooksSourcePath = findHooksSourcePath(plan, hooksDestinationPath) || hooksDestinationPath;
|
||||
if (!fs.existsSync(hooksSourcePath)) {
|
||||
@@ -137,7 +107,7 @@ function buildMergedSettings(plan) {
|
||||
}
|
||||
|
||||
const hooksConfig = readJsonObject(hooksSourcePath, 'hooks config');
|
||||
const incomingHooks = replacePluginRootPlaceholders(hooksConfig.hooks, pluginRoot);
|
||||
const incomingHooks = hooksConfig.hooks;
|
||||
if (!incomingHooks || typeof incomingHooks !== 'object' || Array.isArray(incomingHooks)) {
|
||||
throw new Error(`Invalid hooks config at ${hooksSourcePath}: expected "hooks" to be a JSON object`);
|
||||
}
|
||||
@@ -156,7 +126,7 @@ function buildMergedSettings(plan) {
|
||||
for (const [eventName, incomingEntries] of Object.entries(incomingHooks)) {
|
||||
const currentEntries = Array.isArray(existingHooks[eventName]) ? existingHooks[eventName] : [];
|
||||
const nextEntries = Array.isArray(incomingEntries) ? incomingEntries : [];
|
||||
mergedHooks[eventName] = mergeHookEntries(currentEntries, nextEntries, pluginRoot);
|
||||
mergedHooks[eventName] = mergeHookEntries(currentEntries, nextEntries);
|
||||
}
|
||||
|
||||
const mergedSettings = {
|
||||
@@ -167,11 +137,6 @@ function buildMergedSettings(plan) {
|
||||
return {
|
||||
settingsPath,
|
||||
mergedSettings,
|
||||
hooksDestinationPath,
|
||||
resolvedHooksConfig: {
|
||||
...hooksConfig,
|
||||
hooks: incomingHooks,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -184,12 +149,6 @@ function applyInstallPlan(plan) {
|
||||
}
|
||||
|
||||
if (mergedSettingsPlan) {
|
||||
fs.mkdirSync(path.dirname(mergedSettingsPlan.hooksDestinationPath), { recursive: true });
|
||||
fs.writeFileSync(
|
||||
mergedSettingsPlan.hooksDestinationPath,
|
||||
JSON.stringify(mergedSettingsPlan.resolvedHooksConfig, null, 2) + '\n',
|
||||
'utf8'
|
||||
);
|
||||
fs.mkdirSync(path.dirname(mergedSettingsPlan.settingsPath), { recursive: true });
|
||||
fs.writeFileSync(
|
||||
mergedSettingsPlan.settingsPath,
|
||||
|
||||
@@ -106,23 +106,7 @@ extract_toml_value() {
|
||||
|
||||
extract_context7_key() {
|
||||
local file="$1"
|
||||
node - "$file" <<'EOF'
|
||||
const fs = require('fs');
|
||||
|
||||
const filePath = process.argv[2];
|
||||
let source = '';
|
||||
|
||||
try {
|
||||
source = fs.readFileSync(filePath, 'utf8');
|
||||
} catch {
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
const match = source.match(/--key",\s*"([^"]+)"/);
|
||||
if (match && match[1]) {
|
||||
process.stdout.write(`${match[1]}\n`);
|
||||
}
|
||||
EOF
|
||||
grep -oP -- '--key",[[:space:]]*"\K[^"]+' "$file" | head -n 1 || true
|
||||
}
|
||||
|
||||
generate_prompt_file() {
|
||||
|
||||
@@ -353,45 +353,6 @@ function runTests() {
|
||||
}
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('resolves CLAUDE_PLUGIN_ROOT placeholders in installed claude hooks', () => {
|
||||
const homeDir = createTempDir('install-apply-home-');
|
||||
const projectDir = createTempDir('install-apply-project-');
|
||||
|
||||
try {
|
||||
const result = run(['--profile', 'core'], { cwd: projectDir, homeDir });
|
||||
assert.strictEqual(result.code, 0, result.stderr);
|
||||
|
||||
const claudeRoot = path.join(homeDir, '.claude');
|
||||
const settings = readJson(path.join(claudeRoot, 'settings.json'));
|
||||
const installedHooks = readJson(path.join(claudeRoot, 'hooks', 'hooks.json'));
|
||||
|
||||
const autoTmuxEntry = settings.hooks.PreToolUse.find(entry => entry.id === 'pre:bash:auto-tmux-dev');
|
||||
assert.ok(autoTmuxEntry, 'settings.json should include the auto tmux hook');
|
||||
assert.ok(
|
||||
autoTmuxEntry.hooks[0].command.includes(path.join(claudeRoot, 'scripts', 'hooks', 'auto-tmux-dev.js')),
|
||||
'settings.json should use the installed Claude root for hook commands'
|
||||
);
|
||||
assert.ok(
|
||||
!autoTmuxEntry.hooks[0].command.includes('${CLAUDE_PLUGIN_ROOT}'),
|
||||
'settings.json should not retain CLAUDE_PLUGIN_ROOT placeholders after install'
|
||||
);
|
||||
|
||||
const installedAutoTmuxEntry = installedHooks.hooks.PreToolUse.find(entry => entry.id === 'pre:bash:auto-tmux-dev');
|
||||
assert.ok(installedAutoTmuxEntry, 'hooks/hooks.json should include the auto tmux hook');
|
||||
assert.ok(
|
||||
installedAutoTmuxEntry.hooks[0].command.includes(path.join(claudeRoot, 'scripts', 'hooks', 'auto-tmux-dev.js')),
|
||||
'hooks/hooks.json should use the installed Claude root for hook commands'
|
||||
);
|
||||
assert.ok(
|
||||
!installedAutoTmuxEntry.hooks[0].command.includes('${CLAUDE_PLUGIN_ROOT}'),
|
||||
'hooks/hooks.json should not retain CLAUDE_PLUGIN_ROOT placeholders after install'
|
||||
);
|
||||
} finally {
|
||||
cleanup(homeDir);
|
||||
cleanup(projectDir);
|
||||
}
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('preserves existing settings fields and hook entries when merging hooks', () => {
|
||||
const homeDir = createTempDir('install-apply-home-');
|
||||
const projectDir = createTempDir('install-apply-project-');
|
||||
|
||||
@@ -74,15 +74,6 @@ function runTests() {
|
||||
assert.ok(!source.includes('run_or_echo cp -R "$skill_dir" "$dest"'), 'skill sync cp should be removed');
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('sync script avoids GNU-only grep -P parsing', () => {
|
||||
assert.ok(!source.includes('grep -oP'), 'sync-ecc-to-codex.sh should remain portable across BSD and GNU environments');
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('extract_context7_key uses a portable parser', () => {
|
||||
assert.ok(source.includes('extract_context7_key() {'), 'Expected extract_context7_key helper');
|
||||
assert.ok(source.includes('node - "$file"'), 'extract_context7_key should use Node-based parsing');
|
||||
})) passed++; else failed++;
|
||||
|
||||
console.log(`\nResults: Passed: ${passed}, Failed: ${failed}`);
|
||||
process.exit(failed > 0 ? 1 : 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user