@sulhadin/orchestrator 3.0.0 → 3.1.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.
Files changed (42) hide show
  1. package/bin/build-template.js +26 -5
  2. package/bin/index.js +26 -8
  3. package/package.json +1 -1
  4. package/template/.claude-plugin/plugin.json +10 -0
  5. /package/template/{.claude/agents → agents}/conductor.md +0 -0
  6. /package/template/{.claude/agents → agents}/reviewer.md +0 -0
  7. /package/template/{.claude/commands/orchestra → commands}/adaptive.md +0 -0
  8. /package/template/{.claude/commands/orchestra → commands}/architect.md +0 -0
  9. /package/template/{.claude/commands/orchestra → commands}/backend.md +0 -0
  10. /package/template/{.claude/commands/orchestra → commands}/blueprint.md +0 -0
  11. /package/template/{.claude/commands/orchestra → commands}/create-role.md +0 -0
  12. /package/template/{.claude/commands/orchestra → commands}/frontend.md +0 -0
  13. /package/template/{.claude/commands/orchestra → commands}/help.md +0 -0
  14. /package/template/{.claude/commands/orchestra → commands}/hotfix.md +0 -0
  15. /package/template/{.claude/commands/orchestra → commands}/orchestrator.md +0 -0
  16. /package/template/{.claude/commands/orchestra → commands}/pm.md +0 -0
  17. /package/template/{.claude/commands/orchestra → commands}/rewind.md +0 -0
  18. /package/template/{.claude/commands/orchestra → commands}/start.md +0 -0
  19. /package/template/{.claude/commands/orchestra → commands}/status.md +0 -0
  20. /package/template/{.claude/commands/orchestra → commands}/verifier.md +0 -0
  21. /package/template/{.claude/rules → rules}/acceptance-check.orchestra.md +0 -0
  22. /package/template/{.claude/rules → rules}/code-standards.orchestra.md +0 -0
  23. /package/template/{.claude/rules → rules}/commit-format.orchestra.md +0 -0
  24. /package/template/{.claude/rules → rules}/phase-limits.orchestra.md +0 -0
  25. /package/template/{.claude/rules → rules}/role-boundaries.orchestra.md +0 -0
  26. /package/template/{.claude/rules → rules}/stuck-detection.orchestra.md +0 -0
  27. /package/template/{.claude/rules → rules}/testing-standards.orchestra.md +0 -0
  28. /package/template/{.claude/rules → rules}/verification-gate.orchestra.md +0 -0
  29. /package/template/{.claude/skills → skills}/accessibility.orchestra.md +0 -0
  30. /package/template/{.claude/skills → skills}/auth-setup.orchestra.md +0 -0
  31. /package/template/{.claude/skills → skills}/best-practices.orchestra.md +0 -0
  32. /package/template/{.claude/skills → skills}/code-optimizer.orchestra.md +0 -0
  33. /package/template/{.claude/skills → skills}/core-web-vitals.orchestra.md +0 -0
  34. /package/template/{.claude/skills → skills}/crud-api.orchestra.md +0 -0
  35. /package/template/{.claude/skills → skills}/debug.orchestra.md +0 -0
  36. /package/template/{.claude/skills → skills}/deployment.orchestra.md +0 -0
  37. /package/template/{.claude/skills → skills}/frontend-design.orchestra.md +0 -0
  38. /package/template/{.claude/skills → skills}/fullstack-infrastructure.orchestra.md +0 -0
  39. /package/template/{.claude/skills → skills}/react-best-practices.orchestra.md +0 -0
  40. /package/template/{.claude/skills → skills}/review.orchestra.md +0 -0
  41. /package/template/{.claude/skills → skills}/testing.orchestra.md +0 -0
  42. /package/template/{.claude/skills → skills}/web-quality-audit.orchestra.md +0 -0
@@ -14,12 +14,24 @@ const DEV_ONLY_AGENTS = new Set([
14
14
  "repo-deep-analyzer.md",
15
15
  ]);
16
16
 
17
- // System files to include in the template
17
+ // Plugin manifest
18
+ const PLUGIN_MANIFEST = {
19
+ name: "orchestra",
20
+ description: "AI Team Orchestration — multi-role coordination with milestones, phases, and quality gates for Claude Code",
21
+ version: require("../package.json").version,
22
+ author: { name: "Sulhadin Öney" },
23
+ repository: "https://github.com/sulhadin/orchestrator",
24
+ license: "MIT",
25
+ };
26
+
27
+ // System files to include in the template (plugin-compatible structure)
28
+ // Plugin dirs (agents/, commands/, skills/, rules/) go at root level
29
+ // .orchestra/ and CLAUDE.md also go at root level
18
30
  const SYSTEM_PATHS = [
19
- { src: ".claude/agents", dest: ".claude/agents", filter: (f) => !DEV_ONLY_AGENTS.has(f) },
20
- { src: ".claude/commands/orchestra", dest: ".claude/commands/orchestra" },
21
- { src: ".claude/rules", dest: ".claude/rules", filter: (f) => f.endsWith(".orchestra.md") },
22
- { src: ".claude/skills", dest: ".claude/skills", filter: (f) => f.endsWith(".orchestra.md") },
31
+ { src: ".claude/agents", dest: "agents", filter: (f) => !DEV_ONLY_AGENTS.has(f) },
32
+ { src: ".claude/commands/orchestra", dest: "commands" },
33
+ { src: ".claude/rules", dest: "rules", filter: (f) => f.endsWith(".orchestra.md") },
34
+ { src: ".claude/skills", dest: "skills", filter: (f) => f.endsWith(".orchestra.md") },
23
35
  { src: ".orchestra/roles", dest: ".orchestra/roles" },
24
36
  { src: ".orchestra/blueprints", dest: ".orchestra/blueprints" },
25
37
  { src: ".orchestra/config.yml", dest: ".orchestra/config.yml" },
@@ -82,5 +94,14 @@ for (const item of SYSTEM_PATHS) {
82
94
  console.log(` [+] Packed: ${item.src}`);
83
95
  }
84
96
 
97
+ // Write plugin manifest
98
+ const pluginDir = path.join(templateDir, ".claude-plugin");
99
+ ensureDir(pluginDir);
100
+ fs.writeFileSync(
101
+ path.join(pluginDir, "plugin.json"),
102
+ JSON.stringify(PLUGIN_MANIFEST, null, 2) + "\n"
103
+ );
104
+ console.log(" [+] Generated .claude-plugin/plugin.json");
105
+
85
106
  console.log("\n Done! Template is updated and ready for release.");
86
107
  console.log(" Run 'yarn build' to test the installation from this template.\n");
package/bin/index.js CHANGED
@@ -6,6 +6,14 @@ const path = require("path");
6
6
  const targetDir = process.cwd();
7
7
  const templateDir = path.join(__dirname, "..", "template");
8
8
 
9
+ // Plugin-to-standalone mapping: plugin root dirs → .claude/ subdirs
10
+ const PLUGIN_TO_CLAUDE = {
11
+ agents: ".claude/agents",
12
+ commands: ".claude/commands/orchestra",
13
+ rules: ".claude/rules",
14
+ skills: ".claude/skills",
15
+ };
16
+
9
17
  const ORCHESTRA_SECTION_START = "<!-- orchestra -->";
10
18
  const ORCHESTRA_SECTION_END = "<!-- /orchestra -->";
11
19
 
@@ -295,7 +303,6 @@ function run() {
295
303
  console.log("");
296
304
 
297
305
  const orchestraSrc = path.join(templateDir, ".orchestra");
298
- const claudeSrc = path.join(templateDir, ".claude");
299
306
  const orchestraDest = path.join(targetDir, ".orchestra");
300
307
  const claudeDest = path.join(targetDir, ".claude");
301
308
  const isUpgrade = fs.existsSync(orchestraDest);
@@ -384,18 +391,24 @@ function run() {
384
391
  copyDirRecursive(orchestraSrc, orchestraDest);
385
392
  console.log(" [+] .orchestra/ installed");
386
393
 
387
- if (fs.existsSync(claudeSrc)) {
388
- copyDirRecursive(claudeSrc, claudeDest);
389
- console.log(" [+] .claude/ orchestra files installed");
394
+ // Copy plugin dirs → .claude/ (plugin-to-standalone mapping)
395
+ for (const [pluginDir, claudeSubdir] of Object.entries(PLUGIN_TO_CLAUDE)) {
396
+ const src = path.join(templateDir, pluginDir);
397
+ if (fs.existsSync(src)) {
398
+ const dest = path.join(targetDir, claudeSubdir);
399
+ copyDirRecursive(src, dest);
400
+ }
390
401
  }
402
+ console.log(" [+] .claude/ orchestra files installed");
391
403
 
392
404
  // ── Restore user data ──
393
405
  for (const [key, { backupPath, type, dir }] of Object.entries(backups)) {
394
406
  const baseDest = type === "orchestra" ? orchestraDest : claudeDest;
395
407
  const restorePath = path.join(baseDest, dir);
408
+ // Plugin structure: claude dirs are at template root, orchestra dirs under .orchestra/
396
409
  const templateDirPath = type === "orchestra"
397
410
  ? path.join(orchestraSrc, dir)
398
- : path.join(claudeSrc, dir);
411
+ : path.join(templateDir, dir);
399
412
 
400
413
  if (dir === "milestones") {
401
414
  if (fs.existsSync(restorePath)) rmDirRecursive(restorePath);
@@ -433,10 +446,15 @@ function run() {
433
446
  copyDirRecursive(orchestraSrc, orchestraDest);
434
447
  console.log(" [+] .orchestra/ installed");
435
448
 
436
- if (fs.existsSync(claudeSrc)) {
437
- copyDirRecursive(claudeSrc, claudeDest);
438
- console.log(" [+] .claude/ installed");
449
+ // Copy plugin dirs → .claude/ (plugin-to-standalone mapping)
450
+ for (const [pluginDir, claudeSubdir] of Object.entries(PLUGIN_TO_CLAUDE)) {
451
+ const src = path.join(templateDir, pluginDir);
452
+ if (fs.existsSync(src)) {
453
+ const dest = path.join(targetDir, claudeSubdir);
454
+ copyDirRecursive(src, dest);
455
+ }
439
456
  }
457
+ console.log(" [+] .claude/ installed");
440
458
  }
441
459
 
442
460
  // ── Handle CLAUDE.md ──
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sulhadin/orchestrator",
3
- "version": "3.0.0",
3
+ "version": "3.1.0",
4
4
  "description": "AI Team Orchestration System — multi-role coordination for Claude Code",
5
5
  "bin": "bin/index.js",
6
6
  "scripts": {
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "orchestra",
3
+ "description": "AI Team Orchestration — multi-role coordination with milestones, phases, and quality gates for Claude Code",
4
+ "version": "3.1.0",
5
+ "author": {
6
+ "name": "Sulhadin Öney"
7
+ },
8
+ "repository": "https://github.com/sulhadin/orchestrator",
9
+ "license": "MIT"
10
+ }
File without changes