@laitszkin/apollo-toolkit 2.13.0 → 2.13.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/CHANGELOG.md +9 -0
- package/README.md +4 -2
- package/lib/cli.js +8 -4
- package/lib/installer.js +17 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,15 @@ All notable changes to this repository are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [v2.13.1] - 2026-04-05
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- Fix the npm / `apltk` installer so selecting `codex` now copies agent-specific skills from the repository `codex/` subdirectory into the managed toolkit home and the final Codex skills target.
|
|
11
|
+
- Fix the npm / `apltk` interactive installer and help output so `claude-code` appears as a supported target and can be installed through the same CLI flow as the other modes.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- Refresh installer banner and README wording so Claude Code support is described consistently in the npm-based installation flow.
|
|
15
|
+
|
|
7
16
|
## [v2.13.0] - 2026-04-05
|
|
8
17
|
|
|
9
18
|
### Added
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Apollo Toolkit Skills
|
|
2
2
|
|
|
3
|
-
A curated skill catalog for Codex, OpenClaw, and
|
|
3
|
+
A curated skill catalog for Codex, OpenClaw, Trae, and Claude Code with a managed installer that keeps the toolkit in `~/.apollo-toolkit` and copies each skill into the targets you choose.
|
|
4
4
|
|
|
5
5
|
## Included skills
|
|
6
6
|
|
|
@@ -62,7 +62,7 @@ npx @laitszkin/apollo-toolkit
|
|
|
62
62
|
The interactive installer:
|
|
63
63
|
- shows a branded `Apollo Toolkit` terminal welcome screen with a short staged reveal
|
|
64
64
|
- installs a managed copy into `~/.apollo-toolkit`
|
|
65
|
-
- lets you multi-select `codex`, `openclaw`, `trae`, or `all`
|
|
65
|
+
- lets you multi-select `codex`, `openclaw`, `trae`, `claude-code`, or `all`
|
|
66
66
|
- copies `~/.apollo-toolkit/<skill>` into each selected target
|
|
67
67
|
- removes stale previously installed skill directories that existed in the previous installed version but no longer exist in the current package skill list
|
|
68
68
|
- replaces legacy symlink-based installs created by older Apollo Toolkit installers with real copied directories
|
|
@@ -81,6 +81,7 @@ Global install 後,`apltk` 與 `apollo-toolkit` 都會啟動同一個 Apollo T
|
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
83
|
npx @laitszkin/apollo-toolkit codex
|
|
84
|
+
npx @laitszkin/apollo-toolkit claude-code
|
|
84
85
|
npx @laitszkin/apollo-toolkit codex openclaw
|
|
85
86
|
npx @laitszkin/apollo-toolkit all
|
|
86
87
|
```
|
|
@@ -92,6 +93,7 @@ APOLLO_TOOLKIT_HOME=~/custom-toolkit npx @laitszkin/apollo-toolkit codex
|
|
|
92
93
|
CODEX_SKILLS_DIR=~/custom-codex-skills npx @laitszkin/apollo-toolkit codex
|
|
93
94
|
OPENCLAW_HOME=~/.openclaw npx @laitszkin/apollo-toolkit openclaw
|
|
94
95
|
TRAE_SKILLS_DIR=~/.trae/skills npx @laitszkin/apollo-toolkit trae
|
|
96
|
+
CLAUDE_CODE_SKILLS_DIR=~/.claude/skills npx @laitszkin/apollo-toolkit claude-code
|
|
95
97
|
```
|
|
96
98
|
|
|
97
99
|
## Local installer scripts
|
package/lib/cli.js
CHANGED
|
@@ -17,6 +17,7 @@ const TARGET_OPTIONS = [
|
|
|
17
17
|
{ id: 'codex', label: 'Codex', description: '~/.codex/skills' },
|
|
18
18
|
{ id: 'openclaw', label: 'OpenClaw', description: '~/.openclaw/workspace*/skills' },
|
|
19
19
|
{ id: 'trae', label: 'Trae', description: '~/.trae/skills' },
|
|
20
|
+
{ id: 'claude-code', label: 'Claude Code', description: '~/.claude/skills' },
|
|
20
21
|
];
|
|
21
22
|
|
|
22
23
|
const WORDMARK_LINES = [
|
|
@@ -56,7 +57,7 @@ function buildBanner({ version, colorEnabled }) {
|
|
|
56
57
|
return [
|
|
57
58
|
buildWordmark({ colorEnabled }),
|
|
58
59
|
color('Apollo Toolkit', '1', colorEnabled),
|
|
59
|
-
color('Install curated skills for Codex, OpenClaw, and
|
|
60
|
+
color('Install curated skills for Codex, OpenClaw, Trae, and Claude Code', '2', colorEnabled),
|
|
60
61
|
color(`Version ${version}`, '1;33', colorEnabled),
|
|
61
62
|
].join('\n');
|
|
62
63
|
}
|
|
@@ -90,6 +91,7 @@ function buildWelcomeScreen({ version, colorEnabled, stage = 4 }) {
|
|
|
90
91
|
` ${color('Codex', '1', colorEnabled)} ~/.codex/skills`,
|
|
91
92
|
` ${color('OpenClaw', '1', colorEnabled)} ~/.openclaw/workspace*/skills`,
|
|
92
93
|
` ${color('Trae', '1', colorEnabled)} ~/.trae/skills`,
|
|
94
|
+
` ${color('Claude Code', '1', colorEnabled)} ~/.claude/skills`,
|
|
93
95
|
);
|
|
94
96
|
}
|
|
95
97
|
|
|
@@ -118,8 +120,8 @@ function buildHelpText({ version, colorEnabled }) {
|
|
|
118
120
|
buildBanner({ version, colorEnabled }),
|
|
119
121
|
'',
|
|
120
122
|
'Usage:',
|
|
121
|
-
' apltk [install] [codex|openclaw|trae|all]...',
|
|
122
|
-
' apollo-toolkit [install] [codex|openclaw|trae|all]...',
|
|
123
|
+
' apltk [install] [codex|openclaw|trae|claude-code|all]...',
|
|
124
|
+
' apollo-toolkit [install] [codex|openclaw|trae|claude-code|all]...',
|
|
123
125
|
' apltk --help',
|
|
124
126
|
' apollo-toolkit --help',
|
|
125
127
|
'',
|
|
@@ -129,6 +131,7 @@ function buildHelpText({ version, colorEnabled }) {
|
|
|
129
131
|
' npx @laitszkin/apollo-toolkit',
|
|
130
132
|
' npx @laitszkin/apollo-toolkit codex openclaw',
|
|
131
133
|
' npm i -g @laitszkin/apollo-toolkit',
|
|
134
|
+
' apltk claude-code',
|
|
132
135
|
' apltk all',
|
|
133
136
|
' apollo-toolkit all',
|
|
134
137
|
'',
|
|
@@ -212,7 +215,7 @@ function renderSelectionScreen({ output, version, cursor, selected, message, env
|
|
|
212
215
|
|
|
213
216
|
async function promptForModes({ stdin, stdout, version, env }) {
|
|
214
217
|
if (!stdin.isTTY || !stdout.isTTY) {
|
|
215
|
-
throw new Error('Interactive install requires a TTY. Re-run with targets like `codex`, `openclaw`, `trae`, or `all`.');
|
|
218
|
+
throw new Error('Interactive install requires a TTY. Re-run with targets like `codex`, `openclaw`, `trae`, `claude-code`, or `all`.');
|
|
216
219
|
}
|
|
217
220
|
|
|
218
221
|
await animateWelcomeScreen({ output: stdout, version, env });
|
|
@@ -401,6 +404,7 @@ async function run(argv, context = {}) {
|
|
|
401
404
|
sourceRoot,
|
|
402
405
|
toolkitHome,
|
|
403
406
|
version: packageJson.version,
|
|
407
|
+
modes,
|
|
404
408
|
});
|
|
405
409
|
|
|
406
410
|
const installResult = await installLinks({
|
package/lib/installer.js
CHANGED
|
@@ -107,14 +107,28 @@ function shouldCopyEntry(sourceRoot, entry) {
|
|
|
107
107
|
return fs.existsSync(path.join(sourceRoot, entry.name, 'SKILL.md'));
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
function shouldCopyCodexContainer({ sourceRoot, entry, modes = [] }) {
|
|
111
|
+
if (entry.name !== 'codex' || !entry.isDirectory() || !modes.includes('codex')) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const codexDir = path.join(sourceRoot, entry.name);
|
|
116
|
+
if (!fs.existsSync(codexDir)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const childNames = fs.readdirSync(codexDir);
|
|
121
|
+
return childNames.some((childName) => fs.existsSync(path.join(codexDir, childName, 'SKILL.md')));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async function stageToolkitContents({ sourceRoot, destinationRoot, version, modes = [] }) {
|
|
111
125
|
const entries = await fsp.readdir(sourceRoot, { withFileTypes: true });
|
|
112
126
|
const copiedEntries = [];
|
|
113
127
|
|
|
114
128
|
await fsp.mkdir(destinationRoot, { recursive: true });
|
|
115
129
|
|
|
116
130
|
for (const entry of entries) {
|
|
117
|
-
if (!shouldCopyEntry(sourceRoot, entry)) {
|
|
131
|
+
if (!shouldCopyEntry(sourceRoot, entry) && !shouldCopyCodexContainer({ sourceRoot, entry, modes })) {
|
|
118
132
|
continue;
|
|
119
133
|
}
|
|
120
134
|
|
|
@@ -144,7 +158,7 @@ async function syncToolkitHome({ sourceRoot, toolkitHome, version, modes = [] })
|
|
|
144
158
|
const previousSkillNames = await listSkillNames(toolkitHome, modes).catch(() => []);
|
|
145
159
|
|
|
146
160
|
await fsp.rm(tempDir, { recursive: true, force: true });
|
|
147
|
-
await stageToolkitContents({ sourceRoot, destinationRoot: tempDir, version });
|
|
161
|
+
await stageToolkitContents({ sourceRoot, destinationRoot: tempDir, version, modes });
|
|
148
162
|
|
|
149
163
|
const stat = await fsp.lstat(toolkitHome).catch(() => null);
|
|
150
164
|
if (stat && !stat.isDirectory()) {
|
package/package.json
CHANGED