@axhub/genie 0.2.7 → 0.2.8
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/api-docs.html +2 -2
- package/dist/assets/App-CTKZtqB1.js +460 -0
- package/dist/assets/App-qxJ8_QYu.css +32 -0
- package/dist/assets/ReviewApp-DM6BNAzR.js +1 -0
- package/dist/assets/{_basePickBy-C19AekOu.js → _basePickBy-CqJbRZ9y.js} +1 -1
- package/dist/assets/{_baseUniq-JsnevLw_.js → _baseUniq-BS8YH8jO.js} +1 -1
- package/dist/assets/{arc-BLpcuBlf.js → arc-BBmKEN-S.js} +1 -1
- package/dist/assets/architectureDiagram-2XIMDMQ5-N5lcb82R.js +36 -0
- package/dist/assets/{blockDiagram-WCTKOSBZ-DQBLwsUS.js → blockDiagram-WCTKOSBZ-DTMwHuLn.js} +3 -3
- package/dist/assets/c4Diagram-IC4MRINW-BTKlkXI9.js +10 -0
- package/dist/assets/channel-1oJBvF-0.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-De63kbgc.js → chunk-4BX2VUAB-DUdoTxAc.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-DtTDDdM9.js → chunk-55IACEB6-Bm_92xe4.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-DHuwd8tw.js → chunk-FMBD7UC4-CGW0g62g.js} +1 -1
- package/dist/assets/{chunk-JSJVCQXG-BgytFtmO.js → chunk-JSJVCQXG-DYkTH3w1.js} +1 -1
- package/dist/assets/{chunk-KX2RTZJC-nZdp86aN.js → chunk-KX2RTZJC-C9oTlISU.js} +1 -1
- package/dist/assets/chunk-NQ4KR5QH-CM50ygWP.js +220 -0
- package/dist/assets/{chunk-QZHKN3VN-DvUQ3mnO.js → chunk-QZHKN3VN-7dzpYeNJ.js} +1 -1
- package/dist/assets/chunk-WL4C6EOR-Cm9nQrsr.js +189 -0
- package/dist/assets/classDiagram-VBA2DB6C-d5TeKFM4.js +1 -0
- package/dist/assets/classDiagram-v2-RAHNMMFH-d5TeKFM4.js +1 -0
- package/dist/assets/clone-CinxIlEu.js +1 -0
- package/dist/assets/cose-bilkent-S5V4N54A-Ccp_p0JZ.js +1 -0
- package/dist/assets/cytoscape.esm-2ZfV8NB5.js +331 -0
- package/dist/assets/{dagre-KLK3FWXG-CHYIvW47.js → dagre-KLK3FWXG-fBwTLUp9.js} +1 -1
- package/dist/assets/diagram-E7M64L7V-CeNVmFUp.js +24 -0
- package/dist/assets/{diagram-IFDJBPK2-Dzsiln_C.js → diagram-IFDJBPK2-CtavyLGa.js} +1 -1
- package/dist/assets/{diagram-P4PSJMXO-DKnGbUpE.js → diagram-P4PSJMXO-CpQTjQwc.js} +1 -1
- package/dist/assets/erDiagram-INFDFZHY-B8R5vwhd.js +70 -0
- package/dist/assets/{flowDiagram-PKNHOUZH-BAZ2-jKp.js → flowDiagram-PKNHOUZH-BvkVVwIQ.js} +4 -4
- package/dist/assets/ganttDiagram-A5KZAMGK-DOu3hSNa.js +292 -0
- package/dist/assets/{gitGraphDiagram-K3NZZRJ6-BflpyjGy.js → gitGraphDiagram-K3NZZRJ6-C7zT67YE.js} +1 -1
- package/dist/assets/{graph-suelaXFh.js → graph-D11wiwHo.js} +1 -1
- package/dist/assets/highlighted-body-TPN3WLV5-Babpthg-.js +1 -0
- package/dist/assets/index-DFxzgWoO.js +2 -0
- package/dist/assets/index-YCFGDVKw.css +1 -0
- package/dist/assets/{infoDiagram-LFFYTUFH-pfD1FA3p.js → infoDiagram-LFFYTUFH-BmA7IpQG.js} +1 -1
- package/dist/assets/ishikawaDiagram-PHBUUO56-BEquZd3E.js +70 -0
- package/dist/assets/journeyDiagram-4ABVD52K-BfemGz7f.js +139 -0
- package/dist/assets/{kanban-definition-K7BYSVSG-FWinmur1.js → kanban-definition-K7BYSVSG-CWja3mln.js} +5 -5
- package/dist/assets/{layout-vcz43XvZ.js → layout-BLUNf-PJ.js} +1 -1
- package/dist/assets/{linear-le4gc0vx.js → linear-DukIV_Xv.js} +1 -1
- package/dist/assets/mermaid-O7DHMXV3-SgtM28qI.js +1038 -0
- package/dist/assets/mindmap-definition-YRQLILUH-4UjqXITU.js +68 -0
- package/dist/assets/{pieDiagram-SKSYHLDU-C7PKDh3b.js → pieDiagram-SKSYHLDU-8AxqJd0M.js} +2 -2
- package/dist/assets/quadrantDiagram-337W2JSQ-D60m8V8r.js +7 -0
- package/dist/assets/requirementDiagram-Z7DCOOCP-zqh9jBVf.js +73 -0
- package/dist/assets/{sankeyDiagram-WA2Y5GQK-4gulcOP4.js → sankeyDiagram-WA2Y5GQK-CDZILTLI.js} +3 -3
- package/dist/assets/sequenceDiagram-2WXFIKYE-7BReFd0L.js +145 -0
- package/dist/assets/{stateDiagram-RAJIS63D-CB4Vl7qM.js → stateDiagram-RAJIS63D-HPTVdIG4.js} +1 -1
- package/dist/assets/stateDiagram-v2-FVOUBMTO-DTUf5_gC.js +1 -0
- package/dist/assets/timeline-definition-YZTLITO2-CTVllFgr.js +61 -0
- package/dist/assets/{treemap-KZPCXAKY-DZSEE6Hz.js → treemap-KZPCXAKY-BtyxboJZ.js} +58 -58
- package/dist/assets/vendor-codemirror-Dz7_EqNA.js +39 -0
- package/dist/assets/vendor-react-Cpt6D04s.js +59 -0
- package/dist/assets/vendor-xterm-DfaPXD3y.js +66 -0
- package/dist/assets/{vennDiagram-LZ73GAT5-8E_G06fI.js → vennDiagram-LZ73GAT5-D96ZI6Mg.js} +4 -4
- package/dist/assets/xychartDiagram-JWTSCODW-eRk-39YO.js +7 -0
- package/dist/index.html +4 -4
- package/package.json +34 -33
- package/server/acp-runtime/client.js +82 -15
- package/server/acp-runtime/index.js +5 -16
- package/server/channels/runtime/AgentRuntimeAdapter.js +1 -10
- package/server/claude-sdk.js +1 -3
- package/server/cli.js +136 -0
- package/server/gemini-cli.js +1 -3
- package/server/index.js +86 -14
- package/server/openai-codex.js +1 -3
- package/server/opencode-cli.js +1 -3
- package/server/projects.js +128 -85
- package/server/routes/cc-connect.js +1131 -0
- package/server/routes/cli-auth.js +1 -73
- package/server/routes/commands.js +4 -9
- package/server/routes/projects.js +45 -24
- package/server/session-core/providerDiscovery.js +8 -3
- package/server/utils/ccConnectManager.js +390 -0
- package/server/utils/ccConnectState.js +575 -0
- package/server/utils/resolveCommandPath.js +71 -0
- package/server/utils/workspaceRoots.js +154 -0
- package/dist/assets/App-BWSqiXAT.js +0 -220
- package/dist/assets/App-DrlLKa8f.css +0 -1
- package/dist/assets/ReviewApp-nz3mbArg.js +0 -1
- package/dist/assets/architectureDiagram-2XIMDMQ5-CarjBOOv.js +0 -36
- package/dist/assets/c4Diagram-IC4MRINW-CGobwBIj.js +0 -10
- package/dist/assets/channel-DkFNxV_H.js +0 -1
- package/dist/assets/chunk-NQ4KR5QH-CMH6EDP2.js +0 -220
- package/dist/assets/chunk-WL4C6EOR-Dn7db_6t.js +0 -189
- package/dist/assets/classDiagram-VBA2DB6C-DtwCEe8S.js +0 -1
- package/dist/assets/classDiagram-v2-RAHNMMFH-DtwCEe8S.js +0 -1
- package/dist/assets/clone-C0lCEIEO.js +0 -1
- package/dist/assets/cose-bilkent-S5V4N54A-DD_nzqsz.js +0 -1
- package/dist/assets/cytoscape.esm-5J0xJHOV.js +0 -321
- package/dist/assets/diagram-E7M64L7V-TVdvHtGc.js +0 -24
- package/dist/assets/erDiagram-INFDFZHY-5Kw0bByo.js +0 -70
- package/dist/assets/ganttDiagram-A5KZAMGK-CsADFkcq.js +0 -292
- package/dist/assets/highlighted-body-OFNGDK62-CZrBMazC.js +0 -1
- package/dist/assets/index-B01NxbUv.css +0 -1
- package/dist/assets/index-DW5pGgQ_.js +0 -2
- package/dist/assets/ishikawaDiagram-PHBUUO56-ndm9snwO.js +0 -70
- package/dist/assets/journeyDiagram-4ABVD52K-HgF2t7z5.js +0 -139
- package/dist/assets/mermaid-GHXKKRXX-CK8m3lad.js +0 -870
- package/dist/assets/mindmap-definition-YRQLILUH-CNq9SKj4.js +0 -68
- package/dist/assets/quadrantDiagram-337W2JSQ-B7FnztNO.js +0 -7
- package/dist/assets/requirementDiagram-Z7DCOOCP-Bl_BM2Th.js +0 -73
- package/dist/assets/sequenceDiagram-2WXFIKYE-VEuJDwyJ.js +0 -145
- package/dist/assets/stateDiagram-v2-FVOUBMTO-C85ucl39.js +0 -1
- package/dist/assets/timeline-definition-YZTLITO2-BPGKhi7f.js +0 -61
- package/dist/assets/vendor-codemirror-CyOKkaQZ.js +0 -31
- package/dist/assets/vendor-react-CP4yFTs7.js +0 -8
- package/dist/assets/vendor-xterm-DfcmCpbH.js +0 -66
- package/dist/assets/xychartDiagram-JWTSCODW-CbBk50-O.js +0 -7
- package/server/acp-runtime/client.test.js +0 -688
- package/server/acp-runtime/session-store.test.js +0 -89
- package/server/cli.test.js +0 -76
- package/server/external-agent/service.test.js +0 -53
- package/server/external-agent/ws.test.js +0 -289
- package/shared/conversationEvents.test.js +0 -403
package/server/projects.js
CHANGED
|
@@ -1107,14 +1107,27 @@ async function getSessionMessages(projectName, sessionId, limit = null, offset =
|
|
|
1107
1107
|
// Rename a project's display name
|
|
1108
1108
|
async function renameProject(projectName, newDisplayName) {
|
|
1109
1109
|
const config = await loadProjectConfig();
|
|
1110
|
+
const existingConfig = config[projectName] && typeof config[projectName] === 'object'
|
|
1111
|
+
? config[projectName]
|
|
1112
|
+
: {};
|
|
1113
|
+
const trimmedDisplayName = typeof newDisplayName === 'string'
|
|
1114
|
+
? newDisplayName.trim()
|
|
1115
|
+
: '';
|
|
1110
1116
|
|
|
1111
|
-
if (!
|
|
1112
|
-
// Remove custom name
|
|
1113
|
-
|
|
1117
|
+
if (!trimmedDisplayName) {
|
|
1118
|
+
// Remove only the custom display name while preserving other metadata such as
|
|
1119
|
+
// manuallyAdded/originalPath so externally added projects do not disappear.
|
|
1120
|
+
const { displayName: _removedDisplayName, ...remainingConfig } = existingConfig;
|
|
1121
|
+
|
|
1122
|
+
if (Object.keys(remainingConfig).length === 0) {
|
|
1123
|
+
delete config[projectName];
|
|
1124
|
+
} else {
|
|
1125
|
+
config[projectName] = remainingConfig;
|
|
1126
|
+
}
|
|
1114
1127
|
} else {
|
|
1115
|
-
// Set custom display name
|
|
1116
1128
|
config[projectName] = {
|
|
1117
|
-
|
|
1129
|
+
...existingConfig,
|
|
1130
|
+
displayName: trimmedDisplayName
|
|
1118
1131
|
};
|
|
1119
1132
|
}
|
|
1120
1133
|
|
|
@@ -1252,7 +1265,41 @@ async function addProjectManually(projectPath, displayName = null) {
|
|
|
1252
1265
|
const projectDir = path.join(os.homedir(), '.claude', 'projects', projectName);
|
|
1253
1266
|
|
|
1254
1267
|
if (config[projectName]) {
|
|
1255
|
-
|
|
1268
|
+
const existingConfig = config[projectName] && typeof config[projectName] === 'object'
|
|
1269
|
+
? config[projectName]
|
|
1270
|
+
: {};
|
|
1271
|
+
const hasManualMetadata = Boolean(existingConfig.manuallyAdded || existingConfig.originalPath || existingConfig.path);
|
|
1272
|
+
|
|
1273
|
+
if (hasManualMetadata) {
|
|
1274
|
+
throw new Error(`Project already configured for path: ${absolutePath}`);
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
// Recover historical broken entries that lost their manual-project metadata
|
|
1278
|
+
// during a rename, which otherwise makes the project invisible in the sidebar
|
|
1279
|
+
// while still blocking re-adding the same workspace.
|
|
1280
|
+
config[projectName] = {
|
|
1281
|
+
...existingConfig,
|
|
1282
|
+
manuallyAdded: true,
|
|
1283
|
+
originalPath: absolutePath
|
|
1284
|
+
};
|
|
1285
|
+
|
|
1286
|
+
if (displayName) {
|
|
1287
|
+
config[projectName].displayName = displayName;
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
await saveProjectConfig(config);
|
|
1291
|
+
|
|
1292
|
+
return {
|
|
1293
|
+
name: projectName,
|
|
1294
|
+
path: absolutePath,
|
|
1295
|
+
fullPath: absolutePath,
|
|
1296
|
+
displayName: config[projectName].displayName || await generateDisplayName(projectName, absolutePath),
|
|
1297
|
+
isManuallyAdded: true,
|
|
1298
|
+
sessions: [],
|
|
1299
|
+
codexSessions: [],
|
|
1300
|
+
opencodeSessions: [],
|
|
1301
|
+
geminiSessions: []
|
|
1302
|
+
};
|
|
1256
1303
|
}
|
|
1257
1304
|
|
|
1258
1305
|
// Allow adding projects even if the directory exists - this enables tracking
|
|
@@ -1730,43 +1777,42 @@ async function deleteOpencodeSession(sessionId) {
|
|
|
1730
1777
|
}
|
|
1731
1778
|
}
|
|
1732
1779
|
|
|
1733
|
-
async function
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1780
|
+
async function findGeminiSessionFiles() {
|
|
1781
|
+
return findFilesRecursively(
|
|
1782
|
+
path.join(os.homedir(), '.gemini', 'tmp'),
|
|
1783
|
+
(entryName, fullPath) => (
|
|
1784
|
+
entryName.endsWith('.json') &&
|
|
1785
|
+
/[\\/]chats[\\/]/.test(fullPath)
|
|
1786
|
+
)
|
|
1787
|
+
);
|
|
1788
|
+
}
|
|
1742
1789
|
|
|
1743
|
-
|
|
1744
|
-
|
|
1790
|
+
function inferGeminiProjectHash(filePath, parsedSession = null) {
|
|
1791
|
+
const explicitHash = typeof parsedSession?.projectHash === 'string'
|
|
1792
|
+
? parsedSession.projectHash.trim()
|
|
1793
|
+
: '';
|
|
1794
|
+
if (explicitHash) {
|
|
1795
|
+
return explicitHash.toLowerCase();
|
|
1796
|
+
}
|
|
1745
1797
|
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
}
|
|
1798
|
+
const parentDir = path.basename(path.dirname(path.dirname(filePath)));
|
|
1799
|
+
if (/^[a-f0-9]{64}$/i.test(parentDir)) {
|
|
1800
|
+
return parentDir.toLowerCase();
|
|
1801
|
+
}
|
|
1751
1802
|
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
.filter(e => e.isFile() && e.name.endsWith('.json'))
|
|
1755
|
-
.map(e => path.join(chatsDir, e.name));
|
|
1803
|
+
return '';
|
|
1804
|
+
}
|
|
1756
1805
|
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
} catch (error) {
|
|
1764
|
-
console.warn(`Could not parse Gemini session file ${filePath}:`, error.message);
|
|
1765
|
-
}
|
|
1766
|
-
}
|
|
1806
|
+
async function getGeminiSessions(projectPath, options = {}) {
|
|
1807
|
+
const { limit = 5 } = options;
|
|
1808
|
+
const normalizedProjectPath = normalizeComparableProjectPath(projectPath);
|
|
1809
|
+
if (!normalizedProjectPath) {
|
|
1810
|
+
return [];
|
|
1811
|
+
}
|
|
1767
1812
|
|
|
1768
|
-
|
|
1769
|
-
|
|
1813
|
+
try {
|
|
1814
|
+
const lookup = await buildGeminiSessionsLookup([normalizedProjectPath], { limit });
|
|
1815
|
+
return lookup.get(normalizedProjectPath) || [];
|
|
1770
1816
|
} catch (error) {
|
|
1771
1817
|
console.error('Error fetching Gemini sessions:', error);
|
|
1772
1818
|
return [];
|
|
@@ -1805,6 +1851,7 @@ async function parseGeminiSessionFile(filePath) {
|
|
|
1805
1851
|
lastActivity,
|
|
1806
1852
|
createdAt: data?.startTime || lastActivity,
|
|
1807
1853
|
model: messages.filter(m => m?.model).slice(-1)[0]?.model || null,
|
|
1854
|
+
projectHash: inferGeminiProjectHash(filePath, data),
|
|
1808
1855
|
provider: 'gemini',
|
|
1809
1856
|
filePath
|
|
1810
1857
|
};
|
|
@@ -1884,73 +1931,69 @@ async function buildGeminiSessionsLookup(projectPaths, options = {}) {
|
|
|
1884
1931
|
(projectPaths || []).map(normalizeComparableProjectPath).filter(Boolean)
|
|
1885
1932
|
));
|
|
1886
1933
|
|
|
1934
|
+
if (normalizedProjectPaths.length === 0) {
|
|
1935
|
+
return new Map();
|
|
1936
|
+
}
|
|
1937
|
+
|
|
1887
1938
|
const cacheKey = JSON.stringify({ projectPaths: normalizedProjectPaths, limit });
|
|
1888
1939
|
return getCachedProviderSessionLookup('gemini', cacheKey, async () => {
|
|
1889
|
-
const
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1940
|
+
const projectHashToPath = new Map(
|
|
1941
|
+
normalizedProjectPaths.map((normalizedProjectPath) => ([
|
|
1942
|
+
crypto.createHash('sha256').update(normalizedProjectPath).digest('hex'),
|
|
1943
|
+
normalizedProjectPath
|
|
1944
|
+
]))
|
|
1945
|
+
);
|
|
1946
|
+
const sessionsByProjectPath = new Map(
|
|
1947
|
+
normalizedProjectPaths.map((normalizedProjectPath) => [normalizedProjectPath, []])
|
|
1948
|
+
);
|
|
1949
|
+
const sessionFiles = await findGeminiSessionFiles();
|
|
1894
1950
|
|
|
1951
|
+
for (const filePath of sessionFiles) {
|
|
1895
1952
|
try {
|
|
1896
|
-
const
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1953
|
+
const sessionData = await parseGeminiSessionFile(filePath);
|
|
1954
|
+
if (!sessionData?.id) {
|
|
1955
|
+
continue;
|
|
1956
|
+
}
|
|
1900
1957
|
|
|
1901
|
-
const
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
const sessionData = await parseGeminiSessionFile(filePath);
|
|
1905
|
-
if (sessionData?.id) {
|
|
1906
|
-
sessions.push(sessionData);
|
|
1907
|
-
}
|
|
1908
|
-
} catch (error) {
|
|
1909
|
-
console.warn(`Could not parse Gemini session file ${filePath}:`, error.message);
|
|
1910
|
-
}
|
|
1958
|
+
const normalizedProjectPath = projectHashToPath.get(sessionData.projectHash || '');
|
|
1959
|
+
if (!normalizedProjectPath) {
|
|
1960
|
+
continue;
|
|
1911
1961
|
}
|
|
1912
1962
|
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
limit > 0 ? sessions.slice(0, limit) : sessions
|
|
1917
|
-
);
|
|
1918
|
-
} catch (_) {
|
|
1919
|
-
sessionsByProjectPath.set(normalizedProjectPath, []);
|
|
1963
|
+
sessionsByProjectPath.get(normalizedProjectPath)?.push(sessionData);
|
|
1964
|
+
} catch (error) {
|
|
1965
|
+
console.warn(`Could not parse Gemini session file ${filePath}:`, error.message);
|
|
1920
1966
|
}
|
|
1921
1967
|
}
|
|
1922
1968
|
|
|
1969
|
+
for (const [normalizedProjectPath, sessions] of sessionsByProjectPath.entries()) {
|
|
1970
|
+
sessions.sort((a, b) => new Date(b.lastActivity || 0) - new Date(a.lastActivity || 0));
|
|
1971
|
+
sessionsByProjectPath.set(
|
|
1972
|
+
normalizedProjectPath,
|
|
1973
|
+
limit > 0 ? sessions.slice(0, limit) : sessions
|
|
1974
|
+
);
|
|
1975
|
+
}
|
|
1976
|
+
|
|
1923
1977
|
return sessionsByProjectPath;
|
|
1924
1978
|
});
|
|
1925
1979
|
}
|
|
1926
1980
|
|
|
1927
1981
|
async function getGeminiSessionMessages(sessionId, limit = null, offset = 0) {
|
|
1928
1982
|
try {
|
|
1929
|
-
const
|
|
1930
|
-
|
|
1983
|
+
const sessionFiles = await findGeminiSessionFiles();
|
|
1984
|
+
let sessionFilePath = null;
|
|
1985
|
+
|
|
1986
|
+
for (const filePath of sessionFiles) {
|
|
1931
1987
|
try {
|
|
1932
|
-
const
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
if (found) return found;
|
|
1938
|
-
continue;
|
|
1939
|
-
}
|
|
1940
|
-
if (!entry.isFile() || !entry.name.endsWith('.json')) continue;
|
|
1941
|
-
try {
|
|
1942
|
-
const raw = await fs.readFile(fullPath, 'utf8');
|
|
1943
|
-
const parsed = JSON.parse(raw);
|
|
1944
|
-
if (parsed?.sessionId === sessionId) {
|
|
1945
|
-
return fullPath;
|
|
1946
|
-
}
|
|
1947
|
-
} catch {}
|
|
1988
|
+
const raw = await fs.readFile(filePath, 'utf8');
|
|
1989
|
+
const parsed = JSON.parse(raw);
|
|
1990
|
+
if (parsed?.sessionId === sessionId) {
|
|
1991
|
+
sessionFilePath = filePath;
|
|
1992
|
+
break;
|
|
1948
1993
|
}
|
|
1949
1994
|
} catch {}
|
|
1950
|
-
|
|
1951
|
-
};
|
|
1995
|
+
}
|
|
1952
1996
|
|
|
1953
|
-
const sessionFilePath = await findSessionFile(geminiTmpDir);
|
|
1954
1997
|
if (!sessionFilePath) {
|
|
1955
1998
|
return { messages: [], total: 0, hasMore: false };
|
|
1956
1999
|
}
|