@shepai/cli 1.121.0-pr388.bf8e9d3 → 1.121.0-pr391.c78e14b
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/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts +3 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +4 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence-output-parser.d.ts +21 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence-output-parser.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence-output-parser.js +71 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +11 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +34 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.js +18 -6
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.js +4 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +20 -1
- package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +2 -43
- package/dist/src/presentation/web/app/actions/approve-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/approve-feature.js +9 -0
- package/dist/src/presentation/web/app/actions/reject-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/reject-feature.js +9 -0
- package/dist/src/presentation/web/app/api/npm-version/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/npm-version/route.js +9 -1
- package/dist/src/presentation/web/app/api/sessions/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/sessions/route.js +43 -10
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -5
- 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/create/page/server-reference-manifest.json +22 -22
- 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 +28 -28
- 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 +28 -28
- 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 +20 -20
- 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 +22 -22
- 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 +28 -28
- 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 +28 -28
- 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 +20 -20
- 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 +20 -20
- 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 +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/sessions/route.js +1 -1
- package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
- 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 +6 -6
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/[externals]_node:fs_ddf6f167._.js +3 -0
- package/web/.next/server/chunks/[externals]_node:fs_ddf6f167._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__3b72e8b0._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__3b72e8b0._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__42b7ab55._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__42b7ab55._.js.map +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/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- 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/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b724df9e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b724df9e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0dc2cfd3._.js +1 -1
- package/web/.next/server/chunks/ssr/_0dc2cfd3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_303403cc._.js → _bab62fc0._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_303403cc._.js.map → _bab62fc0._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_c56ec6a7._.js +3 -0
- package/web/.next/server/chunks/ssr/{_6b5db2f2._.js.map → _c56ec6a7._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_4fde7610._.js → _f7380711._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_4fde7610._.js.map → _f7380711._.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_5f039db1._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.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/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +34 -34
- package/web/.next/static/chunks/{408081750f6cbc07.js → 069b25904188166a.js} +2 -2
- package/web/.next/static/chunks/{da7c48510e6b163d.js → 13cfe539c3614462.js} +1 -1
- package/web/.next/static/chunks/{03fc1b9e03ba9c18.js → 3fa5bb266a4efd0b.js} +1 -1
- package/web/.next/static/chunks/{b53ebbfd7828a4ac.js → 55ba4f5f2c14bc6d.js} +1 -1
- package/web/.next/static/chunks/6bf868f1f2c9932a.js +1 -0
- package/web/.next/static/chunks/794e13829d777a43.js +1 -0
- package/web/.next/static/chunks/{a16d086483967fa5.js → 7fbb2a18e0290c04.js} +1 -1
- package/web/.next/static/chunks/{70e3bcb8b8c18483.js → 84afd37bdafaebd2.js} +1 -1
- package/web/.next/static/chunks/{10bb9c88a36edf3d.js → 946fb1bc0a185497.js} +1 -1
- package/web/.next/static/chunks/{0131909a6948f59a.js → e4e8be03b609cbb9.js} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0fe7788d._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0fe7788d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0424e9ef._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0424e9ef._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__580db3b8._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__580db3b8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d1a30fb._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d1a30fb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7e95570f._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7e95570f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_6b5db2f2._.js +0 -3
- package/web/.next/static/chunks/00ca7625c98bf6f9.js +0 -1
- package/web/.next/static/chunks/68a9e7efac269284.js +0 -1
- /package/web/.next/static/{ccSdOV-lLaWhdVo9m_Y1J → KhUL5DyMrZ1T6n60ZVbAZ}/_buildManifest.js +0 -0
- /package/web/.next/static/{ccSdOV-lLaWhdVo9m_Y1J → KhUL5DyMrZ1T6n60ZVbAZ}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{ccSdOV-lLaWhdVo9m_Y1J → KhUL5DyMrZ1T6n60ZVbAZ}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { readdir, stat
|
|
4
|
+
import { readdir, stat } from 'node:fs/promises';
|
|
5
5
|
export const dynamic = 'force-dynamic';
|
|
6
6
|
// ── Path encoding helpers ─────────────────────────────────────────────
|
|
7
7
|
/**
|
|
@@ -49,14 +49,32 @@ async function scanClaudeSessions(repositoryPath, limit) {
|
|
|
49
49
|
.map((r) => r.value)
|
|
50
50
|
.filter((s) => s !== null);
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Read the first N bytes of a file to extract preview and timestamps
|
|
54
|
+
* without loading the entire (potentially multi-MB) session file.
|
|
55
|
+
*/
|
|
56
|
+
const PREVIEW_READ_BYTES = 8_192; // 8KB is enough for first few messages
|
|
52
57
|
async function parseClaudeSession(filePath, fileName, mtime, repositoryPath) {
|
|
53
|
-
const
|
|
54
|
-
const lines = content.split('\n').filter((l) => l.trim());
|
|
58
|
+
const { createReadStream } = await import('node:fs');
|
|
55
59
|
const id = fileName.replace('.jsonl', '');
|
|
60
|
+
// Read only the first chunk to extract preview and first timestamp
|
|
56
61
|
let preview = null;
|
|
57
|
-
let messageCount = 0;
|
|
58
62
|
let firstTimestamp = null;
|
|
59
|
-
let
|
|
63
|
+
let messageCount = 0;
|
|
64
|
+
const head = await new Promise((resolve) => {
|
|
65
|
+
const chunks = [];
|
|
66
|
+
let size = 0;
|
|
67
|
+
const stream = createReadStream(filePath, { end: PREVIEW_READ_BYTES - 1 });
|
|
68
|
+
stream.on('data', (chunk) => {
|
|
69
|
+
chunks.push(chunk);
|
|
70
|
+
size += chunk.length;
|
|
71
|
+
});
|
|
72
|
+
stream.on('end', () => resolve(Buffer.concat(chunks, size).toString('utf-8')));
|
|
73
|
+
stream.on('error', () => resolve(''));
|
|
74
|
+
});
|
|
75
|
+
if (!head)
|
|
76
|
+
return null;
|
|
77
|
+
const lines = head.split('\n').filter((l) => l.trim());
|
|
60
78
|
for (const line of lines) {
|
|
61
79
|
try {
|
|
62
80
|
const entry = JSON.parse(line);
|
|
@@ -66,7 +84,6 @@ async function parseClaudeSession(filePath, fileName, mtime, repositoryPath) {
|
|
|
66
84
|
messageCount++;
|
|
67
85
|
if (entry.timestamp) {
|
|
68
86
|
firstTimestamp ??= entry.timestamp;
|
|
69
|
-
lastTimestamp = entry.timestamp;
|
|
70
87
|
}
|
|
71
88
|
if (role === 'user' && preview === null) {
|
|
72
89
|
preview = extractText(entry.message?.content);
|
|
@@ -80,14 +97,16 @@ async function parseClaudeSession(filePath, fileName, mtime, repositoryPath) {
|
|
|
80
97
|
}
|
|
81
98
|
if (messageCount === 0)
|
|
82
99
|
return null;
|
|
100
|
+
// Use mtime as lastMessageAt — avoids reading entire file for last line
|
|
101
|
+
const mtimeIso = new Date(mtime).toISOString();
|
|
83
102
|
return {
|
|
84
103
|
id,
|
|
85
104
|
agentType: 'claude-code',
|
|
86
105
|
preview,
|
|
87
106
|
messageCount,
|
|
88
107
|
firstMessageAt: firstTimestamp,
|
|
89
|
-
lastMessageAt:
|
|
90
|
-
createdAt: firstTimestamp ??
|
|
108
|
+
lastMessageAt: mtimeIso,
|
|
109
|
+
createdAt: firstTimestamp ?? mtimeIso,
|
|
91
110
|
projectPath: repositoryPath,
|
|
92
111
|
filePath,
|
|
93
112
|
_mtime: mtime,
|
|
@@ -144,11 +163,25 @@ async function scanCursorSessions(repositoryPath, limit) {
|
|
|
144
163
|
.filter((s) => s !== null);
|
|
145
164
|
}
|
|
146
165
|
async function parseCursorSession(filePath, fileName, mtime, repositoryPath) {
|
|
147
|
-
const
|
|
148
|
-
const lines = content.split('\n').filter((l) => l.trim());
|
|
166
|
+
const { createReadStream } = await import('node:fs');
|
|
149
167
|
const id = fileName.replace('.jsonl', '');
|
|
168
|
+
// Read only the first chunk for preview extraction
|
|
169
|
+
const head = await new Promise((resolve) => {
|
|
170
|
+
const chunks = [];
|
|
171
|
+
let size = 0;
|
|
172
|
+
const stream = createReadStream(filePath, { end: PREVIEW_READ_BYTES - 1 });
|
|
173
|
+
stream.on('data', (chunk) => {
|
|
174
|
+
chunks.push(chunk);
|
|
175
|
+
size += chunk.length;
|
|
176
|
+
});
|
|
177
|
+
stream.on('end', () => resolve(Buffer.concat(chunks, size).toString('utf-8')));
|
|
178
|
+
stream.on('error', () => resolve(''));
|
|
179
|
+
});
|
|
180
|
+
if (!head)
|
|
181
|
+
return null;
|
|
150
182
|
let preview = null;
|
|
151
183
|
let messageCount = 0;
|
|
184
|
+
const lines = head.split('\n').filter((l) => l.trim());
|
|
152
185
|
for (const line of lines) {
|
|
153
186
|
try {
|
|
154
187
|
const entry = JSON.parse(line);
|