@laitszkin/apollo-toolkit 3.14.7 → 3.14.9

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
@@ -2,6 +2,18 @@
2
2
 
3
3
  All notable changes to this repository are documented in this file.
4
4
 
5
+ ## [v3.14.9] - 2026-05-16
6
+
7
+ ### Fixed
8
+
9
+ - Prevent double-date-nesting in `apltk create-specs` when `--output-dir` points to an existing date folder; the handler no longer appends today's date again, avoiding a `YYYY-MM-DD/YYYY-MM-DD/` nested structure.
10
+
11
+ ## [v3.14.8] - 2026-05-16
12
+
13
+ ### Fixed
14
+
15
+ - Fix hardcoded `generate-spec` path references in `lib/tools/create-specs.ts` and `lib/tool-runner.ts` that broke the `apltk create-specs` CLI tool after the skill rename.
16
+
5
17
  ## [v3.14.7] - 2026-05-16
6
18
 
7
19
  ### Changed
@@ -118,7 +118,7 @@ const TOOL_COMMANDS = [
118
118
  {
119
119
  name: 'create-specs',
120
120
  category: 'Planning & architecture',
121
- skill: 'generate-spec',
121
+ skill: 'spec',
122
122
  handler: create_specs_1.createSpecsHandler,
123
123
  description: 'Create spec planning documents from templates.',
124
124
  help: {
@@ -119,7 +119,7 @@ Options:
119
119
  }
120
120
  // Resolve template directory
121
121
  const sourceRoot = context.sourceRoot || node_path_1.default.resolve(__dirname, '..', '..', '..');
122
- const templateDirRaw = parsed['template-dir'] || node_path_1.default.join(sourceRoot, 'generate-spec', 'references', 'templates');
122
+ const templateDirRaw = parsed['template-dir'] || node_path_1.default.join(sourceRoot, 'spec', 'references', 'templates');
123
123
  const templateDir = node_path_1.default.resolve(templateDirRaw);
124
124
  if (!node_fs_1.default.existsSync(templateDir)) {
125
125
  stderr.write(`Error: Template directory not found: ${templateDir}\n`);
@@ -139,7 +139,11 @@ Options:
139
139
  }
140
140
  const outputDir = node_path_1.default.resolve(parsed['output-dir'] || 'docs/plans');
141
141
  const today = new Date().toISOString().slice(0, 10);
142
- const dateRoot = node_path_1.default.join(outputDir, today);
142
+ // Prevent double-nesting: if outputDir's last component is already today's date,
143
+ // use it directly as the date root rather than appending the date again.
144
+ // This handles the case where --output-dir already points to an existing
145
+ // date folder (e.g. docs/plans/2026-05-16).
146
+ const dateRoot = node_path_1.default.basename(outputDir) === today ? outputDir : node_path_1.default.join(outputDir, today);
143
147
  const batchRoot = batchName ? node_path_1.default.join(dateRoot, batchName) : null;
144
148
  const outputRoot = batchRoot ? node_path_1.default.join(batchRoot, changeName) : node_path_1.default.join(dateRoot, changeName);
145
149
  const outputPaths = TEMPLATE_FILENAMES.map((name) => node_path_1.default.join(outputRoot, name));
@@ -108,8 +108,8 @@ const TOOL_COMMANDS = [
108
108
  {
109
109
  name: 'create-specs',
110
110
  category: 'Planning & architecture',
111
- skill: 'generate-spec',
112
- script: 'generate-spec/scripts/create-specs',
111
+ skill: 'spec',
112
+ script: 'spec/scripts/create-specs',
113
113
  runner: 'python3',
114
114
  description: 'Create spec planning documents from templates.',
115
115
  help: {
@@ -108,7 +108,7 @@ const TOOL_COMMANDS: ToolDefinition[] = [
108
108
  {
109
109
  name: 'create-specs',
110
110
  category: 'Planning & architecture',
111
- skill: 'generate-spec',
111
+ skill: 'spec',
112
112
  handler: createSpecsHandler,
113
113
  description: 'Create spec planning documents from templates.',
114
114
  help: {
@@ -125,7 +125,7 @@ Options:
125
125
 
126
126
  // Resolve template directory
127
127
  const sourceRoot = context.sourceRoot || path.resolve(__dirname, '..', '..', '..');
128
- const templateDirRaw = (parsed['template-dir'] as string) || path.join(sourceRoot, 'generate-spec', 'references', 'templates');
128
+ const templateDirRaw = (parsed['template-dir'] as string) || path.join(sourceRoot, 'spec', 'references', 'templates');
129
129
  const templateDir = path.resolve(templateDirRaw);
130
130
 
131
131
  if (!fs.existsSync(templateDir)) {
@@ -148,7 +148,12 @@ Options:
148
148
 
149
149
  const outputDir = path.resolve(parsed['output-dir'] as string || 'docs/plans');
150
150
  const today = new Date().toISOString().slice(0, 10);
151
- const dateRoot = path.join(outputDir, today);
151
+
152
+ // Prevent double-nesting: if outputDir's last component is already today's date,
153
+ // use it directly as the date root rather than appending the date again.
154
+ // This handles the case where --output-dir already points to an existing
155
+ // date folder (e.g. docs/plans/2026-05-16).
156
+ const dateRoot = path.basename(outputDir) === today ? outputDir : path.join(outputDir, today);
152
157
  const batchRoot = batchName ? path.join(dateRoot, batchName) : null;
153
158
  const outputRoot = batchRoot ? path.join(batchRoot, changeName) : path.join(dateRoot, changeName);
154
159
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@laitszkin/apollo-toolkit",
3
- "version": "3.14.7",
3
+ "version": "3.14.9",
4
4
  "description": "Apollo Toolkit npm installer for managed skill copying across Codex, OpenClaw, and Trae.",
5
5
  "license": "MIT",
6
6
  "author": "LaiTszKin",