@shepai/cli 1.142.0-pr453.13e9c32 → 1.142.0-pr453.4cfded1
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/dist/src/presentation/web/app/api/sessions/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/sessions/route.js +13 -45
- package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.d.ts +1 -3
- package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.js +5 -13
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +36 -36
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +36 -36
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/sessions/route.js +2 -3
- package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/skills/page.js +1 -1
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/tools/page.js +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a62bd945._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__a62bd945._.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0b150ddf._.js → [root-of-the-server]__6ec59045._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0b150ddf._.js.map → [root-of-the-server]__6ec59045._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__2138fa7e._.js → [root-of-the-server]__a5f9c6e5._.js} +3 -3
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__2138fa7e._.js.map → [root-of-the-server]__a5f9c6e5._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0c5f56e3._.js +2 -2
- package/web/.next/server/chunks/ssr/_0c5f56e3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_32981544._.js → _1ac172f4._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_32981544._.js.map → _1ac172f4._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_1b719e7f._.js +1 -1
- package/web/.next/server/chunks/ssr/_1b719e7f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_37e8548b._.js +1 -1
- package/web/.next/server/chunks/ssr/_37e8548b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_55d763e2._.js +1 -1
- package/web/.next/server/chunks/ssr/_55d763e2._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6256a985._.js +1 -1
- package/web/.next/server/chunks/ssr/_6256a985._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_64bdfc6f._.js +2 -2
- package/web/.next/server/chunks/ssr/_64bdfc6f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
- package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_b71645b4._.js +1 -1
- package/web/.next/server/chunks/ssr/_b71645b4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_63e2b867._.js → _be6f83dc._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_63e2b867._.js.map → _be6f83dc._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/{src_presentation_web_688c51e1._.js → src_presentation_web_b3f3c105._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_688c51e1._.js.map → src_presentation_web_b3f3c105._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +44 -44
- package/web/.next/static/chunks/{ea9c9f37826b159d.js → 280686d2e1ff0649.js} +1 -1
- package/web/.next/static/chunks/473cac64731704c6.js +1 -0
- package/web/.next/static/chunks/{4575b817cd7db8c5.js → 66723d84a0b01634.js} +1 -1
- package/web/.next/static/chunks/{85d5f2264fa98de1.js → 6bd2935bef50e8c9.js} +1 -1
- package/web/.next/static/chunks/{a09e919d12064e37.js → 6e4420930c0fe21c.js} +1 -1
- package/web/.next/static/chunks/{724568a9e1667cb1.js → 73a92c1924e105bd.js} +2 -2
- package/web/.next/static/chunks/{08e65e91fd585be8.js → 770ba660d1a0d50b.js} +2 -2
- package/web/.next/static/chunks/{e749dc8b153ba333.js → a6e1538e04c9f936.js} +1 -1
- package/web/.next/static/chunks/{ff97b9889fb1642b.js → cc40bfb418fa8f56.js} +1 -1
- package/web/.next/static/chunks/{603856182abb645c.js → cf622541a1f71988.js} +1 -1
- package/web/.next/static/chunks/{5f44d9e531c22671.js → d65caa2ba3f34f84.js} +1 -1
- package/web/.next/static/chunks/{965e6498eaf81213.js → f2c4d78aa6703653.js} +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_ff60e4a5.js +0 -3
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_ff60e4a5.js.map +0 -1
- package/web/.next/server/chunks/[externals]__448264a3._.js +0 -3
- package/web/.next/server/chunks/[externals]__448264a3._.js.map +0 -1
- package/web/.next/static/chunks/8d9be8bb05402535.js +0 -1
- /package/web/.next/static/{vfqEcI-EmzmeSUI9cEWTq → tn6fdCmeXEgmEoL57Nt7c}/_buildManifest.js +0 -0
- /package/web/.next/static/{vfqEcI-EmzmeSUI9cEWTq → tn6fdCmeXEgmEoL57Nt7c}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{vfqEcI-EmzmeSUI9cEWTq → tn6fdCmeXEgmEoL57Nt7c}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/sessions/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/sessions/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAgTvC;;;;;GAKG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO;;;;YAnTpC,MAAM;mBACC,MAAM;iBACR,MAAM,GAAG,IAAI;sBACR,MAAM;wBACJ,MAAM,GAAG,IAAI;uBACd,MAAM,GAAG,IAAI;mBACjB,MAAM,GAAG,IAAI;qBACX,MAAM;kBACT,MAAM;;IAwUjB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
|
-
import { createHash } from 'node:crypto';
|
|
3
2
|
import { homedir } from 'node:os';
|
|
4
3
|
import { join } from 'node:path';
|
|
5
4
|
import { readdir, stat } from 'node:fs/promises';
|
|
@@ -21,58 +20,28 @@ function cursorEncodePath(p) {
|
|
|
21
20
|
return p.replace(/^\//, '').replace(/\./g, '').replace(/[/\\]/g, '-');
|
|
22
21
|
}
|
|
23
22
|
// ── Claude Code session scanner ───────────────────────────────────────
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
let entries;
|
|
23
|
+
async function scanClaudeSessions(repositoryPath, limit) {
|
|
24
|
+
const dirName = claudeEncodePath(repositoryPath);
|
|
25
|
+
const projectDir = join(homedir(), '.claude', 'projects', dirName);
|
|
26
|
+
let files;
|
|
29
27
|
try {
|
|
30
|
-
entries = await readdir(projectDir);
|
|
28
|
+
const entries = await readdir(projectDir);
|
|
29
|
+
files = entries.filter((e) => e.endsWith('.jsonl'));
|
|
31
30
|
}
|
|
32
31
|
catch {
|
|
33
32
|
return [];
|
|
34
33
|
}
|
|
35
|
-
|
|
36
|
-
const fileInfos = await Promise.allSettled(
|
|
34
|
+
// Stat all files for mtime sorting
|
|
35
|
+
const fileInfos = await Promise.allSettled(files.map(async (name) => {
|
|
37
36
|
const filePath = join(projectDir, name);
|
|
38
37
|
const s = await stat(filePath);
|
|
39
38
|
return { name, filePath, mtime: s.mtime.getTime() };
|
|
40
39
|
}));
|
|
41
|
-
|
|
40
|
+
const valid = fileInfos
|
|
42
41
|
.filter((r) => r.status === 'fulfilled')
|
|
43
|
-
.map((r) => r.value)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const dirName = claudeEncodePath(repositoryPath);
|
|
47
|
-
const projectsRoot = join(homedir(), '.claude', 'projects');
|
|
48
|
-
// Collect files from the exact directory
|
|
49
|
-
const primaryDir = join(projectsRoot, dirName);
|
|
50
|
-
let allFiles = await collectJsonlFiles(primaryDir);
|
|
51
|
-
// When includeWorktrees is set, also scan:
|
|
52
|
-
// 1. Directories whose name starts with the encoded repo path (git worktrees, .worktrees)
|
|
53
|
-
// 2. Shep worktree directories (~/.shep/repos/<hash>/wt/*) which use a hash of the repo path
|
|
54
|
-
if (includeWorktrees) {
|
|
55
|
-
try {
|
|
56
|
-
const allDirs = await readdir(projectsRoot);
|
|
57
|
-
// Match git-style worktrees (same prefix as repo path)
|
|
58
|
-
const prefixMatches = allDirs.filter((d) => d !== dirName && d.startsWith(dirName));
|
|
59
|
-
// Match shep worktrees: compute repo hash → find dirs starting with encoded shep path
|
|
60
|
-
const normalizedRepoPath = repositoryPath.replace(/\\/g, '/');
|
|
61
|
-
const repoHash = createHash('sha256').update(normalizedRepoPath).digest('hex').slice(0, 16);
|
|
62
|
-
const shepHome = join(homedir(), '.shep').replace(/\\/g, '/');
|
|
63
|
-
const shepWorktreePrefix = claudeEncodePath(join(shepHome, 'repos', repoHash));
|
|
64
|
-
const shepMatches = allDirs.filter((d) => d.startsWith(shepWorktreePrefix) && !prefixMatches.includes(d) && d !== dirName);
|
|
65
|
-
const worktreeDirs = [...prefixMatches, ...shepMatches];
|
|
66
|
-
const worktreeResults = await Promise.all(worktreeDirs.map((d) => collectJsonlFiles(join(projectsRoot, d))));
|
|
67
|
-
for (const files of worktreeResults) {
|
|
68
|
-
allFiles = allFiles.concat(files);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
// projectsRoot doesn't exist — no sessions at all
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
const valid = allFiles.sort((a, b) => b.mtime - a.mtime).slice(0, limit);
|
|
42
|
+
.map((r) => r.value)
|
|
43
|
+
.sort((a, b) => b.mtime - a.mtime)
|
|
44
|
+
.slice(0, limit);
|
|
76
45
|
// Parse each file
|
|
77
46
|
const results = await Promise.allSettled(valid.map(async (fi) => parseClaudeSession(fi.filePath, fi.name, fi.mtime, repositoryPath)));
|
|
78
47
|
return results
|
|
@@ -269,14 +238,13 @@ export async function GET(request) {
|
|
|
269
238
|
const url = new URL(request.url);
|
|
270
239
|
const repositoryPath = url.searchParams.get('repositoryPath');
|
|
271
240
|
const limit = parseInt(url.searchParams.get('limit') ?? '10', 10);
|
|
272
|
-
const includeWorktrees = url.searchParams.get('includeWorktrees') === 'true';
|
|
273
241
|
if (!repositoryPath?.trim()) {
|
|
274
242
|
return NextResponse.json({ error: 'repositoryPath is required' }, { status: 400 });
|
|
275
243
|
}
|
|
276
244
|
try {
|
|
277
245
|
// Scan all providers in parallel
|
|
278
246
|
const [claudeSessions, cursorSessions] = await Promise.all([
|
|
279
|
-
scanClaudeSessions(repositoryPath, limit
|
|
247
|
+
scanClaudeSessions(repositoryPath, limit),
|
|
280
248
|
scanCursorSessions(repositoryPath, limit),
|
|
281
249
|
]);
|
|
282
250
|
// Merge and sort by mtime descending, apply limit
|
package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.d.ts
CHANGED
|
@@ -13,11 +13,9 @@ export interface SessionSummary {
|
|
|
13
13
|
interface FeatureSessionsDropdownProps {
|
|
14
14
|
repositoryPath: string;
|
|
15
15
|
className?: string;
|
|
16
|
-
/** When true, also scan worktree session directories (used by repo nodes). */
|
|
17
|
-
includeWorktrees?: boolean;
|
|
18
16
|
/** Callback to create a feature from a session. Only shown on repo nodes. */
|
|
19
17
|
onCreateFromSession?: (session: SessionSummary, sessionFilePath: string) => void;
|
|
20
18
|
}
|
|
21
|
-
export declare function FeatureSessionsDropdown({ repositoryPath, className,
|
|
19
|
+
export declare function FeatureSessionsDropdown({ repositoryPath, className, onCreateFromSession, }: FeatureSessionsDropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
22
20
|
export {};
|
|
23
21
|
//# sourceMappingURL=feature-sessions-dropdown.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-sessions-dropdown.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-sessions-dropdown.tsx"],"names":[],"mappings":"AA8BA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,4BAA4B;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"feature-sessions-dropdown.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-sessions-dropdown.tsx"],"names":[],"mappings":"AA8BA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,4BAA4B;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;CAClF;AAmDD,wBAAgB,uBAAuB,CAAC,EACtC,cAAc,EACd,SAAS,EACT,mBAAmB,GACpB,EAAE,4BAA4B,2CA2J9B"}
|
package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.js
CHANGED
|
@@ -56,7 +56,7 @@ async function copyToClipboard(text) {
|
|
|
56
56
|
function stopNodeEvent(e) {
|
|
57
57
|
e.stopPropagation();
|
|
58
58
|
}
|
|
59
|
-
export function FeatureSessionsDropdown({ repositoryPath, className,
|
|
59
|
+
export function FeatureSessionsDropdown({ repositoryPath, className, onCreateFromSession, }) {
|
|
60
60
|
const [sessions, setSessions] = useState([]);
|
|
61
61
|
const [loading, setLoading] = useState(false);
|
|
62
62
|
const [fetched, setFetched] = useState(false);
|
|
@@ -77,11 +77,7 @@ export function FeatureSessionsDropdown({ repositoryPath, className, includeWork
|
|
|
77
77
|
// Populates count badge + active indicator, and pre-loads the dropdown.
|
|
78
78
|
useEffect(() => {
|
|
79
79
|
let cancelled = false;
|
|
80
|
-
const params = new URLSearchParams({
|
|
81
|
-
repositoryPath,
|
|
82
|
-
limit: '10',
|
|
83
|
-
...(includeWorktrees && { includeWorktrees: 'true' }),
|
|
84
|
-
});
|
|
80
|
+
const params = new URLSearchParams({ repositoryPath, limit: '10' });
|
|
85
81
|
fetch(`/api/sessions?${params.toString()}`)
|
|
86
82
|
.then((res) => (res.ok ? res.json() : null))
|
|
87
83
|
.then((data) => {
|
|
@@ -95,18 +91,14 @@ export function FeatureSessionsDropdown({ repositoryPath, className, includeWork
|
|
|
95
91
|
return () => {
|
|
96
92
|
cancelled = true;
|
|
97
93
|
};
|
|
98
|
-
}, [repositoryPath
|
|
94
|
+
}, [repositoryPath]);
|
|
99
95
|
// Re-fetch on dropdown open if not already loaded (e.g. path changed)
|
|
100
96
|
const doFetch = useCallback(async () => {
|
|
101
97
|
if (fetched)
|
|
102
98
|
return;
|
|
103
99
|
setLoading(true);
|
|
104
100
|
try {
|
|
105
|
-
const params = new URLSearchParams({
|
|
106
|
-
repositoryPath,
|
|
107
|
-
limit: '10',
|
|
108
|
-
...(includeWorktrees && { includeWorktrees: 'true' }),
|
|
109
|
-
});
|
|
101
|
+
const params = new URLSearchParams({ repositoryPath, limit: '10' });
|
|
110
102
|
const res = await fetch(`/api/sessions?${params.toString()}`);
|
|
111
103
|
if (res.ok) {
|
|
112
104
|
const data = (await res.json());
|
|
@@ -121,7 +113,7 @@ export function FeatureSessionsDropdown({ repositoryPath, className, includeWork
|
|
|
121
113
|
setLoading(false);
|
|
122
114
|
setFetched(true);
|
|
123
115
|
}
|
|
124
|
-
}, [repositoryPath, fetched
|
|
116
|
+
}, [repositoryPath, fetched]);
|
|
125
117
|
const handleOpenChange = useCallback((open) => {
|
|
126
118
|
if (open)
|
|
127
119
|
void doFetch();
|
package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,
|
|
1
|
+
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAyaA"}
|
|
@@ -71,7 +71,7 @@ export function RepositoryNode({ data, selected, }) {
|
|
|
71
71
|
e.stopPropagation();
|
|
72
72
|
data.onClick?.();
|
|
73
73
|
}
|
|
74
|
-
}, className: cn('nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80', selected && 'border-blue-400 dark:border-amber-500/60'), children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [_jsx(Github, { className: "text-muted-foreground h-5 w-5 shrink-0" }), _jsx("span", { "data-testid": "repository-node-name", className: "min-w-0 truncate text-sm font-medium", children: data.name }), _jsxs("div", { className: cn('flex shrink-0 items-center gap-2', (data.repositoryPath ?? data.onAdd) && 'ml-auto'), onClick: (e) => e.stopPropagation(), children: [data.repositoryPath ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in IDE", onClick: actions.openInIde, loading: actions.ideLoading, error: !!actions.ideError, icon: Code2, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in IDE" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in Shell", onClick: actions.openInShell, loading: actions.shellLoading, error: !!actions.shellError, icon: Terminal, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in Shell" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open Folder", onClick: actions.openFolder, loading: actions.folderLoading, error: !!actions.folderError, icon: FolderOpen, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open Folder" })] }) }), _jsx(FeatureSessionsDropdown, { repositoryPath: data.repositoryPath,
|
|
74
|
+
}, className: cn('nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80', selected && 'border-blue-400 dark:border-amber-500/60'), children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [_jsx(Github, { className: "text-muted-foreground h-5 w-5 shrink-0" }), _jsx("span", { "data-testid": "repository-node-name", className: "min-w-0 truncate text-sm font-medium", children: data.name }), _jsxs("div", { className: cn('flex shrink-0 items-center gap-2', (data.repositoryPath ?? data.onAdd) && 'ml-auto'), onClick: (e) => e.stopPropagation(), children: [data.repositoryPath ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in IDE", onClick: actions.openInIde, loading: actions.ideLoading, error: !!actions.ideError, icon: Code2, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in IDE" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in Shell", onClick: actions.openInShell, loading: actions.shellLoading, error: !!actions.shellError, icon: Terminal, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in Shell" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open Folder", onClick: actions.openFolder, loading: actions.folderLoading, error: !!actions.folderError, icon: FolderOpen, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open Folder" })] }) }), _jsx(FeatureSessionsDropdown, { repositoryPath: data.repositoryPath, onCreateFromSession: handleCreateFromSession })] })) : null, data.onAdd ? _jsx("div", { className: "ml-1.5" }) : null, data.onAdd ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("button", { "aria-label": "New feature", "data-testid": "repository-node-add-button", onClick: (e) => {
|
|
75
75
|
e.stopPropagation();
|
|
76
76
|
data.onAdd?.();
|
|
77
77
|
}, className: cn('flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded bg-blue-500 px-1.5 text-[11px] font-bold text-white transition-colors hover:bg-blue-600 dark:bg-amber-500 dark:hover:bg-amber-400', data.pulseAdd && 'animate-pulse-cta'), children: [_jsx(Plus, { className: "h-3 w-3" }), _jsx("span", { className: "translate-y-px", children: "New" })] }) }), _jsx(TooltipContent, { side: "top", children: "New feature" })] }) })) : null] })] }), data.branch ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-info", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-3 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1 truncate", "data-testid": "repository-node-branch", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "truncate", children: data.branch })] }), data.behindCount != null && data.behindCount > 0 ? (_jsxs("span", { className: "flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500", "data-testid": "repository-node-behind", children: [_jsx(ArrowDown, { className: "h-3 w-3 shrink-0" }), data.behindCount, " behind"] })) : null] }) }), data.commitMessage ? (_jsx("div", { "data-testid": "repository-node-commit-info", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate", "data-testid": "repository-node-commit-message", children: data.commitMessage }), data.committer ? (_jsxs("span", { className: "text-muted-foreground/70 ml-auto flex shrink-0 items-center gap-1", "data-testid": "repository-node-committer", children: [_jsx(User, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: data.committer })] })) : null] }) })) : null] })) : data.gitInfoStatus === 'not-a-repo' ? (
|