rrce-workflow 0.3.11 → 0.3.12

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.
Files changed (2) hide show
  1. package/dist/index.js +88 -49
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -4213,7 +4213,7 @@ var Header;
4213
4213
  var init_Header = __esm({
4214
4214
  "src/mcp/ui/Header.tsx"() {
4215
4215
  "use strict";
4216
- Header = () => /* @__PURE__ */ jsx(Box, { flexDirection: "column", paddingBottom: 1, children: /* @__PURE__ */ jsx(Box, { borderStyle: "double", borderColor: "cyan", paddingX: 2, justifyContent: "center", children: /* @__PURE__ */ jsx(Text, { bold: true, color: "white", children: " RRCE MCP Hub " }) }) });
4216
+ Header = () => /* @__PURE__ */ jsx(Box, { flexDirection: "column", paddingBottom: 1, children: /* @__PURE__ */ jsx(Box, { borderStyle: "double", borderColor: "white", paddingX: 2, justifyContent: "center", children: /* @__PURE__ */ jsx(Text, { bold: true, color: "white", children: " RRCE MCP Hub " }) }) });
4217
4217
  }
4218
4218
  });
4219
4219
 
@@ -4640,15 +4640,21 @@ function SimpleSelect({
4640
4640
  onCancel?.();
4641
4641
  }
4642
4642
  });
4643
- return /* @__PURE__ */ jsxs2(Box3, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1, children: [
4643
+ return /* @__PURE__ */ jsxs2(Box3, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 1, children: [
4644
4644
  message && /* @__PURE__ */ jsx4(Box3, { marginBottom: 1, children: /* @__PURE__ */ jsx4(Text3, { bold: true, children: message }) }),
4645
4645
  items.map((item, index) => {
4646
4646
  const isSelected = index === selectedIndex;
4647
4647
  const isChecked = isMulti && selectedValues.has(item.value);
4648
- return /* @__PURE__ */ jsxs2(Box3, { children: [
4649
- /* @__PURE__ */ jsx4(Text3, { color: isSelected ? "cyan" : "white", children: isSelected ? "> " : " " }),
4650
- isMulti && /* @__PURE__ */ jsx4(Text3, { color: isChecked ? "green" : "gray", children: isChecked ? "[x] " : "[ ] " }),
4651
- /* @__PURE__ */ jsx4(Text3, { color: isSelected ? "cyan" : "white", children: item.label })
4648
+ return /* @__PURE__ */ jsxs2(Box3, { flexDirection: "column", children: [
4649
+ /* @__PURE__ */ jsxs2(Box3, { children: [
4650
+ /* @__PURE__ */ jsx4(Text3, { color: isSelected ? "cyan" : "white", children: isSelected ? "> " : " " }),
4651
+ isMulti && /* @__PURE__ */ jsx4(Text3, { color: isChecked ? "green" : "gray", children: isChecked ? "[x] " : "[ ] " }),
4652
+ /* @__PURE__ */ jsx4(Text3, { color: isSelected ? "cyan" : "white", children: item.label.split("\n")[0] })
4653
+ ] }),
4654
+ item.label.includes("\n") && /* @__PURE__ */ jsxs2(Box3, { paddingLeft: isSelected ? 2 : 2, children: [
4655
+ isMulti && /* @__PURE__ */ jsx4(Text3, { children: " " }),
4656
+ /* @__PURE__ */ jsx4(Text3, { dimColor: true, children: item.label.split("\n").slice(1).join("\n") })
4657
+ ] })
4652
4658
  ] }, item.key || String(item.value));
4653
4659
  }),
4654
4660
  /* @__PURE__ */ jsx4(Box3, { marginTop: 1, children: /* @__PURE__ */ jsx4(Text3, { color: "gray", children: isMulti ? "Space to toggle, Enter to confirm, Esc to cancel" : "Enter to select, Esc to cancel" }) })
@@ -4680,17 +4686,21 @@ var init_ProjectsView = __esm({
4680
4686
  init_ConfigContext();
4681
4687
  init_indexing_jobs();
4682
4688
  init_config_utils();
4683
- ProjectsView = ({ config: initialConfig, projects: allProjects, onConfigChange }) => {
4689
+ ProjectsView = ({ config: initialConfig, projects: allProjects, onConfigChange, workspacePath }) => {
4684
4690
  const { driftReports, checkAllDrift } = useConfig();
4685
4691
  const [config, setConfig] = useState3(initialConfig);
4686
4692
  const [indexingStats, setIndexingStats] = useState3({});
4687
4693
  const sortedProjects = useMemo3(() => {
4688
4694
  return [...allProjects].sort((a, b) => {
4695
+ const aIsCurrent = a.path === workspacePath;
4696
+ const bIsCurrent = b.path === workspacePath;
4697
+ if (aIsCurrent && !bIsCurrent) return -1;
4698
+ if (!aIsCurrent && bIsCurrent) return 1;
4689
4699
  const byName = a.name.localeCompare(b.name);
4690
4700
  if (byName !== 0) return byName;
4691
4701
  return projectKey(a).localeCompare(projectKey(b));
4692
4702
  });
4693
- }, [allProjects]);
4703
+ }, [allProjects, workspacePath]);
4694
4704
  useEffect3(() => {
4695
4705
  const updateStats = () => {
4696
4706
  const next = {};
@@ -4736,15 +4746,18 @@ var init_ProjectsView = __esm({
4736
4746
  const drift = driftReports[p.path];
4737
4747
  const idx = indexingStats[p.name];
4738
4748
  let label = formatProjectLabel(p);
4749
+ if (drift?.hasDrift) {
4750
+ label += ` \u26A0`;
4751
+ }
4739
4752
  if (idx?.state === "running") {
4740
- label += ` [\u27F3 Indexing ${idx.itemsDone}/${idx.itemsTotal ?? "?"}]`;
4753
+ label += `
4754
+ \u27F3 Indexing ${idx.itemsDone}/${idx.itemsTotal ?? "?"}`;
4741
4755
  } else if (idx?.state === "failed") {
4742
- label += ` [\u2715 Index Fail]`;
4756
+ label += `
4757
+ \u2715 Index Fail`;
4743
4758
  } else if (idx?.enabled && idx?.state === "complete") {
4744
- label += ` [\u2713 Indexed]`;
4745
- }
4746
- if (drift?.hasDrift) {
4747
- label += ` \u26A0`;
4759
+ label += `
4760
+ \u2713 Indexed`;
4748
4761
  }
4749
4762
  return {
4750
4763
  label,
@@ -4779,7 +4792,7 @@ var init_ProjectsView = __esm({
4779
4792
  setConfig(newConfig);
4780
4793
  onConfigChange?.();
4781
4794
  };
4782
- return /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "cyan", flexGrow: 1, children: [
4795
+ return /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "white", flexGrow: 1, children: [
4783
4796
  /* @__PURE__ */ jsxs3(Box4, { justifyContent: "space-between", children: [
4784
4797
  /* @__PURE__ */ jsxs3(Box4, { children: [
4785
4798
  /* @__PURE__ */ jsx5(Text4, { bold: true, color: "cyan", children: " Projects " }),
@@ -4791,7 +4804,7 @@ var init_ProjectsView = __esm({
4791
4804
  ] }),
4792
4805
  /* @__PURE__ */ jsx5(Box4, { children: /* @__PURE__ */ jsx5(Text4, { color: "dim", children: "a:Toggle Auto u:Drift Space:Select Enter:Save" }) })
4793
4806
  ] }),
4794
- /* @__PURE__ */ jsx5(Text4, { color: "dim", children: " Manage which projects are exposed to the MCP server. Indexing status shown in-line." }),
4807
+ /* @__PURE__ */ jsx5(Text4, { color: "dim", children: " Manage which projects are exposed to the MCP server." }),
4795
4808
  /* @__PURE__ */ jsx5(Box4, { marginTop: 1, flexDirection: "column", flexGrow: 1, children: /* @__PURE__ */ jsx5(
4796
4809
  SimpleSelect,
4797
4810
  {
@@ -4884,7 +4897,7 @@ var init_TasksView = __esm({
4884
4897
  init_ConfigContext();
4885
4898
  init_ui_helpers();
4886
4899
  STATUS_CYCLE = ["pending", "in_progress", "blocked", "complete"];
4887
- TasksView = ({ projects: allProjects }) => {
4900
+ TasksView = ({ projects: allProjects, workspacePath }) => {
4888
4901
  const { driftReports } = useConfig();
4889
4902
  const [expanded, setExpanded] = useState4(() => /* @__PURE__ */ new Set());
4890
4903
  const [selectedIndex, setSelectedIndex] = useState4(0);
@@ -4892,11 +4905,29 @@ var init_TasksView = __esm({
4892
4905
  const [errorLine, setErrorLine] = useState4(null);
4893
4906
  const sortedProjects = useMemo4(() => {
4894
4907
  return [...allProjects].sort((a, b) => {
4908
+ const aIsCurrent = a.path === workspacePath;
4909
+ const bIsCurrent = b.path === workspacePath;
4910
+ if (aIsCurrent && !bIsCurrent) return -1;
4911
+ if (!aIsCurrent && bIsCurrent) return 1;
4895
4912
  const byName = a.name.localeCompare(b.name);
4896
4913
  if (byName !== 0) return byName;
4897
4914
  return projectKey2(a).localeCompare(projectKey2(b));
4898
4915
  });
4899
- }, [allProjects]);
4916
+ }, [allProjects, workspacePath]);
4917
+ useEffect4(() => {
4918
+ const current = sortedProjects.find((p) => p.path === workspacePath);
4919
+ if (current) {
4920
+ const k = projectKey2(current);
4921
+ setExpanded((prev) => {
4922
+ const next = new Set(prev);
4923
+ if (!next.has(k)) {
4924
+ next.add(k);
4925
+ refreshTasksForProject(current);
4926
+ }
4927
+ return next;
4928
+ });
4929
+ }
4930
+ }, [sortedProjects, workspacePath]);
4900
4931
  const refreshTasksForProject = (project) => {
4901
4932
  const res = listProjectTasks(project);
4902
4933
  setTaskCache((prev) => ({ ...prev, [projectKey2(project)]: res.tasks }));
@@ -4981,7 +5012,7 @@ var init_TasksView = __esm({
4981
5012
  }, [flattenedRows]);
4982
5013
  const selectedRow = flattenedRows[selectedIndex];
4983
5014
  const selectedTask = selectedRow?.kind === "task" && selectedRow.task.task_slug !== "__none__" ? selectedRow.task : null;
4984
- return /* @__PURE__ */ jsxs4(Box5, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "cyan", flexGrow: 1, children: [
5015
+ return /* @__PURE__ */ jsxs4(Box5, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "white", flexGrow: 1, children: [
4985
5016
  /* @__PURE__ */ jsxs4(Box5, { justifyContent: "space-between", children: [
4986
5017
  /* @__PURE__ */ jsxs4(Box5, { children: [
4987
5018
  /* @__PURE__ */ jsx6(Text5, { bold: true, color: "cyan", children: "\u2699 Tasks" }),
@@ -5033,20 +5064,23 @@ var init_TasksView = __esm({
5033
5064
  }),
5034
5065
  /* @__PURE__ */ jsx6(Box5, { marginTop: 1, children: /* @__PURE__ */ jsx6(Text5, { color: "gray", children: "\u25B2/\u25BC navigate \u2022 Enter expand/collapse \u2022 s cycle status \u2022 R refresh" }) })
5035
5066
  ] }),
5036
- /* @__PURE__ */ jsx6(Box5, { flexDirection: "column", width: "45%", paddingLeft: 2, children: !selectedTask ? /* @__PURE__ */ jsxs4(Box5, { flexDirection: "column", justifyContent: "center", alignItems: "center", gap: 1, children: [
5067
+ /* @__PURE__ */ jsx6(Box5, { flexDirection: "column", width: "45%", paddingLeft: 2, children: !selectedTask ? /* @__PURE__ */ jsxs4(Box5, { flexDirection: "column", justifyContent: "center", alignItems: "center", gap: 1, flexGrow: 1, children: [
5037
5068
  /* @__PURE__ */ jsx6(Text5, { bold: true, color: "dim", children: "\u2500 No Task Selected \u2500" }),
5038
5069
  /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "Use \u2191/\u2193 to navigate, Enter to expand projects" }),
5039
5070
  /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "Press 's' to cycle task status" })
5040
5071
  ] }) : /* @__PURE__ */ jsxs4(Box5, { flexDirection: "column", children: [
5041
- /* @__PURE__ */ jsx6(Text5, { bold: true, color: "cyan", children: selectedTask.title || selectedTask.task_slug }),
5042
- selectedTask.summary && /* @__PURE__ */ jsx6(Text5, { children: selectedTask.summary }),
5043
- /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, borderStyle: "single", borderColor: "dim", padding: 1, flexDirection: "column", children: [
5044
- /* @__PURE__ */ jsx6(Text5, { bold: true, color: "cyan", children: "\u{1F4CB} Status" }),
5045
- /* @__PURE__ */ jsxs4(Box5, { flexDirection: "column", marginTop: 0, children: [
5072
+ /* @__PURE__ */ jsxs4(Box5, { marginBottom: 1, flexDirection: "column", children: [
5073
+ /* @__PURE__ */ jsx6(Text5, { bold: true, color: "cyan", children: selectedTask.title || selectedTask.task_slug }),
5074
+ selectedTask.summary && /* @__PURE__ */ jsx6(Text5, { color: "white", children: selectedTask.summary })
5075
+ ] }),
5076
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" }),
5077
+ /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, paddingX: 1, flexDirection: "column", children: [
5078
+ /* @__PURE__ */ jsx6(Text5, { bold: true, color: "white", children: "\u{1F4CB} STATUS" }),
5079
+ /* @__PURE__ */ jsxs4(Box5, { flexDirection: "column", marginTop: 1, children: [
5046
5080
  /* @__PURE__ */ jsxs4(Text5, { children: [
5047
- /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "Status:" }),
5081
+ /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "Status: " }),
5048
5082
  " ",
5049
- /* @__PURE__ */ jsx6(Text5, { children: selectedTask.status || "unknown" })
5083
+ /* @__PURE__ */ jsx6(Text5, { color: getStatusColor(selectedTask.status || ""), children: selectedTask.status || "unknown" })
5050
5084
  ] }),
5051
5085
  /* @__PURE__ */ jsxs4(Text5, { children: [
5052
5086
  /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "Updated:" }),
@@ -5054,7 +5088,7 @@ var init_TasksView = __esm({
5054
5088
  /* @__PURE__ */ jsx6(Text5, { children: selectedTask.updated_at || "\u2014" })
5055
5089
  ] }),
5056
5090
  /* @__PURE__ */ jsxs4(Text5, { children: [
5057
- /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "Tags:" }),
5091
+ /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "Tags: " }),
5058
5092
  " ",
5059
5093
  " ",
5060
5094
  (() => {
@@ -5067,9 +5101,10 @@ var init_TasksView = __esm({
5067
5101
  ] })
5068
5102
  ] })
5069
5103
  ] }),
5070
- /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, borderStyle: "single", borderColor: "dim", padding: 1, flexDirection: "column", children: [
5071
- /* @__PURE__ */ jsx6(Text5, { bold: true, color: "cyan", children: "\u{1F4CB} Checklist" }),
5072
- selectedTask.checklist && selectedTask.checklist.length > 0 && /* @__PURE__ */ jsx6(Box5, { marginTop: 0, flexDirection: "column", children: /* @__PURE__ */ jsxs4(Box5, { children: [
5104
+ /* @__PURE__ */ jsx6(Box5, { marginTop: 1, children: /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" }) }),
5105
+ /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, paddingX: 1, flexDirection: "column", children: [
5106
+ /* @__PURE__ */ jsx6(Text5, { bold: true, color: "white", children: "\u{1F4CB} CHECKLIST" }),
5107
+ selectedTask.checklist && selectedTask.checklist.length > 0 && /* @__PURE__ */ jsx6(Box5, { marginTop: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs4(Box5, { marginBottom: 1, children: [
5073
5108
  /* @__PURE__ */ jsx6(Text5, { backgroundColor: "white", children: getProgressBar(getChecklistProgress(selectedTask.checklist).percentage) }),
5074
5109
  /* @__PURE__ */ jsxs4(Text5, { dimColor: true, children: [
5075
5110
  " ",
@@ -5082,17 +5117,21 @@ var init_TasksView = __esm({
5082
5117
  "%)"
5083
5118
  ] })
5084
5119
  ] }) }),
5085
- (selectedTask.checklist || []).length === 0 ? /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "\u2014" }) : (selectedTask.checklist || []).slice(0, 12).map((c, i) => /* @__PURE__ */ jsxs4(Text5, { children: [
5086
- /* @__PURE__ */ jsxs4(Text5, { color: "dim", children: [
5087
- getCheckbox(c.status || "pending"),
5088
- " "
5089
- ] }),
5090
- c.label || c.id || "item"
5091
- ] }, c.id || i))
5120
+ (selectedTask.checklist || []).length === 0 ? /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "\u2014" }) : (selectedTask.checklist || []).slice(0, 12).map((c, i) => {
5121
+ const isDone = c.status === "done";
5122
+ return /* @__PURE__ */ jsxs4(Text5, { color: isDone ? "dim" : "white", children: [
5123
+ /* @__PURE__ */ jsxs4(Text5, { color: isDone ? "green" : "dim", children: [
5124
+ getCheckbox(c.status || "pending"),
5125
+ " "
5126
+ ] }),
5127
+ c.label || c.id || "item"
5128
+ ] }, c.id || i);
5129
+ })
5092
5130
  ] }),
5093
- /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, borderStyle: "single", borderColor: "dim", padding: 1, flexDirection: "column", children: [
5094
- /* @__PURE__ */ jsx6(Text5, { bold: true, color: "cyan", children: "\u{1F916} Agents" }),
5095
- !selectedTask.agents ? /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "\u2014" }) : Object.entries(selectedTask.agents).map(([agent, info]) => /* @__PURE__ */ jsxs4(Text5, { children: [
5131
+ /* @__PURE__ */ jsx6(Box5, { marginTop: 1, children: /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" }) }),
5132
+ /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, paddingX: 1, flexDirection: "column", children: [
5133
+ /* @__PURE__ */ jsx6(Text5, { bold: true, color: "white", children: "\u{1F916} AGENTS" }),
5134
+ /* @__PURE__ */ jsx6(Box5, { marginTop: 1, flexDirection: "column", children: !selectedTask.agents ? /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "\u2014" }) : Object.entries(selectedTask.agents).map(([agent, info]) => /* @__PURE__ */ jsxs4(Text5, { children: [
5096
5135
  /* @__PURE__ */ jsxs4(Text5, { color: "dim", children: [
5097
5136
  "- ",
5098
5137
  agent,
@@ -5102,16 +5141,16 @@ var init_TasksView = __esm({
5102
5141
  info?.status === "in_progress" && /* @__PURE__ */ jsx6(Text5, { color: "yellow", children: "\u27F3" }),
5103
5142
  info?.status === "pending" && /* @__PURE__ */ jsx6(Text5, { color: "dim", children: "\u25CB" }),
5104
5143
  info?.blocked && /* @__PURE__ */ jsx6(Text5, { color: "red", children: "\u2715" }),
5105
- /* @__PURE__ */ jsxs4(Text5, { dimColor: true, children: [
5144
+ /* @__PURE__ */ jsxs4(Text5, { color: info?.status === "complete" ? "dim" : "white", children: [
5106
5145
  " ",
5107
5146
  info?.status || "\u2014"
5108
5147
  ] }),
5109
5148
  info?.artifact && /* @__PURE__ */ jsxs4(Text5, { dimColor: true, children: [
5110
- "(",
5149
+ " (",
5111
5150
  info.artifact,
5112
5151
  ")"
5113
5152
  ] })
5114
- ] }, agent))
5153
+ ] }, agent)) })
5115
5154
  ] })
5116
5155
  ] }) })
5117
5156
  ] })
@@ -5140,7 +5179,7 @@ var init_LogViewer = __esm({
5140
5179
  if (log.includes("Success")) return /* @__PURE__ */ jsx7(Text6, { color: "green", children: log });
5141
5180
  return /* @__PURE__ */ jsx7(Text6, { children: log });
5142
5181
  };
5143
- return /* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", borderStyle: "round", borderColor: "dim", paddingX: 1, height: height + 2, flexGrow: 1, children: [
5182
+ return /* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", borderStyle: "round", borderColor: "white", paddingX: 1, height: height + 2, flexGrow: 1, children: [
5144
5183
  padding.map((_, i) => /* @__PURE__ */ jsx7(Text6, { children: " " }, `empty-${i}`)),
5145
5184
  visibleLogs.map((log, i) => /* @__PURE__ */ jsx7(Box6, { children: formatLog(log) }, `log-${i}`))
5146
5185
  ] });
@@ -5157,7 +5196,7 @@ var init_StatusBoard = __esm({
5157
5196
  "src/mcp/ui/StatusBoard.tsx"() {
5158
5197
  "use strict";
5159
5198
  StatusBoard = ({ exposedLabel, port, pid, running, hasDrift }) => {
5160
- return /* @__PURE__ */ jsx8(Box7, { borderStyle: "single", borderColor: "cyan", paddingX: 1, flexGrow: 1, children: /* @__PURE__ */ jsxs6(Text7, { children: [
5199
+ return /* @__PURE__ */ jsx8(Box7, { borderStyle: "single", borderColor: "white", paddingX: 1, flexGrow: 1, children: /* @__PURE__ */ jsxs6(Text7, { children: [
5161
5200
  running ? /* @__PURE__ */ jsx8(Text7, { color: "green", children: "\u25CF RUNNING" }) : /* @__PURE__ */ jsx8(Text7, { color: "red", children: "\u25CF STOPPED" }),
5162
5201
  " ",
5163
5202
  "\u2502",
@@ -5266,6 +5305,7 @@ var init_App = __esm({
5266
5305
  pid: process.pid,
5267
5306
  running: false
5268
5307
  });
5308
+ const workspacePath = useMemo5(() => detectWorkspaceRoot(), []);
5269
5309
  const isRAGEnabled = useMemo5(() => {
5270
5310
  return exposedProjects.some((p) => {
5271
5311
  const cfg = findProjectConfig(config, { name: p.name, path: p.path });
@@ -5284,7 +5324,6 @@ var init_App = __esm({
5284
5324
  { id: "projects", label: "Projects" }
5285
5325
  ];
5286
5326
  }, []);
5287
- const workspacePath = detectWorkspaceRoot();
5288
5327
  const installStatus = checkInstallStatus(workspacePath);
5289
5328
  const installedCount = [
5290
5329
  installStatus.antigravity,
@@ -5375,8 +5414,8 @@ var init_App = __esm({
5375
5414
  }
5376
5415
  ),
5377
5416
  activeTab === "logs" && /* @__PURE__ */ jsx10(LogViewer, { logs, height: contentHeight }),
5378
- activeTab === "tasks" && /* @__PURE__ */ jsx10(TasksView, { projects }),
5379
- activeTab === "projects" && /* @__PURE__ */ jsx10(ProjectsView, { config, projects, onConfigChange: handleConfigChange })
5417
+ activeTab === "tasks" && /* @__PURE__ */ jsx10(TasksView, { projects, workspacePath }),
5418
+ activeTab === "projects" && /* @__PURE__ */ jsx10(ProjectsView, { config, projects, onConfigChange: handleConfigChange, workspacePath })
5380
5419
  ] }),
5381
5420
  /* @__PURE__ */ jsx10(Box9, { marginTop: 0, children: /* @__PURE__ */ jsx10(
5382
5421
  StatusBoard,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rrce-workflow",
3
- "version": "0.3.11",
3
+ "version": "0.3.12",
4
4
  "description": "RRCE-Workflow TUI - Agentic code workflow generator for AI-assisted development",
5
5
  "author": "RRCE Team",
6
6
  "license": "MIT",