@laitszkin/apollo-toolkit 2.1.1 → 2.2.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/CHANGELOG.md +9 -0
- package/README.md +1 -1
- package/lib/cli.js +84 -18
- package/package.json +1 -1
- package/version-release/README.md +5 -3
- package/version-release/SKILL.md +11 -5
- package/version-release/agents/openai.yaml +2 -2
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.2.0] - 2026-03-18
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Add a branded Apollo Toolkit installer welcome screen with staged terminal reveal content before target selection.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Update the interactive installer banner and selection screen to present clearer Apollo Toolkit branding and setup guidance.
|
|
14
|
+
- Require `version-release` to create and publish a matching GitHub release after pushing the release tag, and document release-triggered publish workflow verification.
|
|
15
|
+
|
|
7
16
|
## [v2.1.1] - 2026-03-18
|
|
8
17
|
|
|
9
18
|
### Added
|
package/README.md
CHANGED
|
@@ -48,7 +48,7 @@ npx @laitszkin/apollo-toolkit
|
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
The interactive installer:
|
|
51
|
-
- shows
|
|
51
|
+
- shows a branded `Apollo Toolkit` terminal welcome screen with a short staged reveal
|
|
52
52
|
- installs a managed copy into `~/.apollo-toolkit`
|
|
53
53
|
- lets you multi-select `codex`, `openclaw`, `trae`, or `all`
|
|
54
54
|
- creates symlinks from `~/.apollo-toolkit/<skill>` into each selected target
|
package/lib/cli.js
CHANGED
|
@@ -17,10 +17,23 @@ const TARGET_OPTIONS = [
|
|
|
17
17
|
{ id: 'trae', label: 'Trae', description: '~/.trae/skills' },
|
|
18
18
|
];
|
|
19
19
|
|
|
20
|
+
const WORDMARK_LINES = [
|
|
21
|
+
' _ _ _ _____ _ _ _ _ ',
|
|
22
|
+
' / \\\\ _ __ ___ | | | ___ |_ _|__ ___ | | | _(_) |_ ',
|
|
23
|
+
" / _ \\\\ | '_ \\\\ / _ \\\\| | |/ _ \\\\ | |/ _ \\\\ / _ \\\\| | |/ / | __|",
|
|
24
|
+
' / ___ \\\\| |_) | (_) | | | (_) | | | (_) | (_) | | <| | |_ ',
|
|
25
|
+
'/_/ \\\\_\\\\ .__/ \\\\___/|_|_|\\\\___/ |_|\\\\___/ \\\\___/|_|_|\\\\_\\\\_|\\\\__|',
|
|
26
|
+
' |_| ',
|
|
27
|
+
];
|
|
28
|
+
|
|
20
29
|
function supportsColor(stream, env = process.env) {
|
|
21
30
|
return Boolean(stream && stream.isTTY && !env.NO_COLOR);
|
|
22
31
|
}
|
|
23
32
|
|
|
33
|
+
function supportsAnimation(stream, env = process.env) {
|
|
34
|
+
return Boolean(stream && stream.isTTY && !env.CI && env.APOLLO_TOOLKIT_NO_ANIMATION !== '1');
|
|
35
|
+
}
|
|
36
|
+
|
|
24
37
|
function color(text, code, enabled) {
|
|
25
38
|
if (!enabled) {
|
|
26
39
|
return text;
|
|
@@ -29,23 +42,73 @@ function color(text, code, enabled) {
|
|
|
29
42
|
return `\u001b[${code}m${text}\u001b[0m`;
|
|
30
43
|
}
|
|
31
44
|
|
|
45
|
+
function sleep(ms) {
|
|
46
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function buildWordmark({ colorEnabled }) {
|
|
50
|
+
return WORDMARK_LINES.map((line) => color(line, '1;36', colorEnabled)).join('\n');
|
|
51
|
+
}
|
|
52
|
+
|
|
32
53
|
function buildBanner({ version, colorEnabled }) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
'
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
return [
|
|
55
|
+
buildWordmark({ colorEnabled }),
|
|
56
|
+
color('Apollo Toolkit', '1', colorEnabled),
|
|
57
|
+
color('Install curated skills for Codex, OpenClaw, and Trae', '2', colorEnabled),
|
|
58
|
+
color(`Version ${version}`, '1;33', colorEnabled),
|
|
59
|
+
].join('\n');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function buildWelcomeScreen({ version, colorEnabled, stage = 4 }) {
|
|
63
|
+
const lines = [buildBanner({ version, colorEnabled })];
|
|
64
|
+
|
|
65
|
+
if (stage >= 1) {
|
|
66
|
+
lines.push(
|
|
67
|
+
'',
|
|
68
|
+
'This setup will configure:',
|
|
69
|
+
` ${color('*', '1;33', colorEnabled)} A managed Apollo Toolkit home in ${color('~/.apollo-toolkit', '1', colorEnabled)}`,
|
|
70
|
+
` ${color('*', '1;33', colorEnabled)} Symlinked skill folders for your selected targets`,
|
|
71
|
+
` ${color('*', '1;33', colorEnabled)} A clean install flow with target-aware linking`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (stage >= 2) {
|
|
76
|
+
lines.push(
|
|
77
|
+
'',
|
|
78
|
+
'Quick start after setup:',
|
|
79
|
+
` ${color('npx @laitszkin/apollo-toolkit codex', '1;33', colorEnabled)}`,
|
|
80
|
+
` ${color('apollo-toolkit all', '1;33', colorEnabled)}`,
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (stage >= 3) {
|
|
85
|
+
lines.push(
|
|
86
|
+
'',
|
|
87
|
+
color('Supported targets:', '2', colorEnabled),
|
|
88
|
+
` ${color('Codex', '1', colorEnabled)} ~/.codex/skills`,
|
|
89
|
+
` ${color('OpenClaw', '1', colorEnabled)} ~/.openclaw/workspace*/skills`,
|
|
90
|
+
` ${color('Trae', '1', colorEnabled)} ~/.trae/skills`,
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (stage >= 4) {
|
|
95
|
+
lines.push('', color('Launching target selector...', '1;36', colorEnabled));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return lines.join('\n');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function animateWelcomeScreen({ output, version, env }) {
|
|
102
|
+
if (!supportsAnimation(output, env)) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const colorEnabled = supportsColor(output, env);
|
|
107
|
+
for (const stage of [0, 1, 2, 3, 4]) {
|
|
108
|
+
clearScreen(output);
|
|
109
|
+
output.write(`${buildWelcomeScreen({ version, colorEnabled, stage })}\n`);
|
|
110
|
+
await sleep(stage === 0 ? 120 : 160);
|
|
111
|
+
}
|
|
49
112
|
}
|
|
50
113
|
|
|
51
114
|
function buildHelpText({ version, colorEnabled }) {
|
|
@@ -116,8 +179,8 @@ function renderSelectionScreen({ output, version, cursor, selected, message, env
|
|
|
116
179
|
clearScreen(output);
|
|
117
180
|
output.write(`${buildBanner({ version, colorEnabled })}\n\n`);
|
|
118
181
|
output.write('Choose where Apollo Toolkit should create symlinked skills.\n');
|
|
119
|
-
output.write('Use Up/Down (or j/k) to move, Space to toggle, Enter to continue.\n
|
|
120
|
-
output.write(
|
|
182
|
+
output.write(`${color('Use Up/Down', '1;33', colorEnabled)} (or ${color('j/k', '1;33', colorEnabled)}) to move, ${color('Space', '1;33', colorEnabled)} to toggle, ${color('Enter', '1;33', colorEnabled)} to continue.\n`);
|
|
183
|
+
output.write(`Press ${color('a', '1;33', colorEnabled)} to toggle all, ${color('q', '1;33', colorEnabled)} to cancel.\n\n`);
|
|
121
184
|
|
|
122
185
|
TARGET_OPTIONS.forEach((option, index) => {
|
|
123
186
|
const isFocused = index === cursor;
|
|
@@ -141,6 +204,8 @@ async function promptForModes({ stdin, stdout, version, env }) {
|
|
|
141
204
|
throw new Error('Interactive install requires a TTY. Re-run with targets like `codex`, `openclaw`, `trae`, or `all`.');
|
|
142
205
|
}
|
|
143
206
|
|
|
207
|
+
await animateWelcomeScreen({ output: stdout, version, env });
|
|
208
|
+
|
|
144
209
|
return new Promise((resolve, reject) => {
|
|
145
210
|
let cursor = 0;
|
|
146
211
|
let message = '';
|
|
@@ -331,6 +396,7 @@ async function run(argv, context = {}) {
|
|
|
331
396
|
|
|
332
397
|
module.exports = {
|
|
333
398
|
buildBanner,
|
|
399
|
+
buildWelcomeScreen,
|
|
334
400
|
buildHelpText,
|
|
335
401
|
parseArguments,
|
|
336
402
|
promptForModes,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# version-release
|
|
2
2
|
|
|
3
|
-
A Codex skill for explicit release workflows: code/documentation alignment, version bump, changelog update, tagging, and push.
|
|
3
|
+
A Codex skill for explicit release workflows: code/documentation alignment, version bump, changelog update, tagging, GitHub release publication, and push.
|
|
4
4
|
|
|
5
5
|
## What this skill does
|
|
6
6
|
|
|
@@ -8,12 +8,13 @@ A Codex skill for explicit release workflows: code/documentation alignment, vers
|
|
|
8
8
|
|
|
9
9
|
1. Inspect the release scope from git history.
|
|
10
10
|
2. Run quality gates for code-affecting changes through isolated parallel review subagents when available.
|
|
11
|
-
3. Run `specs-to-project-docs` when the repository contains
|
|
11
|
+
3. Run `specs-to-project-docs` when the repository contains active planning artifacts or existing project docs need normalization.
|
|
12
12
|
4. Align project code and categorized project docs.
|
|
13
13
|
5. Resolve version and tag details.
|
|
14
14
|
6. Update version files and changelog.
|
|
15
15
|
7. Commit release metadata.
|
|
16
16
|
8. Create and push the release tag.
|
|
17
|
+
9. Publish the matching GitHub release and verify any release-triggered automation.
|
|
17
18
|
|
|
18
19
|
## Scope
|
|
19
20
|
|
|
@@ -22,7 +23,8 @@ Use this skill only when the user explicitly asks for:
|
|
|
22
23
|
- release preparation
|
|
23
24
|
- version bumping
|
|
24
25
|
- tag creation/publishing
|
|
26
|
+
- GitHub release publication
|
|
25
27
|
|
|
26
|
-
If the repository contains
|
|
28
|
+
If the repository contains active planning artifacts, or if existing project docs still use a mixed or non-standard layout, normalize them into the categorized `specs-to-project-docs` structure first and let that skill remove or archive superseded spec files when appropriate.
|
|
27
29
|
|
|
28
30
|
If the user only wants commit + push, use `commit-and-push`.
|
package/version-release/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: version-release
|
|
3
|
-
description: "Guide the agent to prepare and publish a versioned release (version bump, changelog, tag, and push). Use only when users explicitly request version/tag/release work. If the repository contains active planning artifacts or existing project docs do not match the `specs-to-project-docs` structure, run `specs-to-project-docs` before finalizing the release so project docs are standardized into categorized files and the old specs are removed or archived when appropriate."
|
|
3
|
+
description: "Guide the agent to prepare and publish a versioned release (version bump, changelog, tag, GitHub release, and push). Use only when users explicitly request version/tag/release work. If the repository contains active planning artifacts or existing project docs do not match the `specs-to-project-docs` structure, run `specs-to-project-docs` before finalizing the release so project docs are standardized into categorized files and the old specs are removed or archived when appropriate."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Version Release
|
|
@@ -15,9 +15,9 @@ description: "Guide the agent to prepare and publish a versioned release (versio
|
|
|
15
15
|
## Standards
|
|
16
16
|
|
|
17
17
|
- Evidence: Inspect the active change set and the release range before touching version files, tags, or changelog entries.
|
|
18
|
-
- Execution: Use this workflow only for explicit release intent, run the required quality gates through independent parallel review subagents when applicable, standardize project docs into categorized files whenever specs or doc-structure mismatches are present, then update versions, docs, commit, tag, and
|
|
18
|
+
- Execution: Use this workflow only for explicit release intent, run the required quality gates through independent parallel review subagents when applicable, standardize project docs into categorized files whenever specs or doc-structure mismatches are present, then update versions, docs, commit, tag, push, and publish the GitHub release.
|
|
19
19
|
- Quality: Never guess versions, align user-facing docs with actual code, convert completed planning docs into standardized categorized project docs before the release is published, and treat the `specs-to-project-docs` structure as the release-ready documentation format.
|
|
20
|
-
- Output: Produce a versioned release commit and tag
|
|
20
|
+
- Output: Produce a versioned release commit and tag, publish a matching GitHub release, and keep changelog plus relevant repository documentation synchronized.
|
|
21
21
|
|
|
22
22
|
## Overview
|
|
23
23
|
|
|
@@ -27,7 +27,7 @@ Run a standardized release workflow for versioned delivery:
|
|
|
27
27
|
- align project code and standardized categorized project documentation
|
|
28
28
|
- bump version files
|
|
29
29
|
- update changelog and relevant docs
|
|
30
|
-
- commit, tag, and
|
|
30
|
+
- commit, tag, push, and publish the GitHub release
|
|
31
31
|
|
|
32
32
|
## References
|
|
33
33
|
|
|
@@ -89,7 +89,13 @@ Load only when needed:
|
|
|
89
89
|
- Create a release-oriented commit message (for example `chore(release): bump version and update changelog`) when applicable.
|
|
90
90
|
- Create the version tag locally after commit.
|
|
91
91
|
11. Push
|
|
92
|
-
- Push commit(s) and the release tag to the current branch.
|
|
92
|
+
- Push commit(s) and the release tag to the current branch before publishing the GitHub release when the hosting platform requires the tag to exist remotely.
|
|
93
|
+
12. Publish the GitHub release
|
|
94
|
+
- Create a non-draft GitHub release that matches the pushed version tag.
|
|
95
|
+
- Use the release notes from the new `CHANGELOG.md` entry unless the repository has a stronger established release-note source.
|
|
96
|
+
- If the repository has publish automation triggered by `release.published`, ensure the GitHub release is actually published rather than left as a draft.
|
|
97
|
+
- Prefer `gh release create <tag>` or the repository's existing release tool when available.
|
|
98
|
+
- Confirm the GitHub release URL and any triggered publish workflow status in the final report.
|
|
93
99
|
|
|
94
100
|
## Notes
|
|
95
101
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "Version Release"
|
|
3
|
-
short_description: "Prepare a versioned release with bump, changelog, tag, and push"
|
|
4
|
-
default_prompt: "Use $version-release only for explicit release/version/tag requests: inspect the release scope, and for code-affecting changes run $review-change-set, $discover-edge-cases, and $harden-app-security as isolated parallel review subagents when available, run $specs-to-project-docs when the repository contains
|
|
3
|
+
short_description: "Prepare a versioned release with bump, changelog, tag, GitHub release, and push"
|
|
4
|
+
default_prompt: "Use $version-release only for explicit release/version/tag requests: inspect the release scope, and for code-affecting changes run $review-change-set, $discover-edge-cases, and $harden-app-security as isolated parallel review subagents when available, run $specs-to-project-docs when the repository contains active planning artifacts or existing project docs need normalization so project docs are standardized into categorized files and old specs are removed or archived when appropriate, align user-facing docs with real behavior, update version files and CHANGELOG, create the release commit and tag, push commits and tags, then publish the matching GitHub release and confirm any triggered publish workflow."
|