rrce-workflow 0.2.82 → 0.2.84

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 +73 -52
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2260,7 +2260,7 @@ function getExposedProjects() {
2260
2260
  }
2261
2261
  }
2262
2262
  }
2263
- return potentialProjects.filter((project) => isProjectExposed(config, project.name, project.path));
2263
+ return potentialProjects.filter((project) => isProjectExposed(config, project.name, project.sourcePath || project.path));
2264
2264
  }
2265
2265
  function getRAGIndexPath(project) {
2266
2266
  const scanRoot = project.path || project.dataPath;
@@ -2272,18 +2272,18 @@ function detectActiveProject(knownProjects) {
2272
2272
  const config = loadMCPConfig();
2273
2273
  const knownPaths = config.projects.map((p) => p.path).filter((p) => !!p);
2274
2274
  const all = projectService.scan({ knownPaths });
2275
- scanList = all.filter((project) => isProjectExposed(config, project.name, project.path));
2275
+ scanList = all.filter((project) => isProjectExposed(config, project.name, project.sourcePath || project.path));
2276
2276
  }
2277
2277
  return findClosestProject(scanList);
2278
2278
  }
2279
2279
  function getProjectContext(projectName) {
2280
2280
  const config = loadMCPConfig();
2281
2281
  const projects = projectService.scan();
2282
- const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.path));
2282
+ const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.sourcePath || p.path));
2283
2283
  if (!project) {
2284
2284
  return null;
2285
2285
  }
2286
- const permissions = getProjectPermissions(config, projectName, project.path);
2286
+ const permissions = getProjectPermissions(config, projectName, project.sourcePath || project.path);
2287
2287
  if (!permissions.knowledge) {
2288
2288
  return null;
2289
2289
  }
@@ -2299,11 +2299,11 @@ function getProjectContext(projectName) {
2299
2299
  function getProjectTasks(projectName) {
2300
2300
  const config = loadMCPConfig();
2301
2301
  const projects = projectService.scan();
2302
- const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.path));
2302
+ const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.sourcePath || p.path));
2303
2303
  if (!project) {
2304
2304
  return [];
2305
2305
  }
2306
- const permissions = getProjectPermissions(config, projectName, project.path);
2306
+ const permissions = getProjectPermissions(config, projectName, project.sourcePath || project.path);
2307
2307
  if (!permissions.tasks) {
2308
2308
  return [];
2309
2309
  }
@@ -2335,10 +2335,10 @@ async function searchKnowledge(query, projectFilter) {
2335
2335
  const queryLower = query.toLowerCase();
2336
2336
  for (const project of projects) {
2337
2337
  if (projectFilter && project.name !== projectFilter) continue;
2338
- const permissions = getProjectPermissions(config, project.name, project.path);
2338
+ const permissions = getProjectPermissions(config, project.name, project.sourcePath || project.path);
2339
2339
  if (!permissions.knowledge || !project.knowledgePath) continue;
2340
2340
  const projConfig = config.projects.find(
2341
- (p) => p.path && normalizeProjectPath(p.path) === normalizeProjectPath(project.path) || !p.path && p.name === project.name
2341
+ (p) => p.path && normalizeProjectPath(p.path) === normalizeProjectPath(project.sourcePath || project.path) || !p.path && p.name === project.name
2342
2342
  );
2343
2343
  const useRAG = projConfig?.semanticSearch?.enabled;
2344
2344
  if (useRAG) {
@@ -2396,7 +2396,7 @@ async function indexKnowledge(projectName, force = false) {
2396
2396
  return { success: false, message: `Project '${projectName}' not found`, filesIndexed: 0, filesSkipped: 0 };
2397
2397
  }
2398
2398
  const projConfig = config.projects.find(
2399
- (p) => p.path && normalizeProjectPath(p.path) === normalizeProjectPath(project.path) || !p.path && p.name === project.name
2399
+ (p) => p.path && normalizeProjectPath(p.path) === normalizeProjectPath(project.sourcePath || project.path) || !p.path && p.name === project.name
2400
2400
  ) || (project.source === "global" ? { semanticSearch: { enabled: true, model: "Xenova/all-MiniLM-L6-v2" } } : void 0);
2401
2401
  const isEnabled = projConfig?.semanticSearch?.enabled || project.semanticSearchEnabled;
2402
2402
  if (!isEnabled) {
@@ -2542,7 +2542,7 @@ All file operations should be relative to WORKSPACE_ROOT shown above.
2542
2542
  function getTask(projectName, taskSlug) {
2543
2543
  const config = loadMCPConfig();
2544
2544
  const projects = projectService.scan();
2545
- const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.path));
2545
+ const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.sourcePath || p.path));
2546
2546
  if (!project || !project.tasksPath) return null;
2547
2547
  const metaPath = path16.join(project.tasksPath, taskSlug, "meta.json");
2548
2548
  if (!fs14.existsSync(metaPath)) return null;
@@ -2555,7 +2555,7 @@ function getTask(projectName, taskSlug) {
2555
2555
  async function createTask(projectName, taskSlug, taskData) {
2556
2556
  const config = loadMCPConfig();
2557
2557
  const projects = projectService.scan();
2558
- const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.path));
2558
+ const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.sourcePath || p.path));
2559
2559
  if (!project || !project.tasksPath) {
2560
2560
  throw new Error(`Project '${projectName}' not found or not configured with a tasks path.`);
2561
2561
  }
@@ -2610,7 +2610,7 @@ async function updateTask(projectName, taskSlug, taskData) {
2610
2610
  };
2611
2611
  const config = loadMCPConfig();
2612
2612
  const projects = projectService.scan();
2613
- const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.path));
2613
+ const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.sourcePath || p.path));
2614
2614
  if (!project || !project.tasksPath) return null;
2615
2615
  const metaPath = path16.join(project.tasksPath, taskSlug, "meta.json");
2616
2616
  fs14.writeFileSync(metaPath, JSON.stringify(updatedMeta, null, 2));
@@ -2619,7 +2619,7 @@ async function updateTask(projectName, taskSlug, taskData) {
2619
2619
  function deleteTask(projectName, taskSlug) {
2620
2620
  const config = loadMCPConfig();
2621
2621
  const projects = projectService.scan();
2622
- const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.path));
2622
+ const project = projects.find((p) => p.name === projectName && isProjectExposed(config, p.name, p.sourcePath || p.path));
2623
2623
  if (!project || !project.tasksPath) return false;
2624
2624
  const taskDir = path16.join(project.tasksPath, taskSlug);
2625
2625
  if (!fs14.existsSync(taskDir)) return false;
@@ -2727,6 +2727,7 @@ var init_resources2 = __esm({
2727
2727
 
2728
2728
  // src/mcp/prompts.ts
2729
2729
  import * as path17 from "path";
2730
+ import * as fs15 from "fs";
2730
2731
  function getAllPrompts() {
2731
2732
  const prompts = loadPromptsFromDir(getAgentCorePromptsDir());
2732
2733
  return prompts.map((p) => {
@@ -2765,7 +2766,11 @@ function getPromptDef(name) {
2765
2766
  }
2766
2767
  function renderPromptWithContext(content, args) {
2767
2768
  const renderArgs = { ...args };
2768
- const activeProject = detectActiveProject();
2769
+ let activeProject = detectActiveProject();
2770
+ if (!activeProject) {
2771
+ projectService.refresh();
2772
+ activeProject = detectActiveProject();
2773
+ }
2769
2774
  const DEFAULT_RRCE_HOME = getEffectiveGlobalPath();
2770
2775
  let resolvedRrceData = ".rrce-workflow/";
2771
2776
  let resolvedRrceHome = DEFAULT_RRCE_HOME;
@@ -2782,6 +2787,21 @@ function renderPromptWithContext(content, args) {
2782
2787
  const workspacesDir = path17.dirname(activeProject.dataPath);
2783
2788
  resolvedRrceHome = path17.dirname(workspacesDir);
2784
2789
  }
2790
+ } else {
2791
+ try {
2792
+ const workspaceRoot = detectWorkspaceRoot();
2793
+ const workspaceName = path17.basename(workspaceRoot);
2794
+ const globalWorkspacePath = path17.join(DEFAULT_RRCE_HOME, "workspaces", workspaceName);
2795
+ if (fs15.existsSync(globalWorkspacePath)) {
2796
+ resolvedRrceData = globalWorkspacePath;
2797
+ resolvedWorkspaceRoot = workspaceRoot;
2798
+ resolvedWorkspaceName = workspaceName;
2799
+ if (!resolvedRrceData.endsWith("/") && !resolvedRrceData.endsWith("\\")) {
2800
+ resolvedRrceData += "/";
2801
+ }
2802
+ }
2803
+ } catch (e) {
2804
+ }
2785
2805
  }
2786
2806
  if (!renderArgs["RRCE_DATA"]) renderArgs["RRCE_DATA"] = resolvedRrceData;
2787
2807
  if (!renderArgs["RRCE_HOME"]) renderArgs["RRCE_HOME"] = resolvedRrceHome;
@@ -2810,6 +2830,7 @@ var init_prompts2 = __esm({
2810
2830
  init_prompts();
2811
2831
  init_resources();
2812
2832
  init_paths();
2833
+ init_detection_service();
2813
2834
  }
2814
2835
  });
2815
2836
 
@@ -3323,7 +3344,7 @@ Hidden projects: ${projects.length - exposedCount}`,
3323
3344
  }
3324
3345
  async function handleConfigureGlobalPath() {
3325
3346
  const { resolveGlobalPath: resolveGlobalPath2 } = await Promise.resolve().then(() => (init_tui_utils(), tui_utils_exports));
3326
- const fs21 = await import("fs");
3347
+ const fs22 = await import("fs");
3327
3348
  const path21 = await import("path");
3328
3349
  note3(
3329
3350
  `MCP Hub requires a ${pc5.bold("global storage path")} to store its configuration
@@ -3338,8 +3359,8 @@ locally in each project. MCP needs a central location.`,
3338
3359
  return false;
3339
3360
  }
3340
3361
  try {
3341
- if (!fs21.existsSync(resolvedPath)) {
3342
- fs21.mkdirSync(resolvedPath, { recursive: true });
3362
+ if (!fs22.existsSync(resolvedPath)) {
3363
+ fs22.mkdirSync(resolvedPath, { recursive: true });
3343
3364
  }
3344
3365
  const config = loadMCPConfig();
3345
3366
  saveMCPConfig(config);
@@ -3993,7 +4014,7 @@ __export(App_exports, {
3993
4014
  });
3994
4015
  import { useState as useState5, useEffect as useEffect4, useMemo as useMemo2, useCallback } from "react";
3995
4016
  import { Box as Box11, useInput as useInput4, useApp } from "ink";
3996
- import fs15 from "fs";
4017
+ import fs16 from "fs";
3997
4018
  import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
3998
4019
  var App;
3999
4020
  var init_App = __esm({
@@ -4078,18 +4099,18 @@ var init_App = __esm({
4078
4099
  useEffect4(() => {
4079
4100
  const logPath = getLogFilePath();
4080
4101
  let lastSize = 0;
4081
- if (fs15.existsSync(logPath)) {
4082
- const stats = fs15.statSync(logPath);
4102
+ if (fs16.existsSync(logPath)) {
4103
+ const stats = fs16.statSync(logPath);
4083
4104
  lastSize = stats.size;
4084
4105
  }
4085
4106
  const interval = setInterval(() => {
4086
- if (fs15.existsSync(logPath)) {
4087
- const stats = fs15.statSync(logPath);
4107
+ if (fs16.existsSync(logPath)) {
4108
+ const stats = fs16.statSync(logPath);
4088
4109
  if (stats.size > lastSize) {
4089
4110
  const buffer = Buffer.alloc(stats.size - lastSize);
4090
- const fd = fs15.openSync(logPath, "r");
4091
- fs15.readSync(fd, buffer, 0, buffer.length, lastSize);
4092
- fs15.closeSync(fd);
4111
+ const fd = fs16.openSync(logPath, "r");
4112
+ fs16.readSync(fd, buffer, 0, buffer.length, lastSize);
4113
+ fs16.closeSync(fd);
4093
4114
  const newContent = buffer.toString("utf-8");
4094
4115
  const newLines = newContent.split("\n").filter((l) => l.trim());
4095
4116
  setLogs((prev) => {
@@ -4745,7 +4766,7 @@ var init_setup_flow = __esm({
4745
4766
  // src/commands/wizard/link-flow.ts
4746
4767
  import { multiselect as multiselect5, spinner as spinner4, note as note10, outro as outro3, cancel as cancel4, isCancel as isCancel9, confirm as confirm7 } from "@clack/prompts";
4747
4768
  import pc12 from "picocolors";
4748
- import * as fs16 from "fs";
4769
+ import * as fs17 from "fs";
4749
4770
  async function runLinkProjectsFlow(workspacePath, workspaceName) {
4750
4771
  const projects = scanForProjects({
4751
4772
  excludeWorkspace: workspaceName,
@@ -4783,7 +4804,7 @@ async function runLinkProjectsFlow(workspacePath, workspaceName) {
4783
4804
  const s = spinner4();
4784
4805
  s.start("Linking projects");
4785
4806
  const configFilePath = getConfigPath(workspacePath);
4786
- let configContent = fs16.readFileSync(configFilePath, "utf-8");
4807
+ let configContent = fs17.readFileSync(configFilePath, "utf-8");
4787
4808
  if (configContent.includes("linked_projects:")) {
4788
4809
  const lines = configContent.split("\n");
4789
4810
  const linkedIndex = lines.findIndex((l) => l.trim() === "linked_projects:");
@@ -4810,7 +4831,7 @@ linked_projects:
4810
4831
  `;
4811
4832
  });
4812
4833
  }
4813
- fs16.writeFileSync(configFilePath, configContent);
4834
+ fs17.writeFileSync(configFilePath, configContent);
4814
4835
  generateVSCodeWorkspace(workspacePath, workspaceName, selectedProjects, customGlobalPath);
4815
4836
  s.stop("Projects linked");
4816
4837
  const workspaceFile = `${workspaceName}.code-workspace`;
@@ -4852,7 +4873,7 @@ var init_link_flow = __esm({
4852
4873
  // src/commands/wizard/sync-flow.ts
4853
4874
  import { confirm as confirm8, spinner as spinner5, note as note11, outro as outro4, cancel as cancel5, isCancel as isCancel10 } from "@clack/prompts";
4854
4875
  import pc13 from "picocolors";
4855
- import * as fs17 from "fs";
4876
+ import * as fs18 from "fs";
4856
4877
  import * as path18 from "path";
4857
4878
  async function runSyncToGlobalFlow(workspacePath, workspaceName) {
4858
4879
  const localPath = getLocalWorkspacePath(workspacePath);
@@ -4860,7 +4881,7 @@ async function runSyncToGlobalFlow(workspacePath, workspaceName) {
4860
4881
  const globalPath = path18.join(customGlobalPath, "workspaces", workspaceName);
4861
4882
  const subdirs = ["knowledge", "prompts", "templates", "tasks", "refs"];
4862
4883
  const existingDirs = subdirs.filter(
4863
- (dir) => fs17.existsSync(path18.join(localPath, dir))
4884
+ (dir) => fs18.existsSync(path18.join(localPath, dir))
4864
4885
  );
4865
4886
  if (existingDirs.length === 0) {
4866
4887
  outro4(pc13.yellow("No data found in workspace storage to sync."));
@@ -4919,7 +4940,7 @@ var init_sync_flow = __esm({
4919
4940
  // src/commands/wizard/update-flow.ts
4920
4941
  import { confirm as confirm9, spinner as spinner6, note as note12, outro as outro5, cancel as cancel6, isCancel as isCancel11 } from "@clack/prompts";
4921
4942
  import pc14 from "picocolors";
4922
- import * as fs18 from "fs";
4943
+ import * as fs19 from "fs";
4923
4944
  import * as path19 from "path";
4924
4945
  import { stringify as stringify3 } from "yaml";
4925
4946
  async function runUpdateFlow(workspacePath, workspaceName, currentStorageMode) {
@@ -4939,8 +4960,8 @@ async function runUpdateFlow(workspacePath, workspaceName, currentStorageMode) {
4939
4960
  ];
4940
4961
  const configFilePath = getConfigPath(workspacePath);
4941
4962
  const ideTargets = [];
4942
- if (fs18.existsSync(configFilePath)) {
4943
- const configContent = fs18.readFileSync(configFilePath, "utf-8");
4963
+ if (fs19.existsSync(configFilePath)) {
4964
+ const configContent = fs19.readFileSync(configFilePath, "utf-8");
4944
4965
  if (configContent.includes("opencode: true")) ideTargets.push("OpenCode agents");
4945
4966
  if (configContent.includes("copilot: true")) ideTargets.push("GitHub Copilot");
4946
4967
  if (configContent.includes("antigravity: true")) ideTargets.push("Antigravity");
@@ -4975,8 +4996,8 @@ ${dataPaths.map((p) => ` \u2022 ${p}`).join("\n")}`,
4975
4996
  ensureDir(path19.join(rrceHome, "docs"));
4976
4997
  copyDirRecursive(path19.join(agentCoreDir, "templates"), path19.join(rrceHome, "templates"));
4977
4998
  copyDirRecursive(path19.join(agentCoreDir, "docs"), path19.join(rrceHome, "docs"));
4978
- if (fs18.existsSync(configFilePath)) {
4979
- const configContent = fs18.readFileSync(configFilePath, "utf-8");
4999
+ if (fs19.existsSync(configFilePath)) {
5000
+ const configContent = fs19.readFileSync(configFilePath, "utf-8");
4980
5001
  if (configContent.includes("copilot: true")) {
4981
5002
  const copilotPath = getAgentPromptPath(workspacePath, "copilot");
4982
5003
  ensureDir(copilotPath);
@@ -5026,8 +5047,8 @@ function updateOpenCodeAgents(prompts, mode, primaryDataPath) {
5026
5047
  const promptsDir = path19.join(path19.dirname(OPENCODE_CONFIG), "prompts");
5027
5048
  ensureDir(promptsDir);
5028
5049
  let opencodeConfig = { $schema: "https://opencode.ai/config.json" };
5029
- if (fs18.existsSync(OPENCODE_CONFIG)) {
5030
- opencodeConfig = JSON.parse(fs18.readFileSync(OPENCODE_CONFIG, "utf-8"));
5050
+ if (fs19.existsSync(OPENCODE_CONFIG)) {
5051
+ opencodeConfig = JSON.parse(fs19.readFileSync(OPENCODE_CONFIG, "utf-8"));
5031
5052
  }
5032
5053
  if (!opencodeConfig.agent) opencodeConfig.agent = {};
5033
5054
  const currentAgentNames = prompts.map((p) => path19.basename(p.filePath, ".md"));
@@ -5039,8 +5060,8 @@ function updateOpenCodeAgents(prompts, mode, primaryDataPath) {
5039
5060
  if (isRrceAgent && !stillExists) {
5040
5061
  delete opencodeConfig.agent[existingName];
5041
5062
  const oldPromptFile = path19.join(promptsDir, `rrce-${existingName}.md`);
5042
- if (fs18.existsSync(oldPromptFile)) {
5043
- fs18.unlinkSync(oldPromptFile);
5063
+ if (fs19.existsSync(oldPromptFile)) {
5064
+ fs19.unlinkSync(oldPromptFile);
5044
5065
  }
5045
5066
  }
5046
5067
  }
@@ -5048,11 +5069,11 @@ function updateOpenCodeAgents(prompts, mode, primaryDataPath) {
5048
5069
  const baseName = path19.basename(prompt.filePath, ".md");
5049
5070
  const promptFileName = `rrce-${baseName}.md`;
5050
5071
  const promptFilePath = path19.join(promptsDir, promptFileName);
5051
- fs18.writeFileSync(promptFilePath, prompt.content);
5072
+ fs19.writeFileSync(promptFilePath, prompt.content);
5052
5073
  const agentConfig = convertToOpenCodeAgent(prompt, true, `./prompts/${promptFileName}`);
5053
5074
  opencodeConfig.agent[baseName] = agentConfig;
5054
5075
  }
5055
- fs18.writeFileSync(OPENCODE_CONFIG, JSON.stringify(opencodeConfig, null, 2) + "\n");
5076
+ fs19.writeFileSync(OPENCODE_CONFIG, JSON.stringify(opencodeConfig, null, 2) + "\n");
5056
5077
  } catch (e) {
5057
5078
  console.error("Failed to update global OpenCode config with agents:", e);
5058
5079
  }
@@ -5070,16 +5091,16 @@ ${stringify3({
5070
5091
  tools: agentConfig.tools
5071
5092
  })}---
5072
5093
  ${agentConfig.prompt}`;
5073
- fs18.writeFileSync(path19.join(opencodeBaseDir, `${baseName}.md`), content);
5094
+ fs19.writeFileSync(path19.join(opencodeBaseDir, `${baseName}.md`), content);
5074
5095
  }
5075
5096
  }
5076
5097
  }
5077
5098
  function clearDirectory(dirPath) {
5078
- if (!fs18.existsSync(dirPath)) return;
5079
- const entries = fs18.readdirSync(dirPath, { withFileTypes: true });
5099
+ if (!fs19.existsSync(dirPath)) return;
5100
+ const entries = fs19.readdirSync(dirPath, { withFileTypes: true });
5080
5101
  for (const entry of entries) {
5081
5102
  if (entry.isFile()) {
5082
- fs18.unlinkSync(path19.join(dirPath, entry.name));
5103
+ fs19.unlinkSync(path19.join(dirPath, entry.name));
5083
5104
  }
5084
5105
  }
5085
5106
  }
@@ -5108,7 +5129,7 @@ var init_update_flow = __esm({
5108
5129
  // src/commands/wizard/delete-flow.ts
5109
5130
  import { multiselect as multiselect6, confirm as confirm10, spinner as spinner7, note as note13, cancel as cancel7, isCancel as isCancel12 } from "@clack/prompts";
5110
5131
  import pc15 from "picocolors";
5111
- import * as fs19 from "fs";
5132
+ import * as fs20 from "fs";
5112
5133
  async function runDeleteGlobalProjectFlow(availableProjects) {
5113
5134
  const globalProjects = availableProjects.filter((p) => p.source === "global");
5114
5135
  if (globalProjects.length === 0) {
@@ -5150,8 +5171,8 @@ Are you sure?`,
5150
5171
  for (const projectName of projectsToDelete) {
5151
5172
  const project = globalProjects.find((p) => p.name === projectName);
5152
5173
  if (!project) continue;
5153
- if (fs19.existsSync(project.dataPath)) {
5154
- fs19.rmSync(project.dataPath, { recursive: true, force: true });
5174
+ if (fs20.existsSync(project.dataPath)) {
5175
+ fs20.rmSync(project.dataPath, { recursive: true, force: true });
5155
5176
  }
5156
5177
  const newConfig = removeProjectConfig(mcpConfig, projectName);
5157
5178
  configChanged = true;
@@ -5181,7 +5202,7 @@ __export(wizard_exports, {
5181
5202
  });
5182
5203
  import { intro as intro2, select as select5, spinner as spinner8, note as note14, outro as outro7, isCancel as isCancel13 } from "@clack/prompts";
5183
5204
  import pc16 from "picocolors";
5184
- import * as fs20 from "fs";
5205
+ import * as fs21 from "fs";
5185
5206
  async function runWizard() {
5186
5207
  intro2(pc16.cyan(pc16.inverse(" RRCE-Workflow Setup ")));
5187
5208
  const s = spinner8();
@@ -5209,11 +5230,11 @@ Workspace: ${pc16.bold(workspaceName)}`,
5209
5230
  workspacePath
5210
5231
  });
5211
5232
  const configFilePath = getConfigPath(workspacePath);
5212
- let isAlreadyConfigured = fs20.existsSync(configFilePath);
5233
+ let isAlreadyConfigured = fs21.existsSync(configFilePath);
5213
5234
  let currentStorageMode = null;
5214
5235
  if (isAlreadyConfigured) {
5215
5236
  try {
5216
- const configContent = fs20.readFileSync(configFilePath, "utf-8");
5237
+ const configContent = fs21.readFileSync(configFilePath, "utf-8");
5217
5238
  const modeMatch = configContent.match(/mode:\s*(global|workspace)/);
5218
5239
  currentStorageMode = modeMatch?.[1] ?? null;
5219
5240
  } catch {
@@ -5230,7 +5251,7 @@ Workspace: ${pc16.bold(workspaceName)}`,
5230
5251
  }
5231
5252
  }
5232
5253
  const localDataPath = getLocalWorkspacePath(workspacePath);
5233
- const hasLocalData = fs20.existsSync(localDataPath);
5254
+ const hasLocalData = fs21.existsSync(localDataPath);
5234
5255
  if (isAlreadyConfigured) {
5235
5256
  const menuOptions = [];
5236
5257
  menuOptions.push({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rrce-workflow",
3
- "version": "0.2.82",
3
+ "version": "0.2.84",
4
4
  "description": "RRCE-Workflow TUI - Agentic code workflow generator for AI-assisted development",
5
5
  "author": "RRCE Team",
6
6
  "license": "MIT",