@agents-inc/cli 0.74.8 → 0.74.10
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/CHANGELOG.md +23 -0
- package/README.md +69 -111
- package/dist/{chunk-FVMYBN5K.js → chunk-2EXAK22V.js} +34 -46
- package/dist/chunk-2EXAK22V.js.map +1 -0
- package/dist/{chunk-4Q2JLBCX.js → chunk-54AECXSH.js} +2 -2
- package/dist/{chunk-RBR355UI.js → chunk-C6YLN4AW.js} +3 -3
- package/dist/{chunk-F7LOH754.js → chunk-EWKUUWYY.js} +5 -1
- package/dist/chunk-EWKUUWYY.js.map +1 -0
- package/dist/{chunk-7W226BOV.js → chunk-FW5C245M.js} +3 -3
- package/dist/chunk-FW5C245M.js.map +1 -0
- package/dist/{chunk-HJY4354Y.js → chunk-IYA5PSXU.js} +2 -2
- package/dist/{chunk-TUGXTCGX.js → chunk-M5IAGR5Z.js} +2 -2
- package/dist/{chunk-BQW4ONJE.js → chunk-NDKIFVR4.js} +2 -2
- package/dist/{chunk-7JVDZFJG.js → chunk-OINQ6OWM.js} +2 -2
- package/dist/{chunk-E3MF6GGS.js → chunk-PUZLP4SL.js} +2 -2
- package/dist/{chunk-Q53GBFTO.js → chunk-VILTRTBT.js} +2 -2
- package/dist/{chunk-ULP3GGXG.js → chunk-VIVOJASC.js} +4 -4
- package/dist/{chunk-KZG3EQSH.js → chunk-VYHRCFMD.js} +3 -3
- package/dist/{chunk-GNA6IOQZ.js → chunk-XPRDNALD.js} +2 -2
- package/dist/{chunk-7SKGMV7P.js → chunk-YDBVG6RF.js} +9 -9
- package/dist/{chunk-SM4FX2IU.js → chunk-YZUAXX7F.js} +3 -3
- package/dist/commands/build/plugins.js +2 -2
- package/dist/commands/build/stack.js +2 -2
- package/dist/commands/compile.js +2 -2
- package/dist/commands/config/index.js +2 -2
- package/dist/commands/config/path.js +1 -1
- package/dist/commands/config/show.js +2 -2
- package/dist/commands/diff.js +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/edit.js +12 -12
- package/dist/commands/eject.js +1 -1
- package/dist/commands/import/skill.js +1 -1
- package/dist/commands/info.js +1 -1
- package/dist/commands/init.js +12 -12
- package/dist/commands/list.js +1 -1
- package/dist/commands/new/agent.js +2 -2
- package/dist/commands/new/marketplace.js +2 -2
- package/dist/commands/new/skill.js +2 -2
- package/dist/commands/outdated.js +1 -1
- package/dist/commands/search.js +1 -1
- package/dist/commands/uninstall.js +1 -1
- package/dist/commands/update.js +2 -2
- package/dist/commands/validate.js +1 -1
- package/dist/components/wizard/category-grid.test.js +2 -2
- package/dist/components/wizard/domain-selection.js +3 -3
- package/dist/components/wizard/source-grid.test.js +2 -2
- package/dist/components/wizard/stack-selection.js +3 -3
- package/dist/components/wizard/step-agents.js +3 -3
- package/dist/components/wizard/step-agents.test.js +3 -3
- package/dist/components/wizard/step-build.js +3 -3
- package/dist/components/wizard/step-build.test.js +3 -3
- package/dist/components/wizard/step-confirm.test.js +2 -2
- package/dist/components/wizard/step-refine.js +2 -1
- package/dist/components/wizard/step-refine.test.js +2 -1
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +2 -2
- package/dist/components/wizard/step-settings.test.js +5 -5
- package/dist/components/wizard/step-sources.js +3 -3
- package/dist/components/wizard/step-sources.test.js +3 -3
- package/dist/components/wizard/step-stack.js +5 -5
- package/dist/components/wizard/step-stack.test.js +5 -5
- package/dist/components/wizard/wizard-layout.js +3 -3
- package/dist/components/wizard/wizard.js +11 -11
- package/dist/hooks/init.js +12 -12
- package/dist/{source-loader-X46F4X2B.js → source-loader-WBDPZJEW.js} +2 -2
- package/dist/{source-manager-WG7HJHVW.js → source-manager-RRGK4SBP.js} +2 -2
- package/dist/stores/wizard-store.js +2 -2
- package/dist/stores/wizard-store.test.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-7W226BOV.js.map +0 -1
- package/dist/chunk-F7LOH754.js.map +0 -1
- package/dist/chunk-FVMYBN5K.js.map +0 -1
- /package/dist/{chunk-4Q2JLBCX.js.map → chunk-54AECXSH.js.map} +0 -0
- /package/dist/{chunk-RBR355UI.js.map → chunk-C6YLN4AW.js.map} +0 -0
- /package/dist/{chunk-HJY4354Y.js.map → chunk-IYA5PSXU.js.map} +0 -0
- /package/dist/{chunk-TUGXTCGX.js.map → chunk-M5IAGR5Z.js.map} +0 -0
- /package/dist/{chunk-BQW4ONJE.js.map → chunk-NDKIFVR4.js.map} +0 -0
- /package/dist/{chunk-7JVDZFJG.js.map → chunk-OINQ6OWM.js.map} +0 -0
- /package/dist/{chunk-E3MF6GGS.js.map → chunk-PUZLP4SL.js.map} +0 -0
- /package/dist/{chunk-Q53GBFTO.js.map → chunk-VILTRTBT.js.map} +0 -0
- /package/dist/{chunk-ULP3GGXG.js.map → chunk-VIVOJASC.js.map} +0 -0
- /package/dist/{chunk-KZG3EQSH.js.map → chunk-VYHRCFMD.js.map} +0 -0
- /package/dist/{chunk-GNA6IOQZ.js.map → chunk-XPRDNALD.js.map} +0 -0
- /package/dist/{chunk-7SKGMV7P.js.map → chunk-YDBVG6RF.js.map} +0 -0
- /package/dist/{chunk-SM4FX2IU.js.map → chunk-YZUAXX7F.js.map} +0 -0
- /package/dist/{source-loader-X46F4X2B.js.map → source-loader-WBDPZJEW.js.map} +0 -0
- /package/dist/{source-manager-WG7HJHVW.js.map → source-manager-RRGK4SBP.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,29 @@ Each release has detailed notes in its own file under [`changelogs/`](./changelo
|
|
|
7
7
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
8
8
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
9
9
|
|
|
10
|
+
## [0.74.10] - 2026-03-14
|
|
11
|
+
|
|
12
|
+
**E2E test file splits for parallel execution**
|
|
13
|
+
|
|
14
|
+
- Split 6 large E2E files (1,087 to 451 lines each) into 14 smaller files
|
|
15
|
+
- 76 tests preserved, E2E suite now 62 files / 468 tests
|
|
16
|
+
|
|
17
|
+
See [changelogs/0.74.10.md](./changelogs/0.74.10.md) for full details.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## [0.74.9] - 2026-03-14
|
|
22
|
+
|
|
23
|
+
**Wizard polish, R-08 refactor, E2E test methodology fixes**
|
|
24
|
+
|
|
25
|
+
- Unify 5 resolve functions into single `resolveRelationships` (R-08)
|
|
26
|
+
- ViewTitle on all wizard steps (D-95), logo only on first screen (D-72)
|
|
27
|
+
- Relocate fake E2E tests to proper unit test files and smoke/ directory
|
|
28
|
+
|
|
29
|
+
See [changelogs/0.74.9.md](./changelogs/0.74.9.md) for full details.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
10
33
|
## [0.74.8] - 2026-03-14
|
|
11
34
|
|
|
12
35
|
**Edit command scope fixes, unit test coverage expansion**
|
package/README.md
CHANGED
|
@@ -4,38 +4,18 @@
|
|
|
4
4
|
|
|
5
5
|
# Agents Inc
|
|
6
6
|
|
|
7
|
-
An agent composition framework
|
|
7
|
+
An agent composition framework for Claude Code.
|
|
8
|
+
|
|
9
|
+
Compose specialized [Claude Code](https://docs.anthropic.com/en/docs/claude-code) subagents from atomic skills. Choose your stack, customize your skills, and compile from the CLI.
|
|
8
10
|
|
|
9
11
|
[](https://www.npmjs.com/package/@agents-inc/cli)
|
|
10
12
|
[](https://www.typescriptlang.org/)
|
|
11
13
|
[](./LICENSE)
|
|
12
14
|
[](https://nodejs.org/)
|
|
13
15
|
|
|
14
|
-
<!-- TODO: Add animated GIF of the full init wizard flow (stack selection -> skill grid -> agent config -> done).
|
|
15
|
-
This is the hero image. It should show the complete happy path in ~15-20 seconds.
|
|
16
16
|
<p align="center">
|
|
17
|
-
<img src="./
|
|
17
|
+
<img src="./screenshots/wizard-flow.gif" alt="Agents Inc init wizard" width="700">
|
|
18
18
|
</p>
|
|
19
|
-
-->
|
|
20
|
-
|
|
21
|
-
## Overview
|
|
22
|
-
|
|
23
|
-
Agents Inc comprises two parts:
|
|
24
|
-
|
|
25
|
-
- **[Marketplace](https://github.com/agents-inc/skills):** 87+ atomic, best-practice skills spanning web, API, CLI, infra, and meta domains
|
|
26
|
-
- **CLI:** installs, ejects, creates, compiles, and updates skills and subagents
|
|
27
|
-
|
|
28
|
-
Skills are composed into 18+ domain-specific subagents through templates and modular agent partials, all validated against strict Zod schemas. Everything is ejectable so there's endless customisation with no lock-in.
|
|
29
|
-
|
|
30
|
-
## How It Works
|
|
31
|
-
|
|
32
|
-
Each subagent is composed from modular partials (role, workflow, output format) plus a set of atomic skills. The CLI manages the full lifecycle:
|
|
33
|
-
|
|
34
|
-
- **Install:** pull skills from the public marketplace, your own, or a local directory either as plugins or directly as source files
|
|
35
|
-
- **Compose:** map skills to subagents, configure preloaded vs dynamic loading
|
|
36
|
-
- **Compile:** resolve skill mappings, Liquid templates, and agent partials into `.claude/agents/`
|
|
37
|
-
- **Eject:** take progressive ownership of any layer (partials, templates, skills, subagents)
|
|
38
|
-
- **Update:** pull upstream skill changes without losing local customizations
|
|
39
19
|
|
|
40
20
|
## Getting Started
|
|
41
21
|
|
|
@@ -43,11 +23,8 @@ Each subagent is composed from modular partials (role, workflow, output format)
|
|
|
43
23
|
npx @agents-inc/cli init
|
|
44
24
|
```
|
|
45
25
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
The wizard has three steps:
|
|
49
|
-
|
|
50
|
-
**1. Pick a stack or start from scratch** (or create your own in your custom marketplace):
|
|
26
|
+

|
|
27
|
+
Choose a pre-built stack or start from scratch. Stacks pre-select skills and agents for common tech combinations.
|
|
51
28
|
|
|
52
29
|
| Stack | Technologies |
|
|
53
30
|
| ------------------ | ------------------------------------------------------------------ |
|
|
@@ -58,32 +35,40 @@ The wizard has three steps:
|
|
|
58
35
|
| `remix-stack` | Remix + React + Hono + Drizzle |
|
|
59
36
|
| `solidjs-stack` | SolidJS + Hono + Drizzle |
|
|
60
37
|
|
|
61
|
-
|
|
38
|
+

|
|
39
|
+
Add or remove skills from the interactive grid. Skills are organized by domain with framework-aware filtering.
|
|
62
40
|
|
|
63
|
-
|
|
41
|
+

|
|
42
|
+
Select where each skill comes from: the public marketplace, a custom marketplace, or a local directory.
|
|
64
43
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
## Skills
|
|
44
|
+

|
|
45
|
+
Choose which subagents to compile. Each agent is composed from the skills you selected.
|
|
68
46
|
|
|
69
|
-
|
|
47
|
+
After init, use `agentsinc edit` to change selections and `agentsinc compile` to rebuild.
|
|
70
48
|
|
|
71
|
-
|
|
49
|
+
## Guides
|
|
72
50
|
|
|
73
|
-
|
|
51
|
+
| Guide | Description |
|
|
52
|
+
| --------------------------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
53
|
+
| [Install modes](docs/guides/install-modes.md) | Plugin vs local install, global vs project scope |
|
|
54
|
+
| [Editing your config](docs/guides/editing-config.md) | Skill mappings, preloaded vs dynamic loading, and config structure |
|
|
55
|
+
| [Customizing subagents](docs/guides/customizing-subagents.md) | Eject and modify partials, templates, and skills |
|
|
56
|
+
| [Writing custom skills and subagents](docs/guides/writing-custom-skills.md) | Author skills and subagents from scratch or iterate on existing ones |
|
|
57
|
+
| [Importing third-party skills](docs/guides/importing-skills.md) | Install skills from external repositories |
|
|
58
|
+
| [Creating a marketplace](docs/guides/creating-a-marketplace.md) | Build a personal or org-level marketplace with curated skills |
|
|
74
59
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
**CLI:** `Commander` `oclif + Ink`
|
|
60
|
+
## Skills
|
|
78
61
|
|
|
79
|
-
**
|
|
62
|
+
**Web:** React, Vue, Angular, Next.js, Remix, Nuxt, SolidJS, Tailwind, Zustand, Vitest, Playwright, and more
|
|
63
|
+
**API:** Hono, Express, Drizzle, Prisma, PostHog, and more
|
|
64
|
+
**Mobile:** React Native, Expo
|
|
65
|
+
**CLI:** Commander, oclif + Ink
|
|
66
|
+
**Shared:** Turborepo, Code Reviewing, Auth Security, and more
|
|
80
67
|
|
|
81
|
-
|
|
68
|
+
Browse the full catalog on the [Plugin Marketplace](https://github.com/agents-inc/skills).
|
|
82
69
|
|
|
83
70
|
## Subagents
|
|
84
71
|
|
|
85
|
-
17 roles across 7 categories:
|
|
86
|
-
|
|
87
72
|
| Category | Subagents |
|
|
88
73
|
| ---------------- | ------------------------------------------------------------------ |
|
|
89
74
|
| Developers | `web-developer` `api-developer` `cli-developer` `web-architecture` |
|
|
@@ -95,90 +80,63 @@ The wizard has three steps:
|
|
|
95
80
|
| Documentation | `documentor` |
|
|
96
81
|
| Meta | `skill-summoner` `agent-summoner` |
|
|
97
82
|
|
|
83
|
+
Each subagent is composed from modular partials (role, workflow, output format) plus its assigned skills. Everything is ejectable.
|
|
84
|
+
|
|
98
85
|
## Commands
|
|
99
86
|
|
|
100
|
-
###
|
|
87
|
+
### Core
|
|
101
88
|
|
|
102
89
|
| Command | Description |
|
|
103
90
|
| --------- | --------------------------------------------------------------------------- |
|
|
104
91
|
| `init` | Interactive setup wizard: pick a stack, customize skills, compile subagents |
|
|
105
|
-
| `edit` | Modify skill selection
|
|
92
|
+
| `edit` | Modify skill selection via the interactive wizard |
|
|
106
93
|
| `compile` | Recompile subagents after changes |
|
|
107
94
|
| `update` | Pull latest skills from source |
|
|
95
|
+
| `search` | Search skills across all sources |
|
|
108
96
|
|
|
109
97
|
### Customization
|
|
110
98
|
|
|
111
|
-
| Command
|
|
112
|
-
|
|
|
113
|
-
| `eject <type>`
|
|
114
|
-
| `new skill`
|
|
115
|
-
| `new agent`
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
99
|
+
| Command | Description |
|
|
100
|
+
| ----------------- | ------------------------------------------------------------------------- |
|
|
101
|
+
| `eject <type>` | Export for customization (`agent-partials`, `templates`, `skills`, `all`) |
|
|
102
|
+
| `new skill` | Scaffold a custom skill |
|
|
103
|
+
| `new agent` | Scaffold a custom agent |
|
|
104
|
+
| `new marketplace` | Scaffold a new skill marketplace |
|
|
105
|
+
| `import skill` | Import a skill from an external GitHub repository |
|
|
106
|
+
|
|
107
|
+
### Build
|
|
108
|
+
|
|
109
|
+
| Command | Description |
|
|
110
|
+
| ------------------- | ---------------------------------------------- |
|
|
111
|
+
| `build marketplace` | Generate `marketplace.json` from source skills |
|
|
112
|
+
| `build plugins` | Build skill and agent plugins for distribution |
|
|
113
|
+
| `build stack` | Build a stack as a single plugin |
|
|
114
|
+
|
|
115
|
+
### Configuration
|
|
116
|
+
|
|
117
|
+
| Command | Description |
|
|
118
|
+
| ---------------------- | ---------------------------------- |
|
|
119
|
+
| `config` | Show config overview |
|
|
120
|
+
| `config get` | Get a config value |
|
|
121
|
+
| `config show` | Display all resolved config values |
|
|
122
|
+
| `config path` | Show config file paths |
|
|
123
|
+
| `config set-project` | Set a project config value |
|
|
124
|
+
| `config unset-project` | Remove a project config value |
|
|
118
125
|
|
|
119
126
|
### Diagnostics
|
|
120
127
|
|
|
121
|
-
| Command | Description
|
|
122
|
-
| ----------- |
|
|
123
|
-
| `doctor` | Diagnose setup issues
|
|
124
|
-
| `diff` | Show changes between local and source skills
|
|
125
|
-
| `
|
|
126
|
-
| `
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
128
|
+
| Command | Description |
|
|
129
|
+
| ----------- | -------------------------------------------- |
|
|
130
|
+
| `doctor` | Diagnose setup issues |
|
|
131
|
+
| `diff` | Show changes between local and source skills |
|
|
132
|
+
| `list` | List installed skills |
|
|
133
|
+
| `outdated` | Check for skill updates |
|
|
134
|
+
| `validate` | Validate config and skill structure |
|
|
135
|
+
| `info` | Show project configuration details |
|
|
136
|
+
| `uninstall` | Remove Agents Inc from your project |
|
|
129
137
|
|
|
130
138
|
Run `agentsinc --help` for full usage.
|
|
131
139
|
|
|
132
|
-
## Customization
|
|
133
|
-
|
|
134
|
-
Progressive layers from config to full extension:
|
|
135
|
-
|
|
136
|
-
| Layer | How |
|
|
137
|
-
| --------------- | ---------------------------------------------------------------------------------------------- |
|
|
138
|
-
| Edit config | `.claude-src/config.yaml`; skill-to-subagent mappings, preloaded/dynamic |
|
|
139
|
-
| Wizard | `agentsinc edit`; add/remove skills interactively |
|
|
140
|
-
| Eject partials | `agentsinc eject agent-partials`; customize agent partials such as intro, workflow, and output |
|
|
141
|
-
| Eject templates | `agentsinc eject templates`; modify Liquid templates |
|
|
142
|
-
| Eject skills | `agentsinc eject skills`; fork skills for local editing |
|
|
143
|
-
| Custom skills | `agentsinc new skill`; scaffold with proper metadata |
|
|
144
|
-
| Custom agents | `agentsinc new agent`; scaffold agent files |
|
|
145
|
-
| Custom sources | Point to a private repo or local directory as a skill source |
|
|
146
|
-
| Plugins | Package skills/subagents as Claude Code plugins for distribution |
|
|
147
|
-
|
|
148
|
-
Templates apply globally across all subagents; partials apply to specific roles. Put shared conventions in a template for consistency, and role-specific behaviour in partials.
|
|
149
|
-
|
|
150
|
-
Import skills from any GitHub repository:
|
|
151
|
-
|
|
152
|
-
```bash
|
|
153
|
-
agentsinc import skill github:your-org/skills --list
|
|
154
|
-
agentsinc import skill github:your-org/skills --skill react-best-practices
|
|
155
|
-
agentsinc import skill github:your-org/skills --all
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
## Tech Stack
|
|
159
|
-
|
|
160
|
-
| Component | Technology |
|
|
161
|
-
| ------------ | ------------------------------------- |
|
|
162
|
-
| Commands | oclif |
|
|
163
|
-
| Terminal UI | Ink + React |
|
|
164
|
-
| Wizard state | Zustand |
|
|
165
|
-
| Validation | Zod (30+ schemas at parse boundaries) |
|
|
166
|
-
| Compilation | LiquidJS |
|
|
167
|
-
| Testing | Vitest |
|
|
168
|
-
|
|
169
|
-
```
|
|
170
|
-
src/cli/
|
|
171
|
-
commands/ # oclif command definitions
|
|
172
|
-
components/ # Ink/React terminal UI components
|
|
173
|
-
lib/ # Core logic (compiler, loader, resolver, schemas)
|
|
174
|
-
stores/ # Zustand state management
|
|
175
|
-
utils/ # Shared utilities
|
|
176
|
-
src/agents/ # Subagent definitions (18 roles)
|
|
177
|
-
config/ # Skills matrix, stacks, default mappings
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
See [docs/reference/architecture.md](./docs/reference/architecture.md) for the full reference.
|
|
181
|
-
|
|
182
140
|
## Links
|
|
183
141
|
|
|
184
142
|
- [Plugin Marketplace](https://github.com/agents-inc/skills): browse and discover skills
|
|
@@ -984,7 +984,7 @@ function loadConfigTypesDataInBackground(sourceFlag, projectDir) {
|
|
|
984
984
|
if (!await directoryExists(claudeSrcDir)) {
|
|
985
985
|
throw new Error(`${CLAUDE_SRC_DIR}/ not found \u2014 run '${CLI_BIN_NAME} init' first`);
|
|
986
986
|
}
|
|
987
|
-
const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-
|
|
987
|
+
const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-WBDPZJEW.js");
|
|
988
988
|
const { loadAllAgents: loadAllAgents2 } = await import("./loader-NHUCFMFQ.js");
|
|
989
989
|
const sourceResult = await loadSkillsMatrixFromSource2({
|
|
990
990
|
sourceFlag,
|
|
@@ -1744,22 +1744,33 @@ function mergeMatrixWithSkills(categories, relationships, skills) {
|
|
|
1744
1744
|
};
|
|
1745
1745
|
return merged;
|
|
1746
1746
|
}
|
|
1747
|
-
function
|
|
1748
|
-
const
|
|
1749
|
-
|
|
1747
|
+
function resolveRelationships(skillId, relationships, resolve) {
|
|
1748
|
+
const conflictsWith = [];
|
|
1749
|
+
const discourages = [];
|
|
1750
|
+
const compatible = /* @__PURE__ */ new Set();
|
|
1751
|
+
const requires = [];
|
|
1752
|
+
const alternatives = [];
|
|
1753
|
+
for (const rule of relationships.conflicts) {
|
|
1750
1754
|
const resolved = rule.skills.map((slug) => resolve(slug, "conflicts")).filter((id) => id !== null);
|
|
1751
1755
|
if (!resolved.includes(skillId)) continue;
|
|
1752
1756
|
for (const other of resolved) {
|
|
1753
|
-
if (other !== skillId && !
|
|
1754
|
-
|
|
1757
|
+
if (other !== skillId && !conflictsWith.some((c) => c.skillId === other)) {
|
|
1758
|
+
conflictsWith.push({ skillId: other, reason: rule.reason });
|
|
1755
1759
|
}
|
|
1756
1760
|
}
|
|
1757
1761
|
}
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1762
|
+
if (relationships.discourages) {
|
|
1763
|
+
for (const rule of relationships.discourages) {
|
|
1764
|
+
const resolved = rule.skills.map((slug) => resolve(slug, "discourages")).filter((id) => id !== null);
|
|
1765
|
+
if (!resolved.includes(skillId)) continue;
|
|
1766
|
+
for (const other of resolved) {
|
|
1767
|
+
if (other !== skillId && !discourages.some((d) => d.skillId === other)) {
|
|
1768
|
+
discourages.push({ skillId: other, reason: rule.reason });
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
for (const group of relationships.compatibleWith ?? []) {
|
|
1763
1774
|
const resolved = group.skills.map((slug) => resolve(slug, "compatibleWith")).filter((id) => id !== null);
|
|
1764
1775
|
if (!resolved.includes(skillId)) continue;
|
|
1765
1776
|
for (const other of resolved) {
|
|
@@ -1768,11 +1779,7 @@ function resolveCompatibilityGroups(skillId, compatibilityGroups, resolve) {
|
|
|
1768
1779
|
}
|
|
1769
1780
|
}
|
|
1770
1781
|
}
|
|
1771
|
-
|
|
1772
|
-
}
|
|
1773
|
-
function resolveRequirements(skillId, requireRules, resolve) {
|
|
1774
|
-
const requires = [];
|
|
1775
|
-
for (const rule of requireRules) {
|
|
1782
|
+
for (const rule of relationships.requires) {
|
|
1776
1783
|
const ruleSkillId = resolve(rule.skill, "requires.skill");
|
|
1777
1784
|
if (ruleSkillId !== skillId) continue;
|
|
1778
1785
|
const resolvedNeeds = rule.needs.map((slug) => resolve(slug, "requires.needs")).filter((id) => id !== null);
|
|
@@ -1783,11 +1790,7 @@ function resolveRequirements(skillId, requireRules, resolve) {
|
|
|
1783
1790
|
reason: rule.reason
|
|
1784
1791
|
});
|
|
1785
1792
|
}
|
|
1786
|
-
|
|
1787
|
-
}
|
|
1788
|
-
function resolveAlternatives(skillId, alternativeGroups, resolve) {
|
|
1789
|
-
const alternatives = [];
|
|
1790
|
-
for (const group of alternativeGroups) {
|
|
1793
|
+
for (const group of relationships.alternatives) {
|
|
1791
1794
|
const resolved = group.skills.map((slug) => resolve(slug, "alternatives")).filter((id) => id !== null);
|
|
1792
1795
|
if (!resolved.includes(skillId)) continue;
|
|
1793
1796
|
for (const alt of resolved) {
|
|
@@ -1796,26 +1799,19 @@ function resolveAlternatives(skillId, alternativeGroups, resolve) {
|
|
|
1796
1799
|
}
|
|
1797
1800
|
}
|
|
1798
1801
|
}
|
|
1799
|
-
return
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
if (!resolved.includes(skillId)) continue;
|
|
1807
|
-
for (const other of resolved) {
|
|
1808
|
-
if (other !== skillId && !discourages.some((d) => d.skillId === other)) {
|
|
1809
|
-
discourages.push({ skillId: other, reason: rule.reason });
|
|
1810
|
-
}
|
|
1811
|
-
}
|
|
1812
|
-
}
|
|
1813
|
-
return discourages;
|
|
1802
|
+
return {
|
|
1803
|
+
conflictsWith,
|
|
1804
|
+
discourages,
|
|
1805
|
+
compatibleWith: [...compatible],
|
|
1806
|
+
requires,
|
|
1807
|
+
alternatives
|
|
1808
|
+
};
|
|
1814
1809
|
}
|
|
1815
1810
|
function buildResolvedSkill(skill, _categories, relationships, slugMap) {
|
|
1816
1811
|
const resolve = (slug2, context) => resolveToCanonicalId(slug2, slugMap.slugToId, context ? `${skill.id} ${context}` : void 0);
|
|
1817
1812
|
const slug = skill.slug;
|
|
1818
1813
|
const recommendation = relationships.recommends.find((r) => r.skill === skill.slug);
|
|
1814
|
+
const resolved = resolveRelationships(skill.id, relationships, resolve);
|
|
1819
1815
|
return {
|
|
1820
1816
|
id: skill.id,
|
|
1821
1817
|
slug,
|
|
@@ -1825,17 +1821,9 @@ function buildResolvedSkill(skill, _categories, relationships, slugMap) {
|
|
|
1825
1821
|
category: skill.category,
|
|
1826
1822
|
tags: skill.tags,
|
|
1827
1823
|
author: skill.author,
|
|
1828
|
-
|
|
1824
|
+
...resolved,
|
|
1829
1825
|
isRecommended: recommendation != null,
|
|
1830
1826
|
recommendedReason: recommendation?.reason,
|
|
1831
|
-
requires: resolveRequirements(skill.id, relationships.requires, resolve),
|
|
1832
|
-
alternatives: resolveAlternatives(skill.id, relationships.alternatives, resolve),
|
|
1833
|
-
discourages: resolveDiscourages(skill.id, relationships.discourages, resolve),
|
|
1834
|
-
compatibleWith: resolveCompatibilityGroups(
|
|
1835
|
-
skill.id,
|
|
1836
|
-
relationships.compatibleWith ?? [],
|
|
1837
|
-
resolve
|
|
1838
|
-
),
|
|
1839
1827
|
path: skill.path,
|
|
1840
1828
|
...skill.custom === true ? { custom: true } : {}
|
|
1841
1829
|
};
|
|
@@ -5508,4 +5496,4 @@ export {
|
|
|
5508
5496
|
validateAllPlugins,
|
|
5509
5497
|
printPluginValidationResult
|
|
5510
5498
|
};
|
|
5511
|
-
//# sourceMappingURL=chunk-
|
|
5499
|
+
//# sourceMappingURL=chunk-2EXAK22V.js.map
|