@sulhadin/orchestrator 3.1.2 → 3.1.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/bin/build-template.js +9 -2
- package/bin/index.js +4 -5
- package/package.json +1 -1
- package/template/.claude-plugin/plugin.json +1 -1
- package/template/.orchestra/README.md +2 -2
- package/template/.orchestra/roles/orchestrator.md +1 -1
- package/template/.orchestra/roles/product-manager.md +2 -2
- package/template/CLAUDE.md +1 -1
- package/template/agents/conductor.md +1 -1
- package/template/commands/help.md +1 -1
- package/template/rules/role-boundaries.orchestra.md +1 -1
- /package/template/skills/{accessibility.orchestra.md → accessibility/SKILL.md} +0 -0
- /package/template/skills/{auth-setup.orchestra.md → auth-setup/SKILL.md} +0 -0
- /package/template/skills/{best-practices.orchestra.md → best-practices/SKILL.md} +0 -0
- /package/template/skills/{code-optimizer.orchestra.md → code-optimizer/SKILL.md} +0 -0
- /package/template/skills/{core-web-vitals.orchestra.md → core-web-vitals/SKILL.md} +0 -0
- /package/template/skills/{crud-api.orchestra.md → crud-api/SKILL.md} +0 -0
- /package/template/skills/{debug.orchestra.md → debug/SKILL.md} +0 -0
- /package/template/skills/{deployment.orchestra.md → deployment/SKILL.md} +0 -0
- /package/template/skills/{frontend-design.orchestra.md → frontend-design/SKILL.md} +0 -0
- /package/template/skills/{fullstack-infrastructure.orchestra.md → fullstack-infrastructure/SKILL.md} +0 -0
- /package/template/skills/{react-best-practices.orchestra.md → react-best-practices/SKILL.md} +0 -0
- /package/template/skills/{review.orchestra.md → review/SKILL.md} +0 -0
- /package/template/skills/{testing.orchestra.md → testing/SKILL.md} +0 -0
- /package/template/skills/{web-quality-audit.orchestra.md → web-quality-audit/SKILL.md} +0 -0
package/bin/build-template.js
CHANGED
|
@@ -14,6 +14,9 @@ const DEV_ONLY_AGENTS = new Set([
|
|
|
14
14
|
"repo-deep-analyzer.md",
|
|
15
15
|
]);
|
|
16
16
|
|
|
17
|
+
// Dev-only skills that should NOT be published to users
|
|
18
|
+
const DEV_ONLY_SKILLS = new Set(["ship"]);
|
|
19
|
+
|
|
17
20
|
// Plugin manifest
|
|
18
21
|
const PLUGIN_MANIFEST = {
|
|
19
22
|
name: "orchestra",
|
|
@@ -31,7 +34,11 @@ const SYSTEM_PATHS = [
|
|
|
31
34
|
{ src: ".claude/agents", dest: "agents", filter: (f) => !DEV_ONLY_AGENTS.has(f) },
|
|
32
35
|
{ src: ".claude/commands/orchestra", dest: "commands" },
|
|
33
36
|
{ src: ".claude/rules", dest: "rules", filter: (f) => f.endsWith(".orchestra.md") },
|
|
34
|
-
{ src: ".claude/skills", dest: "skills", filter: (f) =>
|
|
37
|
+
{ src: ".claude/skills", dest: "skills", filter: (f) => {
|
|
38
|
+
if (DEV_ONLY_SKILLS.has(f)) return false;
|
|
39
|
+
const skillDir = path.join(rootDir, ".claude/skills", f);
|
|
40
|
+
return fs.statSync(skillDir).isDirectory() && fs.existsSync(path.join(skillDir, "SKILL.md"));
|
|
41
|
+
}},
|
|
35
42
|
{ src: ".orchestra/roles", dest: ".orchestra/roles" },
|
|
36
43
|
{ src: ".orchestra/blueprints", dest: ".orchestra/blueprints" },
|
|
37
44
|
{ src: ".orchestra/config.yml", dest: ".orchestra/config.yml" },
|
|
@@ -75,7 +82,7 @@ function copyRecursive(src, dest, filter = null) {
|
|
|
75
82
|
if (fs.existsSync(fullEntryDest)) fs.unlinkSync(fullEntryDest);
|
|
76
83
|
fs.symlinkSync(linkTarget, fullEntryDest);
|
|
77
84
|
} else if (entry.isDirectory()) {
|
|
78
|
-
copyRecursive(entrySrc, entryDest
|
|
85
|
+
copyRecursive(entrySrc, entryDest);
|
|
79
86
|
} else {
|
|
80
87
|
fs.copyFileSync(fullEntrySrc, fullEntryDest);
|
|
81
88
|
}
|
package/bin/index.js
CHANGED
|
@@ -230,8 +230,8 @@ function extractOrchestraSection(content) {
|
|
|
230
230
|
|
|
231
231
|
/**
|
|
232
232
|
* Smart merge for user directories (skills, rules, blueprints):
|
|
233
|
-
* -
|
|
234
|
-
* -
|
|
233
|
+
* - entries present in template = system files → always updated from template
|
|
234
|
+
* - entries not in template = user files → preserved
|
|
235
235
|
*/
|
|
236
236
|
function smartMergeDir(backupPath, restorePath, templateDirPath) {
|
|
237
237
|
const templateFiles = fs.existsSync(templateDirPath)
|
|
@@ -241,9 +241,8 @@ function smartMergeDir(backupPath, restorePath, templateDirPath) {
|
|
|
241
241
|
let restored = 0;
|
|
242
242
|
|
|
243
243
|
for (const file of backupFiles) {
|
|
244
|
-
// User-created
|
|
245
|
-
|
|
246
|
-
if (!templateFiles.includes(file) && !isOrchestraFile) {
|
|
244
|
+
// User-created entries: not in template → preserve
|
|
245
|
+
if (!templateFiles.includes(file)) {
|
|
247
246
|
const srcFile = path.join(backupPath, file);
|
|
248
247
|
const destFile = path.join(restorePath, file);
|
|
249
248
|
if (fs.statSync(srcFile).isDirectory()) {
|
package/package.json
CHANGED
|
@@ -262,7 +262,7 @@ No role may create, edit, delete, or modify these files:
|
|
|
262
262
|
- `.orchestra/blueprints/`
|
|
263
263
|
- `.claude/agents/conductor.md`, `.claude/agents/reviewer.md`
|
|
264
264
|
- `.claude/rules/*.orchestra.md`
|
|
265
|
-
- `.claude/skills
|
|
265
|
+
- `.claude/skills/*/SKILL.md`
|
|
266
266
|
- `.claude/commands/orchestra/`
|
|
267
267
|
- `CLAUDE.md`
|
|
268
268
|
- `docs/`
|
|
@@ -288,7 +288,7 @@ Each role has exclusive write access to specific directories:
|
|
|
288
288
|
|
|
289
289
|
| Role | Owns (can write) | Reads |
|
|
290
290
|
|------|-------------------|-------|
|
|
291
|
-
| orchestrator | `.orchestra/roles/*`, `.orchestra/config.yml`, `.orchestra/README.md`, `.orchestra/blueprints/`, `CLAUDE.md`, `.claude/agents/`, `.claude/skills
|
|
291
|
+
| orchestrator | `.orchestra/roles/*`, `.orchestra/config.yml`, `.orchestra/README.md`, `.orchestra/blueprints/`, `CLAUDE.md`, `.claude/agents/`, `.claude/skills/*/SKILL.md`, `.claude/rules/*.orchestra.md`, `.claude/commands/orchestra/`, `.orchestra/knowledge.md`, `docs/` | Everything |
|
|
292
292
|
| product-manager | `.orchestra/milestones/*` (prd.md, milestone.md, grooming.md, phases) | Everything |
|
|
293
293
|
| architect | `.orchestra/milestones/*/rfc.md`, `.orchestra/milestones/*/architecture.md`, `.orchestra/milestones/*/adrs/*`, project configs | Everything |
|
|
294
294
|
| backend-engineer | Defined by PM in phase scope (typically `src/`, `tests/`, `migrations/`) | `.orchestra/milestones/*/phases/*` |
|
|
@@ -21,7 +21,7 @@ You are NOT above the system — you ARE the system.
|
|
|
21
21
|
| Edit CLAUDE.md | `CLAUDE.md` |
|
|
22
22
|
| Edit conductor/reviewer agents | `.claude/agents/conductor.md`, `.claude/agents/reviewer.md` |
|
|
23
23
|
| Create/edit rules | `.claude/rules/*.orchestra.md` |
|
|
24
|
-
| Create/edit skills | `.claude/skills
|
|
24
|
+
| Create/edit skills | `.claude/skills/*/SKILL.md` |
|
|
25
25
|
| Create/edit blueprints | `.orchestra/blueprints/*.md` |
|
|
26
26
|
| Create/edit commands | `.claude/commands/orchestra/*.md` |
|
|
27
27
|
| Edit knowledge log | `.orchestra/knowledge.md` |
|
|
@@ -103,8 +103,8 @@ role: backend-engineer | frontend-engineer | architect | adaptive
|
|
|
103
103
|
status: pending | in-progress | done | failed
|
|
104
104
|
order: 1
|
|
105
105
|
complexity: standard # trivial | quick | standard | complex — conductor uses this for model selection
|
|
106
|
-
skills: []
|
|
107
|
-
depends_on: []
|
|
106
|
+
skills: [] # list .claude/skills/, assign relevant ones by name
|
|
107
|
+
depends_on: []
|
|
108
108
|
---
|
|
109
109
|
|
|
110
110
|
## Objective
|
package/template/CLAUDE.md
CHANGED
|
@@ -44,7 +44,7 @@ Role IDs: orchestrator, product-manager, architect, backend-engineer, frontend-e
|
|
|
44
44
|
- Two-terminal model: PM plans in one terminal, conductor executes in another
|
|
45
45
|
- Each role writes only to its ownership scope (defined in role file)
|
|
46
46
|
- Rules (`.claude/rules/*.orchestra.md`) auto-loaded. Skills loaded per phase.
|
|
47
|
-
- **PROTECTED:** Non-Orchestrator roles NEVER modify `.orchestra/roles/`, `.orchestra/config.yml`, `.orchestra/README.md`, `.orchestra/blueprints/`, `.claude/agents/`, `.claude/rules/*.orchestra.md`, `.claude/skills
|
|
47
|
+
- **PROTECTED:** Non-Orchestrator roles NEVER modify `.orchestra/roles/`, `.orchestra/config.yml`, `.orchestra/README.md`, `.orchestra/blueprints/`, `.claude/agents/`, `.claude/rules/*.orchestra.md`, `.claude/skills/*/SKILL.md`, `.claude/commands/orchestra/`, `CLAUDE.md`, or `docs/`.
|
|
48
48
|
|
|
49
49
|
## Development
|
|
50
50
|
|
|
@@ -76,7 +76,7 @@ Cache role/skills content in conductor context — don't re-read for consecutive
|
|
|
76
76
|
phases with the same role.
|
|
77
77
|
|
|
78
78
|
1. Read `.orchestra/roles/{role}.md` → role_content (skip if same role as previous phase)
|
|
79
|
-
2. Read skill files from phase → skills_content (skip already-read skills)
|
|
79
|
+
2. Read skill files from phase `.claude/skills/{name}/SKILL.md` → skills_content (skip already-read skills)
|
|
80
80
|
3. Read phase file → phase_content
|
|
81
81
|
4. Extract verification commands from config.yml (read once at startup, reuse)
|
|
82
82
|
5. Read codebase map from context.md (if exists) → codebase_map
|
|
@@ -40,7 +40,7 @@ CONFIG:
|
|
|
40
40
|
|
|
41
41
|
FILES:
|
|
42
42
|
.claude/agents/ Conductor + Reviewer agents
|
|
43
|
-
.claude/skills
|
|
43
|
+
.claude/skills/*/SKILL.md Domain checklists (auth, CRUD, deploy, etc.)
|
|
44
44
|
.claude/rules/*.orchestra.md Discipline rules (verification, commit format, etc.)
|
|
45
45
|
.claude/commands/orchestra/ Orchestra commands
|
|
46
46
|
.orchestra/roles/ Role identities (one file per role)
|
|
@@ -6,7 +6,7 @@ Before writing ANY file, check your role's ownership scope.
|
|
|
6
6
|
|
|
7
7
|
| Role | Can Write | Everything Else |
|
|
8
8
|
|------|-----------|----------------|
|
|
9
|
-
| Orchestrator | `.orchestra/roles/`, `.orchestra/config.yml`, `.orchestra/README.md`, `.orchestra/blueprints/`, `.claude/agents/`, `.claude/rules/*.orchestra.md`, `.claude/skills
|
|
9
|
+
| Orchestrator | `.orchestra/roles/`, `.orchestra/config.yml`, `.orchestra/README.md`, `.orchestra/blueprints/`, `.claude/agents/`, `.claude/rules/*.orchestra.md`, `.claude/skills/*/SKILL.md`, `.claude/commands/orchestra/`, `CLAUDE.md`, `docs/` | Refuse |
|
|
10
10
|
| PM | `.orchestra/milestones/*` (prd, milestone, grooming, phases) | Refuse |
|
|
11
11
|
| Conductor | `.orchestra/milestones/*/context.md`, `.orchestra/knowledge.md` (append) | Refuse |
|
|
12
12
|
| Backend/Frontend/Architect/Adaptive | Only what phase `scope:` defines | Refuse |
|
|
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
|
/package/template/skills/{fullstack-infrastructure.orchestra.md → fullstack-infrastructure/SKILL.md}
RENAMED
|
File without changes
|
/package/template/skills/{react-best-practices.orchestra.md → react-best-practices/SKILL.md}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|