@every-env/compound-plugin 2.36.1 → 2.36.3

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
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  Release numbering now follows the repository `v*` tag line. Starting at `v2.34.0`, the root CLI package and this changelog stay on that shared version stream. Older entries below retain the previous `0.x` CLI numbering.
9
9
 
10
+ ## [2.36.3](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.2...v2.36.3) (2026-03-13)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **targets:** nest colon-separated command names into directories ([a84682c](https://github.com/EveryInc/compound-engineering-plugin/commit/a84682cd35e94b0408f6c6a990af0732c2acf03f)), closes [#226](https://github.com/EveryInc/compound-engineering-plugin/issues/226)
16
+
17
+ ## [2.36.2](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.1...v2.36.2) (2026-03-13)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **plan:** remove deprecated /technical_review references ([0ab9184](https://github.com/EveryInc/compound-engineering-plugin/commit/0ab91847f278efba45477462d8e93db5f068e058)), closes [#244](https://github.com/EveryInc/compound-engineering-plugin/issues/244)
23
+
10
24
  ## [2.36.1](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.0...v2.36.1) (2026-03-13)
11
25
 
12
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@every-env/compound-plugin",
3
- "version": "2.36.1",
3
+ "version": "2.36.3",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "bin": {
@@ -579,17 +579,15 @@ After writing the plan file, use the **AskUserQuestion tool** to present these o
579
579
  **Options:**
580
580
  1. **Open plan in editor** - Open the plan file for review
581
581
  2. **Run `/deepen-plan`** - Enhance each section with parallel research agents (best practices, performance, UI)
582
- 3. **Run `/technical_review`** - Technical feedback from code-focused reviewers (DHH, Kieran, Simplicity)
583
- 4. **Review and refine** - Improve the document through structured self-review
584
- 5. **Share to Proof** - Upload to Proof for collaborative review and sharing
585
- 6. **Start `/ce:work`** - Begin implementing this plan locally
586
- 7. **Start `/ce:work` on remote** - Begin implementing in Claude Code on the web (use `&` to run in background)
587
- 8. **Create Issue** - Create issue in project tracker (GitHub/Linear)
582
+ 3. **Review and refine** - Improve the document through structured self-review
583
+ 4. **Share to Proof** - Upload to Proof for collaborative review and sharing
584
+ 5. **Start `/ce:work`** - Begin implementing this plan locally
585
+ 6. **Start `/ce:work` on remote** - Begin implementing in Claude Code on the web (use `&` to run in background)
586
+ 7. **Create Issue** - Create issue in project tracker (GitHub/Linear)
588
587
 
589
588
  Based on selection:
590
589
  - **Open plan in editor** → Run `open docs/plans/<plan_filename>.md` to open the file in the user's default editor
591
590
  - **`/deepen-plan`** → Call the /deepen-plan command with the plan file path to enhance with research
592
- - **`/technical_review`** → Call the /technical_review command with the plan file path
593
591
  - **Review and refine** → Load `document-review` skill.
594
592
  - **Share to Proof** → Upload the plan to Proof:
595
593
  ```bash
@@ -608,7 +606,7 @@ Based on selection:
608
606
 
609
607
  **Note:** If running `/ce:plan` with ultrathink enabled, automatically run `/deepen-plan` after plan creation for maximum depth and grounding.
610
608
 
611
- Loop back to options after Simplify or Other changes until user selects `/ce:work` or `/technical_review`.
609
+ Loop back to options after Simplify or Other changes until user selects `/ce:work` or another action.
612
610
 
613
611
  ## Issue Creation
614
612
 
@@ -638,6 +636,6 @@ When user selects "Create Issue", detect their project tracker from CLAUDE.md:
638
636
 
639
637
  5. **After creation:**
640
638
  - Display the issue URL
641
- - Ask if they want to proceed to `/ce:work` or `/technical_review`
639
+ - Ask if they want to proceed to `/ce:work`
642
640
 
643
641
  NEVER CODE! Just research and write the plan.
@@ -480,14 +480,12 @@ After writing the enhanced plan, use the **AskUserQuestion tool** to present the
480
480
 
481
481
  **Options:**
482
482
  1. **View diff** - Show what was added/changed
483
- 2. **Run `/technical_review`** - Get feedback from reviewers on enhanced plan
484
- 3. **Start `/ce:work`** - Begin implementing this enhanced plan
485
- 4. **Deepen further** - Run another round of research on specific sections
486
- 5. **Revert** - Restore original plan (if backup exists)
483
+ 2. **Start `/ce:work`** - Begin implementing this enhanced plan
484
+ 3. **Deepen further** - Run another round of research on specific sections
485
+ 4. **Revert** - Restore original plan (if backup exists)
487
486
 
488
487
  Based on selection:
489
488
  - **View diff** → Run `git diff [plan_path]` or show before/after
490
- - **`/technical_review`** → Call the /technical_review command with the plan file path
491
489
  - **`/ce:work`** → Call the /ce:work command with the plan file path
492
490
  - **Deepen further** → Ask which sections need more research, then re-run those agents
493
491
  - **Revert** → Restore from git or backup
@@ -1,5 +1,5 @@
1
1
  import path from "path"
2
- import { copyDir, ensureDir, writeText } from "../utils/files"
2
+ import { copyDir, ensureDir, resolveCommandPath, writeText } from "../utils/files"
3
3
  import type { DroidBundle } from "../types/droid"
4
4
 
5
5
  export async function writeDroidBundle(outputRoot: string, bundle: DroidBundle): Promise<void> {
@@ -9,7 +9,8 @@ export async function writeDroidBundle(outputRoot: string, bundle: DroidBundle):
9
9
  if (bundle.commands.length > 0) {
10
10
  await ensureDir(paths.commandsDir)
11
11
  for (const command of bundle.commands) {
12
- await writeText(path.join(paths.commandsDir, `${command.name}.md`), command.content + "\n")
12
+ const dest = await resolveCommandPath(paths.commandsDir, command.name, ".md")
13
+ await writeText(dest, command.content + "\n")
13
14
  }
14
15
  }
15
16
 
@@ -1,5 +1,5 @@
1
1
  import path from "path"
2
- import { backupFile, copyDir, ensureDir, pathExists, readJson, writeJson, writeText } from "../utils/files"
2
+ import { backupFile, copyDir, ensureDir, pathExists, readJson, resolveCommandPath, writeJson, writeText } from "../utils/files"
3
3
  import type { GeminiBundle } from "../types/gemini"
4
4
 
5
5
  export async function writeGeminiBundle(outputRoot: string, bundle: GeminiBundle): Promise<void> {
@@ -20,7 +20,8 @@ export async function writeGeminiBundle(outputRoot: string, bundle: GeminiBundle
20
20
 
21
21
  if (bundle.commands.length > 0) {
22
22
  for (const command of bundle.commands) {
23
- await writeText(path.join(paths.commandsDir, `${command.name}.toml`), command.content + "\n")
23
+ const dest = await resolveCommandPath(paths.commandsDir, command.name, ".toml")
24
+ await writeText(dest, command.content + "\n")
24
25
  }
25
26
  }
26
27
 
@@ -1,5 +1,5 @@
1
1
  import path from "path"
2
- import { backupFile, copyDir, ensureDir, pathExists, readJson, writeJson, writeText } from "../utils/files"
2
+ import { backupFile, copyDir, ensureDir, pathExists, readJson, resolveCommandPath, writeJson, writeText } from "../utils/files"
3
3
  import type { OpenCodeBundle, OpenCodeConfig } from "../types/opencode"
4
4
 
5
5
  // Merges plugin config into existing opencode.json. User keys win on conflict. See ADR-002.
@@ -75,7 +75,7 @@ export async function writeOpenCodeBundle(outputRoot: string, bundle: OpenCodeBu
75
75
  }
76
76
 
77
77
  for (const commandFile of bundle.commandFiles) {
78
- const dest = path.join(openCodePaths.commandDir, `${commandFile.name}.md`)
78
+ const dest = await resolveCommandPath(openCodePaths.commandDir, commandFile.name, ".md")
79
79
  const cmdBackupPath = await backupFile(dest)
80
80
  if (cmdBackupPath) {
81
81
  console.log(`Backed up existing command file to ${cmdBackupPath}`)
@@ -1,5 +1,5 @@
1
1
  import path from "path"
2
- import { backupFile, copyDir, ensureDir, writeJson, writeText } from "../utils/files"
2
+ import { backupFile, copyDir, ensureDir, resolveCommandPath, writeJson, writeText } from "../utils/files"
3
3
  import type { QwenBundle, QwenExtensionConfig } from "../types/qwen"
4
4
 
5
5
  export async function writeQwenBundle(outputRoot: string, bundle: QwenBundle): Promise<void> {
@@ -31,15 +31,8 @@ export async function writeQwenBundle(outputRoot: string, bundle: QwenBundle): P
31
31
  const commandsDir = qwenPaths.commandsDir
32
32
  await ensureDir(commandsDir)
33
33
  for (const commandFile of bundle.commandFiles) {
34
- // Support nested commands with colon separator
35
- const parts = commandFile.name.split(":")
36
- if (parts.length > 1) {
37
- const nestedDir = path.join(commandsDir, ...parts.slice(0, -1))
38
- await ensureDir(nestedDir)
39
- await writeText(path.join(nestedDir, `${parts[parts.length - 1]}.md`), commandFile.content + "\n")
40
- } else {
41
- await writeText(path.join(commandsDir, `${commandFile.name}.md`), commandFile.content + "\n")
42
- }
34
+ const dest = await resolveCommandPath(commandsDir, commandFile.name, ".md")
35
+ await writeText(dest, commandFile.content + "\n")
43
36
  }
44
37
 
45
38
  // Copy skills
@@ -75,6 +75,21 @@ export async function walkFiles(root: string): Promise<string[]> {
75
75
  return results
76
76
  }
77
77
 
78
+ /**
79
+ * Resolve a colon-separated command name into a filesystem path.
80
+ * e.g. resolveCommandPath("/commands", "ce:plan", ".md") -> "/commands/ce/plan.md"
81
+ * Creates intermediate directories as needed.
82
+ */
83
+ export async function resolveCommandPath(dir: string, name: string, ext: string): Promise<string> {
84
+ const parts = name.split(":")
85
+ if (parts.length > 1) {
86
+ const nestedDir = path.join(dir, ...parts.slice(0, -1))
87
+ await ensureDir(nestedDir)
88
+ return path.join(nestedDir, `${parts[parts.length - 1]}${ext}`)
89
+ }
90
+ return path.join(dir, `${name}${ext}`)
91
+ }
92
+
78
93
  export async function copyDir(sourceDir: string, targetDir: string): Promise<void> {
79
94
  await ensureDir(targetDir)
80
95
  const entries = await fs.readdir(sourceDir, { withFileTypes: true })