@runfusion/fusion 0.2.2 → 0.2.4
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/bin.js +52 -55
- package/package.json +3 -3
package/dist/bin.js
CHANGED
|
@@ -136878,30 +136878,32 @@ function UtilitiesPanel({ isFocused }) {
|
|
|
136878
136878
|
}
|
|
136879
136879
|
function HelpOverlay() {
|
|
136880
136880
|
const shortcuts = [
|
|
136881
|
-
["[
|
|
136881
|
+
["[m] / [s]", "Main (status mode)"],
|
|
136882
|
+
["[b]", "Board view"],
|
|
136882
136883
|
["[a]", "Agents view"],
|
|
136883
136884
|
["[g]", "Settings view"],
|
|
136884
136885
|
["[t]", "Git view"],
|
|
136885
|
-
["[
|
|
136886
|
-
["[
|
|
136887
|
-
["[Tab]", "Cycle focused panel
|
|
136888
|
-
["[
|
|
136889
|
-
["[
|
|
136890
|
-
["[\u2192] / [n]", "Next panel (
|
|
136891
|
-
["[\u2190] / [p]", "Previous panel (
|
|
136886
|
+
["[e]", "Explorer (file browser)"],
|
|
136887
|
+
["[Tab]", "Cycle focused panel / pane forward"],
|
|
136888
|
+
["[Shift+Tab]", "Cycle focused panel / pane backward"],
|
|
136889
|
+
["[1-5]", "Jump to panel (Main: System/Logs/Utilities/Stats/Settings)"],
|
|
136890
|
+
["[\u2190 / \u2192]", "Switch pane (Agents, Settings, Files, Git)"],
|
|
136891
|
+
["[\u2192] / [n]", "Next panel (Main)"],
|
|
136892
|
+
["[\u2190] / [p]", "Previous panel (Main)"],
|
|
136892
136893
|
["[r]", "Refresh stats (Utilities)"],
|
|
136893
136894
|
["[c]", "Clear logs (Utilities)"],
|
|
136894
|
-
["[
|
|
136895
|
-
["[
|
|
136896
|
-
["[
|
|
136897
|
-
["[
|
|
136898
|
-
["[
|
|
136899
|
-
["[
|
|
136900
|
-
["[
|
|
136901
|
-
["[
|
|
136902
|
-
["[
|
|
136903
|
-
["[
|
|
136904
|
-
["[
|
|
136895
|
+
["[\u2191/\u2193/k/j]", "Navigate list / log entries"],
|
|
136896
|
+
["[Home / G]", "First / last log entry (Logs)"],
|
|
136897
|
+
["[Enter/Space]", "Expand log entry (Logs)"],
|
|
136898
|
+
["[w]", "Toggle word wrap (Logs / Files)"],
|
|
136899
|
+
["[f]", "Cycle severity filter (Main, any panel)"],
|
|
136900
|
+
["[Space]", "Toggle boolean (Settings)"],
|
|
136901
|
+
["[+/-]", "Adjust number (Settings)"],
|
|
136902
|
+
["[p]", "Project picker (Board, Files)"],
|
|
136903
|
+
["[n]", "New task (Board)"],
|
|
136904
|
+
["[D]", "Delete agent \u2014 requires confirm (Agents)"],
|
|
136905
|
+
["[P] / [F]", "Push / fetch (Git)"],
|
|
136906
|
+
["[.]", "Toggle hidden files (Files)"],
|
|
136905
136907
|
["[?] / [h]", "Toggle help"],
|
|
136906
136908
|
["[q]", "Quit"],
|
|
136907
136909
|
["[Ctrl+C]", "Force quit"]
|
|
@@ -136913,13 +136915,13 @@ function HelpOverlay() {
|
|
|
136913
136915
|
return /* @__PURE__ */ jsxs(Box, { borderStyle: "round", borderColor: "cyanBright", flexDirection: "column", backgroundColor: "black", children: [
|
|
136914
136916
|
/* @__PURE__ */ jsx(Text, { backgroundColor: "black", bold: true, color: "white", children: titleRow }),
|
|
136915
136917
|
/* @__PURE__ */ jsx(Text, { backgroundColor: "black", children: " " }),
|
|
136916
|
-
shortcuts.map(([key, desc]) => {
|
|
136918
|
+
shortcuts.map(([key, desc], i) => {
|
|
136917
136919
|
const keyCell = ` ${key.padEnd(rowKeyWidth - 1)} `;
|
|
136918
136920
|
const descCell = ` ${desc.padEnd(rowDescWidth)} `;
|
|
136919
136921
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
136920
136922
|
/* @__PURE__ */ jsx(Text, { backgroundColor: "black", color: "yellow", children: keyCell }),
|
|
136921
136923
|
/* @__PURE__ */ jsx(Text, { backgroundColor: "black", color: "white", children: descCell })
|
|
136922
|
-
] },
|
|
136924
|
+
] }, i);
|
|
136923
136925
|
})
|
|
136924
136926
|
] });
|
|
136925
136927
|
}
|
|
@@ -136932,7 +136934,7 @@ function StatusModeGrid({
|
|
|
136932
136934
|
const bodyRows = Math.max(8, rows - 7);
|
|
136933
136935
|
const logsAvailableRows = Math.max(4, bodyRows - 4);
|
|
136934
136936
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [
|
|
136935
|
-
/* @__PURE__ */ jsx(MainHeader, { state }),
|
|
136937
|
+
/* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(MainHeader, { state }) }),
|
|
136936
136938
|
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", flexGrow: 1, overflow: "hidden", children: [
|
|
136937
136939
|
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", flexGrow: 5, overflow: "hidden", children: [
|
|
136938
136940
|
/* @__PURE__ */ jsx(SystemPanel, { state, isFocused: focused === "system" }),
|
|
@@ -136953,7 +136955,7 @@ function StatusModeGrid({
|
|
|
136953
136955
|
] })
|
|
136954
136956
|
] })
|
|
136955
136957
|
] }),
|
|
136956
|
-
/* @__PURE__ */ jsx(StatusBar, { state, controller })
|
|
136958
|
+
/* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(StatusBar, { state, controller }) })
|
|
136957
136959
|
] });
|
|
136958
136960
|
}
|
|
136959
136961
|
function StatusModeSingle({
|
|
@@ -136976,9 +136978,9 @@ function StatusModeSingle({
|
|
|
136976
136978
|
}
|
|
136977
136979
|
};
|
|
136978
136980
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [
|
|
136979
|
-
/* @__PURE__ */ jsx(MainHeader, { state }),
|
|
136981
|
+
/* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(MainHeader, { state }) }),
|
|
136980
136982
|
/* @__PURE__ */ jsx(Box, { flexGrow: 1, flexDirection: "column", overflow: "hidden", children: activePanel() }),
|
|
136981
|
-
/* @__PURE__ */ jsx(StatusBar, { state, controller })
|
|
136983
|
+
/* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(StatusBar, { state, controller }) })
|
|
136982
136984
|
] });
|
|
136983
136985
|
}
|
|
136984
136986
|
function StatusBar({ state, controller: _controller }) {
|
|
@@ -137003,48 +137005,35 @@ function StatusBar({ state, controller: _controller }) {
|
|
|
137003
137005
|
}
|
|
137004
137006
|
function MainHeader({ state }) {
|
|
137005
137007
|
const inInteractive = state.mode === "interactive";
|
|
137006
|
-
const focused = state.activeSection;
|
|
137007
137008
|
const interactiveView = state.interactiveView;
|
|
137008
137009
|
const { stdout } = useStdout();
|
|
137009
137010
|
const cols = stdout?.columns ?? 80;
|
|
137010
|
-
const
|
|
137011
|
-
|
|
137012
|
-
{ key: "b", label: "Board", view: "board" },
|
|
137013
|
-
{ key: "a", label: "Agents", view: "agents" },
|
|
137014
|
-
{ key: "g", label: "Settings", view: "settings" },
|
|
137015
|
-
{ key: "t", label: "Git", view: "git" },
|
|
137016
|
-
{ key: "e", label: "Explorer", view: "files" }
|
|
137011
|
+
const tabs = [
|
|
137012
|
+
{ key: "m", label: "Main", kind: "main" },
|
|
137013
|
+
{ key: "b", label: "Board", kind: "interactive", view: "board" },
|
|
137014
|
+
{ key: "a", label: "Agents", kind: "interactive", view: "agents" },
|
|
137015
|
+
{ key: "g", label: "Settings", kind: "interactive", view: "settings" },
|
|
137016
|
+
{ key: "t", label: "Git", kind: "interactive", view: "git" },
|
|
137017
|
+
{ key: "e", label: "Explorer", kind: "interactive", view: "files" }
|
|
137017
137018
|
];
|
|
137018
|
-
if (rows < 10) return null;
|
|
137019
137019
|
const showHelpHint = cols >= 110;
|
|
137020
|
-
const
|
|
137021
|
-
const compactSections = cols < 90;
|
|
137022
|
-
const minimal = cols < 70;
|
|
137020
|
+
const fullLabels = cols >= 90;
|
|
137023
137021
|
const tiny = cols < 50;
|
|
137022
|
+
const compact = !fullLabels && !tiny;
|
|
137023
|
+
const isActive = (t) => t.kind === "main" ? !inInteractive : inInteractive && t.view === interactiveView;
|
|
137024
137024
|
if (tiny) {
|
|
137025
|
-
const
|
|
137026
|
-
const activeSectionLabel = activeSectionIdx >= 0 ? SECTION_ORDER[activeSectionIdx].charAt(0).toUpperCase() + SECTION_ORDER[activeSectionIdx].slice(1) : null;
|
|
137027
|
-
const activeInteractive = inInteractive ? interactiveTabs.find((t) => t.view === interactiveView) ?? null : null;
|
|
137025
|
+
const active = tabs.find(isActive);
|
|
137028
137026
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, paddingX: 1, children: [
|
|
137029
137027
|
/* @__PURE__ */ jsx(MiniLogo, {}),
|
|
137030
|
-
|
|
137031
|
-
activeInteractive && /* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(Text, { backgroundColor: "cyan", color: "black", bold: true, children: ` ${activeInteractive.key} ${activeInteractive.label} ` }) })
|
|
137028
|
+
active && /* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(Text, { backgroundColor: "cyan", color: "black", bold: true, children: ` ${active.key} ${active.label} ` }) })
|
|
137032
137029
|
] });
|
|
137033
137030
|
}
|
|
137034
137031
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, paddingX: 1, paddingY: 0, children: [
|
|
137035
137032
|
/* @__PURE__ */ jsx(MiniLogo, {}),
|
|
137036
|
-
|
|
137037
|
-
|
|
137038
|
-
const
|
|
137039
|
-
|
|
137040
|
-
if (minimal && !isActive) return null;
|
|
137041
|
-
return /* @__PURE__ */ jsx(Box, { marginRight: 1, flexShrink: 0, children: isActive ? /* @__PURE__ */ jsx(Text, { backgroundColor: "cyan", color: "black", bold: true, children: compactSections ? ` ${i + 1} ${label} ` : ` [${i + 1}] ${label} ` }) : compactSections ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: `[${i + 1}]` }) : /* @__PURE__ */ jsx(Text, { dimColor: true, children: `[${i + 1}] ${label}` }) }, section);
|
|
137042
|
-
}),
|
|
137043
|
-
!minimal && /* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "\u2502" }) }),
|
|
137044
|
-
interactiveTabs.map(({ key, label, view }) => {
|
|
137045
|
-
const isActive = inInteractive && view === interactiveView;
|
|
137046
|
-
if (minimal && !isActive) return null;
|
|
137047
|
-
return /* @__PURE__ */ jsx(Box, { marginRight: 1, flexShrink: 0, children: isActive ? /* @__PURE__ */ jsx(Text, { backgroundColor: "cyan", color: "black", bold: true, children: compactInteractive ? ` ${key} ${label} ` : ` [${key}] ${label} ` }) : compactInteractive ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: `[${key}]` }) : /* @__PURE__ */ jsx(Text, { dimColor: true, children: `[${key}] ${label}` }) }, view);
|
|
137033
|
+
/* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "\u2502" }) }),
|
|
137034
|
+
tabs.map((t) => {
|
|
137035
|
+
const active = isActive(t);
|
|
137036
|
+
return /* @__PURE__ */ jsx(Box, { marginRight: 1, flexShrink: 0, children: active ? /* @__PURE__ */ jsx(Text, { backgroundColor: "cyan", color: "black", bold: true, children: compact ? ` ${t.key} ` : ` [${t.key}] ${t.label} ` }) : compact ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: `[${t.key}]` }) : /* @__PURE__ */ jsx(Text, { dimColor: true, children: `[${t.key}] ${t.label}` }) }, t.key);
|
|
137048
137037
|
}),
|
|
137049
137038
|
/* @__PURE__ */ jsx(Box, { flexGrow: 1 }),
|
|
137050
137039
|
showHelpHint && /* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "[?] help [q] quit" }) })
|
|
@@ -137935,6 +137924,14 @@ function SettingsInteractiveView({ state }) {
|
|
|
137935
137924
|
setDetailFocused((f) => !f);
|
|
137936
137925
|
return;
|
|
137937
137926
|
}
|
|
137927
|
+
if (key.leftArrow) {
|
|
137928
|
+
setDetailFocused(false);
|
|
137929
|
+
return;
|
|
137930
|
+
}
|
|
137931
|
+
if (key.rightArrow) {
|
|
137932
|
+
setDetailFocused(true);
|
|
137933
|
+
return;
|
|
137934
|
+
}
|
|
137938
137935
|
if (!detailFocused) {
|
|
137939
137936
|
if (key.upArrow || input === "k") {
|
|
137940
137937
|
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
@@ -139112,7 +139109,7 @@ function DashboardApp({ controller }) {
|
|
|
139112
139109
|
controller.setInteractiveView("files");
|
|
139113
139110
|
return;
|
|
139114
139111
|
}
|
|
139115
|
-
if (input === "
|
|
139112
|
+
if (input === "m" || input === "s") {
|
|
139116
139113
|
if (state.mode === "interactive") {
|
|
139117
139114
|
controller.setMode("status");
|
|
139118
139115
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Fusion CLI: HTTP API server, daemon, dashboard launcher, and task tooling for the Fusion AI coding agent.",
|
|
6
6
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
|
@@ -76,9 +76,9 @@
|
|
|
76
76
|
"vitest": "^3.1.0",
|
|
77
77
|
"yaml": "^2.8.3",
|
|
78
78
|
"@fusion/core": "0.1.0",
|
|
79
|
+
"@fusion/dashboard": "0.1.0",
|
|
79
80
|
"@fusion/engine": "0.1.0",
|
|
80
|
-
"@fusion/pi-claude-cli": "0.3.1"
|
|
81
|
-
"@fusion/dashboard": "0.1.0"
|
|
81
|
+
"@fusion/pi-claude-cli": "0.3.1"
|
|
82
82
|
},
|
|
83
83
|
"repository": {
|
|
84
84
|
"type": "git",
|