@brookmind/ai-toolkit 1.0.1 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -14
- package/agents/code-reviewer.md +6 -1
- package/agents/code-simplifier.md +52 -0
- package/bin/cli.js +1 -5
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +321 -0
- package/dist/index.js.map +1 -0
- package/mcps/context7/.mcp.json +13 -0
- package/mcps/expo-mcp/.mcp.json +13 -0
- package/mcps/figma-mcp/.mcp.json +4 -6
- package/package.json +22 -11
- package/skills/pdf-processing-pro/FORMS.md +610 -0
- package/skills/pdf-processing-pro/OCR.md +137 -0
- package/skills/pdf-processing-pro/SKILL.md +296 -0
- package/skills/pdf-processing-pro/TABLES.md +626 -0
- package/skills/pdf-processing-pro/scripts/analyze_form.py +307 -0
- package/skills/react-best-practices/AGENTS.md +915 -0
- package/skills/react-best-practices/README.md +127 -0
- package/skills/react-best-practices/SKILL.md +110 -0
- package/skills/react-best-practices/metadata.json +14 -0
- package/skills/react-best-practices/rules/_sections.md +41 -0
- package/skills/react-best-practices/rules/_template.md +28 -0
- package/skills/react-best-practices/rules/advanced-event-handler-refs.md +80 -0
- package/skills/react-best-practices/rules/advanced-use-latest.md +76 -0
- package/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/skills/react-best-practices/rules/async-suspense-boundaries.md +100 -0
- package/skills/react-best-practices/rules/bundle-barrel-imports.md +42 -0
- package/skills/react-best-practices/rules/bundle-conditional.md +106 -0
- package/skills/react-best-practices/rules/bundle-preload.md +44 -0
- package/skills/react-best-practices/rules/client-event-listeners.md +131 -0
- package/skills/react-best-practices/rules/client-swr-dedup.md +133 -0
- package/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/react-best-practices/rules/rendering-activity.md +90 -0
- package/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/react-best-practices/rules/rendering-hoist-jsx.md +65 -0
- package/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/react-best-practices/rules/rerender-memo.md +85 -0
- package/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/themes/README.md +68 -0
- package/themes/claude-vivid.json +72 -0
- package/mcps/context7/.claude-plugin +0 -1
- package/mcps/context7/README.md +0 -1
- package/mcps/context7/server.json +0 -1
- package/mcps/expo-mcp/README.md +0 -33
- package/mcps/expo-mcp/package.json +0 -30
- package/mcps/figma-mcp/README.md +0 -554
- package/mcps/figma-mcp/server.json +0 -17
- package/mcps/figma-mcp/skills/code-connect-components +0 -1
- package/mcps/figma-mcp/skills/create-design-system-rules +0 -1
- package/mcps/figma-mcp/skills/implement-design +0 -1
- package/mcps/pg-aiguide/.claude-plugin +0 -1
- package/mcps/pg-aiguide/CLAUDE.md +0 -21
- package/mcps/pg-aiguide/README.md +0 -275
- package/mcps/pg-aiguide/skills/design-postgres-tables +0 -1
- package/mcps/pg-aiguide/skills/find-hypertable-candidates +0 -1
- package/mcps/pg-aiguide/skills/migrate-postgres-tables-to-hypertables +0 -1
- package/mcps/pg-aiguide/skills/setup-timescaledb-hypertables +0 -1
- package/mcps/pg-aiguide/skills.yaml +0 -4
- package/skills/cloudflare-cli/SKILL.md +0 -151
- package/skills/docx/LICENSE.txt +0 -30
- package/skills/docx/SKILL.md +0 -197
- package/skills/docx/docx-js.md +0 -350
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
- package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/docx/ooxml/scripts/pack.py +0 -159
- package/skills/docx/ooxml/scripts/unpack.py +0 -29
- package/skills/docx/ooxml/scripts/validate.py +0 -69
- package/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
- package/skills/docx/ooxml/scripts/validation/base.py +0 -951
- package/skills/docx/ooxml/scripts/validation/docx.py +0 -274
- package/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
- package/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
- package/skills/docx/ooxml.md +0 -610
- package/skills/docx/scripts/__init__.py +0 -1
- package/skills/docx/scripts/document.py +0 -1276
- package/skills/docx/scripts/templates/comments.xml +0 -3
- package/skills/docx/scripts/templates/commentsExtended.xml +0 -3
- package/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
- package/skills/docx/scripts/templates/commentsIds.xml +0 -3
- package/skills/docx/scripts/templates/people.xml +0 -3
- package/skills/docx/scripts/utilities.py +0 -374
- package/skills/pdf/LICENSE.txt +0 -30
- package/skills/pdf/SKILL.md +0 -294
- package/skills/pdf/forms.md +0 -205
- package/skills/pdf/reference.md +0 -612
- package/skills/pdf/scripts/check_bounding_boxes.py +0 -70
- package/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
- package/skills/pdf/scripts/check_fillable_fields.py +0 -12
- package/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
- package/skills/pdf/scripts/create_validation_image.py +0 -41
- package/skills/pdf/scripts/extract_form_field_info.py +0 -152
- package/skills/pdf/scripts/fill_fillable_fields.py +0 -114
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
- package/skills/xlsx/LICENSE.txt +0 -30
- package/skills/xlsx/SKILL.md +0 -289
- package/skills/xlsx/recalc.py +0 -178
- package/src/index.js +0 -365
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# OpenCode AI Toolkit
|
|
2
2
|
|
|
3
|
-
A collection of agents, skills, and MCPs for
|
|
3
|
+
A collection of agents, skills, and MCPs for OpenCode.
|
|
4
4
|
|
|
5
5
|
## Quick Install
|
|
6
6
|
|
|
@@ -8,30 +8,37 @@ A collection of agents, skills, and MCPs for Claude Code and OpenCode.
|
|
|
8
8
|
npx @brookmind/ai-toolkit
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
The
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
11
|
+
The installer will:
|
|
12
|
+
1. **Check if OpenCode is installed** - If not, it will offer to install it for you
|
|
13
|
+
2. **Guide you through selecting**:
|
|
14
|
+
- **Agents**: AI assistants for specific tasks
|
|
15
|
+
- **Skills**: Extended capabilities and workflows
|
|
16
|
+
- **MCPs**: Model Context Protocol servers
|
|
17
|
+
3. **Theme installation**:
|
|
18
|
+
- **New installations**: claude-vivid theme is installed automatically
|
|
19
|
+
- **Existing installations**: You'll be asked if you want to install the theme
|
|
16
20
|
|
|
17
21
|
## What's Included
|
|
18
22
|
|
|
19
23
|
### Agents
|
|
20
24
|
- `code-reviewer` - Expert code review for quality and security
|
|
25
|
+
- `code-simplifier` - Simplifies and refines code for clarity and maintainability
|
|
21
26
|
|
|
22
27
|
### Skills
|
|
23
|
-
- `cloudflare-cli` - Cloudflare Workers, KV, D1, R2 operations
|
|
24
28
|
- `github-cli` - GitHub operations (issues, PRs, releases)
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
-
- `xlsx` - Spreadsheet operations
|
|
29
|
+
- `pdf-processing-pro` - Advanced PDF processing (OCR, tables, forms extraction)
|
|
30
|
+
- `react-best-practices` - React performance optimization guidelines from Vercel Engineering
|
|
28
31
|
- `skill-creator` - Create new skills
|
|
29
32
|
|
|
30
33
|
### MCPs
|
|
31
34
|
- `context7` - Up-to-date library documentation
|
|
32
35
|
- `expo-mcp` - Expo/React Native utilities
|
|
33
|
-
- `figma-mcp` - Figma design integration
|
|
34
|
-
|
|
36
|
+
- `figma-mcp` - Figma design integration (requires Figma Desktop app)
|
|
37
|
+
|
|
38
|
+
### Theme
|
|
39
|
+
- `claude-vivid` - High-contrast theme with vivid colors inspired by Claude Code
|
|
40
|
+
- Auto-installed for new OpenCode users
|
|
41
|
+
- Optional for existing OpenCode users
|
|
35
42
|
|
|
36
43
|
## Manual Installation
|
|
37
44
|
|
|
@@ -47,7 +54,40 @@ npm start
|
|
|
47
54
|
## Requirements
|
|
48
55
|
|
|
49
56
|
- Node.js 18+
|
|
50
|
-
-
|
|
57
|
+
- OpenCode installed
|
|
58
|
+
- For Figma MCP: Figma Desktop app running
|
|
59
|
+
|
|
60
|
+
## Configuration
|
|
61
|
+
|
|
62
|
+
After installation, some MCPs require API keys. Edit `~/.config/opencode/opencode.json` and replace `TOKEN_PLACEHOLDER` with your actual keys:
|
|
63
|
+
|
|
64
|
+
- **context7**: Get your API key at https://context7.com
|
|
65
|
+
- **expo-mcp**: Get your API key at https://expo.dev
|
|
66
|
+
|
|
67
|
+
## Connecting GitHub Copilot
|
|
68
|
+
|
|
69
|
+
To use GitHub Copilot with OpenCode, follow these steps:
|
|
70
|
+
|
|
71
|
+
1. **Run the connect command** in OpenCode:
|
|
72
|
+
```
|
|
73
|
+
/connect
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+

|
|
77
|
+
|
|
78
|
+
2. **Select GitHub Copilot** from the list of providers:
|
|
79
|
+
|
|
80
|
+

|
|
81
|
+
|
|
82
|
+
3. **Copy the code and open the URL**: OpenCode will display a URL (`https://github.com/login/device`) and a code. Open the URL in your browser.
|
|
83
|
+
|
|
84
|
+

|
|
85
|
+
|
|
86
|
+
4. **Complete authorization**: On the GitHub Device Activation page, verify your account and click the green "Continue" button to authorize OpenCode to use your GitHub Copilot license.
|
|
87
|
+
|
|
88
|
+

|
|
89
|
+
|
|
90
|
+
That's it! GitHub Copilot will now be available as a provider in OpenCode.
|
|
51
91
|
|
|
52
92
|
## License
|
|
53
93
|
|
package/agents/code-reviewer.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-reviewer
|
|
3
3
|
description: Expert code review specialist for quality, security, and maintainability. Use PROACTIVELY after writing or modifying code to ensure high development standards.
|
|
4
|
-
tools:
|
|
4
|
+
tools:
|
|
5
|
+
Read: true
|
|
6
|
+
Write: true
|
|
7
|
+
Edit: true
|
|
8
|
+
Bash: true
|
|
9
|
+
Grep: true
|
|
5
10
|
model: sonnet
|
|
6
11
|
---
|
|
7
12
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-simplifier
|
|
3
|
+
description: Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality. Focuses on recently modified code unless instructed otherwise.
|
|
4
|
+
model: opus
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are an expert code simplification specialist focused on enhancing code clarity, consistency, and maintainability while preserving exact functionality. Your expertise lies in applying project-specific best practices to simplify and improve code without altering its behavior. You prioritize readable, explicit code over overly compact solutions. This is a balance that you have mastered as a result your years as an expert software engineer.
|
|
8
|
+
|
|
9
|
+
You will analyze recently modified code and apply refinements that:
|
|
10
|
+
|
|
11
|
+
1. **Preserve Functionality**: Never change what the code does - only how it does it. All original features, outputs, and behaviors must remain intact.
|
|
12
|
+
|
|
13
|
+
2. **Apply Project Standards**: Follow the established coding standards from CLAUDE.md including:
|
|
14
|
+
|
|
15
|
+
- Use ES modules with proper import sorting and extensions
|
|
16
|
+
- Prefer `function` keyword over arrow functions
|
|
17
|
+
- Use explicit return type annotations for top-level functions
|
|
18
|
+
- Follow proper React component patterns with explicit Props types
|
|
19
|
+
- Use proper error handling patterns (avoid try/catch when possible)
|
|
20
|
+
- Maintain consistent naming conventions
|
|
21
|
+
|
|
22
|
+
3. **Enhance Clarity**: Simplify code structure by:
|
|
23
|
+
|
|
24
|
+
- Reducing unnecessary complexity and nesting
|
|
25
|
+
- Eliminating redundant code and abstractions
|
|
26
|
+
- Improving readability through clear variable and function names
|
|
27
|
+
- Consolidating related logic
|
|
28
|
+
- Removing unnecessary comments that describe obvious code
|
|
29
|
+
- IMPORTANT: Avoid nested ternary operators - prefer switch statements or if/else chains for multiple conditions
|
|
30
|
+
- Choose clarity over brevity - explicit code is often better than overly compact code
|
|
31
|
+
|
|
32
|
+
4. **Maintain Balance**: Avoid over-simplification that could:
|
|
33
|
+
|
|
34
|
+
- Reduce code clarity or maintainability
|
|
35
|
+
- Create overly clever solutions that are hard to understand
|
|
36
|
+
- Combine too many concerns into single functions or components
|
|
37
|
+
- Remove helpful abstractions that improve code organization
|
|
38
|
+
- Prioritize "fewer lines" over readability (e.g., nested ternaries, dense one-liners)
|
|
39
|
+
- Make the code harder to debug or extend
|
|
40
|
+
|
|
41
|
+
5. **Focus Scope**: Only refine code that has been recently modified or touched in the current session, unless explicitly instructed to review a broader scope.
|
|
42
|
+
|
|
43
|
+
Your refinement process:
|
|
44
|
+
|
|
45
|
+
1. Identify the recently modified code sections
|
|
46
|
+
2. Analyze for opportunities to improve elegance and consistency
|
|
47
|
+
3. Apply project-specific best practices and coding standards
|
|
48
|
+
4. Ensure all functionality remains unchanged
|
|
49
|
+
5. Verify the refined code is simpler and more maintainable
|
|
50
|
+
6. Document only significant changes that affect understanding
|
|
51
|
+
|
|
52
|
+
You operate autonomously and proactively, refining code immediately after it's written or modified without requiring explicit requests. Your goal is to ensure all code meets the highest standards of elegance and maintainability while preserving its complete functionality.
|
package/bin/cli.js
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { run } from '../
|
|
3
|
+
import { run } from '../dist/index.js';
|
|
4
4
|
|
|
5
5
|
run().catch((error) => {
|
|
6
|
-
if (error.name === 'ExitPromptError') {
|
|
7
|
-
console.log('\nInstallation cancelled.');
|
|
8
|
-
process.exit(0);
|
|
9
|
-
}
|
|
10
6
|
console.error(error);
|
|
11
7
|
process.exit(1);
|
|
12
8
|
});
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiLA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAiJzC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { access, cp, mkdir, readdir, readFile, writeFile } from 'fs/promises';
|
|
4
|
+
import { exec } from 'child_process';
|
|
5
|
+
import { promisify } from 'util';
|
|
6
|
+
import { homedir } from 'os';
|
|
7
|
+
import { dirname, join } from 'path';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
const execAsync = promisify(exec);
|
|
10
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const ROOT_DIR = join(__dirname, '..');
|
|
12
|
+
const HOME_DIR = homedir();
|
|
13
|
+
const OPENCODE_DIR = join(HOME_DIR, '.config', 'opencode');
|
|
14
|
+
const OPENCODE_CONFIG = join(OPENCODE_DIR, 'opencode.json');
|
|
15
|
+
const MCP_DISPLAY_NAMES = {
|
|
16
|
+
'pg-aiguide': 'postgres-mcp',
|
|
17
|
+
};
|
|
18
|
+
function handleCancel(result) {
|
|
19
|
+
if (p.isCancel(result)) {
|
|
20
|
+
p.cancel('Installation cancelled.');
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
async function exists(path) {
|
|
26
|
+
try {
|
|
27
|
+
await access(path);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function isOpenCodeInstalled() {
|
|
35
|
+
try {
|
|
36
|
+
// Check if opencode command exists
|
|
37
|
+
await execAsync('which opencode');
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Also check if config directory exists
|
|
42
|
+
return await exists(OPENCODE_DIR);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function installOpenCode() {
|
|
46
|
+
const s = p.spinner();
|
|
47
|
+
s.start('Installing OpenCode...');
|
|
48
|
+
try {
|
|
49
|
+
await execAsync('curl -fsSL https://opencode.ai/install | bash', {
|
|
50
|
+
shell: '/bin/bash',
|
|
51
|
+
});
|
|
52
|
+
s.stop('OpenCode installed successfully!');
|
|
53
|
+
p.note('OpenCode has been installed. You may need to restart your terminal or run:\n source ~/.bashrc (or ~/.zshrc)', 'Next Steps');
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
s.stop('Installation failed');
|
|
57
|
+
throw new Error(`Failed to install OpenCode: ${error instanceof Error ? error.message : String(error)}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function getDirectories(path) {
|
|
61
|
+
try {
|
|
62
|
+
const entries = await readdir(path, { withFileTypes: true });
|
|
63
|
+
return entries.filter(e => e.isDirectory()).map(e => e.name);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function getFiles(path, extension) {
|
|
70
|
+
try {
|
|
71
|
+
const entries = await readdir(path, { withFileTypes: true });
|
|
72
|
+
return entries
|
|
73
|
+
.filter(e => e.isFile() && e.name.endsWith(extension))
|
|
74
|
+
.map(e => e.name.replace(extension, ''));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function getInstalledMcps() {
|
|
81
|
+
try {
|
|
82
|
+
const content = await readFile(OPENCODE_CONFIG, 'utf-8');
|
|
83
|
+
const config = JSON.parse(content);
|
|
84
|
+
const mcpSection = config.mcp;
|
|
85
|
+
return mcpSection ? new Set(Object.keys(mcpSection)) : new Set();
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return new Set();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function readJsonConfig(path) {
|
|
92
|
+
try {
|
|
93
|
+
const content = await readFile(path, 'utf-8');
|
|
94
|
+
return JSON.parse(content);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async function isThemeInstalled(themeName) {
|
|
101
|
+
const themePath = join(OPENCODE_DIR, 'themes', `${themeName}.json`);
|
|
102
|
+
return await exists(themePath);
|
|
103
|
+
}
|
|
104
|
+
function formatInstalledLabel(name, isInstalled) {
|
|
105
|
+
return isInstalled ? `${name} ${chalk.yellow('(installed)')}` : name;
|
|
106
|
+
}
|
|
107
|
+
async function buildAgentOptions(agents) {
|
|
108
|
+
const options = [];
|
|
109
|
+
for (const agent of agents) {
|
|
110
|
+
const agentPath = join(OPENCODE_DIR, 'agent', `${agent}.md`);
|
|
111
|
+
const isInstalled = await exists(agentPath);
|
|
112
|
+
options.push({
|
|
113
|
+
value: agent,
|
|
114
|
+
label: formatInstalledLabel(agent, isInstalled),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return options;
|
|
118
|
+
}
|
|
119
|
+
async function buildSkillOptions(skills) {
|
|
120
|
+
const options = [];
|
|
121
|
+
for (const skill of skills) {
|
|
122
|
+
const skillPath = join(OPENCODE_DIR, 'skill', skill);
|
|
123
|
+
const isInstalled = await exists(skillPath);
|
|
124
|
+
options.push({
|
|
125
|
+
value: skill,
|
|
126
|
+
label: formatInstalledLabel(skill, isInstalled),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return options;
|
|
130
|
+
}
|
|
131
|
+
async function buildMcpOptions(mcps) {
|
|
132
|
+
const installedMcps = await getInstalledMcps();
|
|
133
|
+
const options = [];
|
|
134
|
+
for (const mcp of mcps) {
|
|
135
|
+
// Read the MCP config to get the actual server names
|
|
136
|
+
const mcpConfig = await readJsonConfig(join(ROOT_DIR, 'mcps', mcp, '.mcp.json'));
|
|
137
|
+
const servers = mcpConfig.mcpServers;
|
|
138
|
+
// Check if any of the servers in this MCP are installed
|
|
139
|
+
let isInstalled = false;
|
|
140
|
+
if (servers) {
|
|
141
|
+
for (const serverName of Object.keys(servers)) {
|
|
142
|
+
if (installedMcps.has(serverName)) {
|
|
143
|
+
isInstalled = true;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const displayName = MCP_DISPLAY_NAMES[mcp] ?? mcp;
|
|
149
|
+
options.push({ value: mcp, label: formatInstalledLabel(displayName, isInstalled) });
|
|
150
|
+
}
|
|
151
|
+
return options;
|
|
152
|
+
}
|
|
153
|
+
export async function run() {
|
|
154
|
+
console.clear();
|
|
155
|
+
p.intro(chalk.bgMagenta.white(' OpenCode Toolkit Installer '));
|
|
156
|
+
// Step 1: Check OpenCode installation
|
|
157
|
+
p.log.info(chalk.cyan('Step 1/6: OpenCode Detection'));
|
|
158
|
+
const opencodeInstalled = await isOpenCodeInstalled();
|
|
159
|
+
let isNewInstallation = false;
|
|
160
|
+
if (opencodeInstalled) {
|
|
161
|
+
p.log.success(chalk.green('✓ OpenCode is already installed'));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
p.log.warn('OpenCode is not installed on your system.');
|
|
165
|
+
const shouldInstall = handleCancel(await p.confirm({
|
|
166
|
+
message: 'Would you like to install OpenCode now?',
|
|
167
|
+
initialValue: true,
|
|
168
|
+
}));
|
|
169
|
+
if (shouldInstall) {
|
|
170
|
+
try {
|
|
171
|
+
await installOpenCode();
|
|
172
|
+
isNewInstallation = true;
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
176
|
+
p.outro(chalk.red('Installation cancelled. Please install OpenCode manually from https://opencode.ai'));
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
p.cancel('Installation cancelled. Please install OpenCode first from https://opencode.ai');
|
|
182
|
+
process.exit(0);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const agents = await getFiles(join(ROOT_DIR, 'agents'), '.md');
|
|
186
|
+
const skills = await getDirectories(join(ROOT_DIR, 'skills'));
|
|
187
|
+
const mcps = await getDirectories(join(ROOT_DIR, 'mcps'));
|
|
188
|
+
// Step 2: Agents
|
|
189
|
+
p.log.info(chalk.cyan('Step 2/6: Agents'));
|
|
190
|
+
const selectedAgents = agents.length > 0
|
|
191
|
+
? handleCancel(await p.multiselect({
|
|
192
|
+
message: 'Select agents (space to toggle, enter to continue)',
|
|
193
|
+
options: await buildAgentOptions(agents),
|
|
194
|
+
required: false,
|
|
195
|
+
}))
|
|
196
|
+
: [];
|
|
197
|
+
// Step 3: Skills
|
|
198
|
+
p.log.info(chalk.cyan('Step 3/6: Skills'));
|
|
199
|
+
const selectedSkills = skills.length > 0
|
|
200
|
+
? handleCancel(await p.multiselect({
|
|
201
|
+
message: 'Select skills (space to toggle, enter to continue)',
|
|
202
|
+
options: await buildSkillOptions(skills),
|
|
203
|
+
required: false,
|
|
204
|
+
}))
|
|
205
|
+
: [];
|
|
206
|
+
// Step 4: MCPs
|
|
207
|
+
p.log.info(chalk.cyan('Step 4/6: MCPs'));
|
|
208
|
+
const selectedMcps = mcps.length > 0
|
|
209
|
+
? handleCancel(await p.multiselect({
|
|
210
|
+
message: 'Select MCPs (space to toggle, enter to continue)',
|
|
211
|
+
options: await buildMcpOptions(mcps),
|
|
212
|
+
required: false,
|
|
213
|
+
}))
|
|
214
|
+
: [];
|
|
215
|
+
// Step 5: Theme (only ask if OpenCode was already installed)
|
|
216
|
+
let installThemeChoice = isNewInstallation; // Auto-install for new installations
|
|
217
|
+
if (!isNewInstallation) {
|
|
218
|
+
p.log.info(chalk.cyan('Step 5/6: Theme'));
|
|
219
|
+
const themeInstalled = await isThemeInstalled('claude-vivid');
|
|
220
|
+
if (themeInstalled) {
|
|
221
|
+
p.log.success(chalk.green('✓ claude-vivid theme is already installed'));
|
|
222
|
+
installThemeChoice = false; // Don't reinstall
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
installThemeChoice = handleCancel(await p.confirm({
|
|
226
|
+
message: 'Install claude-vivid theme? (high-contrast theme with vivid colors)',
|
|
227
|
+
initialValue: true,
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
p.log.info(chalk.cyan('Step 5/6: Theme'));
|
|
233
|
+
p.log.success(chalk.green('✓ claude-vivid theme will be installed automatically'));
|
|
234
|
+
}
|
|
235
|
+
// Step 6: Confirm
|
|
236
|
+
p.log.info(chalk.cyan('Step 6/6: Confirm'));
|
|
237
|
+
const formatList = (items) => items.length > 0 ? items.join(', ') : 'none';
|
|
238
|
+
const mcpDisplayNames = selectedMcps.map(mcp => MCP_DISPLAY_NAMES[mcp] ?? mcp);
|
|
239
|
+
p.note([
|
|
240
|
+
`Agents: ${formatList(selectedAgents)}`,
|
|
241
|
+
`Skills: ${formatList(selectedSkills)}`,
|
|
242
|
+
`MCPs: ${formatList(mcpDisplayNames)}`,
|
|
243
|
+
`Theme: ${installThemeChoice ? 'claude-vivid' : 'none'}`,
|
|
244
|
+
].join('\n'), 'Summary');
|
|
245
|
+
const confirm = handleCancel(await p.confirm({ message: 'Proceed with installation?' }));
|
|
246
|
+
if (!confirm) {
|
|
247
|
+
p.cancel('Installation cancelled.');
|
|
248
|
+
process.exit(0);
|
|
249
|
+
}
|
|
250
|
+
// Installation
|
|
251
|
+
const s = p.spinner();
|
|
252
|
+
s.start('Installing...');
|
|
253
|
+
try {
|
|
254
|
+
await installAgents(selectedAgents);
|
|
255
|
+
await installSkills(selectedSkills);
|
|
256
|
+
await installMcps(selectedMcps);
|
|
257
|
+
if (installThemeChoice) {
|
|
258
|
+
await installTheme();
|
|
259
|
+
}
|
|
260
|
+
s.stop('Installation complete!');
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
s.stop('Installation failed');
|
|
264
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
if (selectedMcps.length > 0) {
|
|
268
|
+
p.note('Some MCPs require API keys. Edit ~/.config/opencode/opencode.json and replace TOKEN placeholders with your actual keys.', 'MCP Configuration');
|
|
269
|
+
}
|
|
270
|
+
p.outro(chalk.green('Done! Your tools are ready.'));
|
|
271
|
+
}
|
|
272
|
+
async function installAgents(agents) {
|
|
273
|
+
if (agents.length === 0)
|
|
274
|
+
return;
|
|
275
|
+
const agentDir = join(OPENCODE_DIR, 'agent');
|
|
276
|
+
await mkdir(agentDir, { recursive: true });
|
|
277
|
+
for (const agent of agents) {
|
|
278
|
+
await cp(join(ROOT_DIR, 'agents', `${agent}.md`), join(agentDir, `${agent}.md`));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
async function installSkills(skills) {
|
|
282
|
+
if (skills.length === 0)
|
|
283
|
+
return;
|
|
284
|
+
const skillDir = join(OPENCODE_DIR, 'skill');
|
|
285
|
+
await mkdir(skillDir, { recursive: true });
|
|
286
|
+
for (const skill of skills) {
|
|
287
|
+
await cp(join(ROOT_DIR, 'skills', skill), join(skillDir, skill), { recursive: true, force: true });
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
async function installMcps(mcps) {
|
|
291
|
+
if (mcps.length === 0)
|
|
292
|
+
return;
|
|
293
|
+
const config = await readJsonConfig(OPENCODE_CONFIG);
|
|
294
|
+
if (!config.mcp) {
|
|
295
|
+
config.mcp = {};
|
|
296
|
+
}
|
|
297
|
+
const mcpSection = config.mcp;
|
|
298
|
+
for (const mcp of mcps) {
|
|
299
|
+
const mcpConfig = await readJsonConfig(join(ROOT_DIR, 'mcps', mcp, '.mcp.json'));
|
|
300
|
+
const servers = mcpConfig.mcpServers;
|
|
301
|
+
if (servers) {
|
|
302
|
+
Object.assign(mcpSection, servers);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
await writeFile(OPENCODE_CONFIG, JSON.stringify(config, null, 2));
|
|
306
|
+
}
|
|
307
|
+
async function installTheme() {
|
|
308
|
+
// Install claude-vivid theme
|
|
309
|
+
const themesDir = join(OPENCODE_DIR, 'themes');
|
|
310
|
+
await mkdir(themesDir, { recursive: true });
|
|
311
|
+
const themeSource = join(ROOT_DIR, 'themes', 'claude-vivid.json');
|
|
312
|
+
const themeExists = await exists(themeSource);
|
|
313
|
+
if (themeExists) {
|
|
314
|
+
await cp(themeSource, join(themesDir, 'claude-vivid.json'));
|
|
315
|
+
// Update opencode.json to use the theme
|
|
316
|
+
const config = await readJsonConfig(OPENCODE_CONFIG);
|
|
317
|
+
config.theme = 'claude-vivid';
|
|
318
|
+
await writeFile(OPENCODE_CONFIG, JSON.stringify(config, null, 2));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/mcps/figma-mcp/.mcp.json
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"figma": {
|
|
4
|
-
"type": "
|
|
5
|
-
"url": "
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"type": "http",
|
|
9
|
-
"url": "http://127.0.0.1:3845/mcp"
|
|
4
|
+
"type": "remote",
|
|
5
|
+
"url": "http://127.0.0.1:3845/mcp",
|
|
6
|
+
"oauth": false,
|
|
7
|
+
"enabled": true
|
|
10
8
|
}
|
|
11
9
|
}
|
|
12
10
|
}
|
package/package.json
CHANGED
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brookmind/ai-toolkit",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "AI Toolkit installer for
|
|
3
|
+
"version": "1.1.1",
|
|
4
|
+
"description": "AI Toolkit installer for OpenCode - agents, skills, MCPs, and themes",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
7
8
|
"bin": {
|
|
8
9
|
"ai-toolkit": "./bin/cli.js"
|
|
9
10
|
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/davidcastillog/ai-toolkit.git"
|
|
14
|
+
},
|
|
10
15
|
"publishConfig": {
|
|
16
|
+
"registry": "https://registry.npmjs.org",
|
|
11
17
|
"access": "public"
|
|
12
18
|
},
|
|
13
19
|
"scripts": {
|
|
14
|
-
"
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"start": "npm run build && node bin/cli.js",
|
|
22
|
+
"prepublishOnly": "npm run build"
|
|
15
23
|
},
|
|
16
24
|
"keywords": [
|
|
17
|
-
"claude",
|
|
18
25
|
"opencode",
|
|
19
26
|
"ai",
|
|
20
27
|
"toolkit",
|
|
@@ -22,21 +29,25 @@
|
|
|
22
29
|
"skills",
|
|
23
30
|
"mcp"
|
|
24
31
|
],
|
|
25
|
-
"author": "
|
|
32
|
+
"author": "David Castillo",
|
|
26
33
|
"license": "MIT",
|
|
27
34
|
"dependencies": {
|
|
28
|
-
"@
|
|
29
|
-
"chalk": "^5.3.0"
|
|
30
|
-
|
|
35
|
+
"@clack/prompts": "^0.11.0",
|
|
36
|
+
"chalk": "^5.3.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^25.0.9",
|
|
40
|
+
"typescript": "^5.9.3"
|
|
31
41
|
},
|
|
32
42
|
"engines": {
|
|
33
43
|
"node": ">=18.0.0"
|
|
34
44
|
},
|
|
35
45
|
"files": [
|
|
36
46
|
"bin",
|
|
37
|
-
"
|
|
47
|
+
"dist",
|
|
38
48
|
"agents",
|
|
39
49
|
"skills",
|
|
40
|
-
"mcps"
|
|
50
|
+
"mcps",
|
|
51
|
+
"themes"
|
|
41
52
|
]
|
|
42
53
|
}
|