fanout-cli 0.9.0 → 0.9.1
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/dist/cli.js +0 -0
- package/dist/cli.js.map +3 -3
- package/dist/view.html +21 -2
- package/package.json +26 -17
- package/plugin/.claude-plugin/plugin.json +9 -2
- package/plugin/bin/fanout +0 -0
- package/src/cli.ts +12 -0
package/dist/view.html
CHANGED
|
@@ -327,6 +327,11 @@
|
|
|
327
327
|
.waiting .who {
|
|
328
328
|
color: var(--fg);
|
|
329
329
|
}
|
|
330
|
+
/* The other project's name, said quietly: it is context, not the subject of the row. */
|
|
331
|
+
.from {
|
|
332
|
+
color: var(--fg-faint);
|
|
333
|
+
font-size: var(--text-xs);
|
|
334
|
+
}
|
|
330
335
|
.waiting .what {
|
|
331
336
|
color: var(--fg-dim);
|
|
332
337
|
}
|
|
@@ -615,7 +620,7 @@
|
|
|
615
620
|
* of it; a page that worked out its own answer would eventually tell someone a run was ready while the
|
|
616
621
|
* merge tool refused it.
|
|
617
622
|
*/
|
|
618
|
-
function waitingSection(waiting) {
|
|
623
|
+
function waitingSection(waiting, here) {
|
|
619
624
|
const section = el("section");
|
|
620
625
|
const head = el("h2");
|
|
621
626
|
head.append(document.createTextNode("Waiting on you"));
|
|
@@ -639,6 +644,15 @@
|
|
|
639
644
|
// The work, not the run id — the id is for the tools, and is on the row for anyone who needs it.
|
|
640
645
|
row.title = item.runId;
|
|
641
646
|
row.append(el("span", "who", item.task ?? item.runId));
|
|
647
|
+
/*
|
|
648
|
+
* Where it came from, when it did not come from here. One daemon serves the whole machine, so a row
|
|
649
|
+
* with no repository asks somebody to review work they may never have seen the project for.
|
|
650
|
+
*/
|
|
651
|
+
if (item.repo && item.repo !== here) {
|
|
652
|
+
const from = el("span", "from", item.repo.split("/").pop());
|
|
653
|
+
from.title = item.repo;
|
|
654
|
+
row.append(from);
|
|
655
|
+
}
|
|
642
656
|
row.append(
|
|
643
657
|
el(
|
|
644
658
|
"span",
|
|
@@ -801,7 +815,12 @@
|
|
|
801
815
|
main.append(crew);
|
|
802
816
|
|
|
803
817
|
// Above the runs: it is the only thing on this page that asks something of whoever is reading it.
|
|
804
|
-
|
|
818
|
+
/*
|
|
819
|
+
* The repository this page is about: the one the mission on screen belongs to. Rows from anywhere else
|
|
820
|
+
* are labelled, because one daemon serves the whole machine and an unlabelled row is a request to review
|
|
821
|
+
* work from a project the reader may not even have open.
|
|
822
|
+
*/
|
|
823
|
+
main.append(waitingSection(snapshot.waiting ?? [], mission?.repo?.root));
|
|
805
824
|
|
|
806
825
|
const runs = el("section");
|
|
807
826
|
const runsHead = el("h2");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fanout-cli",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Let Claude Code lead the other coding-agent CLIs you already pay for.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -14,12 +14,10 @@
|
|
|
14
14
|
},
|
|
15
15
|
"homepage": "https://github.com/elberacasa/fanout#readme",
|
|
16
16
|
"bin": {
|
|
17
|
-
"fanout": "./
|
|
17
|
+
"fanout": "./src/cli.ts"
|
|
18
18
|
},
|
|
19
19
|
"exports": {
|
|
20
|
-
".":
|
|
21
|
-
"default": "./dist/cli.js"
|
|
22
|
-
}
|
|
20
|
+
".": "./src/main.ts"
|
|
23
21
|
},
|
|
24
22
|
"files": [
|
|
25
23
|
"dist",
|
|
@@ -27,22 +25,33 @@
|
|
|
27
25
|
"README.md",
|
|
28
26
|
"LICENSE"
|
|
29
27
|
],
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"default": "./dist/cli.js"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"bin": {
|
|
35
|
+
"fanout": "./dist/cli.js"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
40
|
+
"build": "node ../../scripts/bundle-cli.mjs",
|
|
41
|
+
"prepack": "node ../../scripts/bundle-cli.mjs"
|
|
42
|
+
},
|
|
30
43
|
"dependencies": {
|
|
31
44
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
32
45
|
"ws": "8.21.3",
|
|
33
46
|
"zod": "4.6.2"
|
|
34
47
|
},
|
|
35
48
|
"devDependencies": {
|
|
36
|
-
"fanout-adapter-claude": "
|
|
37
|
-
"fanout-adapter-codex": "
|
|
38
|
-
"fanout-
|
|
39
|
-
"fanout-adapter-grok": "
|
|
40
|
-
"fanout-
|
|
41
|
-
"fanout-daemon": "
|
|
42
|
-
"fanout-mcp": "
|
|
43
|
-
},
|
|
44
|
-
"scripts": {
|
|
45
|
-
"typecheck": "tsc -p tsconfig.json",
|
|
46
|
-
"build": "node ../../scripts/bundle-cli.mjs"
|
|
49
|
+
"fanout-adapter-claude": "workspace:*",
|
|
50
|
+
"fanout-adapter-codex": "workspace:*",
|
|
51
|
+
"fanout-adapter-fake": "workspace:*",
|
|
52
|
+
"fanout-adapter-grok": "workspace:*",
|
|
53
|
+
"fanout-core": "workspace:*",
|
|
54
|
+
"fanout-daemon": "workspace:*",
|
|
55
|
+
"fanout-mcp": "workspace:*"
|
|
47
56
|
}
|
|
48
|
-
}
|
|
57
|
+
}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fanout",
|
|
3
3
|
"description": "Lead a crew of the coding-agent CLIs you already pay for: plan, fan out into isolated git worktrees, watch, and review before anything merges.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.9.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "elberacasa"
|
|
7
7
|
},
|
|
8
8
|
"homepage": "https://github.com/elberacasa/fanout",
|
|
9
9
|
"repository": "https://github.com/elberacasa/fanout",
|
|
10
10
|
"license": "MIT",
|
|
11
|
-
"keywords": [
|
|
11
|
+
"keywords": [
|
|
12
|
+
"agents",
|
|
13
|
+
"orchestration",
|
|
14
|
+
"codex",
|
|
15
|
+
"grok",
|
|
16
|
+
"worktrees",
|
|
17
|
+
"local-first"
|
|
18
|
+
]
|
|
12
19
|
}
|
package/plugin/bin/fanout
CHANGED
|
File without changes
|
package/src/cli.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// First, and it has to stay first: it silences a warning that fires while the imports below are evaluating.
|
|
3
|
+
import "./quiet.ts";
|
|
4
|
+
import { main } from "./main.ts";
|
|
5
|
+
|
|
6
|
+
/* The thin edge of the CLI: everything testable lives in main.ts, which takes its output as an argument. */
|
|
7
|
+
|
|
8
|
+
const code = await main(process.argv.slice(2), {
|
|
9
|
+
out: (text) => process.stdout.write(text),
|
|
10
|
+
err: (text) => process.stderr.write(text),
|
|
11
|
+
});
|
|
12
|
+
process.exitCode = code;
|