@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.
- package/bin/build-template.js +26 -5
- package/bin/index.js +26 -8
- package/package.json +1 -1
- package/template/.claude-plugin/plugin.json +10 -0
- /package/template/{.claude/agents → agents}/conductor.md +0 -0
- /package/template/{.claude/agents → agents}/reviewer.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/adaptive.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/architect.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/backend.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/blueprint.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/create-role.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/frontend.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/help.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/hotfix.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/orchestrator.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/pm.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/rewind.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/start.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/status.md +0 -0
- /package/template/{.claude/commands/orchestra → commands}/verifier.md +0 -0
- /package/template/{.claude/rules → rules}/acceptance-check.orchestra.md +0 -0
- /package/template/{.claude/rules → rules}/code-standards.orchestra.md +0 -0
- /package/template/{.claude/rules → rules}/commit-format.orchestra.md +0 -0
- /package/template/{.claude/rules → rules}/phase-limits.orchestra.md +0 -0
- /package/template/{.claude/rules → rules}/role-boundaries.orchestra.md +0 -0
- /package/template/{.claude/rules → rules}/stuck-detection.orchestra.md +0 -0
- /package/template/{.claude/rules → rules}/testing-standards.orchestra.md +0 -0
- /package/template/{.claude/rules → rules}/verification-gate.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/accessibility.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/auth-setup.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/best-practices.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/code-optimizer.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/core-web-vitals.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/crud-api.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/debug.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/deployment.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/frontend-design.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/fullstack-infrastructure.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/react-best-practices.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/review.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/testing.orchestra.md +0 -0
- /package/template/{.claude/skills → skills}/web-quality-audit.orchestra.md +0 -0
package/bin/build-template.js
CHANGED
|
@@ -14,12 +14,24 @@ const DEV_ONLY_AGENTS = new Set([
|
|
|
14
14
|
"repo-deep-analyzer.md",
|
|
15
15
|
]);
|
|
16
16
|
|
|
17
|
-
//
|
|
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: "
|
|
20
|
-
{ src: ".claude/commands/orchestra", dest: "
|
|
21
|
-
{ src: ".claude/rules", dest: "
|
|
22
|
-
{ src: ".claude/skills", dest: "
|
|
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
|
-
|
|
388
|
-
|
|
389
|
-
|
|
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(
|
|
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
|
-
|
|
437
|
-
|
|
438
|
-
|
|
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
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|