@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.
Files changed (176) hide show
  1. package/dist/src/code_assist/oauth2.d.ts +1 -0
  2. package/dist/src/code_assist/oauth2.js +7 -2
  3. package/dist/src/code_assist/oauth2.js.map +1 -1
  4. package/dist/src/code_assist/oauth2.test.js +49 -1
  5. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  6. package/dist/src/config/config.d.ts +19 -2
  7. package/dist/src/config/config.js +29 -4
  8. package/dist/src/config/config.js.map +1 -1
  9. package/dist/src/core/client.js +5 -2
  10. package/dist/src/core/client.js.map +1 -1
  11. package/dist/src/core/client.test.js +2 -1
  12. package/dist/src/core/client.test.js.map +1 -1
  13. package/dist/src/core/coreToolScheduler.d.ts +2 -1
  14. package/dist/src/core/coreToolScheduler.js +20 -2
  15. package/dist/src/core/coreToolScheduler.js.map +1 -1
  16. package/dist/src/core/coreToolScheduler.test.js +190 -12
  17. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  18. package/dist/src/core/geminiChat.js +1 -1
  19. package/dist/src/core/geminiChat.js.map +1 -1
  20. package/dist/src/core/loggingContentGenerator.d.ts +1 -5
  21. package/dist/src/core/loggingContentGenerator.js +4 -6
  22. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  23. package/dist/src/core/nonInteractiveToolExecutor.d.ts +2 -2
  24. package/dist/src/core/nonInteractiveToolExecutor.js +10 -2
  25. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  26. package/dist/src/core/nonInteractiveToolExecutor.test.js +17 -11
  27. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  28. package/dist/src/core/subagent.js +5 -5
  29. package/dist/src/core/subagent.js.map +1 -1
  30. package/dist/src/core/subagent.test.js +3 -3
  31. package/dist/src/core/subagent.test.js.map +1 -1
  32. package/dist/src/generated/git-commit.d.ts +2 -2
  33. package/dist/src/generated/git-commit.js +2 -2
  34. package/dist/src/generated/git-commit.js.map +1 -1
  35. package/dist/src/ide/ide-client.d.ts +4 -0
  36. package/dist/src/ide/ide-client.js +36 -2
  37. package/dist/src/ide/ide-client.js.map +1 -1
  38. package/dist/src/ide/ide-installer.js +17 -4
  39. package/dist/src/ide/ide-installer.js.map +1 -1
  40. package/dist/src/ide/ide-installer.test.js +6 -4
  41. package/dist/src/ide/ide-installer.test.js.map +1 -1
  42. package/dist/src/ide/process-utils.d.ts +10 -5
  43. package/dist/src/ide/process-utils.js +113 -30
  44. package/dist/src/ide/process-utils.js.map +1 -1
  45. package/dist/src/index.d.ts +3 -0
  46. package/dist/src/index.js +3 -0
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/services/chatRecordingService.d.ts +150 -0
  49. package/dist/src/services/chatRecordingService.js +318 -0
  50. package/dist/src/services/chatRecordingService.js.map +1 -0
  51. package/dist/src/services/chatRecordingService.test.d.ts +6 -0
  52. package/dist/src/services/chatRecordingService.test.js +288 -0
  53. package/dist/src/services/chatRecordingService.test.js.map +1 -0
  54. package/dist/src/services/fileSystemService.d.ts +31 -0
  55. package/dist/src/services/fileSystemService.js +18 -0
  56. package/dist/src/services/fileSystemService.js.map +1 -0
  57. package/dist/src/services/fileSystemService.test.d.ts +6 -0
  58. package/dist/src/services/fileSystemService.test.js +41 -0
  59. package/dist/src/services/fileSystemService.test.js.map +1 -0
  60. package/dist/src/services/shellExecutionService.d.ts +8 -10
  61. package/dist/src/services/shellExecutionService.js +289 -133
  62. package/dist/src/services/shellExecutionService.js.map +1 -1
  63. package/dist/src/services/shellExecutionService.test.js +275 -41
  64. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  65. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +10 -3
  66. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +57 -103
  67. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  68. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +13 -4
  69. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  70. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -1
  71. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +2 -0
  72. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  73. package/dist/src/telemetry/loggers.js +2 -2
  74. package/dist/src/telemetry/loggers.js.map +1 -1
  75. package/dist/src/telemetry/loggers.test.js +10 -5
  76. package/dist/src/telemetry/loggers.test.js.map +1 -1
  77. package/dist/src/telemetry/metrics.d.ts +1 -1
  78. package/dist/src/telemetry/metrics.js +2 -1
  79. package/dist/src/telemetry/metrics.js.map +1 -1
  80. package/dist/src/telemetry/sdk.js +3 -3
  81. package/dist/src/telemetry/sdk.js.map +1 -1
  82. package/dist/src/telemetry/types.d.ts +1 -0
  83. package/dist/src/telemetry/types.js +6 -0
  84. package/dist/src/telemetry/types.js.map +1 -1
  85. package/dist/src/telemetry/uiTelemetry.d.ts +4 -0
  86. package/dist/src/telemetry/uiTelemetry.js +14 -1
  87. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  88. package/dist/src/telemetry/uiTelemetry.test.js +45 -9
  89. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  90. package/dist/src/test-utils/tools.d.ts +8 -2
  91. package/dist/src/test-utils/tools.js +2 -3
  92. package/dist/src/test-utils/tools.js.map +1 -1
  93. package/dist/src/tools/edit.d.ts +1 -1
  94. package/dist/src/tools/edit.js +15 -9
  95. package/dist/src/tools/edit.js.map +1 -1
  96. package/dist/src/tools/edit.test.js +11 -1
  97. package/dist/src/tools/edit.test.js.map +1 -1
  98. package/dist/src/tools/glob.d.ts +1 -1
  99. package/dist/src/tools/glob.js +8 -8
  100. package/dist/src/tools/glob.js.map +1 -1
  101. package/dist/src/tools/glob.test.js +20 -0
  102. package/dist/src/tools/glob.test.js.map +1 -1
  103. package/dist/src/tools/grep.d.ts +1 -1
  104. package/dist/src/tools/grep.js +1 -6
  105. package/dist/src/tools/grep.js.map +1 -1
  106. package/dist/src/tools/ls.d.ts +1 -1
  107. package/dist/src/tools/ls.js +1 -6
  108. package/dist/src/tools/ls.js.map +1 -1
  109. package/dist/src/tools/mcp-client-manager.d.ts +38 -0
  110. package/dist/src/tools/mcp-client-manager.js +74 -0
  111. package/dist/src/tools/mcp-client-manager.js.map +1 -0
  112. package/dist/src/tools/mcp-client-manager.test.d.ts +6 -0
  113. package/dist/src/tools/mcp-client-manager.test.js +39 -0
  114. package/dist/src/tools/mcp-client-manager.test.js.map +1 -0
  115. package/dist/src/tools/mcp-client.d.ts +43 -0
  116. package/dist/src/tools/mcp-client.js +117 -1
  117. package/dist/src/tools/mcp-client.js.map +1 -1
  118. package/dist/src/tools/mcp-client.test.js +58 -302
  119. package/dist/src/tools/mcp-client.test.js.map +1 -1
  120. package/dist/src/tools/mcp-tool.test.js +17 -17
  121. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  122. package/dist/src/tools/memoryTool.d.ts +1 -1
  123. package/dist/src/tools/memoryTool.js +1 -6
  124. package/dist/src/tools/memoryTool.js.map +1 -1
  125. package/dist/src/tools/read-file.d.ts +1 -1
  126. package/dist/src/tools/read-file.js +5 -7
  127. package/dist/src/tools/read-file.js.map +1 -1
  128. package/dist/src/tools/read-file.test.js +8 -0
  129. package/dist/src/tools/read-file.test.js.map +1 -1
  130. package/dist/src/tools/read-many-files.d.ts +0 -1
  131. package/dist/src/tools/read-many-files.js +16 -11
  132. package/dist/src/tools/read-many-files.js.map +1 -1
  133. package/dist/src/tools/read-many-files.test.js +34 -0
  134. package/dist/src/tools/read-many-files.test.js.map +1 -1
  135. package/dist/src/tools/shell.d.ts +1 -1
  136. package/dist/src/tools/shell.js +10 -24
  137. package/dist/src/tools/shell.js.map +1 -1
  138. package/dist/src/tools/shell.test.js +11 -19
  139. package/dist/src/tools/shell.test.js.map +1 -1
  140. package/dist/src/tools/tool-registry.d.ts +5 -0
  141. package/dist/src/tools/tool-registry.js +13 -4
  142. package/dist/src/tools/tool-registry.js.map +1 -1
  143. package/dist/src/tools/tool-registry.test.js +9 -21
  144. package/dist/src/tools/tool-registry.test.js.map +1 -1
  145. package/dist/src/tools/tools.d.ts +3 -1
  146. package/dist/src/tools/tools.js +12 -0
  147. package/dist/src/tools/tools.js.map +1 -1
  148. package/dist/src/tools/web-fetch.d.ts +1 -1
  149. package/dist/src/tools/web-fetch.js +1 -6
  150. package/dist/src/tools/web-fetch.js.map +1 -1
  151. package/dist/src/tools/web-search.d.ts +1 -1
  152. package/dist/src/tools/web-search.js +1 -6
  153. package/dist/src/tools/web-search.js.map +1 -1
  154. package/dist/src/tools/write-file.d.ts +1 -1
  155. package/dist/src/tools/write-file.js +7 -8
  156. package/dist/src/tools/write-file.js.map +1 -1
  157. package/dist/src/tools/write-file.test.js +25 -38
  158. package/dist/src/tools/write-file.test.js.map +1 -1
  159. package/dist/src/utils/environmentContext.js +2 -2
  160. package/dist/src/utils/environmentContext.js.map +1 -1
  161. package/dist/src/utils/environmentContext.test.js +3 -2
  162. package/dist/src/utils/environmentContext.test.js.map +1 -1
  163. package/dist/src/utils/fileUtils.d.ts +2 -1
  164. package/dist/src/utils/fileUtils.js +3 -3
  165. package/dist/src/utils/fileUtils.js.map +1 -1
  166. package/dist/src/utils/fileUtils.test.js +18 -17
  167. package/dist/src/utils/fileUtils.test.js.map +1 -1
  168. package/dist/src/utils/getPty.d.ts +19 -0
  169. package/dist/src/utils/getPty.js +23 -0
  170. package/dist/src/utils/getPty.js.map +1 -0
  171. package/dist/src/utils/user_account.js +58 -48
  172. package/dist/src/utils/user_account.js.map +1 -1
  173. package/dist/src/utils/user_account.test.js +76 -9
  174. package/dist/src/utils/user_account.test.js.map +1 -1
  175. package/dist/tsconfig.tsbuildinfo +1 -1
  176. 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 from the current process to find the top-level ancestor process ID.
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
- * @returns A promise that resolves to the numeric PID of the top-level process.
12
- * @throws Will throw an error if the underlying shell commands fail unexpectedly.
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
- * Traverses up the process tree from the current process to find the top-level ancestor process ID.
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
- * @returns A promise that resolves to the numeric PID of the top-level process.
16
- * @throws Will throw an error if the underlying shell commands fail unexpectedly.
15
+ * @param pid The process ID to inspect.
16
+ * @returns A promise that resolves to the parent's PID and name.
17
17
  */
18
- export async function getIdeProcessId() {
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
- // Use wmic for Windows
27
- if (platform === 'win32') {
28
- const command = `wmic process where "ProcessId=${currentPid}" get ParentProcessId /value`;
29
- const { stdout } = await execAsync(command);
30
- const match = stdout.match(/ParentProcessId=(\d+)/);
31
- parentPid = match ? parseInt(match[1], 10) : 0; // Top of the tree is 0
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
- // Use ps for macOS, Linux, and other Unix-like systems
34
- else {
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
- // This can happen if a process in the chain dies during execution.
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
- // Define the root PID for the current OS
47
- const rootPid = platform === 'win32' ? 0 : 1;
48
- // If the parent is the root process or invalid, we've found our target.
49
- if (parentPid === rootPid || parentPid <= 0) {
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;AAEpB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAE7B,uFAAuF;IACvF,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,SAAiB,CAAC;QAEtB,IAAI,CAAC;YACH,uBAAuB;YACvB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,iCAAiC,UAAU,8BAA8B,CAAC;gBAC1F,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACpD,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;YACzE,CAAC;YACD,uDAAuD;iBAClD,CAAC;gBACJ,MAAM,OAAO,GAAG,kBAAkB,UAAU,EAAE,CAAC;gBAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,uBAAuB;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,mEAAmE;YACnE,+DAA+D;YAC/D,MAAM;QACR,CAAC;QAED,yCAAyC;QACzC,MAAM,OAAO,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,wEAAwE;QACxE,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM;QACR,CAAC;QACD,qDAAqD;QACrD,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../../src/ide/process-utils.ts"],"names":[],"mappings":"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"}
@@ -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';
@@ -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;AAEzC,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"}
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
+ }