@machina.ai/cell-cli-core 1.40.1-rc2 → 1.41.1-rc1

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 (175) hide show
  1. package/dist/docs/AFTER_MERGE_PROMPT.md +1 -1
  2. package/dist/docs/changelogs/index.md +18 -0
  3. package/dist/docs/changelogs/latest.md +243 -255
  4. package/dist/docs/changelogs/preview.md +168 -18
  5. package/dist/docs/cli/sandbox.md +162 -45
  6. package/dist/docs/cli/settings.md +19 -13
  7. package/dist/docs/reference/configuration.md +77 -0
  8. package/dist/docs/reference/keyboard-shortcuts.md +1 -0
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/package.json +2 -1
  13. package/dist/src/agents/local-executor.js +8 -0
  14. package/dist/src/agents/local-executor.js.map +1 -1
  15. package/dist/src/agents/skill-extraction-agent.js +5 -4
  16. package/dist/src/agents/skill-extraction-agent.js.map +1 -1
  17. package/dist/src/agents/skill-extraction-agent.test.js +4 -2
  18. package/dist/src/agents/skill-extraction-agent.test.js.map +1 -1
  19. package/dist/src/agents/types.d.ts +2 -0
  20. package/dist/src/agents/types.js.map +1 -1
  21. package/dist/src/code_assist/server.js +16 -0
  22. package/dist/src/code_assist/server.js.map +1 -1
  23. package/dist/src/code_assist/server.test.js +18 -0
  24. package/dist/src/code_assist/server.test.js.map +1 -1
  25. package/dist/src/config/config.d.ts +6 -0
  26. package/dist/src/config/config.js +26 -8
  27. package/dist/src/config/config.js.map +1 -1
  28. package/dist/src/config/config.test.js +39 -1
  29. package/dist/src/config/config.test.js.map +1 -1
  30. package/dist/src/config/defaultModelConfigs.js +34 -0
  31. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  32. package/dist/src/config/models.d.ts +3 -1
  33. package/dist/src/config/models.js +21 -4
  34. package/dist/src/config/models.js.map +1 -1
  35. package/dist/src/config/models.test.js +23 -1
  36. package/dist/src/config/models.test.js.map +1 -1
  37. package/dist/src/context/config/configLoader.d.ts +1 -2
  38. package/dist/src/context/config/configLoader.js +12 -7
  39. package/dist/src/context/config/configLoader.js.map +1 -1
  40. package/dist/src/context/config/configLoader.test.js +8 -12
  41. package/dist/src/context/config/configLoader.test.js.map +1 -1
  42. package/dist/src/context/config/profiles.d.ts +7 -1
  43. package/dist/src/context/config/profiles.js +46 -5
  44. package/dist/src/context/config/profiles.js.map +1 -1
  45. package/dist/src/context/contextManager.js +5 -3
  46. package/dist/src/context/contextManager.js.map +1 -1
  47. package/dist/src/context/eventBus.d.ts +7 -0
  48. package/dist/src/context/eventBus.js +6 -0
  49. package/dist/src/context/eventBus.js.map +1 -1
  50. package/dist/src/context/graph/builtinBehaviors.js +3 -3
  51. package/dist/src/context/graph/builtinBehaviors.js.map +1 -1
  52. package/dist/src/context/graph/mapper.d.ts +4 -2
  53. package/dist/src/context/graph/mapper.js +15 -3
  54. package/dist/src/context/graph/mapper.js.map +1 -1
  55. package/dist/src/context/graph/toGraph.d.ts +13 -2
  56. package/dist/src/context/graph/toGraph.js +88 -32
  57. package/dist/src/context/graph/toGraph.js.map +1 -1
  58. package/dist/src/context/historyObserver.d.ts +1 -0
  59. package/dist/src/context/historyObserver.js +25 -26
  60. package/dist/src/context/historyObserver.js.map +1 -1
  61. package/dist/src/context/initializer.d.ts +9 -0
  62. package/dist/src/context/initializer.js +75 -0
  63. package/dist/src/context/initializer.js.map +1 -0
  64. package/dist/src/context/pipeline/contextWorkingBuffer.js +12 -6
  65. package/dist/src/context/pipeline/contextWorkingBuffer.js.map +1 -1
  66. package/dist/src/context/pipeline/contextWorkingBuffer.test.js +1 -1
  67. package/dist/src/context/pipeline/environmentImpl.d.ts +3 -2
  68. package/dist/src/context/pipeline/environmentImpl.js +6 -3
  69. package/dist/src/context/pipeline/environmentImpl.js.map +1 -1
  70. package/dist/src/context/pipeline/environmentImpl.test.js +1 -1
  71. package/dist/src/context/pipeline/environmentImpl.test.js.map +1 -1
  72. package/dist/src/context/pipeline/orchestrator.js +5 -0
  73. package/dist/src/context/pipeline/orchestrator.js.map +1 -1
  74. package/dist/src/context/processors/toolMaskingProcessor.js +21 -5
  75. package/dist/src/context/processors/toolMaskingProcessor.js.map +1 -1
  76. package/dist/src/context/processors/toolMaskingProcessor.test.js +22 -0
  77. package/dist/src/context/processors/toolMaskingProcessor.test.js.map +1 -1
  78. package/dist/src/context/system-tests/lifecycle.golden.test.js +5 -0
  79. package/dist/src/context/system-tests/lifecycle.golden.test.js.map +1 -1
  80. package/dist/src/context/system-tests/simulationHarness.js +1 -1
  81. package/dist/src/context/system-tests/simulationHarness.js.map +1 -1
  82. package/dist/src/context/testing/contextTestUtils.js +7 -3
  83. package/dist/src/context/testing/contextTestUtils.js.map +1 -1
  84. package/dist/src/context/tracer.js +3 -1
  85. package/dist/src/context/tracer.js.map +1 -1
  86. package/dist/src/context/tracer.test.js +4 -2
  87. package/dist/src/context/tracer.test.js.map +1 -1
  88. package/dist/src/context/utils/contextTokenCalculator.d.ts +2 -1
  89. package/dist/src/context/utils/contextTokenCalculator.js +13 -11
  90. package/dist/src/context/utils/contextTokenCalculator.js.map +1 -1
  91. package/dist/src/core/client.d.ts +1 -0
  92. package/dist/src/core/client.js +9 -8
  93. package/dist/src/core/client.js.map +1 -1
  94. package/dist/src/core/client.test.js +0 -3
  95. package/dist/src/core/client.test.js.map +1 -1
  96. package/dist/src/core/geminiChat.d.ts +2 -1
  97. package/dist/src/core/geminiChat.js +72 -20
  98. package/dist/src/core/geminiChat.js.map +1 -1
  99. package/dist/src/core/geminiChat.test.js +1 -0
  100. package/dist/src/core/geminiChat.test.js.map +1 -1
  101. package/dist/src/core/geminiChat_network_retry.test.js +1 -0
  102. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  103. package/dist/src/core/tokenLimits.d.ts +1 -0
  104. package/dist/src/core/tokenLimits.js +5 -1
  105. package/dist/src/core/tokenLimits.js.map +1 -1
  106. package/dist/src/generated/git-commit.d.ts +2 -2
  107. package/dist/src/generated/git-commit.js +2 -2
  108. package/dist/src/index.d.ts +9 -1
  109. package/dist/src/index.js +10 -1
  110. package/dist/src/index.js.map +1 -1
  111. package/dist/src/policy/policy-engine.js +12 -7
  112. package/dist/src/policy/policy-engine.js.map +1 -1
  113. package/dist/src/policy/policy-engine.test.js +69 -1
  114. package/dist/src/policy/policy-engine.test.js.map +1 -1
  115. package/dist/src/prompts/snippets.js +2 -1
  116. package/dist/src/prompts/snippets.js.map +1 -1
  117. package/dist/src/prompts/snippets.legacy.js +2 -1
  118. package/dist/src/prompts/snippets.legacy.js.map +1 -1
  119. package/dist/src/services/chatRecordingService.d.ts +1 -0
  120. package/dist/src/services/chatRecordingService.js +23 -0
  121. package/dist/src/services/chatRecordingService.js.map +1 -1
  122. package/dist/src/services/chatRecordingTypes.d.ts +13 -0
  123. package/dist/src/services/memoryService.d.ts +5 -0
  124. package/dist/src/services/memoryService.js +76 -53
  125. package/dist/src/services/memoryService.js.map +1 -1
  126. package/dist/src/services/memoryService.test.js +256 -12
  127. package/dist/src/services/memoryService.test.js.map +1 -1
  128. package/dist/src/services/sessionScratchpadUtils.d.ts +7 -0
  129. package/dist/src/services/sessionScratchpadUtils.js +121 -0
  130. package/dist/src/services/sessionScratchpadUtils.js.map +1 -0
  131. package/dist/src/services/sessionScratchpadUtils.test.d.ts +6 -0
  132. package/dist/src/services/sessionScratchpadUtils.test.js +27 -0
  133. package/dist/src/services/sessionScratchpadUtils.test.js.map +1 -0
  134. package/dist/src/services/sessionSummaryUtils.d.ts +3 -3
  135. package/dist/src/services/sessionSummaryUtils.js +232 -27
  136. package/dist/src/services/sessionSummaryUtils.js.map +1 -1
  137. package/dist/src/services/sessionSummaryUtils.test.js +449 -10
  138. package/dist/src/services/sessionSummaryUtils.test.js.map +1 -1
  139. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +24 -0
  140. package/dist/src/services/test-data/resolved-aliases.golden.json +24 -0
  141. package/dist/src/tools/trackerTools.test.js +7 -2
  142. package/dist/src/tools/trackerTools.test.js.map +1 -1
  143. package/dist/src/utils/binaryCheck.d.ts +9 -0
  144. package/dist/src/utils/binaryCheck.js +13 -0
  145. package/dist/src/utils/binaryCheck.js.map +1 -0
  146. package/dist/src/utils/fsErrorMessages.js +4 -0
  147. package/dist/src/utils/fsErrorMessages.js.map +1 -1
  148. package/dist/src/utils/fsErrorMessages.test.js +21 -0
  149. package/dist/src/utils/fsErrorMessages.test.js.map +1 -1
  150. package/dist/src/utils/tokenCalculation.d.ts +2 -2
  151. package/dist/src/utils/tokenCalculation.js +15 -14
  152. package/dist/src/utils/tokenCalculation.js.map +1 -1
  153. package/dist/src/voice/audioRecorder.d.ts +27 -0
  154. package/dist/src/voice/audioRecorder.js +95 -0
  155. package/dist/src/voice/audioRecorder.js.map +1 -0
  156. package/dist/src/voice/geminiLiveTranscriptionProvider.d.ts +20 -0
  157. package/dist/src/voice/geminiLiveTranscriptionProvider.js +140 -0
  158. package/dist/src/voice/geminiLiveTranscriptionProvider.js.map +1 -0
  159. package/dist/src/voice/transcriptionFactory.d.ts +12 -0
  160. package/dist/src/voice/transcriptionFactory.js +32 -0
  161. package/dist/src/voice/transcriptionFactory.js.map +1 -0
  162. package/dist/src/voice/transcriptionProvider.d.ts +29 -0
  163. package/dist/src/voice/transcriptionProvider.js +7 -0
  164. package/dist/src/voice/transcriptionProvider.js.map +1 -0
  165. package/dist/src/voice/whisperModelManager.d.ts +26 -0
  166. package/dist/src/voice/whisperModelManager.js +79 -0
  167. package/dist/src/voice/whisperModelManager.js.map +1 -0
  168. package/dist/src/voice/whisperTranscriptionProvider.d.ts +34 -0
  169. package/dist/src/voice/whisperTranscriptionProvider.js +151 -0
  170. package/dist/src/voice/whisperTranscriptionProvider.js.map +1 -0
  171. package/dist/src/voice/whisperTranscriptionProvider.test.d.ts +6 -0
  172. package/dist/src/voice/whisperTranscriptionProvider.test.js +24 -0
  173. package/dist/src/voice/whisperTranscriptionProvider.test.js.map +1 -0
  174. package/dist/tsconfig.tsbuildinfo +1 -1
  175. package/package.json +2 -1
@@ -97,6 +97,30 @@
97
97
  "topK": 64
98
98
  }
99
99
  },
100
+ "gemma-4-31b-it": {
101
+ "model": "gemma-4-31b-it",
102
+ "generateContentConfig": {
103
+ "temperature": 1,
104
+ "topP": 0.95,
105
+ "thinkingConfig": {
106
+ "includeThoughts": true,
107
+ "thinkingLevel": "HIGH"
108
+ },
109
+ "topK": 64
110
+ }
111
+ },
112
+ "gemma-4-26b-a4b-it": {
113
+ "model": "gemma-4-26b-a4b-it",
114
+ "generateContentConfig": {
115
+ "temperature": 1,
116
+ "topP": 0.95,
117
+ "thinkingConfig": {
118
+ "includeThoughts": true,
119
+ "thinkingLevel": "HIGH"
120
+ },
121
+ "topK": 64
122
+ }
123
+ },
100
124
  "gemini-2.5-flash-base": {
101
125
  "model": "gemini-2.5-flash",
102
126
  "generateContentConfig": {
@@ -97,6 +97,30 @@
97
97
  "topK": 64
98
98
  }
99
99
  },
100
+ "gemma-4-31b-it": {
101
+ "model": "gemma-4-31b-it",
102
+ "generateContentConfig": {
103
+ "temperature": 1,
104
+ "topP": 0.95,
105
+ "thinkingConfig": {
106
+ "includeThoughts": true,
107
+ "thinkingLevel": "HIGH"
108
+ },
109
+ "topK": 64
110
+ }
111
+ },
112
+ "gemma-4-26b-a4b-it": {
113
+ "model": "gemma-4-26b-a4b-it",
114
+ "generateContentConfig": {
115
+ "temperature": 1,
116
+ "topP": 0.95,
117
+ "thinkingConfig": {
118
+ "includeThoughts": true,
119
+ "thinkingLevel": "HIGH"
120
+ },
121
+ "topK": 64
122
+ }
123
+ },
100
124
  "gemini-2.5-flash-base": {
101
125
  "model": "gemini-2.5-flash",
102
126
  "generateContentConfig": {
@@ -24,6 +24,7 @@ describe('Tracker Tools Integration', () => {
24
24
  model: 'gemini-3-flash',
25
25
  debugMode: false,
26
26
  });
27
+ await config.initialize();
27
28
  messageBus = new MessageBus(null, false);
28
29
  });
29
30
  afterEach(async () => {
@@ -76,8 +77,12 @@ describe('Tracker Tools Integration', () => {
76
77
  type: TaskType.TASK,
77
78
  }, getSignal());
78
79
  const tasks = await config.getTrackerService().listTasks();
79
- const parentId = tasks.find((t) => t.title === 'Parent Task').id;
80
- const childId = tasks.find((t) => t.title === 'Child Task').id;
80
+ const parentTask = tasks.find((t) => t.title === 'Parent Task');
81
+ const childTask = tasks.find((t) => t.title === 'Child Task');
82
+ expect(parentTask).toBeDefined();
83
+ expect(childTask).toBeDefined();
84
+ const parentId = parentTask.id;
85
+ const childId = childTask.id;
81
86
  // Add Dependency
82
87
  const addDepTool = new TrackerAddDependencyTool(config, messageBus);
83
88
  await addDepTool.buildAndExecute({
@@ -1 +1 @@
1
- {"version":3,"file":"trackerTools.test.js","sourceRoot":"","sources":["../../../src/tools/trackerTools.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trackerTools.test.js","sourceRoot":"","sources":["../../../src/tools/trackerTools.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAGnE,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,OAAe,CAAC;IACpB,IAAI,MAAc,CAAC;IACnB,IAAI,UAAsB,CAAC;IAE3B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC1E,MAAM,GAAG,IAAI,MAAM,CAAC;YAClB,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,OAAO;YAClB,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,UAAU,GAAG,IAAI,UAAU,CAAC,IAA+B,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;IAErD,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,eAAe,CACnD;YACE,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,kBAAkB;YAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,EACD,SAAS,EAAE,CACZ,CAAC;QAEF,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAE1D,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,UAAU,CAAC,eAAe,CAC9B;YACE,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,KAAK;YAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,EACD,SAAS,EAAE,CACZ,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3B,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,eAAe,CACnD;YACE,EAAE,EAAE,MAAM;YACV,MAAM,EAAE,UAAU,CAAC,WAAW;SAC/B,EACD,SAAS,EAAE,CACZ,CAAC;QAEF,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,SAAS,CACvC,WAAW,UAAU,CAAC,WAAW,EAAE,CACpC,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEjE,gBAAgB;QAChB,MAAM,UAAU,CAAC,eAAe,CAC9B;YACE,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,KAAK;YAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,EACD,SAAS,EAAE,CACZ,CAAC;QAEF,eAAe;QACf,MAAM,UAAU,CAAC,eAAe,CAC9B;YACE,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,KAAK;YAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,EACD,SAAS,EAAE,CACZ,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;QAE9D,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,UAAW,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,SAAU,CAAC,EAAE,CAAC;QAE9B,iBAAiB;QACjB,MAAM,UAAU,GAAG,IAAI,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpE,MAAM,UAAU,CAAC,eAAe,CAC9B;YACE,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE,OAAO;SACtB,EACD,SAAS,EAAE,CACZ,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzE,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEvD,YAAY;QACZ,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAEjE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;aACG,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,MAAM,GAAG;gBACb,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,UAAU,CAAC,WAAW;gBAC9B,YAAY,EAAE,EAAE;aACjB,CAAC;YACF,MAAM,KAAK,GAAG;gBACZ,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,UAAU,CAAC,IAAI;gBACvB,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,EAAE;aACjB,CAAC;YACF,MAAM,UAAU,GAAG;gBACjB,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,QAAQ,CAAC,GAAG;gBAClB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,EAAE;aACjB,CAAC;YAEF,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;aACtB,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE3D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;gBAC5B;oBACE,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,aAAa;iBACtB;gBACD;oBACE,WAAW,EAAE,oBAAoB;oBACjC,MAAM,EAAE,SAAS;iBAClB;gBACD;oBACE,WAAW,EAAE,6BAA6B;oBAC1C,MAAM,EAAE,WAAW;iBACpB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,EAAE,GAAG;gBACT,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,YAAY,EAAE,EAAE;aACjB,CAAC;YACF,MAAM,EAAE,GAAG;gBACT,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,UAAU,CAAC,IAAI;gBACvB,YAAY,EAAE,EAAE;aACjB,CAAC;YACF,MAAM,EAAE,GAAG;gBACT,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,UAAU,CAAC,WAAW;gBAC9B,YAAY,EAAE,EAAE;aACjB,CAAC;YACF,MAAM,EAAE,GAAG;gBACT,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,UAAU,CAAC,OAAO;gBAC1B,YAAY,EAAE,EAAE;aACjB,CAAC;YAEF,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;aACX,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE3D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;gBAC5B,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE;gBACvD,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE;gBACnD,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE;gBACnD,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE;aACtD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,wFAAwF;YACxF,kFAAkF;YAClF,0DAA0D;YAC1D,MAAM,MAAM,GAAG;gBACb,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,UAAU,CAAC,IAAI;gBACvB,YAAY,EAAE,EAAE;aACjB,CAAC;YACF,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAE9C,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC;aACZ,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE3D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;gBAC5B;oBACE,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,SAAS;iBAClB;gBACD;oBACE,WAAW,EAAE,wBAAwB;oBACrC,MAAM,EAAE,WAAW;iBACpB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Checks if a binary is available in the system PATH.
8
+ */
9
+ export declare function isBinaryAvailable(binaryName: string): boolean;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { sync as commandExistsSync } from 'command-exists';
7
+ /**
8
+ * Checks if a binary is available in the system PATH.
9
+ */
10
+ export function isBinaryAvailable(binaryName) {
11
+ return commandExistsSync(binaryName);
12
+ }
13
+ //# sourceMappingURL=binaryCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binaryCheck.js","sourceRoot":"","sources":["../../../src/utils/binaryCheck.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,OAAO,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACvC,CAAC"}
@@ -37,6 +37,10 @@ const errorMessageGenerators = {
37
37
  'Close any programs that might be using the file.',
38
38
  EMFILE: () => 'Too many open files. Close some unused files or applications.',
39
39
  ENFILE: () => 'Too many open files in system. Close some unused files or applications.',
40
+ ECONNRESET: () => 'Connection reset by peer. The network connection was unexpectedly closed.',
41
+ ETIMEDOUT: () => 'Operation timed out. The network connection or filesystem operation took too long.',
42
+ ENOTDIR: (path) => (path ? `Not a directory: '${path}'. ` : 'Not a directory. ') +
43
+ 'Check if the path is correct and that all parent components are directories.',
40
44
  };
41
45
  /**
42
46
  * Converts a Node.js filesystem error to a user-friendly message.
@@ -1 +1 @@
1
- {"version":3,"file":"fsErrorMessages.js","sourceRoot":"","sources":["../../../src/utils/fsErrorMessages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3D;;;GAGG;AACH,MAAM,sBAAsB,GAA8C;IACxE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI;QACH,CAAC,CAAC,qCAAqC,IAAI,KAAK;QAChD,CAAC,CAAC,qBAAqB,CAAC;QAC1B,yDAAyD;IAC3D,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI;QACH,CAAC,CAAC,iCAAiC,IAAI,KAAK;QAC5C,CAAC,CAAC,+BAA+B,CAAC;QACpC,oDAAoD;IACtD,MAAM,EAAE,GAAG,EAAE,CACX,iEAAiE;IACnE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI;QACH,CAAC,CAAC,qCAAqC,IAAI,KAAK;QAChD,CAAC,CAAC,mCAAmC,CAAC;QACxC,0CAA0C;IAC5C,KAAK,EAAE,GAAG,EAAE,CACV,wEAAwE;IAC1E,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACd,CAAC,IAAI;QACH,CAAC,CAAC,6BAA6B,IAAI,KAAK;QACxC,CAAC,CAAC,2BAA2B,CAAC;QAChC,2DAA2D;IAC7D,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI;QACH,CAAC,CAAC,sCAAsC,IAAI,KAAK;QACjD,CAAC,CAAC,oCAAoC,CAAC;QACzC,qCAAqC;IACvC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACd,CAAC,IAAI;QACH,CAAC,CAAC,6BAA6B,IAAI,KAAK;QACxC,CAAC,CAAC,2BAA2B,CAAC;QAChC,kDAAkD;IACpD,MAAM,EAAE,GAAG,EAAE,CAAC,+DAA+D;IAC7E,MAAM,EAAE,GAAG,EAAE,CACX,yEAAyE;CAC5E,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAc,EACd,cAAc,GAAG,2BAA2B;IAE5C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,EAAE,CAAC;YACxD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,2DAA2D;QAC3D,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC;YACpD,OAAO,GAAG,WAAW,KAAK,IAAI,GAAG,CAAC;QACpC,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"fsErrorMessages.js","sourceRoot":"","sources":["../../../src/utils/fsErrorMessages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3D;;;GAGG;AACH,MAAM,sBAAsB,GAA8C;IACxE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI;QACH,CAAC,CAAC,qCAAqC,IAAI,KAAK;QAChD,CAAC,CAAC,qBAAqB,CAAC;QAC1B,yDAAyD;IAC3D,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI;QACH,CAAC,CAAC,iCAAiC,IAAI,KAAK;QAC5C,CAAC,CAAC,+BAA+B,CAAC;QACpC,oDAAoD;IACtD,MAAM,EAAE,GAAG,EAAE,CACX,iEAAiE;IACnE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI;QACH,CAAC,CAAC,qCAAqC,IAAI,KAAK;QAChD,CAAC,CAAC,mCAAmC,CAAC;QACxC,0CAA0C;IAC5C,KAAK,EAAE,GAAG,EAAE,CACV,wEAAwE;IAC1E,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACd,CAAC,IAAI;QACH,CAAC,CAAC,6BAA6B,IAAI,KAAK;QACxC,CAAC,CAAC,2BAA2B,CAAC;QAChC,2DAA2D;IAC7D,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI;QACH,CAAC,CAAC,sCAAsC,IAAI,KAAK;QACjD,CAAC,CAAC,oCAAoC,CAAC;QACzC,qCAAqC;IACvC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACd,CAAC,IAAI;QACH,CAAC,CAAC,6BAA6B,IAAI,KAAK;QACxC,CAAC,CAAC,2BAA2B,CAAC;QAChC,kDAAkD;IACpD,MAAM,EAAE,GAAG,EAAE,CAAC,+DAA+D;IAC7E,MAAM,EAAE,GAAG,EAAE,CACX,yEAAyE;IAC3E,UAAU,EAAE,GAAG,EAAE,CACf,2EAA2E;IAC7E,SAAS,EAAE,GAAG,EAAE,CACd,oFAAoF;IACtF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAChB,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,IAAI,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC7D,8EAA8E;CACjF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAc,EACd,cAAc,GAAG,2BAA2B;IAE5C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,EAAE,CAAC;YACxD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,2DAA2D;QAC3D,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC;YACpD,OAAO,GAAG,WAAW,KAAK,IAAI,GAAG,CAAC;QACpC,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
@@ -105,6 +105,27 @@ describe('getFsErrorMessage', () => {
105
105
  message: 'ENFILE: file table overflow',
106
106
  expected: 'Too many open files in system. Close some unused files or applications.',
107
107
  },
108
+ {
109
+ code: 'ECONNRESET',
110
+ message: 'ECONNRESET: connection reset by peer',
111
+ expected: 'Connection reset by peer. The network connection was unexpectedly closed.',
112
+ },
113
+ {
114
+ code: 'ETIMEDOUT',
115
+ message: 'ETIMEDOUT: operation timed out',
116
+ expected: 'Operation timed out. The network connection or filesystem operation took too long.',
117
+ },
118
+ {
119
+ code: 'ENOTDIR',
120
+ message: 'ENOTDIR: not a directory',
121
+ path: '/some/file.txt/inner',
122
+ expected: "Not a directory: '/some/file.txt/inner'. Check if the path is correct and that all parent components are directories.",
123
+ },
124
+ {
125
+ code: 'ENOTDIR',
126
+ message: 'ENOTDIR: not a directory',
127
+ expected: 'Not a directory. Check if the path is correct and that all parent components are directories.',
128
+ },
108
129
  ];
109
130
  it.each(testCases)('returns friendly message for $code (path: $path)', ({ code, message, path, expected }) => {
110
131
  const error = createNodeError(code, message, path);
@@ -1 +1 @@
1
- {"version":3,"file":"fsErrorMessages.test.js","sourceRoot":"","sources":["../../../src/utils/fsErrorMessages.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fsErrorMessages.test.js","sourceRoot":"","sources":["../../../src/utils/fsErrorMessages.test.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,9 @@ export declare const NON_ASCII_TOKENS_PER_CHAR = 1.3;
10
10
  /**
11
11
  * Estimates token count for parts synchronously using a heuristic.
12
12
  * - Text: character-based heuristic (ASCII vs CJK) for small strings, length/4 for massive ones.
13
- * - Non-text (Tools, etc): JSON string length / 4.
13
+ * - Non-text (Tools, etc): JSON string length / charsPerToken.
14
14
  */
15
- export declare function estimateTokenCountSync(parts: Part[], depth?: number): number;
15
+ export declare function estimateTokenCountSync(parts: Part[], depth?: number, charsPerToken?: number): number;
16
16
  /**
17
17
  * Calculates the token count of the request.
18
18
  * If the request contains only text or tools, it estimates the token count locally.
@@ -22,12 +22,13 @@ const MAX_CHARS_FOR_FULL_HEURISTIC = 100_000;
22
22
  // malicious or buggy nested structures. A depth of 3 is sufficient given
23
23
  // standard multimodal responses are typically depth 1.
24
24
  const MAX_RECURSION_DEPTH = 3;
25
+ const DEFAULT_CHARS_PER_TOKEN = 4;
25
26
  /**
26
27
  * Heuristic estimation of tokens for a text string.
27
28
  */
28
- function estimateTextTokens(text) {
29
+ function estimateTextTokens(text, charsPerToken) {
29
30
  if (text.length > MAX_CHARS_FOR_FULL_HEURISTIC) {
30
- return text.length / 4;
31
+ return text.length / charsPerToken;
31
32
  }
32
33
  let tokens = 0;
33
34
  // Optimized loop: charCodeAt is faster than for...of on large strings
@@ -64,43 +65,43 @@ function estimateMediaTokens(part) {
64
65
  * Heuristic estimation for tool responses, avoiding massive string copies
65
66
  * and accounting for nested Gemini 3 multimodal parts.
66
67
  */
67
- function estimateFunctionResponseTokens(part, depth) {
68
+ function estimateFunctionResponseTokens(part, depth, charsPerToken) {
68
69
  const fr = part.functionResponse;
69
70
  if (!fr)
70
71
  return 0;
71
- let totalTokens = (fr.name?.length ?? 0) / 4;
72
+ let totalTokens = (fr.name?.length ?? 0) / charsPerToken;
72
73
  const response = fr.response;
73
74
  if (typeof response === 'string') {
74
- totalTokens += response.length / 4;
75
+ totalTokens += response.length / charsPerToken;
75
76
  }
76
77
  else if (response !== undefined && response !== null) {
77
78
  // For objects, stringify only the payload, not the whole Part object.
78
- totalTokens += JSON.stringify(response).length / 4;
79
+ totalTokens += JSON.stringify(response).length / charsPerToken;
79
80
  }
80
81
  // Gemini 3: Handle nested multimodal parts recursively.
81
82
  // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
82
83
  const nestedParts = fr.parts;
83
84
  if (nestedParts && nestedParts.length > 0) {
84
- totalTokens += estimateTokenCountSync(nestedParts, depth + 1);
85
+ totalTokens += estimateTokenCountSync(nestedParts, depth + 1, charsPerToken);
85
86
  }
86
87
  return totalTokens;
87
88
  }
88
89
  /**
89
90
  * Estimates token count for parts synchronously using a heuristic.
90
91
  * - Text: character-based heuristic (ASCII vs CJK) for small strings, length/4 for massive ones.
91
- * - Non-text (Tools, etc): JSON string length / 4.
92
+ * - Non-text (Tools, etc): JSON string length / charsPerToken.
92
93
  */
93
- export function estimateTokenCountSync(parts, depth = 0) {
94
+ export function estimateTokenCountSync(parts, depth = 0, charsPerToken = DEFAULT_CHARS_PER_TOKEN) {
94
95
  if (depth > MAX_RECURSION_DEPTH) {
95
96
  return 0;
96
97
  }
97
98
  let totalTokens = 0;
98
99
  for (const part of parts) {
99
100
  if (typeof part.text === 'string') {
100
- totalTokens += estimateTextTokens(part.text);
101
+ totalTokens += estimateTextTokens(part.text, charsPerToken);
101
102
  }
102
103
  else if (part.functionResponse) {
103
- totalTokens += estimateFunctionResponseTokens(part, depth);
104
+ totalTokens += estimateFunctionResponseTokens(part, depth, charsPerToken);
104
105
  }
105
106
  else {
106
107
  const mediaEstimate = estimateMediaTokens(part);
@@ -110,7 +111,7 @@ export function estimateTokenCountSync(parts, depth = 0) {
110
111
  else {
111
112
  // Fallback for other non-text parts (e.g., functionCall).
112
113
  // Note: JSON.stringify(part) here is safe as these parts are typically small.
113
- totalTokens += JSON.stringify(part).length / 4;
114
+ totalTokens += JSON.stringify(part).length / charsPerToken;
114
115
  }
115
116
  }
116
117
  }
@@ -143,9 +144,9 @@ export async function calculateRequestTokenCount(request, contentGenerator, mode
143
144
  catch (error) {
144
145
  // Fallback to local estimation if the API call fails
145
146
  debugLogger.debug('countTokens API failed:', error);
146
- return estimateTokenCountSync(parts);
147
+ return estimateTokenCountSync(parts, 0, DEFAULT_CHARS_PER_TOKEN);
147
148
  }
148
149
  }
149
- return estimateTokenCountSync(parts);
150
+ return estimateTokenCountSync(parts, 0, DEFAULT_CHARS_PER_TOKEN);
150
151
  }
151
152
  //# sourceMappingURL=tokenCalculation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenCalculation.js","sourceRoot":"","sources":["../../../src/utils/tokenCalculation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenCalculation.js","sourceRoot":"","sources":["../../../src/utils/tokenCalculation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { EventEmitter } from 'node:events';
7
+ export interface AudioRecorderEvents {
8
+ data: [Buffer];
9
+ start: [];
10
+ stop: [];
11
+ error: [Error];
12
+ }
13
+ /**
14
+ * Captures audio from the microphone using `sox` (`rec`).
15
+ * Emits 16kHz, 16-bit, mono PCM chunks.
16
+ */
17
+ export declare class AudioRecorder extends EventEmitter<AudioRecorderEvents> {
18
+ private recProcess;
19
+ private isRecordingInternal;
20
+ get isRecording(): boolean;
21
+ /**
22
+ * Checks if `rec` (sox) is available on the system.
23
+ */
24
+ static isAvailable(): Promise<boolean>;
25
+ start(): Promise<void>;
26
+ stop(): void;
27
+ }
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ import { EventEmitter } from 'node:events';
8
+ import commandExists from 'command-exists';
9
+ /**
10
+ * Captures audio from the microphone using `sox` (`rec`).
11
+ * Emits 16kHz, 16-bit, mono PCM chunks.
12
+ */
13
+ export class AudioRecorder extends EventEmitter {
14
+ recProcess = null;
15
+ isRecordingInternal = false;
16
+ get isRecording() {
17
+ return this.isRecordingInternal;
18
+ }
19
+ /**
20
+ * Checks if `rec` (sox) is available on the system.
21
+ */
22
+ static async isAvailable() {
23
+ try {
24
+ await commandExists('rec');
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ async start() {
32
+ if (this.isRecordingInternal)
33
+ return;
34
+ this.isRecordingInternal = true;
35
+ try {
36
+ const available = await AudioRecorder.isAvailable();
37
+ if (!this.isRecordingInternal)
38
+ return; // Check if stopped while checking availability
39
+ if (!available) {
40
+ throw new Error('The `rec` command (provided by SoX) is required for voice mode. Please install SoX (e.g., `brew install sox` on macOS or `sudo apt install sox libsox-fmt-all` on Linux).');
41
+ }
42
+ // rec -q -V0 -e signed -c 1 -b 16 -r 16000 -t raw -
43
+ this.recProcess = spawn('rec', [
44
+ '-q',
45
+ '-V0',
46
+ '-e',
47
+ 'signed',
48
+ '-c',
49
+ '1',
50
+ '-b',
51
+ '16',
52
+ '-r',
53
+ '16000',
54
+ '-t',
55
+ 'raw',
56
+ '-',
57
+ ]);
58
+ if (!this.isRecordingInternal) {
59
+ this.recProcess.kill('SIGTERM');
60
+ this.recProcess = null;
61
+ return;
62
+ }
63
+ this.recProcess.stdout.on('data', (data) => {
64
+ this.emit('data', data);
65
+ });
66
+ this.recProcess.stderr.on('data', (_data) => {
67
+ // rec might print warnings to stderr, we could log them or ignore
68
+ // console.warn(`rec stderr: ${data.toString()}`);
69
+ });
70
+ this.recProcess.on('error', (err) => {
71
+ this.emit('error', err);
72
+ this.stop();
73
+ });
74
+ this.recProcess.on('close', () => {
75
+ this.stop();
76
+ });
77
+ this.emit('start');
78
+ }
79
+ catch (err) {
80
+ this.isRecordingInternal = false;
81
+ throw err;
82
+ }
83
+ }
84
+ stop() {
85
+ if (!this.isRecordingInternal)
86
+ return;
87
+ this.isRecordingInternal = false;
88
+ if (this.recProcess) {
89
+ this.recProcess.kill('SIGTERM');
90
+ this.recProcess = null;
91
+ }
92
+ this.emit('stop');
93
+ }
94
+ }
95
+ //# sourceMappingURL=audioRecorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioRecorder.js","sourceRoot":"","sources":["../../../src/voice/audioRecorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { EventEmitter } from 'node:events';
7
+ import type { TranscriptionProvider, TranscriptionEvents } from './transcriptionProvider.js';
8
+ /**
9
+ * Connects to the Gemini Live API using raw WebSockets to support API Key authentication.
10
+ */
11
+ export declare class GeminiLiveTranscriptionProvider extends EventEmitter<TranscriptionEvents> implements TranscriptionProvider {
12
+ private readonly apiKey;
13
+ private ws;
14
+ private currentTranscription;
15
+ constructor(apiKey: string);
16
+ connect(): Promise<void>;
17
+ sendAudioChunk(chunk: Buffer): void;
18
+ getTranscription(): string;
19
+ disconnect(): void;
20
+ }
@@ -0,0 +1,140 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import WebSocket from 'ws';
7
+ import { EventEmitter, once } from 'node:events';
8
+ import { debugLogger } from '../utils/debugLogger.js';
9
+ import { z } from 'zod';
10
+ const LiveAPIResponseSchema = z.object({
11
+ setupComplete: z.record(z.unknown()).optional(),
12
+ serverContent: z
13
+ .object({
14
+ turnComplete: z.boolean().optional(),
15
+ inputTranscription: z
16
+ .object({
17
+ text: z.string().optional(),
18
+ })
19
+ .optional(),
20
+ outputTranscription: z
21
+ .object({
22
+ text: z.string().optional(),
23
+ })
24
+ .optional(),
25
+ modelTurn: z
26
+ .object({
27
+ parts: z
28
+ .array(z.object({
29
+ text: z.string().optional(),
30
+ inlineData: z
31
+ .object({
32
+ data: z.string(),
33
+ })
34
+ .optional(),
35
+ }))
36
+ .optional(),
37
+ })
38
+ .optional(),
39
+ })
40
+ .optional(),
41
+ });
42
+ /**
43
+ * Connects to the Gemini Live API using raw WebSockets to support API Key authentication.
44
+ */
45
+ export class GeminiLiveTranscriptionProvider extends EventEmitter {
46
+ apiKey;
47
+ ws = null;
48
+ currentTranscription = '';
49
+ constructor(apiKey) {
50
+ super();
51
+ this.apiKey = apiKey;
52
+ }
53
+ async connect() {
54
+ const modelName = 'gemini-3.1-flash-live-preview';
55
+ const baseUrl = 'wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent';
56
+ if (!this.apiKey) {
57
+ throw new Error('No API key provided');
58
+ }
59
+ // NOTE: The Generative Language WebSocket API requires the API key to be passed via the 'key' query parameter.
60
+ const url = `${baseUrl}?key=${this.apiKey}`;
61
+ debugLogger.debug(`[GeminiLiveTranscription] Connecting to model ${modelName} via raw WebSocket with API Key...`);
62
+ try {
63
+ this.ws = new WebSocket(url, {
64
+ maxPayload: 1 << 20, // 1MB limit for safety
65
+ });
66
+ this.ws.on('message', (data) => {
67
+ try {
68
+ const parsedData = JSON.parse(data.toString());
69
+ const result = LiveAPIResponseSchema.safeParse(parsedData);
70
+ if (result.success) {
71
+ const response = result.data;
72
+ if (response.serverContent) {
73
+ const content = response.serverContent;
74
+ if (content.turnComplete) {
75
+ this.emit('turnComplete');
76
+ }
77
+ if (content.inputTranscription?.text) {
78
+ const text = content.inputTranscription.text;
79
+ debugLogger.debug(`[GeminiLiveTranscription] Transcription received (Cloud): "${text}"`);
80
+ this.currentTranscription = text;
81
+ this.emit('transcription', this.currentTranscription);
82
+ }
83
+ }
84
+ }
85
+ }
86
+ catch (e) {
87
+ debugLogger.error('[GeminiLiveTranscription] Error parsing message:', e);
88
+ }
89
+ });
90
+ this.ws.on('error', (error) => {
91
+ debugLogger.error('[GeminiLiveTranscription] WebSocket Error:', error);
92
+ this.emit('error', error);
93
+ });
94
+ this.ws.on('close', (code, reason) => {
95
+ debugLogger.debug(`[GeminiLiveTranscription] Connection Closed. Code: ${code}, Reason: ${reason}`);
96
+ this.emit('close');
97
+ this.ws = null;
98
+ });
99
+ await once(this.ws, 'open');
100
+ const setupMessage = {
101
+ setup: {
102
+ model: `models/${modelName}`,
103
+ generation_config: {
104
+ response_modalities: ['audio'],
105
+ },
106
+ input_audio_transcription: {},
107
+ },
108
+ };
109
+ this.ws.send(JSON.stringify(setupMessage));
110
+ this.currentTranscription = '';
111
+ }
112
+ catch (err) {
113
+ debugLogger.error('[GeminiLiveTranscription] Failed to establish connection:', err);
114
+ throw err;
115
+ }
116
+ }
117
+ sendAudioChunk(chunk) {
118
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN)
119
+ return;
120
+ const audioMessage = {
121
+ realtime_input: {
122
+ audio: {
123
+ data: chunk.toString('base64'),
124
+ mime_type: 'audio/pcm;rate=16000',
125
+ },
126
+ },
127
+ };
128
+ this.ws.send(JSON.stringify(audioMessage));
129
+ }
130
+ getTranscription() {
131
+ return this.currentTranscription;
132
+ }
133
+ disconnect() {
134
+ if (this.ws) {
135
+ this.ws.close();
136
+ this.ws = null;
137
+ }
138
+ }
139
+ }
140
+ //# sourceMappingURL=geminiLiveTranscriptionProvider.js.map