@mrpatronz/nexusflow 0.2.18 → 1.3.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 (236) hide show
  1. package/README.md +27 -3
  2. package/dist/analyzers/index.d.ts +23 -0
  3. package/dist/analyzers/index.d.ts.map +1 -1
  4. package/dist/analyzers/index.js +62 -0
  5. package/dist/analyzers/index.js.map +1 -1
  6. package/dist/commands/commands.test.js +20 -6
  7. package/dist/commands/commands.test.js.map +1 -1
  8. package/dist/commands/commit.d.ts +2 -0
  9. package/dist/commands/commit.d.ts.map +1 -1
  10. package/dist/commands/commit.js +27 -5
  11. package/dist/commands/commit.js.map +1 -1
  12. package/dist/commands/diff.d.ts +9 -2
  13. package/dist/commands/diff.d.ts.map +1 -1
  14. package/dist/commands/diff.js +36 -12
  15. package/dist/commands/diff.js.map +1 -1
  16. package/dist/commands/doctor.js +2 -2
  17. package/dist/commands/doctor.js.map +1 -1
  18. package/dist/commands/handoff.js +2 -2
  19. package/dist/commands/handoff.js.map +1 -1
  20. package/dist/commands/refresh.d.ts +4 -2
  21. package/dist/commands/refresh.d.ts.map +1 -1
  22. package/dist/commands/refresh.js +20 -36
  23. package/dist/commands/refresh.js.map +1 -1
  24. package/dist/commands/schedule.d.ts +35 -0
  25. package/dist/commands/schedule.d.ts.map +1 -0
  26. package/dist/commands/schedule.js +151 -0
  27. package/dist/commands/schedule.js.map +1 -0
  28. package/dist/commands/sync.d.ts.map +1 -1
  29. package/dist/commands/sync.js +58 -50
  30. package/dist/commands/sync.js.map +1 -1
  31. package/dist/core/analysis-cache.d.ts +58 -0
  32. package/dist/core/analysis-cache.d.ts.map +1 -0
  33. package/dist/core/analysis-cache.js +116 -0
  34. package/dist/core/analysis-cache.js.map +1 -0
  35. package/dist/core/analysis-cache.test.d.ts +2 -0
  36. package/dist/core/analysis-cache.test.d.ts.map +1 -0
  37. package/dist/core/analysis-cache.test.js +108 -0
  38. package/dist/core/analysis-cache.test.js.map +1 -0
  39. package/dist/core/refresh.d.ts +41 -0
  40. package/dist/core/refresh.d.ts.map +1 -0
  41. package/dist/core/refresh.js +60 -0
  42. package/dist/core/refresh.js.map +1 -0
  43. package/dist/core/scheduler.d.ts +117 -0
  44. package/dist/core/scheduler.d.ts.map +1 -0
  45. package/dist/core/scheduler.js +247 -0
  46. package/dist/core/scheduler.js.map +1 -0
  47. package/dist/core/scheduler.test.d.ts +2 -0
  48. package/dist/core/scheduler.test.d.ts.map +1 -0
  49. package/dist/core/scheduler.test.js +111 -0
  50. package/dist/core/scheduler.test.js.map +1 -0
  51. package/dist/core/sync.d.ts +50 -0
  52. package/dist/core/sync.d.ts.map +1 -0
  53. package/dist/core/sync.js +92 -0
  54. package/dist/core/sync.js.map +1 -0
  55. package/dist/core/workspace-state.d.ts +51 -0
  56. package/dist/core/workspace-state.d.ts.map +1 -0
  57. package/dist/core/workspace-state.js +108 -0
  58. package/dist/core/workspace-state.js.map +1 -0
  59. package/dist/core/workspace-state.test.d.ts +2 -0
  60. package/dist/core/workspace-state.test.d.ts.map +1 -0
  61. package/dist/core/workspace-state.test.js +84 -0
  62. package/dist/core/workspace-state.test.js.map +1 -0
  63. package/dist/generators/index.d.ts +7 -1
  64. package/dist/generators/index.d.ts.map +1 -1
  65. package/dist/generators/index.js +14 -1
  66. package/dist/generators/index.js.map +1 -1
  67. package/dist/gui/assets/index-Bdbld6yY.css +1 -0
  68. package/dist/gui/assets/index-D8iJPvnk.js +26 -0
  69. package/dist/gui/index.html +2 -2
  70. package/dist/index.js +107 -4
  71. package/dist/index.js.map +1 -1
  72. package/dist/mcp/server.d.ts.map +1 -1
  73. package/dist/mcp/server.js +42 -0
  74. package/dist/mcp/server.js.map +1 -1
  75. package/dist/server.d.ts.map +1 -1
  76. package/dist/server.js +175 -13
  77. package/dist/server.js.map +1 -1
  78. package/dist/server.test.js +66 -0
  79. package/dist/server.test.js.map +1 -1
  80. package/dist/types.d.ts +31 -0
  81. package/dist/types.d.ts.map +1 -1
  82. package/dist/utils/multi-git.d.ts +54 -8
  83. package/dist/utils/multi-git.d.ts.map +1 -1
  84. package/dist/utils/multi-git.js +129 -21
  85. package/dist/utils/multi-git.js.map +1 -1
  86. package/dist/utils/multi-git.test.d.ts +2 -0
  87. package/dist/utils/multi-git.test.d.ts.map +1 -0
  88. package/dist/utils/multi-git.test.js +125 -0
  89. package/dist/utils/multi-git.test.js.map +1 -0
  90. package/package.json +13 -1
  91. package/.agents/skills/ccc/SKILL.md +0 -71
  92. package/.agents/skills/ccc/references/management.md +0 -110
  93. package/.agents/skills/ccc/references/settings.md +0 -126
  94. package/.github/dependabot.yml +0 -52
  95. package/.github/workflows/ci.yml +0 -44
  96. package/.github/workflows/dependabot-merge.yml +0 -53
  97. package/.github/workflows/release-desktop.yml +0 -67
  98. package/.github/workflows/release-npm.yml +0 -65
  99. package/.github/workflows/release-vscode.yml +0 -61
  100. package/.vscode/launch.json +0 -17
  101. package/.vscode/tasks.json +0 -17
  102. package/GETTING_STARTED.md +0 -114
  103. package/desktop/build-installer.js +0 -228
  104. package/desktop/build.js +0 -118
  105. package/desktop/installer/nexusflow.iss +0 -35
  106. package/desktop/neutralino.config.json +0 -39
  107. package/desktop/package-lock.json +0 -1060
  108. package/desktop/package.json +0 -14
  109. package/dist/gui/assets/index-CB-jWded.css +0 -1
  110. package/dist/gui/assets/index-DDXpZZu3.js +0 -25
  111. package/extension/media/icon.svg +0 -1
  112. package/extension/package-lock.json +0 -6044
  113. package/extension/package.json +0 -117
  114. package/extension/src/extension.ts +0 -653
  115. package/extension/tsconfig.json +0 -21
  116. package/gui/README.md +0 -73
  117. package/gui/e2e/wizard.spec.ts +0 -346
  118. package/gui/eslint.config.js +0 -26
  119. package/gui/index.html +0 -17
  120. package/gui/package-lock.json +0 -3079
  121. package/gui/package.json +0 -36
  122. package/gui/playwright.config.ts +0 -41
  123. package/gui/public/app_logo.png +0 -0
  124. package/gui/public/favicon.svg +0 -1
  125. package/gui/public/icons.svg +0 -24
  126. package/gui/src/App.css +0 -1
  127. package/gui/src/App.tsx +0 -3632
  128. package/gui/src/assets/hero.png +0 -0
  129. package/gui/src/assets/react.svg +0 -1
  130. package/gui/src/assets/vite.svg +0 -1
  131. package/gui/src/features/changes/ChangesViewer.tsx +0 -388
  132. package/gui/src/features/knowledge/KnowledgeBase.tsx +0 -84
  133. package/gui/src/features/onboarding/OnboardingWizard.tsx +0 -230
  134. package/gui/src/features/plan/ImplementationPlan.tsx +0 -32
  135. package/gui/src/features/services/ServiceConsole.tsx +0 -250
  136. package/gui/src/features/sessions/SessionHistory.tsx +0 -195
  137. package/gui/src/features/workspace/WorkspaceList.tsx +0 -666
  138. package/gui/src/index.css +0 -152
  139. package/gui/src/main.tsx +0 -94
  140. package/gui/src/types.ts +0 -62
  141. package/gui/tsconfig.app.json +0 -25
  142. package/gui/tsconfig.json +0 -7
  143. package/gui/tsconfig.node.json +0 -24
  144. package/gui/vite.config.ts +0 -12
  145. package/resources/workflows/plan-implement-review.md +0 -8
  146. package/resources/workflows/research-verify.md +0 -6
  147. package/resources/workflows/solo-developer.md +0 -3
  148. package/scripts/simulate-workspaces.ts +0 -55
  149. package/skills-lock.json +0 -11
  150. package/src/analyzers/detect-apis.ts +0 -290
  151. package/src/analyzers/detect-deps.ts +0 -315
  152. package/src/analyzers/detect-existing.ts +0 -74
  153. package/src/analyzers/detect-ports.ts +0 -110
  154. package/src/analyzers/index.ts +0 -97
  155. package/src/analyzers/messaging-analyzer.ts +0 -254
  156. package/src/analyzers/readme-summarizer.ts +0 -102
  157. package/src/analyzers/run-analyzer.ts +0 -269
  158. package/src/analyzers/tech-stack.ts +0 -283
  159. package/src/commands/adapter.ts +0 -348
  160. package/src/commands/add-repo.ts +0 -156
  161. package/src/commands/commands.test.ts +0 -156
  162. package/src/commands/commit.ts +0 -131
  163. package/src/commands/config.ts +0 -52
  164. package/src/commands/create.ts +0 -204
  165. package/src/commands/desktop.ts +0 -128
  166. package/src/commands/diff.ts +0 -125
  167. package/src/commands/doctor.ts +0 -370
  168. package/src/commands/handoff.ts +0 -266
  169. package/src/commands/init.ts +0 -134
  170. package/src/commands/list.ts +0 -46
  171. package/src/commands/logs.ts +0 -63
  172. package/src/commands/mcp.ts +0 -94
  173. package/src/commands/open.ts +0 -129
  174. package/src/commands/refresh.ts +0 -137
  175. package/src/commands/remove.ts +0 -98
  176. package/src/commands/start.ts +0 -117
  177. package/src/commands/status.ts +0 -54
  178. package/src/commands/stop.ts +0 -55
  179. package/src/commands/sync.ts +0 -147
  180. package/src/commands/tui.ts +0 -484
  181. package/src/commands/ui.ts +0 -111
  182. package/src/core/adapters/local-storage.ts +0 -66
  183. package/src/core/adapters/obsidian-storage.ts +0 -151
  184. package/src/core/adapters/registry.ts +0 -44
  185. package/src/core/adapters/storage.test.ts +0 -174
  186. package/src/core/adapters/vault-storage.ts +0 -86
  187. package/src/core/config.test.ts +0 -96
  188. package/src/core/config.ts +0 -140
  189. package/src/core/graph.ts +0 -344
  190. package/src/core/plugins/index.ts +0 -17
  191. package/src/core/plugins/loader.ts +0 -36
  192. package/src/core/ports/storage.ts +0 -71
  193. package/src/core/scanner.test.ts +0 -61
  194. package/src/core/scanner.ts +0 -91
  195. package/src/core/storage.ts +0 -37
  196. package/src/core/workspace.ts +0 -487
  197. package/src/core/worktree.ts +0 -120
  198. package/src/generators/antigravity.ts +0 -32
  199. package/src/generators/base.ts +0 -243
  200. package/src/generators/claude.ts +0 -34
  201. package/src/generators/codex.ts +0 -48
  202. package/src/generators/copilot.ts +0 -56
  203. package/src/generators/cursor.ts +0 -44
  204. package/src/generators/diff-context.ts +0 -75
  205. package/src/generators/index.ts +0 -322
  206. package/src/generators/map-generator.test.ts +0 -159
  207. package/src/generators/map-generator.ts +0 -539
  208. package/src/generators/plan-generator.ts +0 -483
  209. package/src/generators/skills-generator.ts +0 -259
  210. package/src/index.ts +0 -539
  211. package/src/mcp/server.ts +0 -294
  212. package/src/orchestration/detect.ts +0 -313
  213. package/src/orchestration/index.ts +0 -7
  214. package/src/orchestration/runner.ts +0 -283
  215. package/src/server.test.ts +0 -618
  216. package/src/server.ts +0 -1314
  217. package/src/types.ts +0 -415
  218. package/src/utils/detect-ai.test.ts +0 -44
  219. package/src/utils/detect-ai.ts +0 -84
  220. package/src/utils/detect-editors.test.ts +0 -48
  221. package/src/utils/detect-editors.ts +0 -57
  222. package/src/utils/git.test.ts +0 -74
  223. package/src/utils/git.ts +0 -117
  224. package/src/utils/local-ai.test.ts +0 -130
  225. package/src/utils/local-ai.ts +0 -116
  226. package/src/utils/multi-git.ts +0 -313
  227. package/src/utils/prompts.ts +0 -209
  228. package/src/utils/session-finder.ts +0 -483
  229. package/src/utils/system-scanner.test.ts +0 -89
  230. package/src/utils/system-scanner.ts +0 -96
  231. package/src/utils/update-check.ts +0 -286
  232. package/src/utils/workflow-advisor.ts +0 -118
  233. package/src/utils/workflows.test.ts +0 -114
  234. package/src/utils/workflows.ts +0 -178
  235. package/tsconfig.json +0 -19
  236. package/vitest.config.ts +0 -14
@@ -71,10 +71,15 @@ export async function getRepoStatus(repoPath) {
71
71
  cwd: repoPath,
72
72
  });
73
73
  const lines = stdout.trim().split('\n').filter(Boolean);
74
- const changedFiles = lines.map((line) => line.slice(3).trim());
74
+ const files = lines.map((line) => ({
75
+ code: line.slice(0, 2),
76
+ path: line.slice(3).trim(),
77
+ }));
78
+ const changedFiles = files.map((f) => f.path);
75
79
  return {
76
80
  hasChanges: changedFiles.length > 0,
77
81
  changedFiles,
82
+ files,
78
83
  summary: changedFiles.length === 0
79
84
  ? 'Clean'
80
85
  : `${changedFiles.length} file${changedFiles.length === 1 ? '' : 's'} changed`,
@@ -84,52 +89,155 @@ export async function getRepoStatus(repoPath) {
84
89
  return {
85
90
  hasChanges: false,
86
91
  changedFiles: [],
92
+ files: [],
87
93
  summary: `Error: ${error instanceof Error ? error.message : String(error)}`,
88
94
  };
89
95
  }
90
96
  }
91
97
  /**
92
- * Rebases the current branch on top of the latest upstream base branch.
98
+ * Counts commits on the current branch that have not been pushed to
99
+ * `origin/<branchName>` yet.
93
100
  *
94
- * Fetches from origin first, then attempts `git rebase origin/{baseBranch}`.
95
- * If a conflict occurs the rebase is aborted and the conflict details are
96
- * returned.
101
+ * @param repoPath - Absolute path to the repo root.
102
+ * @param branchName - Branch to compare against on origin.
103
+ * @returns Number of unpushed commits, or null when the remote branch does
104
+ * not exist (never pushed) or git fails.
105
+ */
106
+ export async function getUnpushedCount(repoPath, branchName) {
107
+ try {
108
+ const { stdout } = await execa('git', ['rev-list', '--count', `origin/${branchName}..HEAD`], { cwd: repoPath });
109
+ return parseInt(stdout.trim(), 10);
110
+ }
111
+ catch {
112
+ return null;
113
+ }
114
+ }
115
+ /**
116
+ * Extracts the stderr (falling back to the message) from a thrown execa error.
117
+ */
118
+ function errText(error) {
119
+ if (error instanceof Error && 'stderr' in error) {
120
+ const stderr = String(error.stderr).trim();
121
+ if (stderr)
122
+ return stderr;
123
+ }
124
+ return error instanceof Error ? error.message : String(error);
125
+ }
126
+ /**
127
+ * Rebases the current branch on top of the latest upstream base branch, while
128
+ * safely preserving any uncommitted local changes.
129
+ *
130
+ * Unlike a bare `git rebase`, this is safe to call from non-interactive agents
131
+ * against a *dirty* working tree: dirty changes are stashed first and restored
132
+ * afterwards. The outcome is classified (see {@link SyncStatus}) so that a dirty
133
+ * tree or a network failure is never mis-reported as a merge conflict.
134
+ *
135
+ * Sequence: `git fetch` → (stash if dirty) → `git rebase origin/{base}` →
136
+ * (pop the stash if one was made).
97
137
  *
98
138
  * @param repoPath - Absolute path to the repo root.
99
139
  * @param baseBranch - The upstream branch to rebase onto (e.g. 'main').
100
- * @returns Result indicating success or conflict information.
140
+ * @returns Classified result; `conflict` text is set only for real merge conflicts.
101
141
  */
102
142
  export async function rebaseRepo(repoPath, baseBranch) {
143
+ // 1. Fetch latest from origin. A failure here is infrastructure (network/auth),
144
+ // not a conflict.
103
145
  try {
104
- // Fetch latest from origin.
105
146
  await execa('git', ['fetch', 'origin'], { cwd: repoPath });
106
- // Attempt rebase.
147
+ }
148
+ catch (error) {
149
+ return {
150
+ success: false,
151
+ status: 'error',
152
+ message: `Fetch failed: ${errText(error).split('\n')[0]}`,
153
+ };
154
+ }
155
+ // 2. Stash dirty changes (including untracked) so the rebase has a clean tree.
156
+ let stashed = false;
157
+ const status = await getRepoStatus(repoPath);
158
+ if (status.hasChanges) {
159
+ try {
160
+ await execa('git', ['stash', 'push', '-u', '-m', 'nexusflow-autostash'], { cwd: repoPath });
161
+ stashed = true;
162
+ }
163
+ catch (error) {
164
+ return {
165
+ success: false,
166
+ status: 'error',
167
+ message: `Failed to stash local changes: ${errText(error).split('\n')[0]}`,
168
+ };
169
+ }
170
+ }
171
+ // 3. Attempt the rebase.
172
+ let rebaseStatus;
173
+ let rebaseMessage;
174
+ try {
107
175
  const { stdout } = await execa('git', ['rebase', `origin/${baseBranch}`], { cwd: repoPath });
108
- // Determine how far ahead the branch is.
109
- const message = stdout.includes('up to date')
110
- ? 'Up to date'
111
- : stdout.includes('Applied')
112
- ? stdout.trim()
113
- : 'Rebased successfully';
114
- return { success: true, message };
176
+ if (stdout.includes('up to date') || stdout.includes('up-to-date')) {
177
+ rebaseStatus = 'up-to-date';
178
+ rebaseMessage = 'Up to date';
179
+ }
180
+ else {
181
+ rebaseStatus = 'rebased';
182
+ rebaseMessage = 'Rebased onto latest base';
183
+ }
115
184
  }
116
185
  catch (error) {
117
- // Abort the in-progress rebase so the repo isn't left in a broken state.
186
+ // Genuine merge conflict (or other rebase failure). Capture the conflicted
187
+ // paths while the rebase is still in progress, then abort so the repo is
188
+ // never left mid-rebase, and restore the user's stashed work.
189
+ let conflictFiles = [];
190
+ try {
191
+ const { stdout } = await execa('git', ['diff', '--name-only', '--diff-filter=U'], { cwd: repoPath });
192
+ conflictFiles = stdout.split('\n').filter(Boolean);
193
+ }
194
+ catch {
195
+ // Best-effort capture; the conflict text still carries the details.
196
+ }
118
197
  try {
119
198
  await execa('git', ['rebase', '--abort'], { cwd: repoPath });
120
199
  }
121
200
  catch {
122
201
  // Best-effort abort; ignore if it fails.
123
202
  }
124
- const stderr = error instanceof Error && 'stderr' in error
125
- ? String(error.stderr)
126
- : String(error);
203
+ if (stashed) {
204
+ try {
205
+ await execa('git', ['stash', 'pop'], { cwd: repoPath });
206
+ }
207
+ catch {
208
+ // Stash pop after an abort should normally succeed (tree is unchanged);
209
+ // if it doesn't, the stash is preserved for manual recovery.
210
+ }
211
+ }
127
212
  return {
128
213
  success: false,
129
- message: 'Conflict during rebase',
130
- conflict: stderr,
214
+ status: 'conflict',
215
+ message: conflictFiles.length > 0
216
+ ? `Conflict during rebase (${conflictFiles.length} file${conflictFiles.length === 1 ? '' : 's'})`
217
+ : 'Conflict during rebase',
218
+ conflict: errText(error),
219
+ conflictFiles,
220
+ stashed,
131
221
  };
132
222
  }
223
+ // 4. Restore stashed local changes, if any.
224
+ if (stashed) {
225
+ try {
226
+ await execa('git', ['stash', 'pop'], { cwd: repoPath });
227
+ }
228
+ catch (error) {
229
+ // The rebase landed, but re-applying local changes conflicts. `git stash
230
+ // pop` leaves the stash in place on conflict, so the work is not lost.
231
+ return {
232
+ success: true,
233
+ status: 'stash-conflict',
234
+ message: 'Rebased; local changes need manual merge — stash preserved',
235
+ conflict: errText(error),
236
+ stashed,
237
+ };
238
+ }
239
+ }
240
+ return { success: true, status: rebaseStatus, message: rebaseMessage, stashed };
133
241
  }
134
242
  /**
135
243
  * Stages all changes, commits with the given message, and pushes to origin.
@@ -1 +1 @@
1
- {"version":3,"file":"multi-git.js","sourceRoot":"","sources":["../../src/utils/multi-git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multi-git.js","sourceRoot":"","sources":["../../src/utils/multi-git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=multi-git.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-git.test.d.ts","sourceRoot":"","sources":["../../src/utils/multi-git.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { execa } from 'execa';
3
+ import { rebaseRepo } from './multi-git.js';
4
+ vi.mock('execa');
5
+ /** Builds an execa-style error carrying stderr (as execa does on non-zero exit). */
6
+ function gitError(stderr) {
7
+ return Object.assign(new Error('git failed'), { stderr });
8
+ }
9
+ /** Resolves a single mocked `git` call by subcommand. */
10
+ async function routeGit(a, opts) {
11
+ const sub = a[0];
12
+ if (sub === 'fetch') {
13
+ if (opts.fetchError)
14
+ throw opts.fetchError;
15
+ return { stdout: '' };
16
+ }
17
+ if (sub === 'status') {
18
+ return { stdout: opts.statusStdout ?? '' };
19
+ }
20
+ if (sub === 'stash' && a[1] === 'push') {
21
+ if (opts.stashPushError)
22
+ throw opts.stashPushError;
23
+ return { stdout: '' };
24
+ }
25
+ if (sub === 'stash' && a[1] === 'pop') {
26
+ if (opts.stashPopError)
27
+ throw opts.stashPopError;
28
+ return { stdout: '' };
29
+ }
30
+ if (sub === 'rebase' && a[1] === '--abort') {
31
+ return { stdout: '' };
32
+ }
33
+ if (sub === 'rebase') {
34
+ if (opts.rebaseError)
35
+ throw opts.rebaseError;
36
+ return { stdout: opts.rebaseStdout ?? 'Successfully rebased.' };
37
+ }
38
+ return { stdout: '' };
39
+ }
40
+ /** Routes mocked `git` calls by subcommand so each test declares only what matters. */
41
+ function mockGit(opts) {
42
+ vi.mocked(execa).mockImplementation(((_file, args) => routeGit(args, opts)));
43
+ }
44
+ /** Returns the recorded execa calls as arrays of git args. */
45
+ function gitCalls() {
46
+ return vi.mocked(execa).mock.calls.map((c) => c[1]);
47
+ }
48
+ describe('rebaseRepo', () => {
49
+ beforeEach(() => {
50
+ vi.clearAllMocks();
51
+ });
52
+ it('reports "rebased" for a clean tree with new base commits', async () => {
53
+ mockGit({ statusStdout: '', rebaseStdout: 'Successfully rebased and updated.' });
54
+ const result = await rebaseRepo('/repo', 'main');
55
+ expect(result.success).toBe(true);
56
+ expect(result.status).toBe('rebased');
57
+ expect(result.stashed).toBeFalsy();
58
+ // No stash should be created for a clean tree.
59
+ expect(gitCalls().some((c) => c[0] === 'stash')).toBe(false);
60
+ });
61
+ it('reports "up-to-date" when already current', async () => {
62
+ mockGit({ statusStdout: '', rebaseStdout: 'Current branch feature is up to date.' });
63
+ const result = await rebaseRepo('/repo', 'main');
64
+ expect(result.success).toBe(true);
65
+ expect(result.status).toBe('up-to-date');
66
+ });
67
+ it('auto-stashes a dirty tree and restores it (the regression fix)', async () => {
68
+ mockGit({ statusStdout: ' M src/app.ts\n', rebaseStdout: 'Successfully rebased.' });
69
+ const result = await rebaseRepo('/repo', 'main');
70
+ expect(result.success).toBe(true);
71
+ expect(result.status).toBe('rebased');
72
+ expect(result.stashed).toBe(true);
73
+ const calls = gitCalls();
74
+ // Stash push (with untracked) before rebase, stash pop after.
75
+ expect(calls).toContainEqual(['stash', 'push', '-u', '-m', 'nexusflow-autostash']);
76
+ expect(calls).toContainEqual(['stash', 'pop']);
77
+ });
78
+ it('classifies a fetch failure as "error", not a conflict', async () => {
79
+ mockGit({ fetchError: gitError('fatal: unable to access origin: Could not resolve host') });
80
+ const result = await rebaseRepo('/repo', 'main');
81
+ expect(result.success).toBe(false);
82
+ expect(result.status).toBe('error');
83
+ expect(result.message).toMatch(/^Fetch failed:/);
84
+ expect(result.conflict).toBeUndefined();
85
+ // Should never attempt a rebase if fetch failed.
86
+ expect(gitCalls().some((c) => c[0] === 'rebase')).toBe(false);
87
+ });
88
+ it('classifies a real merge conflict as "conflict" and aborts', async () => {
89
+ mockGit({
90
+ statusStdout: '',
91
+ rebaseError: gitError('CONFLICT (content): Merge conflict in src/app.ts'),
92
+ });
93
+ const result = await rebaseRepo('/repo', 'main');
94
+ expect(result.success).toBe(false);
95
+ expect(result.status).toBe('conflict');
96
+ expect(result.conflict).toContain('CONFLICT');
97
+ expect(gitCalls()).toContainEqual(['rebase', '--abort']);
98
+ });
99
+ it('restores the stash after aborting a conflicting rebase on a dirty tree', async () => {
100
+ mockGit({
101
+ statusStdout: ' M src/app.ts\n',
102
+ rebaseError: gitError('CONFLICT (content): Merge conflict'),
103
+ });
104
+ const result = await rebaseRepo('/repo', 'main');
105
+ expect(result.status).toBe('conflict');
106
+ expect(result.stashed).toBe(true);
107
+ const calls = gitCalls();
108
+ expect(calls).toContainEqual(['rebase', '--abort']);
109
+ expect(calls).toContainEqual(['stash', 'pop']); // local work restored
110
+ });
111
+ it('reports "stash-conflict" when the rebase lands but the stash pop conflicts', async () => {
112
+ mockGit({
113
+ statusStdout: ' M src/app.ts\n',
114
+ rebaseStdout: 'Successfully rebased.',
115
+ stashPopError: gitError('CONFLICT (content): Merge conflict in src/app.ts'),
116
+ });
117
+ const result = await rebaseRepo('/repo', 'main');
118
+ // The rebase itself succeeded, so success is true, but it needs attention.
119
+ expect(result.success).toBe(true);
120
+ expect(result.status).toBe('stash-conflict');
121
+ expect(result.stashed).toBe(true);
122
+ expect(result.message).toMatch(/stash preserved/i);
123
+ });
124
+ });
125
+ //# sourceMappingURL=multi-git.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-git.test.js","sourceRoot":"","sources":["../../src/utils/multi-git.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,26 @@
1
1
  {
2
2
  "name": "@mrpatronz/nexusflow",
3
- "version": "0.2.18",
3
+ "version": "1.3.0",
4
4
  "description": "Combine multiple repos into a workspace with rich AI assistant context",
5
5
  "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/antan87/NexusFlow.git"
9
+ },
6
10
  "main": "dist/index.js",
7
11
  "bin": {
8
12
  "nexusflow": "dist/index.js"
9
13
  },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public",
19
+ "provenance": true
20
+ },
10
21
  "scripts": {
11
22
  "build": "tsc && npm run build --prefix gui",
23
+ "version": "node scripts/sync-version.mjs && git add -A",
12
24
  "dev": "tsc --watch",
13
25
  "start": "node dist/index.js",
14
26
  "ui": "node dist/index.js ui",
@@ -1,71 +0,0 @@
1
- ---
2
- name: ccc
3
- description: "This skill should be used when code search is needed (whether explicitly requested or as part of completing a task), when indexing the codebase after changes, or when the user asks about ccc, cocoindex-code, or the codebase index. Trigger phrases include 'search the codebase', 'find code related to', 'update the index', 'ccc', 'cocoindex-code'."
4
- ---
5
-
6
- # ccc - Semantic Code Search & Indexing
7
-
8
- `ccc` is the CLI for CocoIndex Code, providing semantic search over the current codebase and index management.
9
-
10
- ## Ownership
11
-
12
- The agent owns the `ccc` lifecycle for the current project — initialization, indexing, and searching. Do not ask the user to perform these steps; handle them automatically.
13
-
14
- - **Initialization**: If `ccc search` or `ccc index` fails with an initialization error (e.g., "Not in an initialized project directory"), run `ccc init` from the project root directory, then `ccc index` to build the index, then retry the original command.
15
- - **Index freshness**: Keep the index up to date by running `ccc index` (or `ccc search --refresh`) when the index may be stale — e.g., at the start of a session, or after making significant code changes (new files, refactors, renamed modules). There is no need to re-index between consecutive searches if no code was changed in between.
16
- - **Installation**: If `ccc` itself is not found (command not found), refer to [management.md](references/management.md) for installation instructions and inform the user.
17
-
18
- ## Searching the Codebase
19
-
20
- To perform a semantic search:
21
-
22
- ```bash
23
- ccc search <query terms>
24
- ```
25
-
26
- The query should describe the concept, functionality, or behavior to find, not exact code syntax. For example:
27
-
28
- ```bash
29
- ccc search database connection pooling
30
- ccc search user authentication flow
31
- ccc search error handling retry logic
32
- ```
33
-
34
- ### Filtering Results
35
-
36
- - **By language** (`--lang`, repeatable): restrict results to specific languages.
37
-
38
- ```bash
39
- ccc search --lang python --lang markdown database schema
40
- ```
41
-
42
- - **By path** (`--path`): restrict results to a glob pattern relative to project root. If omitted, defaults to the current working directory (only results under that subdirectory are returned).
43
-
44
- ```bash
45
- ccc search --path 'src/api/*' request validation
46
- ```
47
-
48
- ### Pagination
49
-
50
- Results default to the first page. To retrieve additional results:
51
-
52
- ```bash
53
- ccc search --offset 5 --limit 5 database schema
54
- ```
55
-
56
- If all returned results look relevant, use `--offset` to fetch the next page — there are likely more useful matches beyond the first page.
57
-
58
- ### Working with Search Results
59
-
60
- Search results include file paths and line ranges. To explore a result in more detail:
61
-
62
- - Use the editor's built-in file reading capabilities (e.g., the `Read` tool) to load the matched file and read lines around the returned range for full context.
63
- - When working in a terminal without a file-reading tool, use `sed -n '<start>,<end>p' <file>` to extract a specific line range.
64
-
65
- ## Settings
66
-
67
- To view or edit embedding model configuration, include/exclude patterns, or language overrides, see [settings.md](references/settings.md).
68
-
69
- ## Management & Troubleshooting
70
-
71
- For installation, initialization, daemon management, troubleshooting, and cleanup commands, see [management.md](references/management.md).
@@ -1,110 +0,0 @@
1
- # ccc Management
2
-
3
- ## Installation
4
-
5
- Install CocoIndex Code via pipx. Two install styles:
6
-
7
- ```bash
8
- pipx install 'cocoindex-code[full]' # batteries included (local embeddings via sentence-transformers)
9
- pipx install cocoindex-code # slim (LiteLLM-only; requires a cloud embedding provider + API key)
10
- ```
11
-
12
- The `[full]` extra pulls in `sentence-transformers` so the first-run default (local embeddings, no API key) works out of the box. The slim install is for environments where you don't want the torch/transformers deps and plan to use a LiteLLM-supported cloud provider instead.
13
-
14
- To upgrade to the latest version:
15
-
16
- ```bash
17
- pipx upgrade cocoindex-code
18
- ```
19
-
20
- After installation, the `ccc` command is available globally.
21
-
22
- ## Project Initialization
23
-
24
- Run from the root directory of the project to index:
25
-
26
- ```bash
27
- ccc init
28
- ```
29
-
30
- **First run (global settings don't exist yet)** — `ccc init` prompts interactively for the embedding provider (sentence-transformers / litellm) and model, then runs a one-off test embed via the daemon to confirm the model works. Accept the defaults for the sentence-transformers path, or pick litellm and enter a model identifier.
31
-
32
- **Subsequent runs** (global settings already exist) — prompts are skipped; only project settings and `.gitignore` are set up.
33
-
34
- To skip the interactive prompts on the first run (e.g. in a script or container), pass `--litellm-model MODEL`:
35
-
36
- ```bash
37
- ccc init --litellm-model openai/text-embedding-3-small
38
- ```
39
-
40
- This is also the only way to pick a LiteLLM model when stdin isn't a TTY and you've done a slim install.
41
-
42
- `ccc init` creates:
43
- - `~/.cocoindex_code/global_settings.yml` (user-level, embedding config + env vars).
44
- - `.cocoindex_code/settings.yml` (project-level, include/exclude patterns).
45
-
46
- If `.git` exists in the directory, `.cocoindex_code/` is automatically added to `.gitignore`.
47
-
48
- Use `-f` to skip the confirmation prompt if `ccc init` detects a potential parent project root.
49
-
50
- After initialization, edit the settings files if needed (see [settings.md](settings.md) for format details), then run `ccc index` to build the initial index. If the model test printed `[FAIL]` during `init`, edit `global_settings.yml` (and optionally add API keys under the commented `envs:` block) and verify with `ccc doctor` before indexing.
51
-
52
- ## Troubleshooting
53
-
54
- ### Diagnostics
55
-
56
- Run `ccc doctor` to check system health end-to-end:
57
-
58
- ```bash
59
- ccc doctor
60
- ```
61
-
62
- This checks global settings, daemon status, embedding model (runs a test embedding), and — if run from within a project — file matching (walks files using the same logic as the indexer) and index status. Results stream incrementally. Always points to `daemon.log` at the end for further investigation.
63
-
64
- ### Checking Project Status
65
-
66
- To view the current project's index status:
67
-
68
- ```bash
69
- ccc status
70
- ```
71
-
72
- This shows whether indexing is ongoing and index statistics.
73
-
74
- ### Daemon Management
75
-
76
- The daemon starts automatically on first use. To check its status:
77
-
78
- ```bash
79
- ccc daemon status
80
- ```
81
-
82
- This shows whether the daemon is running, its version, uptime, and loaded projects.
83
-
84
- To restart the daemon (useful if it gets into a bad state):
85
-
86
- ```bash
87
- ccc daemon restart
88
- ```
89
-
90
- To stop the daemon:
91
-
92
- ```bash
93
- ccc daemon stop
94
- ```
95
-
96
- ## Cleanup
97
-
98
- To reset a project's index (removes databases, keeps settings):
99
-
100
- ```bash
101
- ccc reset
102
- ```
103
-
104
- To fully remove all CocoIndex Code data for a project (including settings):
105
-
106
- ```bash
107
- ccc reset --all
108
- ```
109
-
110
- Both commands prompt for confirmation. Use `-f` to skip.