expxagents 0.18.2 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/core/solution-architect.agent.md +71 -0
- package/assets/mcps/_catalog.yaml +17 -0
- package/assets/mcps/figma.mcp.yaml +35 -0
- package/assets/mcps/github.mcp.yaml +44 -0
- package/assets/mcps/linear.mcp.yaml +37 -0
- package/assets/mcps/notion.mcp.yaml +37 -0
- package/assets/mcps/pencil.mcp.yaml +32 -0
- package/assets/mcps/postgresql.mcp.yaml +39 -0
- package/assets/mcps/sentry.mcp.yaml +41 -0
- package/assets/mcps/slack.mcp.yaml +37 -0
- package/assets/mcps/vercel.mcp.yaml +39 -0
- package/dist/cli/src/commands/doctor.js +26 -0
- package/dist/cli/src/commands/init.js +43 -0
- package/dist/cli/src/commands/mcp.d.ts +2 -0
- package/dist/cli/src/commands/mcp.js +155 -0
- package/dist/cli/src/commands/sync-templates.d.ts +1 -0
- package/dist/cli/src/commands/sync-templates.js +125 -0
- package/dist/cli/src/index.js +7 -0
- package/dist/cli/src/mcp/__tests__/catalog.test.d.ts +1 -0
- package/dist/cli/src/mcp/__tests__/catalog.test.js +101 -0
- package/dist/cli/src/mcp/__tests__/detect.test.d.ts +1 -0
- package/dist/cli/src/mcp/__tests__/detect.test.js +84 -0
- package/dist/cli/src/mcp/__tests__/setup.test.d.ts +1 -0
- package/dist/cli/src/mcp/__tests__/setup.test.js +75 -0
- package/dist/cli/src/mcp/__tests__/validate.test.d.ts +1 -0
- package/dist/cli/src/mcp/__tests__/validate.test.js +42 -0
- package/dist/cli/src/mcp/catalog.d.ts +4 -0
- package/dist/cli/src/mcp/catalog.js +53 -0
- package/dist/cli/src/mcp/detect.d.ts +9 -0
- package/dist/cli/src/mcp/detect.js +75 -0
- package/dist/cli/src/mcp/setup.d.ts +4 -0
- package/dist/cli/src/mcp/setup.js +56 -0
- package/dist/cli/src/mcp/types.d.ts +68 -0
- package/dist/cli/src/mcp/types.js +1 -0
- package/dist/cli/src/mcp/validate.d.ts +2 -0
- package/dist/cli/src/mcp/validate.js +23 -0
- package/dist/cli/src/pencil/__tests__/detect.test.d.ts +1 -0
- package/dist/cli/src/pencil/__tests__/detect.test.js +71 -0
- package/dist/cli/src/pencil/__tests__/property-mapper.test.d.ts +1 -0
- package/dist/cli/src/pencil/__tests__/property-mapper.test.js +120 -0
- package/dist/cli/src/pencil/__tests__/template-sync.test.d.ts +1 -0
- package/dist/cli/src/pencil/__tests__/template-sync.test.js +95 -0
- package/dist/cli/src/pencil/detect.d.ts +21 -0
- package/dist/cli/src/pencil/detect.js +23 -0
- package/dist/cli/src/pencil/property-mapper.d.ts +41 -0
- package/dist/cli/src/pencil/property-mapper.js +106 -0
- package/dist/cli/src/pencil/template-sync.d.ts +36 -0
- package/dist/cli/src/pencil/template-sync.js +75 -0
- package/dist/core/squad-loader.d.ts +7 -0
- package/dist/core/squad-loader.js +12 -0
- package/dist/server/scheduler/__tests__/job-runner.test.js +2 -2
- package/dist/server/scheduler/__tests__/job-runner.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -197,6 +197,75 @@ Create `_memory/memories.md` for squad-level learning.
|
|
|
197
197
|
2. **Agent instructions** must include: "Before producing any visual output, read `squads/design-system/_memory/design-tokens.md` for colors, fonts, and spacing. Read `squads/design-system/_memory/brand-guidelines.md` for brand rules. Use assets from `_expxagents/_assets/` for logos and images."
|
|
198
198
|
3. The first step of visual squads should always reference the design system tokens
|
|
199
199
|
|
|
200
|
+
## Pencil Visual Templates Integration
|
|
201
|
+
|
|
202
|
+
**For squads that produce visual assets** (social media posts, carousels, stories, landing pages, slides, email templates, ads, branding), use the Pencil visual design system:
|
|
203
|
+
|
|
204
|
+
### When to Enable
|
|
205
|
+
|
|
206
|
+
| Squad Type | visual_templates? | Reason |
|
|
207
|
+
|-----------|------------------|--------|
|
|
208
|
+
| Instagram Post/Carousel/Stories | YES | Visual image templates |
|
|
209
|
+
| Landing Page | YES | Visual layout |
|
|
210
|
+
| Slide Deck | YES | Presentation templates |
|
|
211
|
+
| Email Marketing | YES | Visual email templates |
|
|
212
|
+
| Ads (Meta/Google) | YES | Visual ad templates |
|
|
213
|
+
| Branding/Web Design | YES | Identity visual |
|
|
214
|
+
| Blog | NO | Text/HTML, no visual design |
|
|
215
|
+
| Instagram Reels | NO | Video, not static image |
|
|
216
|
+
| Other non-visual squads | NO | No visual assets |
|
|
217
|
+
|
|
218
|
+
### squad.yaml Configuration
|
|
219
|
+
|
|
220
|
+
Add `visual_templates` block to qualifying squads:
|
|
221
|
+
|
|
222
|
+
```yaml
|
|
223
|
+
squad:
|
|
224
|
+
# ... standard fields ...
|
|
225
|
+
visual_templates:
|
|
226
|
+
enabled: true
|
|
227
|
+
format: "4:5" # aspect ratio (4:5 for IG, 16:9 for slides, etc.)
|
|
228
|
+
count: 3 # number of initial templates
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Standard Dimensions
|
|
232
|
+
|
|
233
|
+
| Type | Width x Height | Format |
|
|
234
|
+
|------|---------------|--------|
|
|
235
|
+
| Instagram Post | 1080x1350 | 4:5 |
|
|
236
|
+
| Instagram Post (square) | 1080x1080 | 1:1 |
|
|
237
|
+
| Instagram Story | 1080x1920 | 9:16 |
|
|
238
|
+
| Slide Deck | 1920x1080 | 16:9 |
|
|
239
|
+
| Email Header | 600x200 | 3:1 |
|
|
240
|
+
| Blog Cover | 1200x630 | ~2:1 |
|
|
241
|
+
| Landing Page | 1440x900+ | ~16:10 |
|
|
242
|
+
|
|
243
|
+
### Directory Structure
|
|
244
|
+
|
|
245
|
+
When creating a visual squad, create the `templates/` directory:
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
squads/<setor>/<grupo>/<sessao>/<code>/
|
|
249
|
+
├── squad.yaml
|
|
250
|
+
├── templates/ ← NEW: for visual squads
|
|
251
|
+
│ └── (user creates .pen file here via Pencil)
|
|
252
|
+
├── agents/
|
|
253
|
+
├── _memory/
|
|
254
|
+
└── ...
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Agent Designer Instructions
|
|
258
|
+
|
|
259
|
+
For the designer agent in visual squads, include this section in the agent's .md:
|
|
260
|
+
|
|
261
|
+
```markdown
|
|
262
|
+
## Pencil Templates
|
|
263
|
+
- **Templates directory:** `templates/`
|
|
264
|
+
- **Sync command:** Run `expxagents sync-templates` after editing .pen files
|
|
265
|
+
- **Template rotation:** Rotate through available templates for variety
|
|
266
|
+
- **Always read the template .md files** before generating HTML output
|
|
267
|
+
```
|
|
268
|
+
|
|
200
269
|
## Agent Persona Rules
|
|
201
270
|
|
|
202
271
|
Every agent in every squad MUST have:
|
|
@@ -232,6 +301,8 @@ Before presenting the design to the user:
|
|
|
232
301
|
- [ ] Pipeline flows logically from research → creation → review
|
|
233
302
|
- [ ] Format matches an available best-practice (if platform specified)
|
|
234
303
|
- [ ] Visual squads reference design system and assets path
|
|
304
|
+
- [ ] Visual squads have `visual_templates` block in squad.yaml
|
|
305
|
+
- [ ] Visual squads have `templates/` directory created
|
|
235
306
|
- [ ] Every agent has a human name (first + last) and an avatar URL
|
|
236
307
|
|
|
237
308
|
## After Design
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
catalog:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
categories:
|
|
4
|
+
- name: development
|
|
5
|
+
mcps: [github, postgresql]
|
|
6
|
+
- name: communication
|
|
7
|
+
mcps: [slack]
|
|
8
|
+
- name: project-management
|
|
9
|
+
mcps: [linear]
|
|
10
|
+
- name: monitoring
|
|
11
|
+
mcps: [sentry]
|
|
12
|
+
- name: knowledge
|
|
13
|
+
mcps: [notion]
|
|
14
|
+
- name: design
|
|
15
|
+
mcps: [figma, pencil]
|
|
16
|
+
- name: infrastructure
|
|
17
|
+
mcps: [vercel]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: figma
|
|
2
|
+
name: Figma
|
|
3
|
+
description: Design files, components, and style inspection
|
|
4
|
+
category: design
|
|
5
|
+
icon: figma
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: npm
|
|
9
|
+
npm:
|
|
10
|
+
package: "figma-developer-mcp"
|
|
11
|
+
|
|
12
|
+
server:
|
|
13
|
+
command: npx
|
|
14
|
+
args: ["-y", "figma-developer-mcp"]
|
|
15
|
+
env:
|
|
16
|
+
FIGMA_ACCESS_TOKEN: "${FIGMA_ACCESS_TOKEN}"
|
|
17
|
+
|
|
18
|
+
auth:
|
|
19
|
+
- key: FIGMA_ACCESS_TOKEN
|
|
20
|
+
label: "Figma Access Token"
|
|
21
|
+
hint: "Create at https://www.figma.com/developers/api#access-tokens"
|
|
22
|
+
required: true
|
|
23
|
+
|
|
24
|
+
tools:
|
|
25
|
+
- name: get_file
|
|
26
|
+
description: Get a Figma file and its contents
|
|
27
|
+
- name: get_components
|
|
28
|
+
description: Get components from a Figma file
|
|
29
|
+
- name: get_styles
|
|
30
|
+
description: Get styles defined in a Figma file
|
|
31
|
+
|
|
32
|
+
relevant_sectors:
|
|
33
|
+
- design
|
|
34
|
+
- product
|
|
35
|
+
- development
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
id: github
|
|
2
|
+
name: GitHub
|
|
3
|
+
description: PRs, issues, code review, releases
|
|
4
|
+
category: development
|
|
5
|
+
icon: github
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: hybrid
|
|
9
|
+
cli:
|
|
10
|
+
command: gh
|
|
11
|
+
version_flag: --version
|
|
12
|
+
min_version: "2.0.0"
|
|
13
|
+
npm:
|
|
14
|
+
package: "@modelcontextprotocol/server-github"
|
|
15
|
+
|
|
16
|
+
server:
|
|
17
|
+
command: npx
|
|
18
|
+
args: ["-y", "@modelcontextprotocol/server-github"]
|
|
19
|
+
env:
|
|
20
|
+
GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_PERSONAL_ACCESS_TOKEN}"
|
|
21
|
+
|
|
22
|
+
auth:
|
|
23
|
+
- key: GITHUB_PERSONAL_ACCESS_TOKEN
|
|
24
|
+
label: "GitHub Personal Access Token"
|
|
25
|
+
hint: "Create at https://github.com/settings/tokens (scopes: repo, read:org)"
|
|
26
|
+
required: true
|
|
27
|
+
validate: "gh auth status"
|
|
28
|
+
|
|
29
|
+
tools:
|
|
30
|
+
- name: create_pull_request
|
|
31
|
+
description: Create a new pull request
|
|
32
|
+
- name: list_issues
|
|
33
|
+
description: List repository issues
|
|
34
|
+
- name: create_issue
|
|
35
|
+
description: Create a new issue
|
|
36
|
+
- name: search_code
|
|
37
|
+
description: Search code across repositories
|
|
38
|
+
- name: get_file_contents
|
|
39
|
+
description: Get contents of a file
|
|
40
|
+
|
|
41
|
+
relevant_sectors:
|
|
42
|
+
- development
|
|
43
|
+
- quality
|
|
44
|
+
- operations
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: linear
|
|
2
|
+
name: Linear
|
|
3
|
+
description: Issue tracking, project management, and team workflows
|
|
4
|
+
category: project-management
|
|
5
|
+
icon: linear
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: npm
|
|
9
|
+
npm:
|
|
10
|
+
package: "@larryhudson/linear-mcp-server"
|
|
11
|
+
|
|
12
|
+
server:
|
|
13
|
+
command: npx
|
|
14
|
+
args: ["-y", "@larryhudson/linear-mcp-server"]
|
|
15
|
+
env:
|
|
16
|
+
LINEAR_API_KEY: "${LINEAR_API_KEY}"
|
|
17
|
+
|
|
18
|
+
auth:
|
|
19
|
+
- key: LINEAR_API_KEY
|
|
20
|
+
label: "Linear API Key"
|
|
21
|
+
hint: "Create at https://linear.app/settings/api"
|
|
22
|
+
required: true
|
|
23
|
+
|
|
24
|
+
tools:
|
|
25
|
+
- name: create_issue
|
|
26
|
+
description: Create a new issue
|
|
27
|
+
- name: list_issues
|
|
28
|
+
description: List project issues
|
|
29
|
+
- name: update_issue
|
|
30
|
+
description: Update an existing issue
|
|
31
|
+
- name: list_projects
|
|
32
|
+
description: List available projects
|
|
33
|
+
|
|
34
|
+
relevant_sectors:
|
|
35
|
+
- product
|
|
36
|
+
- development
|
|
37
|
+
- operations
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: notion
|
|
2
|
+
name: Notion
|
|
3
|
+
description: Knowledge base, documentation, and collaborative workspace
|
|
4
|
+
category: knowledge
|
|
5
|
+
icon: notion
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: npm
|
|
9
|
+
npm:
|
|
10
|
+
package: "@notionhq/notion-mcp-server"
|
|
11
|
+
|
|
12
|
+
server:
|
|
13
|
+
command: npx
|
|
14
|
+
args: ["-y", "@notionhq/notion-mcp-server"]
|
|
15
|
+
env:
|
|
16
|
+
NOTION_API_KEY: "${NOTION_API_KEY}"
|
|
17
|
+
|
|
18
|
+
auth:
|
|
19
|
+
- key: NOTION_API_KEY
|
|
20
|
+
label: "Notion API Key"
|
|
21
|
+
hint: "Create at https://www.notion.so/my-integrations"
|
|
22
|
+
required: true
|
|
23
|
+
|
|
24
|
+
tools:
|
|
25
|
+
- name: search
|
|
26
|
+
description: Search pages and databases
|
|
27
|
+
- name: get_page
|
|
28
|
+
description: Get the content of a page
|
|
29
|
+
- name: create_page
|
|
30
|
+
description: Create a new page
|
|
31
|
+
- name: update_page
|
|
32
|
+
description: Update an existing page
|
|
33
|
+
|
|
34
|
+
relevant_sectors:
|
|
35
|
+
- knowledge
|
|
36
|
+
- product
|
|
37
|
+
- operations
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: pencil
|
|
2
|
+
name: Pencil
|
|
3
|
+
description: Visual design creation and editing in VS Code
|
|
4
|
+
category: design
|
|
5
|
+
icon: pencil
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: extension
|
|
9
|
+
extension:
|
|
10
|
+
prefix: "highagency.pencildev-"
|
|
11
|
+
binary_dir: out
|
|
12
|
+
binary_resolve: platform
|
|
13
|
+
|
|
14
|
+
server:
|
|
15
|
+
command: null
|
|
16
|
+
args: ["--app", "visual_studio_code"]
|
|
17
|
+
env: {}
|
|
18
|
+
|
|
19
|
+
auth: []
|
|
20
|
+
|
|
21
|
+
tools:
|
|
22
|
+
- name: batch_design
|
|
23
|
+
description: Create and modify visual designs
|
|
24
|
+
- name: batch_get
|
|
25
|
+
description: Read design nodes
|
|
26
|
+
- name: get_screenshot
|
|
27
|
+
description: Capture design screenshots
|
|
28
|
+
|
|
29
|
+
relevant_sectors:
|
|
30
|
+
- design
|
|
31
|
+
- marketing
|
|
32
|
+
- product
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: postgresql
|
|
2
|
+
name: PostgreSQL
|
|
3
|
+
description: SQL queries, schema inspection, and database management
|
|
4
|
+
category: development
|
|
5
|
+
icon: postgresql
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: hybrid
|
|
9
|
+
cli:
|
|
10
|
+
command: psql
|
|
11
|
+
version_flag: --version
|
|
12
|
+
npm:
|
|
13
|
+
package: "@modelcontextprotocol/server-postgres"
|
|
14
|
+
|
|
15
|
+
server:
|
|
16
|
+
command: npx
|
|
17
|
+
args: ["-y", "@modelcontextprotocol/server-postgres"]
|
|
18
|
+
env:
|
|
19
|
+
POSTGRESQL_URL: "${POSTGRESQL_URL}"
|
|
20
|
+
|
|
21
|
+
auth:
|
|
22
|
+
- key: POSTGRESQL_URL
|
|
23
|
+
label: "PostgreSQL Connection URL"
|
|
24
|
+
hint: "Format: postgresql://user:password@host:5432/database"
|
|
25
|
+
required: true
|
|
26
|
+
validate: "psql -c 'SELECT 1'"
|
|
27
|
+
|
|
28
|
+
tools:
|
|
29
|
+
- name: query
|
|
30
|
+
description: Execute a SQL query
|
|
31
|
+
- name: list_tables
|
|
32
|
+
description: List all tables in the database
|
|
33
|
+
- name: describe_table
|
|
34
|
+
description: Get the schema of a specific table
|
|
35
|
+
|
|
36
|
+
relevant_sectors:
|
|
37
|
+
- development
|
|
38
|
+
- data
|
|
39
|
+
- operations
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
id: sentry
|
|
2
|
+
name: Sentry
|
|
3
|
+
description: Error tracking, performance monitoring, and issue management
|
|
4
|
+
category: monitoring
|
|
5
|
+
icon: sentry
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: npm
|
|
9
|
+
npm:
|
|
10
|
+
package: "@sentry/mcp-server"
|
|
11
|
+
|
|
12
|
+
server:
|
|
13
|
+
command: npx
|
|
14
|
+
args: ["-y", "@sentry/mcp-server"]
|
|
15
|
+
env:
|
|
16
|
+
SENTRY_AUTH_TOKEN: "${SENTRY_AUTH_TOKEN}"
|
|
17
|
+
SENTRY_ORG: "${SENTRY_ORG}"
|
|
18
|
+
|
|
19
|
+
auth:
|
|
20
|
+
- key: SENTRY_AUTH_TOKEN
|
|
21
|
+
label: "Sentry Auth Token"
|
|
22
|
+
hint: "Create at https://sentry.io/settings/auth-tokens/"
|
|
23
|
+
required: true
|
|
24
|
+
validate: "sentry-cli info"
|
|
25
|
+
- key: SENTRY_ORG
|
|
26
|
+
label: "Sentry Organization Slug"
|
|
27
|
+
hint: "Your Sentry organization slug"
|
|
28
|
+
required: true
|
|
29
|
+
|
|
30
|
+
tools:
|
|
31
|
+
- name: list_issues
|
|
32
|
+
description: List Sentry issues
|
|
33
|
+
- name: get_issue
|
|
34
|
+
description: Get details of a specific issue
|
|
35
|
+
- name: search_events
|
|
36
|
+
description: Search error events
|
|
37
|
+
|
|
38
|
+
relevant_sectors:
|
|
39
|
+
- development
|
|
40
|
+
- quality
|
|
41
|
+
- infrastructure
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: slack
|
|
2
|
+
name: Slack
|
|
3
|
+
description: Team messaging, channels, and notifications
|
|
4
|
+
category: communication
|
|
5
|
+
icon: slack
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: npm
|
|
9
|
+
npm:
|
|
10
|
+
package: "@modelcontextprotocol/server-slack"
|
|
11
|
+
|
|
12
|
+
server:
|
|
13
|
+
command: npx
|
|
14
|
+
args: ["-y", "@modelcontextprotocol/server-slack"]
|
|
15
|
+
env:
|
|
16
|
+
SLACK_BOT_TOKEN: "${SLACK_BOT_TOKEN}"
|
|
17
|
+
|
|
18
|
+
auth:
|
|
19
|
+
- key: SLACK_BOT_TOKEN
|
|
20
|
+
label: "Slack Bot Token"
|
|
21
|
+
hint: "Create a Slack app at https://api.slack.com/apps"
|
|
22
|
+
required: true
|
|
23
|
+
|
|
24
|
+
tools:
|
|
25
|
+
- name: send_message
|
|
26
|
+
description: Send a message to a channel
|
|
27
|
+
- name: list_channels
|
|
28
|
+
description: List available channels
|
|
29
|
+
- name: search_messages
|
|
30
|
+
description: Search messages across channels
|
|
31
|
+
- name: get_thread
|
|
32
|
+
description: Get messages in a thread
|
|
33
|
+
|
|
34
|
+
relevant_sectors:
|
|
35
|
+
- communication
|
|
36
|
+
- operations
|
|
37
|
+
- customer-success
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: vercel
|
|
2
|
+
name: Vercel
|
|
3
|
+
description: Deployments, projects, and hosting management
|
|
4
|
+
category: infrastructure
|
|
5
|
+
icon: vercel
|
|
6
|
+
|
|
7
|
+
detection:
|
|
8
|
+
method: hybrid
|
|
9
|
+
cli:
|
|
10
|
+
command: vercel
|
|
11
|
+
version_flag: --version
|
|
12
|
+
npm:
|
|
13
|
+
package: "mcp-handler"
|
|
14
|
+
|
|
15
|
+
server:
|
|
16
|
+
command: npx
|
|
17
|
+
args: ["-y", "mcp-handler"]
|
|
18
|
+
env:
|
|
19
|
+
VERCEL_TOKEN: "${VERCEL_TOKEN}"
|
|
20
|
+
|
|
21
|
+
auth:
|
|
22
|
+
- key: VERCEL_TOKEN
|
|
23
|
+
label: "Vercel Token"
|
|
24
|
+
hint: "Create at https://vercel.com/account/tokens"
|
|
25
|
+
required: true
|
|
26
|
+
validate: "vercel whoami"
|
|
27
|
+
|
|
28
|
+
tools:
|
|
29
|
+
- name: list_deployments
|
|
30
|
+
description: List recent deployments
|
|
31
|
+
- name: get_deployment
|
|
32
|
+
description: Get details of a specific deployment
|
|
33
|
+
- name: list_projects
|
|
34
|
+
description: List all projects
|
|
35
|
+
|
|
36
|
+
relevant_sectors:
|
|
37
|
+
- infrastructure
|
|
38
|
+
- development
|
|
39
|
+
- operations
|
|
@@ -21,6 +21,32 @@ export async function doctorCommand() {
|
|
|
21
21
|
catch {
|
|
22
22
|
checks.push({ name: 'Claude Code CLI', status: 'fail', message: 'Not found — install from https://claude.ai/code' });
|
|
23
23
|
}
|
|
24
|
+
// MCP integrations check
|
|
25
|
+
const { getConfiguredMcpIds } = await import('../mcp/validate.js');
|
|
26
|
+
const { loadMcpDefinition } = await import('../mcp/catalog.js');
|
|
27
|
+
const { detectMcp } = await import('../mcp/detect.js');
|
|
28
|
+
const configured = getConfiguredMcpIds(process.cwd());
|
|
29
|
+
const mcpsDir = path.resolve('mcps');
|
|
30
|
+
if (configured.length > 0) {
|
|
31
|
+
for (const id of configured) {
|
|
32
|
+
const def = loadMcpDefinition(mcpsDir, id);
|
|
33
|
+
if (def) {
|
|
34
|
+
const result = detectMcp(def);
|
|
35
|
+
checks.push({
|
|
36
|
+
name: `MCP: ${def.name}`,
|
|
37
|
+
status: result.status !== 'unavailable' ? 'ok' : 'warn',
|
|
38
|
+
message: result.detail,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
checks.push({
|
|
45
|
+
name: 'MCP integrations',
|
|
46
|
+
status: 'warn',
|
|
47
|
+
message: 'No MCPs configured. Run: expxagents mcp setup <id>',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
24
50
|
// Project structure
|
|
25
51
|
const requiredDirs = ['squads', '_expxagents/_memory'];
|
|
26
52
|
for (const dir of requiredDirs) {
|
|
@@ -148,6 +148,7 @@ Present using AskUserQuestion with 2-4 options:
|
|
|
148
148
|
| \`/expxagents install <name>\` | Install skill from catalog |
|
|
149
149
|
| \`/expxagents uninstall <name>\` | Remove installed skill |
|
|
150
150
|
| \`/expxagents delete <name>\` | Confirm and delete squad |
|
|
151
|
+
| \`/expxagents sync-templates [squad]\` | Sync Pencil .pen visual templates to .md specs |
|
|
151
152
|
| \`/expxagents dashboard\` | Run CLI to start server + open dashboard |
|
|
152
153
|
| \`/expxagents virtual-office\` | Run CLI to start server + open virtual office in browser |
|
|
153
154
|
| \`/expxagents help\` | Show help text |
|
|
@@ -227,6 +228,9 @@ SQUADS
|
|
|
227
228
|
/expxagents edit <name> Modify a squad
|
|
228
229
|
/expxagents delete <name> Delete a squad
|
|
229
230
|
|
|
231
|
+
TEMPLATES
|
|
232
|
+
/expxagents sync-templates Sync Pencil visual templates
|
|
233
|
+
|
|
230
234
|
SKILLS
|
|
231
235
|
/expxagents skills Browse skills
|
|
232
236
|
/expxagents install Install a skill
|
|
@@ -326,6 +330,12 @@ export async function initCommand(options = {}) {
|
|
|
326
330
|
else {
|
|
327
331
|
console.log(' agents/ already exists (use --update to refresh)');
|
|
328
332
|
}
|
|
333
|
+
// Copy MCP catalog
|
|
334
|
+
const mcpsSrc = path.join(assetsDir, 'mcps');
|
|
335
|
+
if (fs.existsSync(mcpsSrc)) {
|
|
336
|
+
const mcpsResult = copyDirRecursive(mcpsSrc, path.resolve('mcps'));
|
|
337
|
+
console.log(` 📡 MCP catalog: ${mcpsResult.changed}/${mcpsResult.total} files`);
|
|
338
|
+
}
|
|
329
339
|
// Create/update Claude Code skill (.claude/skills/expxagents/SKILL.md)
|
|
330
340
|
const skillDir = path.join(cwd, '.claude', 'skills', 'expxagents');
|
|
331
341
|
const skillPath = path.join(skillDir, 'SKILL.md');
|
|
@@ -380,6 +390,7 @@ BRIDGE_TIMEOUT_MS=300000
|
|
|
380
390
|
const gitignoreEntries = [
|
|
381
391
|
'node_modules/',
|
|
382
392
|
'.env',
|
|
393
|
+
'.mcp.json',
|
|
383
394
|
'*.tmp',
|
|
384
395
|
'squads/*/state.json',
|
|
385
396
|
'squads/*/state.json.tmp',
|
|
@@ -397,6 +408,38 @@ BRIDGE_TIMEOUT_MS=300000
|
|
|
397
408
|
fs.writeFileSync(gitignorePath, gitignoreEntries.join('\n') + '\n', 'utf-8');
|
|
398
409
|
console.log(' Created .gitignore');
|
|
399
410
|
}
|
|
411
|
+
// MCP Setup
|
|
412
|
+
const mcpsDir = path.resolve('mcps');
|
|
413
|
+
if (fs.existsSync(mcpsDir)) {
|
|
414
|
+
const { listAllMcpIds, loadMcpDefinition } = await import('../mcp/catalog.js');
|
|
415
|
+
const { detectMcp, detectExtension, resolvePlatformBinary } = await import('../mcp/detect.js');
|
|
416
|
+
const { writeMcpConfig } = await import('../mcp/setup.js');
|
|
417
|
+
const ids = listAllMcpIds(mcpsDir);
|
|
418
|
+
const results = ids.map(id => {
|
|
419
|
+
const def = loadMcpDefinition(mcpsDir, id);
|
|
420
|
+
return def ? { def, detection: detectMcp(def) } : null;
|
|
421
|
+
}).filter((r) => r !== null);
|
|
422
|
+
console.log('\n🔍 Detecting available MCP integrations...\n');
|
|
423
|
+
for (const { def, detection } of results) {
|
|
424
|
+
const icon = detection.status === 'detected' ? '✅' : detection.status === 'available' ? '⬜' : '⛔';
|
|
425
|
+
console.log(` ${icon} ${def.id.padEnd(14)} — ${detection.detail}`);
|
|
426
|
+
}
|
|
427
|
+
// Auto-configure extension-based MCPs (like Pencil) that need no auth
|
|
428
|
+
for (const { def, detection } of results) {
|
|
429
|
+
if (detection.status === 'detected' && def.detection.method === 'extension' && def.auth.length === 0) {
|
|
430
|
+
if (def.detection.extension) {
|
|
431
|
+
const ext = detectExtension(def.detection.extension.prefix);
|
|
432
|
+
if (ext) {
|
|
433
|
+
const binary = resolvePlatformBinary();
|
|
434
|
+
const resolvedCmd = path.join(ext.extensionPath, def.detection.extension.binary_dir, binary);
|
|
435
|
+
writeMcpConfig(process.cwd(), def, {}, resolvedCmd);
|
|
436
|
+
console.log(` → ${def.name} auto-configured`);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
console.log('\n Run: expxagents mcp setup <id> to configure additional MCPs\n');
|
|
442
|
+
}
|
|
400
443
|
// Install Python dependencies
|
|
401
444
|
const pythonDeps = ['aiohttp', 'aiofiles', 'python-dotenv'];
|
|
402
445
|
console.log(`\n Installing Python dependencies (${pythonDeps.join(', ')})...`);
|