neural-loom 0.2.19 → 0.2.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/build-diagnostics.json +1 -1
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/server/app/_global-error/page.js +6 -7
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page.js +6 -7
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/api/context/aider/route.js +2 -2
- package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
- package/.next/server/app/api/context/claude/route.js +2 -2
- package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
- package/.next/server/app/api/context/route.js +2 -2
- package/.next/server/app/api/context/route.js.nft.json +1 -1
- package/.next/server/app/api/context/ssh/route.js +2 -2
- package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
- package/.next/server/app/api/files/route.js +2 -2
- package/.next/server/app/api/files/route.js.nft.json +1 -1
- package/.next/server/app/api/git/route.js +2 -2
- package/.next/server/app/api/git/route.js.nft.json +1 -1
- package/.next/server/app/api/recents/route.js +2 -2
- package/.next/server/app/api/recents/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/inject/route.js +2 -2
- package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/input/route.js +2 -2
- package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/launch/route.js +2 -2
- package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js +2 -2
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/scope/route.js +2 -2
- package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/start/route.js +2 -2
- package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/stats/route.js +2 -2
- package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/stop/route.js +2 -2
- package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
- package/.next/server/app/page/react-loadable-manifest.json +4 -4
- package/.next/server/app/page.js +6 -7
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +0 -1
- package/.next/server/chunks/{[externals]_next_dist_0arv.vj._.js → [externals]__048y_op._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__005xmeg._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0iqaxhx._.js.map → [root-of-the-server]__005xmeg._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0k6w___._.js → [root-of-the-server]__0656ruo._.js} +3 -3
- package/.next/server/chunks/{[root-of-the-server]__0k6w___._.js.map → [root-of-the-server]__0656ruo._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0969ozy._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0l7c-gn._.js.map → [root-of-the-server]__0969ozy._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0_~zjnf._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0qz~w0~._.js.map → [root-of-the-server]__0_~zjnf._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js +9 -9
- package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0hl8jxx._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0bi3d5z._.js.map → [root-of-the-server]__0hl8jxx._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0ho7s6e._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0-lisav._.js.map → [root-of-the-server]__0ho7s6e._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0j8-xkl._.js → [root-of-the-server]__0i83~95._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0j8-xkl._.js.map → [root-of-the-server]__0i83~95._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0kn5tap._.js +4 -0
- package/.next/server/chunks/{[root-of-the-server]__0ntt3om._.js.map → [root-of-the-server]__0kn5tap._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0lh_jn-._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0__9rdk._.js.map → [root-of-the-server]__0lh_jn-._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0mq3k0u._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0_2_i_q._.js.map → [root-of-the-server]__0mq3k0u._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0n-zban._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0p~u94k._.js.map → [root-of-the-server]__0n-zban._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0rr36fm._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0m91xif._.js.map → [root-of-the-server]__0rr36fm._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0sa_gpm._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0sa_gpm._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0vp8-ka._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0qyrt6_._.js.map → [root-of-the-server]__0vp8-ka._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0xcrc-1._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0xcrc-1._.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0ev3h.z.js +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0ev3h.z.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0cbmrds._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0cbmrds._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ni-l5l._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ni-l5l._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__089dc4i._.js → [root-of-the-server]__0tcyn68._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__0tcyn68._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0yj_dfr._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0yj_dfr._.js.map +1 -0
- package/.next/server/chunks/ssr/_0t7oqy6._.js +1 -1
- package/.next/server/chunks/ssr/_0t7oqy6._.js.map +1 -1
- package/.next/server/chunks/ssr/{node_modules_next_dist_0ppctuh._.js → node_modules_next_dist_0-g.jog._.js} +2 -2
- package/.next/server/chunks/ssr/node_modules_next_dist_0-g.jog._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bj8dkg.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bj8dkg.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cvrgh7.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cvrgh7.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages-manifest.json +1 -4
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/ZtSBLhTiGqKpNetcymWiC/_ssgManifest.js +1 -0
- package/.next/static/chunks/{0x__nd4avi0fg.js → 070hz362~_h8n.js} +1 -1
- package/.next/static/chunks/0bclk7hf35ac4.js +1 -0
- package/.next/static/chunks/0kkoif8x_kxrq.js +1 -0
- package/.next/static/chunks/{0pp.lp89pntpv.css → 0m-_sw1425nkp.css} +1 -1
- package/.next/static/chunks/17jifiroq0_q..js +1 -0
- package/package.json +1 -1
- package/public/logo.png +0 -0
- package/public/manifest.json +22 -0
- package/public/sw.js +12 -0
- package/src/app/api/context/aider/route.ts +6 -1
- package/src/app/api/files/route.ts +20 -8
- package/src/app/api/git/route.ts +117 -1
- package/src/app/api/sessions/route.ts +4 -1
- package/src/app/components/AiderWizard.tsx +19 -1
- package/src/app/components/IdeLayout.tsx +1215 -112
- package/src/app/components/MarkdownPreview.tsx +528 -0
- package/src/app/components/TerminalConsole.tsx +2 -2
- package/src/app/layout.tsx +5 -0
- package/src/app/page.module.css +2 -0
- package/src/app/page.tsx +42 -19
- package/src/lib/agents/AiderRunner.ts +83 -44
- package/src/lib/agents/ClaudeRunner.ts +43 -18
- package/src/lib/agents/DockerRunner.ts +1 -3
- package/src/lib/agents/SSHRunner.ts +1 -3
- package/src/lib/agents/SessionManager.ts +18 -9
- package/src/lib/agents/SessionPersister.ts +10 -0
- package/src/lib/agents/ShellRunner.ts +1 -3
- package/src/lib/agents/WebSocketServer.ts +20 -13
- package/.next/BUILD_ID +0 -1
- package/.next/app-path-routes-manifest.json +0 -21
- package/.next/diagnostics/route-bundle-stats.json +0 -25
- package/.next/export-marker.json +0 -6
- package/.next/images-manifest.json +0 -68
- package/.next/prerender-manifest.json +0 -114
- package/.next/required-server-files.js +0 -335
- package/.next/required-server-files.json +0 -335
- package/.next/routes-manifest.json +0 -159
- package/.next/server/app/_global-error.html +0 -1
- package/.next/server/app/_global-error.meta +0 -15
- package/.next/server/app/_global-error.rsc +0 -15
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +0 -5
- package/.next/server/app/_global-error.segments/_full.segment.rsc +0 -15
- package/.next/server/app/_global-error.segments/_head.segment.rsc +0 -6
- package/.next/server/app/_global-error.segments/_index.segment.rsc +0 -5
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +0 -1
- package/.next/server/app/_not-found.html +0 -1
- package/.next/server/app/_not-found.meta +0 -16
- package/.next/server/app/_not-found.rsc +0 -16
- package/.next/server/app/_not-found.segments/_full.segment.rsc +0 -16
- package/.next/server/app/_not-found.segments/_head.segment.rsc +0 -6
- package/.next/server/app/_not-found.segments/_index.segment.rsc +0 -5
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +0 -5
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +0 -5
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +0 -2
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
- package/.next/server/app/favicon.ico/route/build-manifest.json +0 -9
- package/.next/server/app/favicon.ico/route.js +0 -7
- package/.next/server/app/favicon.ico/route.js.map +0 -5
- package/.next/server/app/favicon.ico/route.js.nft.json +0 -1
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +0 -1
- package/.next/server/app/index.html +0 -1
- package/.next/server/app/index.meta +0 -14
- package/.next/server/app/index.rsc +0 -21
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +0 -10
- package/.next/server/app/index.segments/_full.segment.rsc +0 -21
- package/.next/server/app/index.segments/_head.segment.rsc +0 -6
- package/.next/server/app/index.segments/_index.segment.rsc +0 -5
- package/.next/server/app/index.segments/_tree.segment.rsc +0 -5
- package/.next/server/chunks/[externals]__1334_78._.js +0 -3
- package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0-lisav._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0_2_i_q._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0__9rdk._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0bi3d5z._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0iqaxhx._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0l7c-gn._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0m91xif._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0ntt3om._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0p~u94k._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0qyrt6_._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0qz~w0~._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0ty8hwz._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0ty8hwz._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0ylcu31._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0ylcu31._.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js.map +0 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0m.429v.js +0 -3
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0m.429v.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__089dc4i._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0_7i5h0._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0_7i5h0._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0hw~y-4._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0hw~y-4._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0~y8ue.._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0~y8ue.._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_05l396c._.js +0 -3
- package/.next/server/chunks/ssr/node_modules_05l396c._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_0ppctuh._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03-z2qq.js +0 -4
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03-z2qq.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07vh7rm.js +0 -4
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07vh7rm.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0qp4u6g.js +0 -4
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0qp4u6g.js.map +0 -1
- package/.next/server/functions-config-manifest.json +0 -4
- package/.next/server/pages/404.html +0 -1
- package/.next/server/pages/500.html +0 -1
- package/.next/server/prefetch-hints.json +0 -1
- package/.next/static/W3UxhE_D02EcHxTzdXKHX/_ssgManifest.js +0 -1
- package/.next/static/chunks/01.1lqu6kmllv.js +0 -1
- package/.next/static/chunks/0ek0280331wie.js +0 -1
- package/.next/static/chunks/0jxar8nsw_py3.js +0 -1
- package/.next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
- package/.next/trace +0 -1
- package/.next/trace-build +0 -1
- package/src/app/favicon.ico +0 -0
- /package/.next/server/chunks/{[externals]__1334_78._.js.map → [externals]__048y_op._.js.map} +0 -0
- /package/.next/static/{W3UxhE_D02EcHxTzdXKHX → ZtSBLhTiGqKpNetcymWiC}/_buildManifest.js +0 -0
- /package/.next/static/{W3UxhE_D02EcHxTzdXKHX → ZtSBLhTiGqKpNetcymWiC}/_clientMiddlewareManifest.js +0 -0
package/src/app/api/git/route.ts
CHANGED
|
@@ -27,6 +27,8 @@ export async function GET(request: Request) {
|
|
|
27
27
|
const lines = stdout.split(/\r?\n/).filter(Boolean);
|
|
28
28
|
const files = lines.map(line => {
|
|
29
29
|
// porcelain format: XY path or XY "path"
|
|
30
|
+
const indexStatus = line.substring(0, 1);
|
|
31
|
+
const worktreeStatus = line.substring(1, 2);
|
|
30
32
|
const status = line.substring(0, 2);
|
|
31
33
|
let relativePath = line.substring(3).trim();
|
|
32
34
|
// Remove quotes if git quoted the path
|
|
@@ -36,13 +38,34 @@ export async function GET(request: Request) {
|
|
|
36
38
|
const absolutePath = path.join(targetRoot, relativePath).replace(/\\/g, "/");
|
|
37
39
|
return {
|
|
38
40
|
status: status.trim(),
|
|
41
|
+
indexStatus,
|
|
42
|
+
worktreeStatus,
|
|
39
43
|
relativePath,
|
|
40
44
|
absolutePath,
|
|
41
45
|
name: path.basename(relativePath)
|
|
42
46
|
};
|
|
43
47
|
});
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
// Get branch name
|
|
50
|
+
let branch = "";
|
|
51
|
+
try {
|
|
52
|
+
const { stdout: branchOut } = await execPromise("git rev-parse --abbrev-ref HEAD", { cwd: targetRoot });
|
|
53
|
+
branch = branchOut.trim();
|
|
54
|
+
} catch {}
|
|
55
|
+
|
|
56
|
+
// Get ahead/behind sync count
|
|
57
|
+
let ahead = 0;
|
|
58
|
+
let behind = 0;
|
|
59
|
+
try {
|
|
60
|
+
const { stdout: syncOut } = await execPromise("git rev-list --left-right --count HEAD...@{u}", { cwd: targetRoot });
|
|
61
|
+
const parts = syncOut.trim().split(/\s+/);
|
|
62
|
+
if (parts.length === 2) {
|
|
63
|
+
ahead = parseInt(parts[0], 10) || 0;
|
|
64
|
+
behind = parseInt(parts[1], 10) || 0;
|
|
65
|
+
}
|
|
66
|
+
} catch {}
|
|
67
|
+
|
|
68
|
+
return NextResponse.json({ success: true, isGit: true, files, branch, ahead, behind });
|
|
46
69
|
}
|
|
47
70
|
|
|
48
71
|
if (action === "diff") {
|
|
@@ -79,3 +102,96 @@ export async function GET(request: Request) {
|
|
|
79
102
|
return NextResponse.json({ error: errorMessage }, { status: 500 });
|
|
80
103
|
}
|
|
81
104
|
}
|
|
105
|
+
|
|
106
|
+
export async function POST(request: Request) {
|
|
107
|
+
try {
|
|
108
|
+
const body = await request.json();
|
|
109
|
+
const { action, rootPath, file, message } = body;
|
|
110
|
+
|
|
111
|
+
const targetRoot = ((rootPath && fs.existsSync(rootPath)) ? rootPath : process.env.ORIGINAL_CWD || process.cwd()).replace(/\\/g, "/");
|
|
112
|
+
|
|
113
|
+
// Check if it's a git repo
|
|
114
|
+
try {
|
|
115
|
+
await execPromise("git rev-parse --is-inside-work-tree", { cwd: targetRoot });
|
|
116
|
+
} catch {
|
|
117
|
+
return NextResponse.json({ error: "Not a git repository" }, { status: 400 });
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (action === "stage") {
|
|
121
|
+
if (file) {
|
|
122
|
+
await execPromise(`git add ${JSON.stringify(file)}`, { cwd: targetRoot });
|
|
123
|
+
} else {
|
|
124
|
+
await execPromise("git add -A", { cwd: targetRoot });
|
|
125
|
+
}
|
|
126
|
+
return NextResponse.json({ success: true });
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (action === "unstage") {
|
|
130
|
+
if (file) {
|
|
131
|
+
await execPromise(`git reset HEAD -- ${JSON.stringify(file)}`, { cwd: targetRoot });
|
|
132
|
+
} else {
|
|
133
|
+
await execPromise("git reset HEAD -- .", { cwd: targetRoot });
|
|
134
|
+
}
|
|
135
|
+
return NextResponse.json({ success: true });
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (action === "discard") {
|
|
139
|
+
if (!file) {
|
|
140
|
+
return NextResponse.json({ error: "Missing file parameter" }, { status: 400 });
|
|
141
|
+
}
|
|
142
|
+
const absolutePath = path.resolve(targetRoot, file).replace(/\\/g, "/");
|
|
143
|
+
// Check status to see if it is untracked
|
|
144
|
+
const { stdout: statusOut } = await execPromise("git status --porcelain -- " + JSON.stringify(file), { cwd: targetRoot });
|
|
145
|
+
const isUntracked = statusOut.startsWith("??");
|
|
146
|
+
|
|
147
|
+
if (isUntracked) {
|
|
148
|
+
if (fs.existsSync(absolutePath)) {
|
|
149
|
+
fs.unlinkSync(absolutePath);
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
152
|
+
await execPromise(`git checkout -- ${JSON.stringify(file)}`, { cwd: targetRoot });
|
|
153
|
+
}
|
|
154
|
+
return NextResponse.json({ success: true });
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (action === "commit") {
|
|
158
|
+
if (!message || !message.trim()) {
|
|
159
|
+
return NextResponse.json({ error: "Commit message cannot be empty" }, { status: 400 });
|
|
160
|
+
}
|
|
161
|
+
const { stdout } = await execPromise(`git commit -m ${JSON.stringify(message.trim())}`, { cwd: targetRoot });
|
|
162
|
+
return NextResponse.json({ success: true, output: stdout });
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (action === "ignore") {
|
|
166
|
+
if (!file) {
|
|
167
|
+
return NextResponse.json({ error: "Missing file parameter" }, { status: 400 });
|
|
168
|
+
}
|
|
169
|
+
const gitignorePath = path.join(targetRoot, ".gitignore");
|
|
170
|
+
let content = "";
|
|
171
|
+
if (fs.existsSync(gitignorePath)) {
|
|
172
|
+
content = fs.readFileSync(gitignorePath, "utf8");
|
|
173
|
+
}
|
|
174
|
+
const lines = content.split(/\r?\n/);
|
|
175
|
+
if (!lines.includes(file)) {
|
|
176
|
+
const separator = (content.endsWith("\n") || content === "") ? "" : "\n";
|
|
177
|
+
fs.appendFileSync(gitignorePath, `${separator}${file}\n`);
|
|
178
|
+
}
|
|
179
|
+
return NextResponse.json({ success: true });
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (action === "pull") {
|
|
183
|
+
const { stdout, stderr } = await execPromise("git pull", { cwd: targetRoot });
|
|
184
|
+
return NextResponse.json({ success: true, output: stdout + stderr });
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (action === "push") {
|
|
188
|
+
const { stdout, stderr } = await execPromise("git push", { cwd: targetRoot });
|
|
189
|
+
return NextResponse.json({ success: true, output: stdout + stderr });
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return NextResponse.json({ error: "Invalid action" }, { status: 400 });
|
|
193
|
+
} catch (error) {
|
|
194
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
195
|
+
return NextResponse.json({ error: errorMessage }, { status: 500 });
|
|
196
|
+
}
|
|
197
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { NextResponse } from "next/server";
|
|
2
2
|
import { SessionManager } from "@/lib/agents/SessionManager";
|
|
3
|
+
import pkg from "../../../../package.json";
|
|
3
4
|
|
|
4
5
|
declare global {
|
|
5
6
|
var wsPort: number | undefined;
|
|
@@ -20,15 +21,17 @@ export async function GET(request: Request) {
|
|
|
20
21
|
...session.getStatus(),
|
|
21
22
|
logs: session.logs,
|
|
22
23
|
wsPort: global.wsPort || 3001,
|
|
24
|
+
version: pkg.version,
|
|
23
25
|
});
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
const sessions = manager.listSessions();
|
|
27
29
|
const originalCwd = process.env.ORIGINAL_CWD || process.cwd();
|
|
28
30
|
const wsPort = global.wsPort || 3001;
|
|
29
|
-
return NextResponse.json({ sessions, originalCwd, wsPort });
|
|
31
|
+
return NextResponse.json({ sessions, originalCwd, wsPort, version: pkg.version });
|
|
30
32
|
} catch (error) {
|
|
31
33
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
32
34
|
return NextResponse.json({ error: errorMessage }, { status: 500 });
|
|
33
35
|
}
|
|
34
36
|
}
|
|
37
|
+
|
|
@@ -11,6 +11,7 @@ interface AiderConfig {
|
|
|
11
11
|
extraFlags: string;
|
|
12
12
|
workspaceRoot: string;
|
|
13
13
|
scopedDirs: string[];
|
|
14
|
+
loadAllFiles: boolean;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
interface AiderWizardProps {
|
|
@@ -28,6 +29,7 @@ export default function AiderWizard({ onClose, onConfirmLaunch, isDocker }: Aide
|
|
|
28
29
|
extraFlags: "",
|
|
29
30
|
workspaceRoot: "",
|
|
30
31
|
scopedDirs: [],
|
|
32
|
+
loadAllFiles: true,
|
|
31
33
|
});
|
|
32
34
|
|
|
33
35
|
const [newScopePath, setNewScopePath] = useState("");
|
|
@@ -54,6 +56,7 @@ export default function AiderWizard({ onClose, onConfirmLaunch, isDocker }: Aide
|
|
|
54
56
|
extraFlags: data.config.extraFlags || "",
|
|
55
57
|
workspaceRoot: data.config.workspaceRoot || "",
|
|
56
58
|
scopedDirs: data.config.scopedDirs || [],
|
|
59
|
+
loadAllFiles: data.config.loadAllFiles !== false,
|
|
57
60
|
});
|
|
58
61
|
}
|
|
59
62
|
}
|
|
@@ -314,9 +317,11 @@ export default function AiderWizard({ onClose, onConfirmLaunch, isDocker }: Aide
|
|
|
314
317
|
style={selectStyle}
|
|
315
318
|
>
|
|
316
319
|
<option value="claude-3-5-sonnet">Claude 3.5 Sonnet (Recommended)</option>
|
|
320
|
+
<option value="gemini/gemini-2.5-flash">Gemini 2.5 Flash (Recommended for Free Tier)</option>
|
|
321
|
+
<option value="gemini/gemini-2.5-pro">Gemini 2.5 Pro (Requires Paid/Billing Tier)</option>
|
|
322
|
+
<option value="gemini/gemini-2.0-flash-exp">Gemini 2.0 Flash Exp</option>
|
|
317
323
|
<option value="gemini/gemini-1.5-pro">Gemini 1.5 Pro</option>
|
|
318
324
|
<option value="gemini/gemini-1.5-flash">Gemini 1.5 Flash</option>
|
|
319
|
-
<option value="gemini/gemini-2.0-flash-exp">Gemini 2.0 Flash Exp</option>
|
|
320
325
|
<option value="gpt-4o">GPT-4o</option>
|
|
321
326
|
<option value="deepseek/deepseek-coder">DeepSeek Coder</option>
|
|
322
327
|
<option value="gpt-4-turbo">GPT-4 Turbo</option>
|
|
@@ -337,6 +342,19 @@ export default function AiderWizard({ onClose, onConfirmLaunch, isDocker }: Aide
|
|
|
337
342
|
</span>
|
|
338
343
|
</div>
|
|
339
344
|
|
|
345
|
+
<div style={{ display: "flex", alignItems: "center", gap: "0.5rem", marginTop: "0.25rem", marginBottom: "1.25rem" }}>
|
|
346
|
+
<input
|
|
347
|
+
type="checkbox"
|
|
348
|
+
id="loadAllFiles"
|
|
349
|
+
checked={config.loadAllFiles}
|
|
350
|
+
onChange={(e) => setConfig({ ...config, loadAllFiles: e.target.checked })}
|
|
351
|
+
style={{ width: "16px", height: "16px", cursor: "pointer", accentColor: "var(--accent)" }}
|
|
352
|
+
/>
|
|
353
|
+
<label htmlFor="loadAllFiles" style={{ fontSize: "0.8rem", color: "var(--foreground)", cursor: "pointer", userSelect: "none" }}>
|
|
354
|
+
Load all files in root directory on startup
|
|
355
|
+
</label>
|
|
356
|
+
</div>
|
|
357
|
+
|
|
340
358
|
{errorMessage && (
|
|
341
359
|
<div style={errorBoxStyle}>
|
|
342
360
|
✗ {errorMessage}
|