llm-orchestrator 1.0.5 → 1.0.7
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/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/bin/install.mjs +9 -1
- package/lib/first-run.mjs +4 -2
- package/lib/installation.mjs +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-orchestrator",
|
|
3
3
|
"description": "Write /task once — it plans the work, shards it across parallel subagents, gates every phase and verifies before claiming done. Claude Code, Codex, OpenCode, Kilo.",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.7",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Bogdan-Gabriel Torcescu",
|
|
7
7
|
"url": "https://www.linkedin.com/in/bogdantorcescu/"
|
package/README.md
CHANGED
|
@@ -282,7 +282,7 @@ Same five steps for every harness; only the skills root and the reload differ.
|
|
|
282
282
|
node bin/llm-orchestrator.mjs install --project /path/to/app --harness <harness>
|
|
283
283
|
```
|
|
284
284
|
3. **Apply** the same command with `--apply`. Re-running is idempotent; a file you edited by hand is reported as a conflict, never overwritten.
|
|
285
|
-
4. **Add project bindings** to `/path/to/app/AGENTS.md` (template below, or run `init --apply` to append it automatically when the section is missing). The core reads this section on every task; without it the core still runs with its generic matrix.
|
|
285
|
+
4. **Add project bindings** to `/path/to/app/AGENTS.md` (template below, or run `init --apply` to append it automatically when the section is missing). `install` reports `bindings.present` and, when false, the exact `init --apply` command. The core reads this section on every task; without it the core still runs with its generic matrix.
|
|
286
286
|
5. **Verify and reload**: `node bin/llm-orchestrator.mjs doctor --project /path/to/app --harness <harness>` must list every mandatory core tool as `present` (or as a declared gap with an install hint). Then reload the harness session so the skill catalog is refreshed.
|
|
287
287
|
|
|
288
288
|
`node bin/llm-orchestrator.mjs init --project /path/to/app` runs steps 2, 4 (report only) and 5 together, before you commit to a harness — it proposes `--harness` from what it detects, shows the same dry-run plan, and lists exactly which of the 8 mandatory tools are missing with an install command for each.
|
package/bin/install.mjs
CHANGED
|
@@ -39,7 +39,15 @@ try {
|
|
|
39
39
|
if (options.apply && options.linkClaude && (!result.conflicts || result.conflicts.length === 0) && options.harnesses.includes('claude')) {
|
|
40
40
|
claudeSymlink = await linkClaudeSkillsRoot(options.skillsRoot);
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
// `install` never writes the project bindings section — only `init --apply`
|
|
43
|
+
// does — so say so here, or a user who only ever runs `install` never learns
|
|
44
|
+
// the section exists and the core runs on its generic matrix forever.
|
|
45
|
+
const {agentsMdHasBindings, cliInvocation, BINDINGS_HEADING} = await import('../lib/first-run.mjs');
|
|
46
|
+
const bindingsPresent = await agentsMdHasBindings(options.project);
|
|
47
|
+
const bindings = bindingsPresent
|
|
48
|
+
? {present: true}
|
|
49
|
+
: {present: false, section: BINDINGS_HEADING, next: `${cliInvocation()} init --project ${options.project} --apply`};
|
|
50
|
+
process.stdout.write(`${JSON.stringify({...result, files: result.files?.map(({absolutePath, content, ...file}) => file), ...(claudeSymlink ? {claudeSymlink} : {}), bindings}, null, 2)}\n`);
|
|
43
51
|
if (result.conflicts?.length) process.exitCode = 2;
|
|
44
52
|
}
|
|
45
53
|
} catch (error) {
|
package/lib/first-run.mjs
CHANGED
|
@@ -197,7 +197,7 @@ Generic rules live in \`orchestrate-core\`; this section only adds or tightens.
|
|
|
197
197
|
**Agent defaults:** \`<role>\` → \`<tier>\` (W T0–T1 / S T2 / S T3 / X T3 …).
|
|
198
198
|
`;
|
|
199
199
|
|
|
200
|
-
async function agentsMdHasBindings(project) {
|
|
200
|
+
export async function agentsMdHasBindings(project) {
|
|
201
201
|
try {
|
|
202
202
|
const text = await readFile(join(project, 'AGENTS.md'), 'utf8');
|
|
203
203
|
return text.includes(BINDINGS_HEADING);
|
|
@@ -215,8 +215,10 @@ async function agentsMdHasBindings(project) {
|
|
|
215
215
|
* clone, the bare bin name when installed from npm (global or `npx`).
|
|
216
216
|
*/
|
|
217
217
|
export function cliInvocation(argv = process.argv) {
|
|
218
|
+
// The unified CLI forwards by rewriting argv[1] to the subcommand script, so
|
|
219
|
+
// any script under this checkout's bin/ counts as "run from the clone".
|
|
218
220
|
const script = argv[1] ? resolve(argv[1]) : '';
|
|
219
|
-
const fromClone = script
|
|
221
|
+
const fromClone = script.startsWith(resolve(process.cwd(), 'bin') + '/');
|
|
220
222
|
return fromClone ? 'node bin/llm-orchestrator.mjs' : 'llm-orchestrator';
|
|
221
223
|
}
|
|
222
224
|
|
package/lib/installation.mjs
CHANGED
|
@@ -447,7 +447,7 @@ export async function planUninstall(input) {
|
|
|
447
447
|
const runtimeManifestPath = runtimeManifestPathFor({stateRoot, skillsRoot});
|
|
448
448
|
const manifest = await readManifest(manifestPath);
|
|
449
449
|
const runtimeManifest = await readRuntimeManifest(runtimeManifestPath);
|
|
450
|
-
if (!manifest) return {conflicts: [], changes: [], preserved: [],
|
|
450
|
+
if (!manifest) return {conflicts: [], changes: [], preserved: [], retained_shared_runtime: (runtimeManifest?.files ?? []).map(({path}) => path), manifestPath};
|
|
451
451
|
const changes = [];
|
|
452
452
|
const preserved = [];
|
|
453
453
|
for (const span of manifest.spans) {
|
|
@@ -472,7 +472,7 @@ export async function planUninstall(input) {
|
|
|
472
472
|
conflicts: [],
|
|
473
473
|
changes,
|
|
474
474
|
preserved: [...new Set(preserved)],
|
|
475
|
-
|
|
475
|
+
retained_shared_runtime: [...new Set([...(runtimeManifest?.files ?? []).map(({path}) => path), ...manifest.files.filter(({scope}) => scope === 'skills').map(({path}) => path)])],
|
|
476
476
|
manifestPath,
|
|
477
477
|
};
|
|
478
478
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-orchestrator",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "Write /task once — it plans the work, shards it across parallel subagents, gates every phase and verifies before claiming done. Claude Code, Codex, OpenCode, Kilo.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|