@google/gemini-cli-core 0.1.22 → 0.2.0-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/code_assist/oauth2.d.ts +1 -0
- package/dist/src/code_assist/oauth2.js +7 -2
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +49 -1
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/config/config.d.ts +19 -2
- package/dist/src/config/config.js +29 -4
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/core/client.js +5 -2
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +2 -1
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +2 -1
- package/dist/src/core/coreToolScheduler.js +20 -2
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +190 -12
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +1 -1
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +1 -5
- package/dist/src/core/loggingContentGenerator.js +4 -6
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +2 -2
- package/dist/src/core/nonInteractiveToolExecutor.js +10 -2
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +17 -11
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/subagent.js +5 -5
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagent.test.js +3 -3
- package/dist/src/core/subagent.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +4 -0
- package/dist/src/ide/ide-client.js +36 -2
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-installer.js +17 -4
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +6 -4
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/process-utils.d.ts +10 -5
- package/dist/src/ide/process-utils.js +113 -30
- package/dist/src/ide/process-utils.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +150 -0
- package/dist/src/services/chatRecordingService.js +318 -0
- package/dist/src/services/chatRecordingService.js.map +1 -0
- package/dist/src/services/chatRecordingService.test.d.ts +6 -0
- package/dist/src/services/chatRecordingService.test.js +288 -0
- package/dist/src/services/chatRecordingService.test.js.map +1 -0
- package/dist/src/services/fileSystemService.d.ts +31 -0
- package/dist/src/services/fileSystemService.js +18 -0
- package/dist/src/services/fileSystemService.js.map +1 -0
- package/dist/src/services/fileSystemService.test.d.ts +6 -0
- package/dist/src/services/fileSystemService.test.js +41 -0
- package/dist/src/services/fileSystemService.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.d.ts +8 -10
- package/dist/src/services/shellExecutionService.js +289 -133
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +275 -41
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +10 -3
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +57 -103
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +13 -4
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +2 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/loggers.js +2 -2
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +10 -5
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +1 -1
- package/dist/src/telemetry/metrics.js +2 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/sdk.js +3 -3
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +1 -0
- package/dist/src/telemetry/types.js +6 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +4 -0
- package/dist/src/telemetry/uiTelemetry.js +14 -1
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +45 -9
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/tools.d.ts +8 -2
- package/dist/src/test-utils/tools.js +2 -3
- package/dist/src/test-utils/tools.js.map +1 -1
- package/dist/src/tools/edit.d.ts +1 -1
- package/dist/src/tools/edit.js +15 -9
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +11 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +1 -1
- package/dist/src/tools/glob.js +8 -8
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +20 -0
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +1 -1
- package/dist/src/tools/grep.js +1 -6
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/ls.d.ts +1 -1
- package/dist/src/tools/ls.js +1 -6
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +38 -0
- package/dist/src/tools/mcp-client-manager.js +74 -0
- package/dist/src/tools/mcp-client-manager.js.map +1 -0
- package/dist/src/tools/mcp-client-manager.test.d.ts +6 -0
- package/dist/src/tools/mcp-client-manager.test.js +39 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -0
- package/dist/src/tools/mcp-client.d.ts +43 -0
- package/dist/src/tools/mcp-client.js +117 -1
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +58 -302
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +17 -17
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +1 -1
- package/dist/src/tools/memoryTool.js +1 -6
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +1 -1
- package/dist/src/tools/read-file.js +5 -7
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +8 -0
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +0 -1
- package/dist/src/tools/read-many-files.js +16 -11
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +34 -0
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +1 -1
- package/dist/src/tools/shell.js +10 -24
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +11 -19
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +5 -0
- package/dist/src/tools/tool-registry.js +13 -4
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +9 -21
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +3 -1
- package/dist/src/tools/tools.js +12 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +1 -1
- package/dist/src/tools/web-fetch.js +1 -6
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +1 -1
- package/dist/src/tools/web-search.js +1 -6
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +1 -1
- package/dist/src/tools/write-file.js +7 -8
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +25 -38
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/environmentContext.js +2 -2
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +3 -2
- package/dist/src/utils/environmentContext.test.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +2 -1
- package/dist/src/utils/fileUtils.js +3 -3
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +18 -17
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/getPty.d.ts +19 -0
- package/dist/src/utils/getPty.js +23 -0
- package/dist/src/utils/getPty.js.map +1 -0
- package/dist/src/utils/user_account.js +58 -48
- package/dist/src/utils/user_account.js.map +1 -1
- package/dist/src/utils/user_account.test.js +76 -9
- package/dist/src/utils/user_account.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +20 -10
|
@@ -4,11 +4,16 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
* Traverses up the process tree
|
|
8
|
-
* This is useful for identifying the main application process that spawned the current script,
|
|
9
|
-
* such as the main VS Code window process.
|
|
7
|
+
* Traverses up the process tree to find the process ID of the IDE.
|
|
10
8
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* This function uses different strategies depending on the operating system
|
|
10
|
+
* to identify the main application process (e.g., the main VS Code window
|
|
11
|
+
* process).
|
|
12
|
+
*
|
|
13
|
+
* If the IDE process cannot be reliably identified, it will return the
|
|
14
|
+
* top-level ancestor process ID as a fallback.
|
|
15
|
+
*
|
|
16
|
+
* @returns A promise that resolves to the numeric PID of the IDE process.
|
|
17
|
+
* @throws Will throw an error if the underlying shell commands fail.
|
|
13
18
|
*/
|
|
14
19
|
export declare function getIdeProcessId(): Promise<number>;
|
|
@@ -6,52 +6,135 @@
|
|
|
6
6
|
import { exec } from 'child_process';
|
|
7
7
|
import { promisify } from 'util';
|
|
8
8
|
import os from 'os';
|
|
9
|
+
import path from 'path';
|
|
9
10
|
const execAsync = promisify(exec);
|
|
11
|
+
const MAX_TRAVERSAL_DEPTH = 32;
|
|
10
12
|
/**
|
|
11
|
-
*
|
|
12
|
-
* This is useful for identifying the main application process that spawned the current script,
|
|
13
|
-
* such as the main VS Code window process.
|
|
13
|
+
* Fetches the parent process ID and name for a given process ID.
|
|
14
14
|
*
|
|
15
|
-
* @
|
|
16
|
-
* @
|
|
15
|
+
* @param pid The process ID to inspect.
|
|
16
|
+
* @returns A promise that resolves to the parent's PID and name.
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
async function getParentProcessInfo(pid) {
|
|
19
19
|
const platform = os.platform();
|
|
20
|
+
if (platform === 'win32') {
|
|
21
|
+
const command = `wmic process where "ProcessId=${pid}" get Name,ParentProcessId /value`;
|
|
22
|
+
const { stdout } = await execAsync(command);
|
|
23
|
+
const nameMatch = stdout.match(/Name=([^\n]*)/);
|
|
24
|
+
const processName = nameMatch ? nameMatch[1].trim() : '';
|
|
25
|
+
const ppidMatch = stdout.match(/ParentProcessId=(\d+)/);
|
|
26
|
+
const parentPid = ppidMatch ? parseInt(ppidMatch[1], 10) : 0;
|
|
27
|
+
return { parentPid, name: processName };
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const command = `ps -o ppid=,command= -p ${pid}`;
|
|
31
|
+
const { stdout } = await execAsync(command);
|
|
32
|
+
const trimmedStdout = stdout.trim();
|
|
33
|
+
const ppidString = trimmedStdout.split(/\s+/)[0];
|
|
34
|
+
const parentPid = parseInt(ppidString, 10);
|
|
35
|
+
const fullCommand = trimmedStdout.substring(ppidString.length).trim();
|
|
36
|
+
const processName = path.basename(fullCommand.split(' ')[0]);
|
|
37
|
+
return { parentPid: isNaN(parentPid) ? 1 : parentPid, name: processName };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Traverses the process tree on Unix-like systems to find the IDE process ID.
|
|
42
|
+
*
|
|
43
|
+
* The strategy is to find the shell process that spawned the CLI, and then
|
|
44
|
+
* find that shell's parent process (the IDE). To get the true IDE process,
|
|
45
|
+
* we traverse one level higher to get the grandparent.
|
|
46
|
+
*
|
|
47
|
+
* @returns A promise that resolves to the numeric PID.
|
|
48
|
+
*/
|
|
49
|
+
async function getIdeProcessIdForUnix() {
|
|
50
|
+
const shells = ['zsh', 'bash', 'sh', 'tcsh', 'csh', 'ksh', 'fish', 'dash'];
|
|
20
51
|
let currentPid = process.pid;
|
|
21
|
-
// Loop upwards through the process tree, with a depth limit to prevent infinite loops.
|
|
22
|
-
const MAX_TRAVERSAL_DEPTH = 32;
|
|
23
52
|
for (let i = 0; i < MAX_TRAVERSAL_DEPTH; i++) {
|
|
24
|
-
let parentPid;
|
|
25
53
|
try {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
54
|
+
const { parentPid, name } = await getParentProcessInfo(currentPid);
|
|
55
|
+
const isShell = shells.some((shell) => name === shell);
|
|
56
|
+
if (isShell) {
|
|
57
|
+
// The direct parent of the shell is often a utility process (e.g. VS
|
|
58
|
+
// Code's `ptyhost` process). To get the true IDE process, we need to
|
|
59
|
+
// traverse one level higher to get the grandparent.
|
|
60
|
+
try {
|
|
61
|
+
const { parentPid: grandParentPid } = await getParentProcessInfo(parentPid);
|
|
62
|
+
if (grandParentPid > 1) {
|
|
63
|
+
return grandParentPid;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Ignore if getting grandparent fails, we'll just use the parent pid.
|
|
68
|
+
}
|
|
69
|
+
return parentPid;
|
|
32
70
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const command = `ps -o ppid= -p ${currentPid}`;
|
|
36
|
-
const { stdout } = await execAsync(command);
|
|
37
|
-
const ppid = parseInt(stdout.trim(), 10);
|
|
38
|
-
parentPid = isNaN(ppid) ? 1 : ppid; // Top of the tree is 1
|
|
71
|
+
if (parentPid <= 1) {
|
|
72
|
+
break; // Reached the root
|
|
39
73
|
}
|
|
74
|
+
currentPid = parentPid;
|
|
40
75
|
}
|
|
41
|
-
catch
|
|
42
|
-
//
|
|
43
|
-
// We'll break the loop and return the last valid PID we found.
|
|
76
|
+
catch {
|
|
77
|
+
// Process in chain died
|
|
44
78
|
break;
|
|
45
79
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
80
|
+
}
|
|
81
|
+
console.error('Failed to find shell process in the process tree. Falling back to top-level process, which may be inaccurate. If you see this, please file a bug via /bug.');
|
|
82
|
+
return currentPid;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Traverses the process tree on Windows to find the IDE process ID.
|
|
86
|
+
*
|
|
87
|
+
* The strategy is to find the grandchild of the root process.
|
|
88
|
+
*
|
|
89
|
+
* @returns A promise that resolves to the numeric PID.
|
|
90
|
+
*/
|
|
91
|
+
async function getIdeProcessIdForWindows() {
|
|
92
|
+
let currentPid = process.pid;
|
|
93
|
+
for (let i = 0; i < MAX_TRAVERSAL_DEPTH; i++) {
|
|
94
|
+
try {
|
|
95
|
+
const { parentPid } = await getParentProcessInfo(currentPid);
|
|
96
|
+
if (parentPid > 0) {
|
|
97
|
+
try {
|
|
98
|
+
const { parentPid: grandParentPid } = await getParentProcessInfo(parentPid);
|
|
99
|
+
if (grandParentPid === 0) {
|
|
100
|
+
// Found grandchild of root
|
|
101
|
+
return currentPid;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// getting grandparent failed, proceed
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (parentPid <= 0) {
|
|
109
|
+
break; // Reached the root
|
|
110
|
+
}
|
|
111
|
+
currentPid = parentPid;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Process in chain died
|
|
50
115
|
break;
|
|
51
116
|
}
|
|
52
|
-
// Move one level up the tree for the next iteration.
|
|
53
|
-
currentPid = parentPid;
|
|
54
117
|
}
|
|
55
118
|
return currentPid;
|
|
56
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Traverses up the process tree to find the process ID of the IDE.
|
|
122
|
+
*
|
|
123
|
+
* This function uses different strategies depending on the operating system
|
|
124
|
+
* to identify the main application process (e.g., the main VS Code window
|
|
125
|
+
* process).
|
|
126
|
+
*
|
|
127
|
+
* If the IDE process cannot be reliably identified, it will return the
|
|
128
|
+
* top-level ancestor process ID as a fallback.
|
|
129
|
+
*
|
|
130
|
+
* @returns A promise that resolves to the numeric PID of the IDE process.
|
|
131
|
+
* @throws Will throw an error if the underlying shell commands fail.
|
|
132
|
+
*/
|
|
133
|
+
export async function getIdeProcessId() {
|
|
134
|
+
const platform = os.platform();
|
|
135
|
+
if (platform === 'win32') {
|
|
136
|
+
return getIdeProcessIdForWindows();
|
|
137
|
+
}
|
|
138
|
+
return getIdeProcessIdForUnix();
|
|
139
|
+
}
|
|
57
140
|
//# sourceMappingURL=process-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../../src/ide/process-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../../src/ide/process-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export * from './config/config.js';
|
|
7
7
|
export * from './core/client.js';
|
|
8
8
|
export * from './core/contentGenerator.js';
|
|
9
|
+
export * from './core/loggingContentGenerator.js';
|
|
9
10
|
export * from './core/geminiChat.js';
|
|
10
11
|
export * from './core/logger.js';
|
|
11
12
|
export * from './core/prompts.js';
|
|
@@ -37,6 +38,8 @@ export * from './utils/filesearch/fileSearch.js';
|
|
|
37
38
|
export * from './utils/errorParsing.js';
|
|
38
39
|
export * from './services/fileDiscoveryService.js';
|
|
39
40
|
export * from './services/gitService.js';
|
|
41
|
+
export * from './services/chatRecordingService.js';
|
|
42
|
+
export * from './services/fileSystemService.js';
|
|
40
43
|
export * from './ide/ide-client.js';
|
|
41
44
|
export * from './ide/ideContext.js';
|
|
42
45
|
export * from './ide/ide-installer.js';
|
package/dist/src/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export * from './config/config.js';
|
|
|
8
8
|
// Export Core Logic
|
|
9
9
|
export * from './core/client.js';
|
|
10
10
|
export * from './core/contentGenerator.js';
|
|
11
|
+
export * from './core/loggingContentGenerator.js';
|
|
11
12
|
export * from './core/geminiChat.js';
|
|
12
13
|
export * from './core/logger.js';
|
|
13
14
|
export * from './core/prompts.js';
|
|
@@ -41,6 +42,8 @@ export * from './utils/errorParsing.js';
|
|
|
41
42
|
// Export services
|
|
42
43
|
export * from './services/fileDiscoveryService.js';
|
|
43
44
|
export * from './services/gitService.js';
|
|
45
|
+
export * from './services/chatRecordingService.js';
|
|
46
|
+
export * from './services/fileSystemService.js';
|
|
44
47
|
// Export IDE specific logic
|
|
45
48
|
export * from './ide/ide-client.js';
|
|
46
49
|
export * from './ide/ideContext.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,cAAc,oBAAoB,CAAC;AAEnC,oBAAoB;AACpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AAErD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AAEvC,mBAAmB;AACnB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AAExC,kBAAkB;AAClB,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,cAAc,oBAAoB,CAAC;AAEnC,oBAAoB;AACpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AAErD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AAEvC,mBAAmB;AACnB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AAExC,kBAAkB;AAClB,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAEhD,4BAA4B;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAW,MAAM,qBAAqB,CAAC;AACvE,cAAc,oBAAoB,CAAC;AAEnC,iCAAiC;AACjC,cAAc,qCAAqC,CAAC;AAEpD,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AAEzC,sBAAsB;AACtB,cAAc,0BAA0B,CAAC;AAEzC,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AAEpC,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { type Config } from '../config/config.js';
|
|
7
|
+
import { type Status } from '../core/coreToolScheduler.js';
|
|
8
|
+
import { type ThoughtSummary } from '../core/turn.js';
|
|
9
|
+
import { PartListUnion } from '@google/genai';
|
|
10
|
+
/**
|
|
11
|
+
* Token usage summary for a message or conversation.
|
|
12
|
+
*/
|
|
13
|
+
export interface TokensSummary {
|
|
14
|
+
input: number;
|
|
15
|
+
output: number;
|
|
16
|
+
cached: number;
|
|
17
|
+
thoughts?: number;
|
|
18
|
+
tool?: number;
|
|
19
|
+
total: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Base fields common to all messages.
|
|
23
|
+
*/
|
|
24
|
+
export interface BaseMessageRecord {
|
|
25
|
+
id: string;
|
|
26
|
+
timestamp: string;
|
|
27
|
+
content: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Record of a tool call execution within a conversation.
|
|
31
|
+
*/
|
|
32
|
+
export interface ToolCallRecord {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
args: Record<string, unknown>;
|
|
36
|
+
result?: PartListUnion | null;
|
|
37
|
+
status: Status;
|
|
38
|
+
timestamp: string;
|
|
39
|
+
displayName?: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
resultDisplay?: string;
|
|
42
|
+
renderOutputAsMarkdown?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Message type and message type-specific fields.
|
|
46
|
+
*/
|
|
47
|
+
export type ConversationRecordExtra = {
|
|
48
|
+
type: 'user';
|
|
49
|
+
} | {
|
|
50
|
+
type: 'gemini';
|
|
51
|
+
toolCalls?: ToolCallRecord[];
|
|
52
|
+
thoughts?: Array<ThoughtSummary & {
|
|
53
|
+
timestamp: string;
|
|
54
|
+
}>;
|
|
55
|
+
tokens?: TokensSummary | null;
|
|
56
|
+
model?: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* A single message record in a conversation.
|
|
60
|
+
*/
|
|
61
|
+
export type MessageRecord = BaseMessageRecord & ConversationRecordExtra;
|
|
62
|
+
/**
|
|
63
|
+
* Complete conversation record stored in session files.
|
|
64
|
+
*/
|
|
65
|
+
export interface ConversationRecord {
|
|
66
|
+
sessionId: string;
|
|
67
|
+
projectHash: string;
|
|
68
|
+
startTime: string;
|
|
69
|
+
lastUpdated: string;
|
|
70
|
+
messages: MessageRecord[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Data structure for resuming an existing session.
|
|
74
|
+
*/
|
|
75
|
+
export interface ResumedSessionData {
|
|
76
|
+
conversation: ConversationRecord;
|
|
77
|
+
filePath: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Service for automatically recording chat conversations to disk.
|
|
81
|
+
*
|
|
82
|
+
* This service provides comprehensive conversation recording that captures:
|
|
83
|
+
* - All user and assistant messages
|
|
84
|
+
* - Tool calls and their execution results
|
|
85
|
+
* - Token usage statistics
|
|
86
|
+
* - Assistant thoughts and reasoning
|
|
87
|
+
*
|
|
88
|
+
* Sessions are stored as JSON files in ~/.gemini/tmp/<project_hash>/chats/
|
|
89
|
+
*/
|
|
90
|
+
export declare class ChatRecordingService {
|
|
91
|
+
private conversationFile;
|
|
92
|
+
private cachedLastConvData;
|
|
93
|
+
private sessionId;
|
|
94
|
+
private projectHash;
|
|
95
|
+
private queuedThoughts;
|
|
96
|
+
private queuedTokens;
|
|
97
|
+
private config;
|
|
98
|
+
constructor(config: Config);
|
|
99
|
+
/**
|
|
100
|
+
* Initializes the chat recording service: creates a new conversation file and associates it with
|
|
101
|
+
* this service instance, or resumes from an existing session if resumedSessionData is provided.
|
|
102
|
+
*/
|
|
103
|
+
initialize(resumedSessionData?: ResumedSessionData): void;
|
|
104
|
+
private getLastMessage;
|
|
105
|
+
private newMessage;
|
|
106
|
+
/**
|
|
107
|
+
* Records a message in the conversation.
|
|
108
|
+
*/
|
|
109
|
+
recordMessage(message: {
|
|
110
|
+
type: ConversationRecordExtra['type'];
|
|
111
|
+
content: string;
|
|
112
|
+
append?: boolean;
|
|
113
|
+
}): void;
|
|
114
|
+
/**
|
|
115
|
+
* Records a thought from the assistant's reasoning process.
|
|
116
|
+
*/
|
|
117
|
+
recordThought(thought: ThoughtSummary): void;
|
|
118
|
+
/**
|
|
119
|
+
* Updates the tokens for the last message in the conversation (which should be by Gemini).
|
|
120
|
+
*/
|
|
121
|
+
recordMessageTokens(tokens: {
|
|
122
|
+
input: number;
|
|
123
|
+
output: number;
|
|
124
|
+
cached: number;
|
|
125
|
+
thoughts?: number;
|
|
126
|
+
tool?: number;
|
|
127
|
+
total: number;
|
|
128
|
+
}): void;
|
|
129
|
+
/**
|
|
130
|
+
* Adds tool calls to the last message in the conversation (which should be by Gemini).
|
|
131
|
+
*/
|
|
132
|
+
recordToolCalls(toolCalls: ToolCallRecord[]): void;
|
|
133
|
+
/**
|
|
134
|
+
* Loads up the conversation record from disk.
|
|
135
|
+
*/
|
|
136
|
+
private readConversation;
|
|
137
|
+
/**
|
|
138
|
+
* Saves the conversation record; overwrites the file.
|
|
139
|
+
*/
|
|
140
|
+
private writeConversation;
|
|
141
|
+
/**
|
|
142
|
+
* Convenient helper for updating the conversation without file reading and writing and time
|
|
143
|
+
* updating boilerplate.
|
|
144
|
+
*/
|
|
145
|
+
private updateConversation;
|
|
146
|
+
/**
|
|
147
|
+
* Deletes a session file by session ID.
|
|
148
|
+
*/
|
|
149
|
+
deleteSession(sessionId: string): void;
|
|
150
|
+
}
|