@machina.ai/cell-cli 1.0.13-rc9 → 1.0.17-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 (235) hide show
  1. package/dist/package.json +7 -6
  2. package/dist/src/config/config.d.ts +5 -2
  3. package/dist/src/config/config.js +57 -39
  4. package/dist/src/config/config.js.map +1 -1
  5. package/dist/src/config/extension.d.ts +1 -0
  6. package/dist/src/config/extension.js +4 -0
  7. package/dist/src/config/extension.js.map +1 -1
  8. package/dist/src/config/settings.d.ts +17 -1
  9. package/dist/src/config/settings.js +88 -23
  10. package/dist/src/config/settings.js.map +1 -1
  11. package/dist/src/gemini.d.ts +3 -0
  12. package/dist/src/gemini.js +53 -32
  13. package/dist/src/gemini.js.map +1 -1
  14. package/dist/src/generated/git-commit.d.ts +1 -1
  15. package/dist/src/generated/git-commit.js +2 -2
  16. package/dist/src/generated/git-commit.js.map +1 -1
  17. package/dist/src/nonInteractiveCli.js +15 -40
  18. package/dist/src/nonInteractiveCli.js.map +1 -1
  19. package/dist/src/patches/is-in-ci.d.ts +7 -0
  20. package/dist/src/patches/is-in-ci.js +15 -0
  21. package/dist/src/patches/is-in-ci.js.map +1 -0
  22. package/dist/src/services/BuiltinCommandLoader.js +9 -0
  23. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  24. package/dist/src/services/CommandService.d.ts +8 -4
  25. package/dist/src/services/CommandService.js +24 -8
  26. package/dist/src/services/CommandService.js.map +1 -1
  27. package/dist/src/services/FileCommandLoader.d.ts +15 -3
  28. package/dist/src/services/FileCommandLoader.js +113 -38
  29. package/dist/src/services/FileCommandLoader.js.map +1 -1
  30. package/dist/src/services/McpPromptLoader.d.ts +25 -0
  31. package/dist/src/services/McpPromptLoader.js +192 -0
  32. package/dist/src/services/McpPromptLoader.js.map +1 -0
  33. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +21 -0
  34. package/dist/src/services/prompt-processors/argumentProcessor.js +28 -0
  35. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -0
  36. package/dist/src/services/prompt-processors/shellProcessor.d.ts +32 -0
  37. package/dist/src/services/prompt-processors/shellProcessor.js +77 -0
  38. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
  39. package/dist/src/services/prompt-processors/types.d.ts +38 -0
  40. package/dist/src/services/prompt-processors/types.js +14 -0
  41. package/dist/src/services/prompt-processors/types.js.map +1 -0
  42. package/dist/src/ui/App.js +105 -52
  43. package/dist/src/ui/App.js.map +1 -1
  44. package/dist/src/ui/colors.js +6 -0
  45. package/dist/src/ui/colors.js.map +1 -1
  46. package/dist/src/ui/commands/chatCommand.js +45 -2
  47. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  48. package/dist/src/ui/commands/directoryCommand.d.ts +8 -0
  49. package/dist/src/ui/commands/directoryCommand.js +136 -0
  50. package/dist/src/ui/commands/directoryCommand.js.map +1 -0
  51. package/dist/src/ui/commands/helpCommand.js +7 -6
  52. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  53. package/dist/src/ui/commands/ideCommand.js +113 -111
  54. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  55. package/dist/src/ui/commands/initCommand.d.ts +7 -0
  56. package/dist/src/ui/commands/initCommand.js +76 -0
  57. package/dist/src/ui/commands/initCommand.js.map +1 -0
  58. package/dist/src/ui/commands/mcpCommand.js +240 -26
  59. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  60. package/dist/src/ui/commands/memoryCommand.js +9 -4
  61. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  62. package/dist/src/ui/commands/setupGithubCommand.d.ts +7 -0
  63. package/dist/src/ui/commands/setupGithubCommand.js +48 -0
  64. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -0
  65. package/dist/src/ui/commands/types.d.ts +30 -3
  66. package/dist/src/ui/commands/types.js +1 -0
  67. package/dist/src/ui/commands/types.js.map +1 -1
  68. package/dist/src/ui/commands/vimCommand.d.ts +7 -0
  69. package/dist/src/ui/commands/vimCommand.js +23 -0
  70. package/dist/src/ui/commands/vimCommand.js.map +1 -0
  71. package/dist/src/ui/components/AsciiArt.d.ts +2 -2
  72. package/dist/src/ui/components/AsciiArt.js +2 -2
  73. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +2 -2
  74. package/dist/src/ui/components/ContextSummaryDisplay.js +12 -12
  75. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  76. package/dist/src/ui/components/DebugProfiler.d.ts +6 -0
  77. package/dist/src/ui/components/DebugProfiler.js +26 -0
  78. package/dist/src/ui/components/DebugProfiler.js.map +1 -0
  79. package/dist/src/ui/components/Footer.d.ts +1 -0
  80. package/dist/src/ui/components/Footer.js +4 -3
  81. package/dist/src/ui/components/Footer.js.map +1 -1
  82. package/dist/src/ui/components/Header.js +1 -1
  83. package/dist/src/ui/components/Header.js.map +1 -1
  84. package/dist/src/ui/components/Help.js +2 -2
  85. package/dist/src/ui/components/Help.js.map +1 -1
  86. package/dist/src/ui/components/HistoryItemDisplay.d.ts +2 -0
  87. package/dist/src/ui/components/HistoryItemDisplay.js +2 -1
  88. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  89. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +12 -0
  90. package/dist/src/ui/components/IDEContextDetailDisplay.js +12 -0
  91. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -0
  92. package/dist/src/ui/components/InputPrompt.d.ts +2 -0
  93. package/dist/src/ui/components/InputPrompt.js +92 -102
  94. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  95. package/dist/src/ui/components/PrepareLabel.d.ts +15 -0
  96. package/dist/src/ui/components/PrepareLabel.js +16 -0
  97. package/dist/src/ui/components/PrepareLabel.js.map +1 -0
  98. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +15 -0
  99. package/dist/src/ui/components/ShellConfirmationDialog.js +44 -0
  100. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
  101. package/dist/src/ui/components/SuggestionsDisplay.d.ts +1 -0
  102. package/dist/src/ui/components/SuggestionsDisplay.js +3 -3
  103. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  104. package/dist/src/ui/components/ThemeDialog.js +10 -5
  105. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  106. package/dist/src/ui/components/Tips.js +1 -1
  107. package/dist/src/ui/components/Tips.js.map +1 -1
  108. package/dist/src/ui/components/messages/DiffRenderer.js +12 -11
  109. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  110. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +19 -7
  111. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  112. package/dist/src/ui/components/messages/UserMessage.js +4 -1
  113. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  114. package/dist/src/ui/components/shared/text-buffer.d.ts +273 -3
  115. package/dist/src/ui/components/shared/text-buffer.js +420 -79
  116. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  117. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
  118. package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
  119. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
  120. package/dist/src/ui/contexts/VimModeContext.d.ts +19 -0
  121. package/dist/src/ui/contexts/VimModeContext.js +48 -0
  122. package/dist/src/ui/contexts/VimModeContext.js.map +1 -0
  123. package/dist/src/ui/editors/editorSettingsManager.js +6 -13
  124. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
  125. package/dist/src/ui/hooks/atCommandProcessor.js +67 -50
  126. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  127. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
  128. package/dist/src/ui/hooks/shellCommandProcessor.js +139 -196
  129. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  130. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +7 -3
  131. package/dist/src/ui/hooks/slashCommandProcessor.js +203 -120
  132. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  133. package/dist/src/ui/hooks/useCommandCompletion.d.ts +24 -0
  134. package/dist/src/ui/hooks/useCommandCompletion.js +453 -0
  135. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -0
  136. package/dist/src/ui/hooks/useCompletion.d.ts +5 -3
  137. package/dist/src/ui/hooks/useCompletion.js +7 -312
  138. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  139. package/dist/src/ui/hooks/useConsoleMessages.js +53 -37
  140. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  141. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  142. package/dist/src/ui/hooks/useGeminiStream.js +6 -5
  143. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  144. package/dist/src/ui/hooks/useInputHistory.d.ts +1 -1
  145. package/dist/src/ui/hooks/useKeypress.js +5 -2
  146. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  147. package/dist/src/ui/hooks/usePhraseCycler.js +1 -0
  148. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  149. package/dist/src/ui/hooks/useReactToolScheduler.js +0 -1
  150. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  151. package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +19 -0
  152. package/dist/src/ui/hooks/useReverseSearchCompletion.js +54 -0
  153. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -0
  154. package/dist/src/ui/hooks/useShellHistory.d.ts +4 -2
  155. package/dist/src/ui/hooks/useShellHistory.js +30 -7
  156. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  157. package/dist/src/ui/hooks/vim.d.ts +28 -0
  158. package/dist/src/ui/hooks/vim.js +630 -0
  159. package/dist/src/ui/hooks/vim.js.map +1 -0
  160. package/dist/src/ui/themes/ansi-light.js +2 -0
  161. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  162. package/dist/src/ui/themes/ansi.js +2 -0
  163. package/dist/src/ui/themes/ansi.js.map +1 -1
  164. package/dist/src/ui/themes/atom-one-dark.js +2 -0
  165. package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
  166. package/dist/src/ui/themes/ayu-light.js +3 -1
  167. package/dist/src/ui/themes/ayu-light.js.map +1 -1
  168. package/dist/src/ui/themes/ayu.js +3 -1
  169. package/dist/src/ui/themes/ayu.js.map +1 -1
  170. package/dist/src/ui/themes/dracula.js +2 -0
  171. package/dist/src/ui/themes/dracula.js.map +1 -1
  172. package/dist/src/ui/themes/github-dark.js +2 -0
  173. package/dist/src/ui/themes/github-dark.js.map +1 -1
  174. package/dist/src/ui/themes/github-light.js +2 -0
  175. package/dist/src/ui/themes/github-light.js.map +1 -1
  176. package/dist/src/ui/themes/googlecode.js +2 -0
  177. package/dist/src/ui/themes/googlecode.js.map +1 -1
  178. package/dist/src/ui/themes/no-color.js +2 -0
  179. package/dist/src/ui/themes/no-color.js.map +1 -1
  180. package/dist/src/ui/themes/shades-of-purple.js +2 -0
  181. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  182. package/dist/src/ui/themes/theme-manager.js +10 -1
  183. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  184. package/dist/src/ui/themes/theme.d.ts +3 -0
  185. package/dist/src/ui/themes/theme.js +28 -3
  186. package/dist/src/ui/themes/theme.js.map +1 -1
  187. package/dist/src/ui/themes/xcode.js +2 -0
  188. package/dist/src/ui/themes/xcode.js.map +1 -1
  189. package/dist/src/ui/types.d.ts +10 -1
  190. package/dist/src/ui/types.js +1 -0
  191. package/dist/src/ui/types.js.map +1 -1
  192. package/dist/src/ui/utils/CodeColorizer.d.ts +1 -0
  193. package/dist/src/ui/utils/CodeColorizer.js +17 -5
  194. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  195. package/dist/src/ui/utils/textUtils.d.ts +0 -8
  196. package/dist/src/ui/utils/textUtils.js +0 -22
  197. package/dist/src/ui/utils/textUtils.js.map +1 -1
  198. package/dist/src/ui/utils/updateCheck.d.ts +7 -1
  199. package/dist/src/ui/utils/updateCheck.js +46 -8
  200. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  201. package/dist/src/utils/events.d.ts +11 -0
  202. package/dist/src/utils/events.js +13 -0
  203. package/dist/src/utils/events.js.map +1 -0
  204. package/dist/src/utils/gitUtils.d.ts +10 -0
  205. package/dist/src/utils/gitUtils.js +24 -0
  206. package/dist/src/utils/gitUtils.js.map +1 -0
  207. package/dist/src/utils/handleAutoUpdate.d.ts +11 -0
  208. package/dist/src/utils/handleAutoUpdate.js +101 -0
  209. package/dist/src/utils/handleAutoUpdate.js.map +1 -0
  210. package/dist/src/utils/installationInfo.d.ts +23 -0
  211. package/dist/src/utils/installationInfo.js +154 -0
  212. package/dist/src/utils/installationInfo.js.map +1 -0
  213. package/dist/src/utils/resolvePath.d.ts +6 -0
  214. package/dist/src/utils/resolvePath.js +21 -0
  215. package/dist/src/utils/resolvePath.js.map +1 -0
  216. package/dist/src/utils/sandbox-macos-permissive-closed.sb +6 -0
  217. package/dist/src/utils/sandbox-macos-permissive-open.sb +6 -0
  218. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +6 -0
  219. package/dist/src/utils/sandbox-macos-restrictive-closed.sb +6 -0
  220. package/dist/src/utils/sandbox-macos-restrictive-open.sb +6 -0
  221. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +6 -0
  222. package/dist/src/utils/sandbox.d.ts +2 -2
  223. package/dist/src/utils/sandbox.js +39 -11
  224. package/dist/src/utils/sandbox.js.map +1 -1
  225. package/dist/src/utils/spawnWrapper.d.ts +7 -0
  226. package/dist/src/utils/spawnWrapper.js +8 -0
  227. package/dist/src/utils/spawnWrapper.js.map +1 -0
  228. package/dist/src/utils/updateEventEmitter.d.ts +11 -0
  229. package/dist/src/utils/updateEventEmitter.js +12 -0
  230. package/dist/src/utils/updateEventEmitter.js.map +1 -0
  231. package/dist/src/validateNonInterActiveAuth.d.ts +7 -0
  232. package/dist/src/validateNonInterActiveAuth.js +37 -0
  233. package/dist/src/validateNonInterActiveAuth.js.map +1 -0
  234. package/dist/tsconfig.tsbuildinfo +1 -1
  235. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"CodeColorizer.js","sourceRoot":"","sources":["../../../../src/ui/utils/CodeColorizer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CodeColorizer.js","sourceRoot":"","sources":["../../../../src/ui/utils/CodeColorizer.tsx"],"names":[],"mappings":"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"}
@@ -9,14 +9,6 @@
9
9
  * @returns The length of the longest line in the ASCII art.
10
10
  */
11
11
  export declare const getAsciiArtWidth: (asciiArt: string) => number;
12
- /**
13
- * Checks if a Buffer is likely binary by testing for the presence of a NULL byte.
14
- * The presence of a NULL byte is a strong indicator that the data is not plain text.
15
- * @param data The Buffer to check.
16
- * @param sampleSize The number of bytes from the start of the buffer to test.
17
- * @returns True if a NULL byte is found, false otherwise.
18
- */
19
- export declare function isBinary(data: Buffer | null | undefined, sampleSize?: number): boolean;
20
12
  export declare function toCodePoints(str: string): string[];
21
13
  export declare function cpLen(str: string): number;
22
14
  export declare function cpSlice(str: string, start: number, end?: number): string;
@@ -15,28 +15,6 @@ export const getAsciiArtWidth = (asciiArt) => {
15
15
  const lines = asciiArt.split('\n');
16
16
  return Math.max(...lines.map((line) => line.length));
17
17
  };
18
- /**
19
- * Checks if a Buffer is likely binary by testing for the presence of a NULL byte.
20
- * The presence of a NULL byte is a strong indicator that the data is not plain text.
21
- * @param data The Buffer to check.
22
- * @param sampleSize The number of bytes from the start of the buffer to test.
23
- * @returns True if a NULL byte is found, false otherwise.
24
- */
25
- export function isBinary(data, sampleSize = 512) {
26
- if (!data) {
27
- return false;
28
- }
29
- const sample = data.length > sampleSize ? data.subarray(0, sampleSize) : data;
30
- for (const byte of sample) {
31
- // The presence of a NULL byte (0x00) is one of the most reliable
32
- // indicators of a binary file. Text files should not contain them.
33
- if (byte === 0) {
34
- return true;
35
- }
36
- }
37
- // If no NULL bytes were found in the sample, we assume it's text.
38
- return false;
39
- }
40
18
  /*
41
19
  * -------------------------------------------------------------------------
42
20
  * Unicode‑aware helpers (work at the code‑point level rather than UTF‑16
@@ -1 +1 @@
1
- {"version":3,"file":"textUtils.js","sourceRoot":"","sources":["../../../../src/ui/utils/textUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CACtB,IAA+B,EAC/B,UAAU,GAAG,GAAG;IAEhB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9E,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,iEAAiE;QACjE,mEAAmE;QACnE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;4EAI4E;AAE5E,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,qEAAqE;IACrE,6BAA6B;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,GAAY;IAC9D,2CAA2C;IAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"textUtils.js","sourceRoot":"","sources":["../../../../src/ui/utils/textUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF;;;;4EAI4E;AAE5E,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,qEAAqE;IACrE,6BAA6B;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,GAAY;IAC9D,2CAA2C;IAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC"}
@@ -3,4 +3,10 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- export declare function checkForUpdates(): Promise<string | null>;
6
+ import { UpdateInfo } from 'update-notifier';
7
+ export declare const FETCH_TIMEOUT_MS = 2000;
8
+ export interface UpdateObject {
9
+ message: string;
10
+ update: UpdateInfo;
11
+ }
12
+ export declare function checkForUpdates(): Promise<UpdateObject | null>;
@@ -6,6 +6,23 @@
6
6
  import updateNotifier from 'update-notifier';
7
7
  import semver from 'semver';
8
8
  import { getPackageJson } from '../../utils/package.js';
9
+ export const FETCH_TIMEOUT_MS = 2000;
10
+ /**
11
+ * From a nightly and stable update, determines which is the "best" one to offer.
12
+ * The rule is to always prefer nightly if the base versions are the same.
13
+ */
14
+ function getBestAvailableUpdate(nightly, stable) {
15
+ if (!nightly)
16
+ return stable || null;
17
+ if (!stable)
18
+ return nightly || null;
19
+ const nightlyVer = nightly.latest;
20
+ const stableVer = stable.latest;
21
+ if (semver.coerce(stableVer)?.version === semver.coerce(nightlyVer)?.version) {
22
+ return nightly;
23
+ }
24
+ return semver.gt(stableVer, nightlyVer) ? stable : nightly;
25
+ }
9
26
  export async function checkForUpdates() {
10
27
  try {
11
28
  // Skip update check when running from source (development mode)
@@ -16,19 +33,40 @@ export async function checkForUpdates() {
16
33
  if (!packageJson || !packageJson.name || !packageJson.version) {
17
34
  return null;
18
35
  }
19
- const notifier = updateNotifier({
36
+ const { name, version: currentVersion } = packageJson;
37
+ const isNightly = currentVersion.includes('nightly');
38
+ const createNotifier = (distTag) => updateNotifier({
20
39
  pkg: {
21
- name: packageJson.name,
22
- version: packageJson.version,
40
+ name,
41
+ version: currentVersion,
23
42
  },
24
- // check every time
25
43
  updateCheckInterval: 0,
26
- // allow notifier to run in scripts
27
44
  shouldNotifyInNpmScript: true,
45
+ distTag,
28
46
  });
29
- if (notifier.update &&
30
- semver.gt(notifier.update.latest, notifier.update.current)) {
31
- return `Gemini CLI update available! ${notifier.update.current} → ${notifier.update.latest}\nRun npm install -g ${packageJson.name} to update`;
47
+ if (isNightly) {
48
+ const [nightlyUpdateInfo, latestUpdateInfo] = await Promise.all([
49
+ createNotifier('nightly').fetchInfo(),
50
+ createNotifier('latest').fetchInfo(),
51
+ ]);
52
+ const bestUpdate = getBestAvailableUpdate(nightlyUpdateInfo, latestUpdateInfo);
53
+ if (bestUpdate && semver.gt(bestUpdate.latest, currentVersion)) {
54
+ const message = `A new version of cell-cli is available! ${currentVersion} → ${bestUpdate.latest}`;
55
+ return {
56
+ message,
57
+ update: { ...bestUpdate, current: currentVersion },
58
+ };
59
+ }
60
+ }
61
+ else {
62
+ const updateInfo = await createNotifier('latest').fetchInfo();
63
+ if (updateInfo && semver.gt(updateInfo.latest, currentVersion)) {
64
+ const message = `Cell CLI update available! ${currentVersion} → ${updateInfo.latest}`;
65
+ return {
66
+ message,
67
+ update: { ...updateInfo, current: currentVersion },
68
+ };
69
+ }
32
70
  }
33
71
  return null;
34
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../../../src/ui/utils/updateCheck.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,gEAAgE;QAChE,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,GAAG,EAAE;gBACH,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,OAAO,EAAE,WAAW,CAAC,OAAO;aAC7B;YACD,mBAAmB;YACnB,mBAAmB,EAAE,CAAC;YACtB,mCAAmC;YACnC,uBAAuB,EAAE,IAAI;SAC9B,CAAC,CAAC;QAEH,IACE,QAAQ,CAAC,MAAM;YACf,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAC1D,CAAC;YACD,OAAO,gCAAgC,QAAQ,CAAC,MAAM,CAAC,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,wBAAwB,WAAW,CAAC,IAAI,YAAY,CAAC;QACjJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../../../src/ui/utils/updateCheck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ export declare enum AppEvent {
8
+ OpenDebugConsole = "open-debug-console",
9
+ LogError = "log-error"
10
+ }
11
+ export declare const appEvents: EventEmitter<[never]>;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ export var AppEvent;
8
+ (function (AppEvent) {
9
+ AppEvent["OpenDebugConsole"] = "open-debug-console";
10
+ AppEvent["LogError"] = "log-error";
11
+ })(AppEvent || (AppEvent = {}));
12
+ export const appEvents = new EventEmitter();
13
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/utils/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,mDAAuC,CAAA;IACvC,kCAAsB,CAAA;AACxB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,YAAY,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Checks if a directory is within a git repository hosted on GitHub.
8
+ * @returns true if the directory is in a git repository with a github.com remote, false otherwise
9
+ */
10
+ export declare function isGitHubRepository(): boolean;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { execSync } from 'child_process';
7
+ /**
8
+ * Checks if a directory is within a git repository hosted on GitHub.
9
+ * @returns true if the directory is in a git repository with a github.com remote, false otherwise
10
+ */
11
+ export function isGitHubRepository() {
12
+ try {
13
+ const remotes = execSync('git remote -v', {
14
+ encoding: 'utf-8',
15
+ });
16
+ const pattern = /github\.com/;
17
+ return pattern.test(remotes);
18
+ }
19
+ catch (_error) {
20
+ // If any filesystem error occurs, assume not a git repo
21
+ return false;
22
+ }
23
+ }
24
+ //# sourceMappingURL=gitUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../../../src/utils/gitUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,EAAE;YACxC,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,aAAa,CAAC;QAE9B,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,wDAAwD;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { UpdateObject } from '../ui/utils/updateCheck.js';
7
+ import { LoadedSettings } from '../config/settings.js';
8
+ import { HistoryItem } from '../ui/types.js';
9
+ import { spawn } from 'child_process';
10
+ export declare function handleAutoUpdate(info: UpdateObject | null, settings: LoadedSettings, projectRoot: string, spawnFn?: typeof spawn): import("child_process").ChildProcessWithoutNullStreams | undefined;
11
+ export declare function setUpdateHandler(addItem: (item: Omit<HistoryItem, 'id'>, timestamp: number) => void, setUpdateInfo: (info: UpdateObject | null) => void): () => void;
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { getInstallationInfo } from './installationInfo.js';
7
+ import { updateEventEmitter } from './updateEventEmitter.js';
8
+ import { MessageType } from '../ui/types.js';
9
+ import { spawnWrapper } from './spawnWrapper.js';
10
+ export function handleAutoUpdate(info, settings, projectRoot, spawnFn = spawnWrapper) {
11
+ if (!info) {
12
+ return;
13
+ }
14
+ if (settings.merged.disableUpdateNag) {
15
+ return;
16
+ }
17
+ const installationInfo = getInstallationInfo(projectRoot, settings.merged.disableAutoUpdate ?? false);
18
+ let combinedMessage = info.message;
19
+ if (installationInfo.updateMessage) {
20
+ combinedMessage += `\n${installationInfo.updateMessage}`;
21
+ }
22
+ updateEventEmitter.emit('update-received', {
23
+ message: combinedMessage,
24
+ });
25
+ if (!installationInfo.updateCommand || settings.merged.disableAutoUpdate) {
26
+ return;
27
+ }
28
+ const isNightly = info.update.latest.includes('nightly');
29
+ const updateCommand = installationInfo.updateCommand.replace('@latest', isNightly ? '@nightly' : `@${info.update.latest}`);
30
+ const updateProcess = spawnFn(updateCommand, { stdio: 'pipe', shell: true });
31
+ let errorOutput = '';
32
+ updateProcess.stderr.on('data', (data) => {
33
+ errorOutput += data.toString();
34
+ });
35
+ updateProcess.on('close', (code) => {
36
+ if (code === 0) {
37
+ updateEventEmitter.emit('update-success', {
38
+ message: 'Update successful! The new version will be used on your next run.',
39
+ });
40
+ }
41
+ else {
42
+ updateEventEmitter.emit('update-failed', {
43
+ message: `Automatic update failed. Please try updating manually. (command: ${updateCommand}, stderr: ${errorOutput.trim()})`,
44
+ });
45
+ }
46
+ });
47
+ updateProcess.on('error', (err) => {
48
+ updateEventEmitter.emit('update-failed', {
49
+ message: `Automatic update failed. Please try updating manually. (error: ${err.message})`,
50
+ });
51
+ });
52
+ return updateProcess;
53
+ }
54
+ export function setUpdateHandler(addItem, setUpdateInfo) {
55
+ let successfullyInstalled = false;
56
+ const handleUpdateRecieved = (info) => {
57
+ setUpdateInfo(info);
58
+ const savedMessage = info.message;
59
+ setTimeout(() => {
60
+ if (!successfullyInstalled) {
61
+ addItem({
62
+ type: MessageType.INFO,
63
+ text: savedMessage,
64
+ }, Date.now());
65
+ }
66
+ setUpdateInfo(null);
67
+ }, 60000);
68
+ };
69
+ const handleUpdateFailed = () => {
70
+ setUpdateInfo(null);
71
+ addItem({
72
+ type: MessageType.ERROR,
73
+ text: `Automatic update failed. Please try updating manually`,
74
+ }, Date.now());
75
+ };
76
+ const handleUpdateSuccess = () => {
77
+ successfullyInstalled = true;
78
+ setUpdateInfo(null);
79
+ addItem({
80
+ type: MessageType.INFO,
81
+ text: `Update successful! The new version will be used on your next run.`,
82
+ }, Date.now());
83
+ };
84
+ const handleUpdateInfo = (data) => {
85
+ addItem({
86
+ type: MessageType.INFO,
87
+ text: data.message,
88
+ }, Date.now());
89
+ };
90
+ updateEventEmitter.on('update-received', handleUpdateRecieved);
91
+ updateEventEmitter.on('update-failed', handleUpdateFailed);
92
+ updateEventEmitter.on('update-success', handleUpdateSuccess);
93
+ updateEventEmitter.on('update-info', handleUpdateInfo);
94
+ return () => {
95
+ updateEventEmitter.off('update-received', handleUpdateRecieved);
96
+ updateEventEmitter.off('update-failed', handleUpdateFailed);
97
+ updateEventEmitter.off('update-success', handleUpdateSuccess);
98
+ updateEventEmitter.off('update-info', handleUpdateInfo);
99
+ };
100
+ }
101
+ //# sourceMappingURL=handleAutoUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleAutoUpdate.js","sourceRoot":"","sources":["../../../src/utils/handleAutoUpdate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare enum PackageManager {
7
+ NPM = "npm",
8
+ YARN = "yarn",
9
+ PNPM = "pnpm",
10
+ PNPX = "pnpx",
11
+ BUN = "bun",
12
+ BUNX = "bunx",
13
+ HOMEBREW = "homebrew",
14
+ NPX = "npx",
15
+ UNKNOWN = "unknown"
16
+ }
17
+ export interface InstallationInfo {
18
+ packageManager: PackageManager;
19
+ isGlobal: boolean;
20
+ updateCommand?: string;
21
+ updateMessage?: string;
22
+ }
23
+ export declare function getInstallationInfo(projectRoot: string, isAutoUpdateDisabled: boolean): InstallationInfo;
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { isGitRepository } from '@machina.ai/cell-cli-core';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as childProcess from 'child_process';
10
+ export var PackageManager;
11
+ (function (PackageManager) {
12
+ PackageManager["NPM"] = "npm";
13
+ PackageManager["YARN"] = "yarn";
14
+ PackageManager["PNPM"] = "pnpm";
15
+ PackageManager["PNPX"] = "pnpx";
16
+ PackageManager["BUN"] = "bun";
17
+ PackageManager["BUNX"] = "bunx";
18
+ PackageManager["HOMEBREW"] = "homebrew";
19
+ PackageManager["NPX"] = "npx";
20
+ PackageManager["UNKNOWN"] = "unknown";
21
+ })(PackageManager || (PackageManager = {}));
22
+ export function getInstallationInfo(projectRoot, isAutoUpdateDisabled) {
23
+ const cliPath = process.argv[1];
24
+ if (!cliPath) {
25
+ return { packageManager: PackageManager.UNKNOWN, isGlobal: false };
26
+ }
27
+ try {
28
+ // Normalize path separators to forward slashes for consistent matching.
29
+ const realPath = fs.realpathSync(cliPath).replace(/\\/g, '/');
30
+ const normalizedProjectRoot = projectRoot?.replace(/\\/g, '/');
31
+ const isGit = isGitRepository(process.cwd());
32
+ // Check for local git clone first
33
+ if (isGit &&
34
+ normalizedProjectRoot &&
35
+ realPath.startsWith(normalizedProjectRoot) &&
36
+ !realPath.includes('/node_modules/')) {
37
+ return {
38
+ packageManager: PackageManager.UNKNOWN, // Not managed by a package manager in this sense
39
+ isGlobal: false,
40
+ updateMessage: 'Running from a local git clone. Please update with "git pull".',
41
+ };
42
+ }
43
+ // Check for npx/pnpx
44
+ if (realPath.includes('/.npm/_npx') || realPath.includes('/npm/_npx')) {
45
+ return {
46
+ packageManager: PackageManager.NPX,
47
+ isGlobal: false,
48
+ updateMessage: 'Running via npx, update not applicable.',
49
+ };
50
+ }
51
+ if (realPath.includes('/.pnpm/_pnpx')) {
52
+ return {
53
+ packageManager: PackageManager.PNPX,
54
+ isGlobal: false,
55
+ updateMessage: 'Running via pnpx, update not applicable.',
56
+ };
57
+ }
58
+ // Check for Homebrew
59
+ if (process.platform === 'darwin') {
60
+ try {
61
+ // The package name in homebrew is gemini-cli
62
+ childProcess.execSync('brew list -1 | grep -q "^gemini-cli$"', {
63
+ stdio: 'ignore',
64
+ });
65
+ return {
66
+ packageManager: PackageManager.HOMEBREW,
67
+ isGlobal: true,
68
+ updateMessage: 'Installed via Homebrew. Please update with "brew upgrade".',
69
+ };
70
+ }
71
+ catch (_error) {
72
+ // Brew is not installed or gemini-cli is not installed via brew.
73
+ // Continue to the next check.
74
+ }
75
+ }
76
+ // Check for pnpm
77
+ if (realPath.includes('/.pnpm/global')) {
78
+ const updateCommand = 'pnpm add -g @machina.ai/cell-cli@latest';
79
+ return {
80
+ packageManager: PackageManager.PNPM,
81
+ isGlobal: true,
82
+ updateCommand,
83
+ updateMessage: isAutoUpdateDisabled
84
+ ? `Please run ${updateCommand} to update`
85
+ : 'Installed with pnpm. Attempting to automatically update now...',
86
+ };
87
+ }
88
+ // Check for yarn
89
+ if (realPath.includes('/.yarn/global')) {
90
+ const updateCommand = 'yarn global add @machina.ai/cell-cli@latest';
91
+ return {
92
+ packageManager: PackageManager.YARN,
93
+ isGlobal: true,
94
+ updateCommand,
95
+ updateMessage: isAutoUpdateDisabled
96
+ ? `Please run ${updateCommand} to update`
97
+ : 'Installed with yarn. Attempting to automatically update now...',
98
+ };
99
+ }
100
+ // Check for bun
101
+ if (realPath.includes('/.bun/install/cache')) {
102
+ return {
103
+ packageManager: PackageManager.BUNX,
104
+ isGlobal: false,
105
+ updateMessage: 'Running via bunx, update not applicable.',
106
+ };
107
+ }
108
+ if (realPath.includes('/.bun/bin')) {
109
+ const updateCommand = 'bun add -g @machina.ai/cell-cli@latest';
110
+ return {
111
+ packageManager: PackageManager.BUN,
112
+ isGlobal: true,
113
+ updateCommand,
114
+ updateMessage: isAutoUpdateDisabled
115
+ ? `Please run ${updateCommand} to update`
116
+ : 'Installed with bun. Attempting to automatically update now...',
117
+ };
118
+ }
119
+ // Check for local install
120
+ if (normalizedProjectRoot &&
121
+ realPath.startsWith(`${normalizedProjectRoot}/node_modules`)) {
122
+ let pm = PackageManager.NPM;
123
+ if (fs.existsSync(path.join(projectRoot, 'yarn.lock'))) {
124
+ pm = PackageManager.YARN;
125
+ }
126
+ else if (fs.existsSync(path.join(projectRoot, 'pnpm-lock.yaml'))) {
127
+ pm = PackageManager.PNPM;
128
+ }
129
+ else if (fs.existsSync(path.join(projectRoot, 'bun.lockb'))) {
130
+ pm = PackageManager.BUN;
131
+ }
132
+ return {
133
+ packageManager: pm,
134
+ isGlobal: false,
135
+ updateMessage: "Locally installed. Please update via your project's package.json.",
136
+ };
137
+ }
138
+ // Assume global npm
139
+ const updateCommand = 'npm install -g @machina.ai/cell-cli@latest';
140
+ return {
141
+ packageManager: PackageManager.NPM,
142
+ isGlobal: true,
143
+ updateCommand,
144
+ updateMessage: isAutoUpdateDisabled
145
+ ? `Please run ${updateCommand} to update`
146
+ : 'Installed with npm. Attempting to automatically update now...',
147
+ };
148
+ }
149
+ catch (error) {
150
+ console.log(error);
151
+ return { packageManager: PackageManager.UNKNOWN, isGlobal: false };
152
+ }
153
+ }
154
+ //# sourceMappingURL=installationInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installationInfo.js","sourceRoot":"","sources":["../../../src/utils/installationInfo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare function resolvePath(p: string): string;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as os from 'os';
7
+ import * as path from 'path';
8
+ export function resolvePath(p) {
9
+ if (!p) {
10
+ return '';
11
+ }
12
+ let expandedPath = p;
13
+ if (p.toLowerCase().startsWith('%userprofile%')) {
14
+ expandedPath = os.homedir() + p.substring('%userprofile%'.length);
15
+ }
16
+ else if (p === '~' || p.startsWith('~/')) {
17
+ expandedPath = os.homedir() + p.substring(1);
18
+ }
19
+ return path.normalize(expandedPath);
20
+ }
21
+ //# sourceMappingURL=resolvePath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvePath.js","sourceRoot":"","sources":["../../../src/utils/resolvePath.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChD,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;SAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACtC,CAAC"}
@@ -13,6 +13,12 @@
13
13
  (subpath (string-append (param "HOME_DIR") "/.npm"))
14
14
  (subpath (string-append (param "HOME_DIR") "/.cache"))
15
15
  (subpath (string-append (param "HOME_DIR") "/.gitconfig"))
16
+ ;; Allow writes to included directories from --include-directories
17
+ (subpath (param "INCLUDE_DIR_0"))
18
+ (subpath (param "INCLUDE_DIR_1"))
19
+ (subpath (param "INCLUDE_DIR_2"))
20
+ (subpath (param "INCLUDE_DIR_3"))
21
+ (subpath (param "INCLUDE_DIR_4"))
16
22
  (literal "/dev/stdout")
17
23
  (literal "/dev/stderr")
18
24
  (literal "/dev/null")
@@ -13,6 +13,12 @@
13
13
  (subpath (string-append (param "HOME_DIR") "/.npm"))
14
14
  (subpath (string-append (param "HOME_DIR") "/.cache"))
15
15
  (subpath (string-append (param "HOME_DIR") "/.gitconfig"))
16
+ ;; Allow writes to included directories from --include-directories
17
+ (subpath (param "INCLUDE_DIR_0"))
18
+ (subpath (param "INCLUDE_DIR_1"))
19
+ (subpath (param "INCLUDE_DIR_2"))
20
+ (subpath (param "INCLUDE_DIR_3"))
21
+ (subpath (param "INCLUDE_DIR_4"))
16
22
  (literal "/dev/stdout")
17
23
  (literal "/dev/stderr")
18
24
  (literal "/dev/null")
@@ -13,6 +13,12 @@
13
13
  (subpath (string-append (param "HOME_DIR") "/.npm"))
14
14
  (subpath (string-append (param "HOME_DIR") "/.cache"))
15
15
  (subpath (string-append (param "HOME_DIR") "/.gitconfig"))
16
+ ;; Allow writes to included directories from --include-directories
17
+ (subpath (param "INCLUDE_DIR_0"))
18
+ (subpath (param "INCLUDE_DIR_1"))
19
+ (subpath (param "INCLUDE_DIR_2"))
20
+ (subpath (param "INCLUDE_DIR_3"))
21
+ (subpath (param "INCLUDE_DIR_4"))
16
22
  (literal "/dev/stdout")
17
23
  (literal "/dev/stderr")
18
24
  (literal "/dev/null")