@laitszkin/apollo-toolkit 2.1.0 → 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 CHANGED
@@ -4,6 +4,24 @@ 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
+
16
+ ## [v2.1.1] - 2026-03-18
17
+
18
+ ### Added
19
+ - Allow `fix-github-issues` to hand off validated issue fixes either to `open-source-pr-workflow` for PR submission or to `commit-and-push` for explicit direct-push delivery.
20
+
21
+ ### Changed
22
+ - Align `fix-github-issues` metadata and agent prompt wording with the new direct-push delivery path.
23
+ - Strengthen `weekly-financial-event-report` PDF handoff requirements for long-text table layout, reusable renderers, and visual QA checks.
24
+
7
25
  ## [v2.1.0] - 2026-03-18
8
26
 
9
27
  ### Added
package/README.md CHANGED
@@ -48,7 +48,7 @@ npx @laitszkin/apollo-toolkit
48
48
  ```
49
49
 
50
50
  The interactive installer:
51
- - shows an `Apollo Toolkit` terminal screen
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
- const lines = [
34
- '+------------------------------------------+',
35
- '| Apollo Toolkit |',
36
- '| npm installer and skill linker |',
37
- '+------------------------------------------+',
38
- `Version ${version}`,
39
- ];
40
-
41
- return lines
42
- .map((line, index) => {
43
- if (index <= 2) {
44
- return color(line, '1;36', colorEnabled);
45
- }
46
- return color(line, '2', colorEnabled);
47
- })
48
- .join('\n');
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('Press a to toggle all, q to cancel.\n\n');
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
  {
2
2
  "name": "@laitszkin/apollo-toolkit",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Apollo Toolkit npm installer for managed skill linking across Codex, OpenClaw, and Trae.",
5
5
  "license": "MIT",
6
6
  "author": "LaiTszKin",
@@ -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 spec files or existing project docs need normalization.
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 spec files, 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.
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`.
@@ -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 push.
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 with synchronized changelog and relevant repository documentation.
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 push
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 spec files 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, and push both commits and tags."
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."