@mrpatronz/nexusflow 1.3.3 → 1.6.0

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 (159) hide show
  1. package/README.md +50 -0
  2. package/dist/commands/create.d.ts.map +1 -1
  3. package/dist/commands/create.js +85 -44
  4. package/dist/commands/create.js.map +1 -1
  5. package/dist/commands/diff.d.ts.map +1 -1
  6. package/dist/commands/diff.js +16 -73
  7. package/dist/commands/diff.js.map +1 -1
  8. package/dist/commands/doctor.d.ts +4 -0
  9. package/dist/commands/doctor.d.ts.map +1 -1
  10. package/dist/commands/doctor.js +58 -318
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/finish.d.ts +17 -0
  13. package/dist/commands/finish.d.ts.map +1 -0
  14. package/dist/commands/finish.js +173 -0
  15. package/dist/commands/finish.js.map +1 -0
  16. package/dist/commands/handoff.d.ts.map +1 -1
  17. package/dist/commands/handoff.js +11 -6
  18. package/dist/commands/handoff.js.map +1 -1
  19. package/dist/commands/knowledge.d.ts +36 -0
  20. package/dist/commands/knowledge.d.ts.map +1 -0
  21. package/dist/commands/knowledge.js +184 -0
  22. package/dist/commands/knowledge.js.map +1 -0
  23. package/dist/commands/open.d.ts.map +1 -1
  24. package/dist/commands/open.js +2 -4
  25. package/dist/commands/open.js.map +1 -1
  26. package/dist/commands/refresh.d.ts +2 -1
  27. package/dist/commands/refresh.d.ts.map +1 -1
  28. package/dist/commands/refresh.js +35 -2
  29. package/dist/commands/refresh.js.map +1 -1
  30. package/dist/commands/strategy.d.ts +37 -0
  31. package/dist/commands/strategy.d.ts.map +1 -0
  32. package/dist/commands/strategy.js +198 -0
  33. package/dist/commands/strategy.js.map +1 -0
  34. package/dist/core/commit.d.ts +41 -0
  35. package/dist/core/commit.d.ts.map +1 -0
  36. package/dist/core/commit.js +53 -0
  37. package/dist/core/commit.js.map +1 -0
  38. package/dist/core/config.d.ts +3 -1
  39. package/dist/core/config.d.ts.map +1 -1
  40. package/dist/core/config.js +60 -32
  41. package/dist/core/config.js.map +1 -1
  42. package/dist/core/config.test.js +24 -0
  43. package/dist/core/config.test.js.map +1 -1
  44. package/dist/core/diff.d.ts +27 -0
  45. package/dist/core/diff.d.ts.map +1 -0
  46. package/dist/core/diff.js +50 -0
  47. package/dist/core/diff.js.map +1 -0
  48. package/dist/core/doctor.d.ts +34 -0
  49. package/dist/core/doctor.d.ts.map +1 -0
  50. package/dist/core/doctor.js +276 -0
  51. package/dist/core/doctor.js.map +1 -0
  52. package/dist/core/finish.d.ts +56 -0
  53. package/dist/core/finish.d.ts.map +1 -0
  54. package/dist/core/finish.js +121 -0
  55. package/dist/core/finish.js.map +1 -0
  56. package/dist/core/finish.test.d.ts +2 -0
  57. package/dist/core/finish.test.d.ts.map +1 -0
  58. package/dist/core/finish.test.js +110 -0
  59. package/dist/core/finish.test.js.map +1 -0
  60. package/dist/core/knowledge.d.ts +96 -0
  61. package/dist/core/knowledge.d.ts.map +1 -0
  62. package/dist/core/knowledge.js +299 -0
  63. package/dist/core/knowledge.js.map +1 -0
  64. package/dist/core/knowledge.test.d.ts +2 -0
  65. package/dist/core/knowledge.test.d.ts.map +1 -0
  66. package/dist/core/knowledge.test.js +157 -0
  67. package/dist/core/knowledge.test.js.map +1 -0
  68. package/dist/core/refresh.test.d.ts +2 -0
  69. package/dist/core/refresh.test.d.ts.map +1 -0
  70. package/dist/core/refresh.test.js +67 -0
  71. package/dist/core/refresh.test.js.map +1 -0
  72. package/dist/core/status.d.ts +45 -0
  73. package/dist/core/status.d.ts.map +1 -0
  74. package/dist/core/status.js +45 -0
  75. package/dist/core/status.js.map +1 -0
  76. package/dist/core/sync.test.d.ts +2 -0
  77. package/dist/core/sync.test.d.ts.map +1 -0
  78. package/dist/core/sync.test.js +86 -0
  79. package/dist/core/sync.test.js.map +1 -0
  80. package/dist/core/workspace.create.test.d.ts +2 -0
  81. package/dist/core/workspace.create.test.d.ts.map +1 -0
  82. package/dist/core/workspace.create.test.js +95 -0
  83. package/dist/core/workspace.create.test.js.map +1 -0
  84. package/dist/core/workspace.d.ts +9 -3
  85. package/dist/core/workspace.d.ts.map +1 -1
  86. package/dist/core/workspace.js +91 -13
  87. package/dist/core/workspace.js.map +1 -1
  88. package/dist/core/worktree.d.ts +11 -1
  89. package/dist/core/worktree.d.ts.map +1 -1
  90. package/dist/core/worktree.js +2 -0
  91. package/dist/core/worktree.js.map +1 -1
  92. package/dist/core/worktree.test.d.ts +2 -0
  93. package/dist/core/worktree.test.d.ts.map +1 -0
  94. package/dist/core/worktree.test.js +111 -0
  95. package/dist/core/worktree.test.js.map +1 -0
  96. package/dist/generators/base.js +1 -1
  97. package/dist/generators/index.d.ts +7 -0
  98. package/dist/generators/index.d.ts.map +1 -1
  99. package/dist/generators/index.js +4 -1
  100. package/dist/generators/index.js.map +1 -1
  101. package/dist/index.js +205 -3
  102. package/dist/index.js.map +1 -1
  103. package/dist/mcp/server.d.ts.map +1 -1
  104. package/dist/mcp/server.js +51 -282
  105. package/dist/mcp/server.js.map +1 -1
  106. package/dist/mcp/tools.d.ts +45 -0
  107. package/dist/mcp/tools.d.ts.map +1 -0
  108. package/dist/mcp/tools.js +413 -0
  109. package/dist/mcp/tools.js.map +1 -0
  110. package/dist/server.d.ts.map +1 -1
  111. package/dist/server.js +43 -26
  112. package/dist/server.js.map +1 -1
  113. package/dist/utils/debug.d.ts +17 -0
  114. package/dist/utils/debug.d.ts.map +1 -0
  115. package/dist/utils/debug.js +25 -0
  116. package/dist/utils/debug.js.map +1 -0
  117. package/dist/utils/detect-ai.d.ts +14 -6
  118. package/dist/utils/detect-ai.d.ts.map +1 -1
  119. package/dist/utils/detect-ai.js +22 -9
  120. package/dist/utils/detect-ai.js.map +1 -1
  121. package/dist/utils/detect-ai.test.js +33 -0
  122. package/dist/utils/detect-ai.test.js.map +1 -1
  123. package/dist/utils/git.d.ts +13 -2
  124. package/dist/utils/git.d.ts.map +1 -1
  125. package/dist/utils/git.js +64 -5
  126. package/dist/utils/git.js.map +1 -1
  127. package/dist/utils/git.test.js +46 -8
  128. package/dist/utils/git.test.js.map +1 -1
  129. package/dist/utils/multi-git.d.ts +40 -0
  130. package/dist/utils/multi-git.d.ts.map +1 -1
  131. package/dist/utils/multi-git.js +80 -0
  132. package/dist/utils/multi-git.js.map +1 -1
  133. package/dist/utils/multi-git.test.js +54 -1
  134. package/dist/utils/multi-git.test.js.map +1 -1
  135. package/dist/utils/open-editor.d.ts +20 -0
  136. package/dist/utils/open-editor.d.ts.map +1 -0
  137. package/dist/utils/open-editor.js +44 -0
  138. package/dist/utils/open-editor.js.map +1 -0
  139. package/dist/utils/pr.d.ts +50 -0
  140. package/dist/utils/pr.d.ts.map +1 -0
  141. package/dist/utils/pr.js +144 -0
  142. package/dist/utils/pr.js.map +1 -0
  143. package/dist/utils/pr.test.d.ts +2 -0
  144. package/dist/utils/pr.test.d.ts.map +1 -0
  145. package/dist/utils/pr.test.js +47 -0
  146. package/dist/utils/pr.test.js.map +1 -0
  147. package/dist/utils/prompts.d.ts +22 -1
  148. package/dist/utils/prompts.d.ts.map +1 -1
  149. package/dist/utils/prompts.js +145 -24
  150. package/dist/utils/prompts.js.map +1 -1
  151. package/dist/utils/resolve-workspace.d.ts +30 -0
  152. package/dist/utils/resolve-workspace.d.ts.map +1 -0
  153. package/dist/utils/resolve-workspace.js +77 -0
  154. package/dist/utils/resolve-workspace.js.map +1 -0
  155. package/dist/utils/workflow-advisor.d.ts +2 -0
  156. package/dist/utils/workflow-advisor.d.ts.map +1 -1
  157. package/dist/utils/workflow-advisor.js +27 -4
  158. package/dist/utils/workflow-advisor.js.map +1 -1
  159. package/package.json +11 -11
package/README.md CHANGED
@@ -17,7 +17,10 @@ NexusFlow combines multiple Git repositories into a single feature workspace and
17
17
  ## ✨ Features
18
18
 
19
19
  - **Multi-repo workspaces** — group any set of local Git repos under one feature branch using worktrees
20
+ - **The full feature loop** — `create` opens a workspace, `finish` closes it: commit + push every repo, open PRs (or print compare links), promote learnings, and optionally clean up
21
+ - **Knowledge that accumulates** — capture decisions and gotchas as you work with `nexusflow knowledge add`, then `promote` the reusable ones into per-repo memory that survives across features
20
22
  - **AI context generation** — automatically writes `CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`, and `.cursor/rules/nexusflow.mdc`
23
+ - **Drive it from your assistant** — an MCP server exposes the whole loop (status, diff, commit, sync, refresh, doctor, knowledge, finish) so your AI can run it without leaving the session
21
24
  - **Smart codebase analysis** — detects tech stacks, ports, API endpoints, dependencies, and existing AI configs across all projects
22
25
  - **Teamwork Strategy Workflows** — predefine coordination flows and subagent behaviors (e.g. plan-implement-review) and inspect them with local AI coding assistant harnesses
23
26
  - **Session history & resumption** — browse past conversation transcripts from Antigravity, Claude Code, OpenAI Codex, and GitHub Copilot, then resume where you left off
@@ -123,6 +126,8 @@ Open this folder in your editor → your AI assistant picks up the context → i
123
126
  | `nexusflow diff` | View changes across all sub-repositories, including unpushed commits (`--repo` to filter) |
124
127
  | `nexusflow commit` | Commit and push changes across all modified repositories (`--repo`, `--no-push`, `--dry-run`) |
125
128
  | `nexusflow sync` | Rebase all repositories in the workspace with default base branches |
129
+ | `nexusflow finish` | Close out a feature: commit & push all repos, open PRs / print compare links, promote learnings, optionally remove the workspace (`-m`, `--no-pr`, `--no-knowledge`, `--cleanup`, `--dry-run`) |
130
+ | `nexusflow knowledge` | Capture & manage workspace learnings: `add` (decision/gotcha/progress/…), `show`, `promote` into per-repo base knowledge |
126
131
  | `nexusflow refresh`| Regenerate maps, plan, and AI context files — only re-analyzes changed repos (`--force` for a full pass) |
127
132
  | `nexusflow handoff` | Generate a compact handoff bundle (`nexusflow-handoff.md`) for session resumption |
128
133
  | `nexusflow schedule` | Manage recurring workspace jobs: `add`, `list`, `remove`, `enable`, `disable`, `run` |
@@ -143,6 +148,51 @@ NexusFlow auto-detects which assistants are available on your machine and genera
143
148
  | **GitHub Copilot** | `.github/copilot-instructions.md` | Always available |
144
149
  | **Cursor** | `.cursor/rules/nexusflow.mdc` | `cursor` in PATH |
145
150
 
151
+ ## 🔁 The Feature Loop: create → work → learn → finish
152
+
153
+ NexusFlow is built around a single loop:
154
+
155
+ 1. **`nexusflow create`** — open a workspace of git worktrees on a feature branch with AI context files generated.
156
+ 2. **Work** — your AI assistant edits code across repos. As it goes, it records learnings:
157
+ ```bash
158
+ nexusflow knowledge add -t decision -m "Chose worktrees over submodules for isolation"
159
+ nexusflow knowledge add -t gotcha -m "fs.rm needs maxRetries on Windows (EBUSY)"
160
+ nexusflow knowledge add -t progress -m "Rollback-on-failure implemented"
161
+ ```
162
+ Entries land under the right heading in `nexusflow-knowledge.md` (routed through your storage adapter — local, central vault, or Obsidian — so the GUI and the generators all see the same file). No hand-editing, no accidental overwrites.
163
+ 3. **`nexusflow finish`** — close it out:
164
+ - Shows a preflight status table (branch, dirty files, unpushed commits) per repo.
165
+ - Commits any remaining changes (repos on the wrong branch or in a detached HEAD are skipped, never committed) and pushes every branch.
166
+ - Opens a PR per repo with the GitHub CLI when it's installed and authenticated; otherwise prints a ready-to-click **compare URL** for GitHub, GitLab, Azure DevOps, or Bitbucket.
167
+ - Offers to **promote** reusable learnings into each repo's persistent base knowledge (so they survive into the next feature).
168
+ - With `--cleanup`, removes the workspace once everything is confirmed pushed (never while you're `cd`'d inside it).
169
+
170
+ ```bash
171
+ nexusflow finish --dry-run # preview what would happen
172
+ nexusflow finish -m "Ship feature" --cleanup
173
+ ```
174
+
175
+ ## 🔌 MCP Server & Tools
176
+
177
+ `nexusflow mcp setup` registers NexusFlow's MCP server with Claude Desktop, Cursor, and VS Code so your assistant can drive the whole loop without leaving the session. The server exposes:
178
+
179
+ | Tool | What it does |
180
+ |:---|:---|
181
+ | `search_workspace` | `git grep` across every repo in the workspace |
182
+ | `workspace_status` | Per-repo branch / dirty / ahead-behind / remote status |
183
+ | `get_workspace_diff` | Changed files, insertions/deletions, and unpushed commits |
184
+ | `commit_workspace` | Commit (and push) all changed repos with one message |
185
+ | `sync_workspace` | Rebase every repo onto its base branch (auto-stashes dirty trees) |
186
+ | `refresh_context` | Regenerate maps/plan/context (only re-analyzes changed repos) |
187
+ | `run_doctor` | Structured workspace health diagnostics |
188
+ | `add_knowledge` | Record a decision / gotcha / progress note — the preferred way to persist learnings |
189
+ | `promote_knowledge` | Copy a learning into a repo's persistent base knowledge |
190
+ | `finish_workspace` | Commit, push, and return PR/compare links (never deletes anything) |
191
+ | `get_service_logs` | Tail a running service's logs |
192
+ | `delegate_to_local_agent` | Offload cheap/high-volume subtasks to a local SLM (when enabled) |
193
+
194
+ Read-only tools are annotated as such; `finish_workspace` deliberately cannot delete worktrees (cleanup stays a human-confirmed CLI action). Pass `--debug` (or set `NEXUSFLOW_DEBUG=1`) on any CLI command to surface diagnostic logging on stderr.
195
+
146
196
  ## 🕐 Session History & Resumption
147
197
 
148
198
  NexusFlow can discover and display your past AI coding sessions across all supported assistants. This lets you:
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0BH;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAmKnD"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA+BH;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAgNnD"}
@@ -15,8 +15,11 @@ import { generateContextFiles } from '../generators/index.js';
15
15
  import { analyzeAllRepos } from '../analyzers/index.js';
16
16
  import { detectAIAssistants } from '../utils/detect-ai.js';
17
17
  import { detectEditors } from '../utils/detect-editors.js';
18
- import { promptBranchName, promptDescription, promptSelectRepos, promptSelectAI, promptSelectEditor, } from '../utils/prompts.js';
18
+ import { openInEditor } from '../utils/open-editor.js';
19
+ import { debugLog } from '../utils/debug.js';
20
+ import { promptBranchName, promptDescription, promptSelectRepos, promptSelectAI, promptSelectEditor, promptSelectStrategy, promptNewStrategy, } from '../utils/prompts.js';
19
21
  import { suggestWorkflow } from '../utils/workflow-advisor.js';
22
+ import { getWorkflowTemplates, saveWorkflowTemplate } from '../utils/workflows.js';
20
23
  /**
21
24
  * Executes the full "create workspace" flow:
22
25
  * 1. Prompt for branch name
@@ -63,15 +66,40 @@ export async function createCommand() {
63
66
  ? await confirm({ message: 'Enable Local AI Co-processor in this workspace context?', default: true })
64
67
  : false;
65
68
  // ── 5.5. Suggest workflow strategy ───────────────────────────────
66
- const workflowSpinner = ora('Suggesting teamwork collaboration strategy...').start();
69
+ const templates = await getWorkflowTemplates();
70
+ const selectedStrategyId = await promptSelectStrategy(templates);
67
71
  let teamworkInstructions = '';
68
- try {
69
- const suggestion = await suggestWorkflow(description, selectedRepos, config.localLlm);
70
- teamworkInstructions = suggestion.customInstructions;
71
- workflowSpinner.succeed(`Auto-selected strategy for ${chalk.bold(suggestion.difficulty)} difficulty task`);
72
+ if (selectedStrategyId === 'auto') {
73
+ const workflowSpinner = ora('Suggesting teamwork collaboration strategy...').start();
74
+ try {
75
+ const suggestion = await suggestWorkflow(description, selectedRepos, config.localLlm);
76
+ teamworkInstructions = suggestion.customInstructions;
77
+ workflowSpinner.succeed(`Auto-selected strategy for ${chalk.bold(suggestion.difficulty)} difficulty task`);
78
+ }
79
+ catch (err) {
80
+ const reason = err instanceof Error ? err.message : String(err);
81
+ workflowSpinner.fail(`Failed to suggest teamwork strategy (${reason}) — continuing without one`);
82
+ debugLog('workflow-advisor', 'suggestWorkflow', err);
83
+ }
84
+ }
85
+ else if (selectedStrategyId === 'create_new') {
86
+ const { name, content } = await promptNewStrategy();
87
+ try {
88
+ const newTemplate = await saveWorkflowTemplate(name, content);
89
+ teamworkInstructions = newTemplate.content;
90
+ console.log(chalk.green(` ✔ Saved and selected new strategy: ${chalk.bold(newTemplate.name)}`));
91
+ }
92
+ catch (err) {
93
+ console.log(chalk.yellow(` ⚠ Failed to save strategy: ${String(err)}`));
94
+ teamworkInstructions = content;
95
+ }
72
96
  }
73
- catch (err) {
74
- workflowSpinner.fail('Failed to suggest teamwork strategy');
97
+ else {
98
+ const selectedTemplate = templates.find((t) => t.id === selectedStrategyId);
99
+ if (selectedTemplate) {
100
+ teamworkInstructions = selectedTemplate.content;
101
+ console.log(chalk.green(` ✔ Selected strategy: ${chalk.bold(selectedTemplate.name)}`));
102
+ }
75
103
  }
76
104
  // ── 6. Create workspace ─────────────────────────────────────────────
77
105
  const workspacePath = path.join(config.workspacesDir, branchName);
@@ -89,37 +117,46 @@ export async function createCommand() {
89
117
  };
90
118
  const wsSpinner = ora('Creating workspace with git worktrees...').start();
91
119
  try {
92
- await createWorkspace(feature, selectedRepos);
120
+ await createWorkspace(feature, selectedRepos, (repoName, index, total) => {
121
+ wsSpinner.text = `Creating worktrees… ${repoName} (${index + 1}/${total})`;
122
+ });
93
123
  wsSpinner.succeed(`Workspace created at ${chalk.bold(workspacePath)}`);
94
124
  }
95
125
  catch (error) {
96
126
  wsSpinner.fail('Failed to create workspace');
97
127
  const message = error instanceof Error ? error.message : String(error);
98
128
  console.error(chalk.red(` ${message}`));
129
+ console.log(chalk.dim(' Rolled back the partial workspace.'));
130
+ process.exitCode = 1;
99
131
  return;
100
132
  }
101
- // ── 7. Analyze projects ─────────────────────────────────────────────
102
- console.log(chalk.cyan('\nAnalyzing projects...'));
133
+ // ── 7-8. Analyze projects & generate context ────────────────────────
134
+ // The worktrees are the product; if analysis/generation fails the workspace
135
+ // is still usable, so keep it and tell the user how to retry rather than
136
+ // exiting with an error.
103
137
  const workspaceRepos = selectedRepos.map((repo) => ({
104
138
  ...repo,
105
139
  path: path.join(workspacePath, repo.name),
106
140
  }));
107
- const analysis = await analyzeAllRepos(workspaceRepos);
108
- // ── 8. Generate AI context files ────────────────────────────────────
109
- const ctx = { feature, repos: workspaceRepos, analysis, localLlm: config.localLlm };
110
- console.log(chalk.cyan('\nGenerating AI context files...'));
111
- await generateContextFiles(ctx, selectedAI, workspacePath);
112
- // Monolithic XML context packing removed.
141
+ try {
142
+ console.log(chalk.cyan('\nAnalyzing projects...'));
143
+ const analysis = await analyzeAllRepos(workspaceRepos);
144
+ const ctx = { feature, repos: workspaceRepos, analysis, localLlm: config.localLlm };
145
+ console.log(chalk.cyan('\nGenerating AI context files...'));
146
+ await generateContextFiles(ctx, selectedAI, workspacePath);
147
+ }
148
+ catch (error) {
149
+ const message = error instanceof Error ? error.message : String(error);
150
+ console.log(chalk.yellow(`\n⚠️ Workspace was created and is usable, but context generation failed (${message}).\n` +
151
+ ` Run "nexusflow refresh" inside the workspace to retry.`));
152
+ }
113
153
  // ── 8. Open in editor ───────────────────────────────────────────────
114
154
  const detectedEditors = await detectEditors();
115
155
  const editor = await promptSelectEditor(detectedEditors);
116
156
  if (editor) {
117
157
  const editorSpinner = ora(`Opening in ${editor.name}...`).start();
118
158
  try {
119
- await execa(editor.command, [workspacePath], {
120
- stdio: 'ignore',
121
- shell: process.platform === 'win32',
122
- });
159
+ await openInEditor(editor.command, workspacePath);
123
160
  editorSpinner.succeed(`Opened in ${editor.name}`);
124
161
  }
125
162
  catch {
@@ -138,29 +175,33 @@ export async function createCommand() {
138
175
  // ── 9. Start AI Assistant Session ───────────────────────────────────
139
176
  if (selectedAI.length > 0) {
140
177
  const assistant = selectedAI[0];
141
- const confirmStart = await confirm({
142
- message: `Do you want to start a session with ${assistant} inside the workspace now?`,
143
- default: true,
144
- });
145
- if (confirmStart) {
146
- console.log(chalk.cyan(`\n🚀 Starting ${assistant} session inside workspace...\n`));
147
- let cmd = 'agy';
148
- if (assistant === 'claude')
149
- cmd = 'claude';
150
- else if (assistant === 'codex')
151
- cmd = 'codex';
152
- else if (assistant === 'copilot')
153
- cmd = 'copilot';
154
- try {
155
- await execa(cmd, [], {
156
- cwd: workspacePath,
157
- stdio: 'inherit',
158
- shell: process.platform === 'win32',
159
- });
160
- console.log(chalk.green(`\n👋 Exited ${assistant} session.`));
161
- }
162
- catch {
163
- console.log(chalk.yellow(`\n⚠️ Could not start ${assistant}. Please start it manually:\n ${chalk.dim(`cd "${workspacePath}" && ${cmd}`)}`));
178
+ const detected = detectedAI.find((a) => a.name === assistant);
179
+ const label = detected?.displayName ?? assistant;
180
+ // `command` is the single source of truth for a launchable terminal session
181
+ // (see detect-ai.ts). Some assistants are selectable but not launchable this
182
+ // way (e.g. Copilot without its CLI, or Cursor's GUI-only binary).
183
+ const launchCmd = detected?.command;
184
+ if (!launchCmd) {
185
+ console.log(chalk.dim(`\n ${label} has no launchable terminal CLI — open the workspace in it manually.`));
186
+ }
187
+ else {
188
+ const confirmStart = await confirm({
189
+ message: `Do you want to start a session with ${label} inside the workspace now?`,
190
+ default: true,
191
+ });
192
+ if (confirmStart) {
193
+ console.log(chalk.cyan(`\n🚀 Starting ${label} session inside workspace...\n`));
194
+ try {
195
+ await execa(launchCmd, [], {
196
+ cwd: workspacePath,
197
+ stdio: 'inherit',
198
+ shell: process.platform === 'win32',
199
+ });
200
+ console.log(chalk.green(`\n👋 Exited ${label} session.`));
201
+ }
202
+ catch {
203
+ console.log(chalk.yellow(`\n⚠️ Could not start ${label}. Please start it manually:\n ${chalk.dim(`cd "${workspacePath}" && ${launchCmd}`)}`));
204
+ }
164
205
  }
165
206
  }
166
207
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,UAAU,WAAW;IACnB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG7F"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,UAAU,WAAW;IACnB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D7F"}
@@ -4,12 +4,9 @@
4
4
  * commits that exist locally but have not been pushed yet.
5
5
  */
6
6
  import chalk from 'chalk';
7
- import { select } from '@inquirer/prompts';
8
- import * as path from 'node:path';
9
- import * as fs from 'node:fs/promises';
10
- import { loadConfig } from '../core/config.js';
11
- import { listWorkspaces, loadFeatureConfig } from '../core/workspace.js';
12
- import { getWorkspaceRepos, getRepoStatus, getDiffSummary, getUnpushedCount } from '../utils/multi-git.js';
7
+ import { loadFeatureConfig } from '../core/workspace.js';
8
+ import { getWorkspaceDiffReport } from '../core/diff.js';
9
+ import { resolveWorkspaceInteractive } from '../utils/resolve-workspace.js';
13
10
  /**
14
11
  * Executes the diff command.
15
12
  *
@@ -18,7 +15,7 @@ import { getWorkspaceRepos, getRepoStatus, getDiffSummary, getUnpushedCount } fr
18
15
  */
19
16
  export async function diffCommand(workspaceArg, options) {
20
17
  console.log(chalk.bold.cyan('\n🔍 NexusFlow — Workspace Diff Summary\n'));
21
- const workspacePath = await resolveWorkspace(workspaceArg);
18
+ const workspacePath = await resolveWorkspaceInteractive(workspaceArg, 'Select a workspace to view diff:');
22
19
  if (!workspacePath)
23
20
  return;
24
21
  const feature = await loadFeatureConfig(workspacePath);
@@ -26,54 +23,33 @@ export async function diffCommand(workspaceArg, options) {
26
23
  console.error(chalk.red('✖ Failed to load workspace configuration.'));
27
24
  return;
28
25
  }
29
- let repos = await getWorkspaceRepos(workspacePath);
30
- if (options?.repo && options.repo.length > 0) {
31
- const unknown = options.repo.filter((name) => !repos.some((r) => r.name === name));
32
- if (unknown.length > 0) {
33
- console.error(chalk.red(`✖ Repositor${unknown.length === 1 ? 'y' : 'ies'} not in this workspace: ${unknown.join(', ')}`));
34
- console.log(chalk.dim(` Available repos: ${repos.map((r) => r.name).join(', ')}`));
35
- return;
36
- }
37
- repos = repos.filter((r) => options.repo.includes(r.name));
26
+ let results;
27
+ try {
28
+ results = await getWorkspaceDiffReport(workspacePath, options?.repo);
38
29
  }
39
- const results = [];
40
- for (const repo of repos) {
41
- const status = await getRepoStatus(repo.path);
42
- const unpushed = await getUnpushedCount(repo.path, repo.branchName);
43
- // A repo with no working-tree changes still matters when it has local
44
- // commits that were never pushed — otherwise "all clean" hides them.
45
- if (!status.hasChanges && !(unpushed && unpushed > 0)) {
46
- continue;
47
- }
48
- const diff = status.hasChanges
49
- ? await getDiffSummary(repo.path)
50
- : { summary: 'No working-tree changes', additions: 0, deletions: 0 };
51
- results.push({
52
- name: repo.name,
53
- filesChanged: status.changedFiles.length,
54
- additions: diff.additions,
55
- deletions: diff.deletions,
56
- unpushed,
57
- summary: diff.summary,
58
- });
30
+ catch (error) {
31
+ console.error(chalk.red(`✖ ${error instanceof Error ? error.message : String(error)}`));
32
+ return;
59
33
  }
60
34
  if (results.length === 0) {
61
35
  console.log(chalk.green('✅ All repositories are clean and pushed.\n'));
62
36
  return;
63
37
  }
64
- // Print unified table
65
- console.log(chalk.bold('Repository'.padEnd(25) + ' | ' +
38
+ // Print unified table. Size the name column to the actual repo names so
39
+ // long names (common in real workspaces) don't overrun the other columns.
40
+ const nameW = Math.max(10, ...results.map((r) => r.name.length)) + 1;
41
+ console.log(chalk.bold('Repository'.padEnd(nameW) + ' | ' +
66
42
  'Files'.padEnd(6) + ' | ' +
67
43
  'Additions'.padEnd(10) + ' | ' +
68
44
  'Deletions'.padEnd(10) + ' | ' +
69
45
  'Unpushed'.padEnd(8)));
70
- console.log(chalk.dim('─'.repeat(72)));
46
+ console.log(chalk.dim('─'.repeat(nameW + 45)));
71
47
  for (const res of results) {
72
48
  const fileStr = res.filesChanged.toString().padEnd(6);
73
49
  const addStr = `+${res.additions}`.padEnd(10);
74
50
  const delStr = `-${res.deletions}`.padEnd(10);
75
51
  const unpushedStr = res.unpushed === null ? '?'.padEnd(8) : String(res.unpushed).padEnd(8);
76
- console.log(chalk.bold(res.name.padEnd(25)) + ' | ' +
52
+ console.log(chalk.bold(res.name.padEnd(nameW)) + ' | ' +
77
53
  fileStr + ' | ' +
78
54
  chalk.green(addStr) + ' | ' +
79
55
  chalk.red(delStr) + ' | ' +
@@ -89,37 +65,4 @@ export async function diffCommand(workspaceArg, options) {
89
65
  }
90
66
  console.log();
91
67
  }
92
- /**
93
- * Resolves workspace path.
94
- */
95
- async function resolveWorkspace(workspaceArg) {
96
- if (workspaceArg) {
97
- const absolutePath = path.resolve(workspaceArg);
98
- try {
99
- await fs.access(path.join(absolutePath, 'nexusflow.json'));
100
- return absolutePath;
101
- }
102
- catch {
103
- console.error(chalk.red(`✖ Invalid workspace: No nexusflow.json found at ${absolutePath}`));
104
- return null;
105
- }
106
- }
107
- const cwdFeature = await loadFeatureConfig(process.cwd());
108
- if (cwdFeature)
109
- return cwdFeature.workspacePath;
110
- const config = await loadConfig();
111
- const workspaces = await listWorkspaces(config.workspacesDir);
112
- if (workspaces.length === 0) {
113
- console.log(chalk.yellow('No workspaces found.\n'));
114
- return null;
115
- }
116
- const selected = await select({
117
- message: 'Select a workspace to view diff:',
118
- choices: workspaces.map((ws) => ({
119
- name: `${ws.branchName} ${chalk.dim(`(${ws.repos.length} repos)`)}`,
120
- value: ws.workspacePath,
121
- })),
122
- });
123
- return selected;
124
- }
125
68
  //# sourceMappingURL=diff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @module commands/doctor
3
+ * Renders the structured workspace diagnostics produced by `core/doctor.ts`.
4
+ */
1
5
  /**
2
6
  * Runs the doctor command to diagnose workspace state.
3
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgSxE"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsCH;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDxE"}