@codemieai/code 0.0.35 → 0.0.37

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 (267) hide show
  1. package/README.md +33 -0
  2. package/dist/agents/codemie-code/agent.d.ts +1 -1
  3. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  4. package/dist/agents/codemie-code/agent.js +2 -2
  5. package/dist/agents/codemie-code/agent.js.map +1 -1
  6. package/dist/agents/codemie-code/index.js +1 -1
  7. package/dist/agents/codemie-code/index.js.map +1 -1
  8. package/dist/agents/codemie-code/prompts.d.ts +1 -1
  9. package/dist/agents/codemie-code/prompts.d.ts.map +1 -1
  10. package/dist/agents/codemie-code/skills/core/SkillDiscovery.d.ts.map +1 -0
  11. package/dist/{skills → agents/codemie-code/skills}/core/SkillDiscovery.js +1 -1
  12. package/dist/agents/codemie-code/skills/core/SkillDiscovery.js.map +1 -0
  13. package/dist/agents/codemie-code/skills/core/SkillManager.d.ts.map +1 -0
  14. package/dist/{skills → agents/codemie-code/skills}/core/SkillManager.js +1 -1
  15. package/dist/agents/codemie-code/skills/core/SkillManager.js.map +1 -0
  16. package/dist/agents/codemie-code/skills/core/types.d.ts.map +1 -0
  17. package/dist/agents/codemie-code/skills/core/types.js.map +1 -0
  18. package/dist/agents/codemie-code/skills/index.d.ts.map +1 -0
  19. package/dist/agents/codemie-code/skills/index.js.map +1 -0
  20. package/dist/agents/codemie-code/skills/utils/content-loader.d.ts.map +1 -0
  21. package/dist/{skills → agents/codemie-code/skills}/utils/content-loader.js +1 -1
  22. package/dist/agents/codemie-code/skills/utils/content-loader.js.map +1 -0
  23. package/dist/agents/codemie-code/skills/utils/frontmatter.d.ts.map +1 -0
  24. package/dist/agents/codemie-code/skills/utils/frontmatter.js.map +1 -0
  25. package/dist/agents/codemie-code/skills/utils/pattern-matcher.d.ts.map +1 -0
  26. package/dist/agents/codemie-code/skills/utils/pattern-matcher.js.map +1 -0
  27. package/dist/agents/codemie-code/tools/assistant-invocation.d.ts.map +1 -1
  28. package/dist/agents/codemie-code/tools/assistant-invocation.js +2 -2
  29. package/dist/agents/codemie-code/tools/assistant-invocation.js.map +1 -1
  30. package/dist/agents/codemie-code/types.d.ts +1 -1
  31. package/dist/agents/codemie-code/types.d.ts.map +1 -1
  32. package/dist/agents/core/extension/BaseExtensionInstaller.d.ts.map +1 -1
  33. package/dist/agents/core/extension/BaseExtensionInstaller.js +11 -4
  34. package/dist/agents/core/extension/BaseExtensionInstaller.js.map +1 -1
  35. package/dist/agents/core/session/BaseProcessor.d.ts +22 -1
  36. package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -1
  37. package/dist/agents/plugins/claude/claude-acp.plugin.d.ts +5 -0
  38. package/dist/agents/plugins/claude/claude-acp.plugin.d.ts.map +1 -1
  39. package/dist/agents/plugins/claude/claude-acp.plugin.js +12 -2
  40. package/dist/agents/plugins/claude/claude-acp.plugin.js.map +1 -1
  41. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  42. package/dist/agents/plugins/claude/claude.plugin.js +5 -1
  43. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  44. package/dist/agents/plugins/claude/claude.session.d.ts +5 -0
  45. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  46. package/dist/agents/plugins/claude/claude.session.js +101 -2
  47. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  48. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  49. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +0 -1
  50. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  51. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +13 -19
  52. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  53. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
  54. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +29 -4
  55. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
  56. package/dist/cli/commands/assistants/chat.js +9 -6
  57. package/dist/cli/commands/assistants/chat.js.map +1 -1
  58. package/dist/cli/commands/assistants/constants.d.ts +2 -6
  59. package/dist/cli/commands/assistants/constants.d.ts.map +1 -1
  60. package/dist/cli/commands/assistants/constants.js +2 -5
  61. package/dist/cli/commands/assistants/constants.js.map +1 -1
  62. package/dist/cli/commands/assistants/index.d.ts.map +1 -1
  63. package/dist/cli/commands/assistants/index.js +1 -11
  64. package/dist/cli/commands/assistants/index.js.map +1 -1
  65. package/dist/cli/commands/assistants/setup/configuration/actions.d.ts +30 -0
  66. package/dist/cli/commands/assistants/setup/configuration/actions.d.ts.map +1 -0
  67. package/dist/cli/commands/assistants/setup/configuration/actions.js +63 -0
  68. package/dist/cli/commands/assistants/setup/configuration/actions.js.map +1 -0
  69. package/dist/cli/commands/assistants/setup/configuration/constants.d.ts +49 -0
  70. package/dist/cli/commands/assistants/setup/configuration/constants.d.ts.map +1 -0
  71. package/dist/cli/commands/assistants/setup/configuration/constants.js +56 -0
  72. package/dist/cli/commands/assistants/setup/configuration/constants.js.map +1 -0
  73. package/dist/cli/commands/assistants/setup/configuration/index.d.ts +9 -0
  74. package/dist/cli/commands/assistants/setup/configuration/index.d.ts.map +1 -0
  75. package/dist/cli/commands/assistants/setup/configuration/index.js +8 -0
  76. package/dist/cli/commands/assistants/setup/configuration/index.js.map +1 -0
  77. package/dist/cli/commands/assistants/setup/configuration/selection.d.ts +12 -0
  78. package/dist/cli/commands/assistants/setup/configuration/selection.d.ts.map +1 -0
  79. package/dist/cli/commands/assistants/setup/configuration/selection.js +94 -0
  80. package/dist/cli/commands/assistants/setup/configuration/selection.js.map +1 -0
  81. package/dist/cli/commands/assistants/setup/configuration/types.d.ts +22 -0
  82. package/dist/cli/commands/assistants/setup/configuration/types.d.ts.map +1 -0
  83. package/dist/cli/commands/assistants/setup/configuration/types.js +2 -0
  84. package/dist/cli/commands/assistants/setup/configuration/types.js.map +1 -0
  85. package/dist/cli/commands/assistants/setup/configuration/ui.d.ts +9 -0
  86. package/dist/cli/commands/assistants/setup/configuration/ui.d.ts.map +1 -0
  87. package/dist/cli/commands/assistants/setup/configuration/ui.js +86 -0
  88. package/dist/cli/commands/assistants/setup/configuration/ui.js.map +1 -0
  89. package/dist/cli/commands/assistants/setup/constants.d.ts +26 -0
  90. package/dist/cli/commands/assistants/setup/constants.d.ts.map +1 -0
  91. package/dist/cli/commands/assistants/setup/constants.js +21 -0
  92. package/dist/cli/commands/assistants/setup/constants.js.map +1 -0
  93. package/dist/cli/commands/assistants/setup/data.d.ts +30 -0
  94. package/dist/cli/commands/assistants/setup/data.d.ts.map +1 -0
  95. package/dist/cli/commands/assistants/setup/data.js +125 -0
  96. package/dist/cli/commands/assistants/setup/data.js.map +1 -0
  97. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.d.ts.map +1 -0
  98. package/dist/cli/commands/assistants/{generators → setup/generators}/claude-agent-generator.js +6 -2
  99. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.js.map +1 -0
  100. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.d.ts +12 -0
  101. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.d.ts.map +1 -0
  102. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js +94 -0
  103. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js.map +1 -0
  104. package/dist/cli/commands/assistants/setup/helpers.d.ts +27 -0
  105. package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -0
  106. package/dist/cli/commands/assistants/setup/helpers.js +94 -0
  107. package/dist/cli/commands/assistants/setup/helpers.js.map +1 -0
  108. package/dist/cli/commands/assistants/setup/index.d.ts +17 -0
  109. package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -0
  110. package/dist/cli/commands/assistants/setup/index.js +193 -0
  111. package/dist/cli/commands/assistants/setup/index.js.map +1 -0
  112. package/dist/cli/commands/assistants/setup/manualConfiguration/actions.d.ts +47 -0
  113. package/dist/cli/commands/assistants/setup/manualConfiguration/actions.d.ts.map +1 -0
  114. package/dist/cli/commands/assistants/setup/manualConfiguration/actions.js +140 -0
  115. package/dist/cli/commands/assistants/setup/manualConfiguration/actions.js.map +1 -0
  116. package/dist/cli/commands/assistants/setup/manualConfiguration/constants.d.ts +56 -0
  117. package/dist/cli/commands/assistants/setup/manualConfiguration/constants.d.ts.map +1 -0
  118. package/dist/cli/commands/assistants/setup/manualConfiguration/constants.js +61 -0
  119. package/dist/cli/commands/assistants/setup/manualConfiguration/constants.js.map +1 -0
  120. package/dist/cli/commands/assistants/setup/manualConfiguration/index.d.ts +12 -0
  121. package/dist/cli/commands/assistants/setup/manualConfiguration/index.d.ts.map +1 -0
  122. package/dist/cli/commands/assistants/setup/manualConfiguration/index.js +48 -0
  123. package/dist/cli/commands/assistants/setup/manualConfiguration/index.js.map +1 -0
  124. package/dist/cli/commands/assistants/setup/manualConfiguration/interactive-prompt.d.ts +6 -0
  125. package/dist/cli/commands/assistants/setup/manualConfiguration/interactive-prompt.d.ts.map +1 -0
  126. package/dist/cli/commands/assistants/setup/manualConfiguration/interactive-prompt.js +90 -0
  127. package/dist/cli/commands/assistants/setup/manualConfiguration/interactive-prompt.js.map +1 -0
  128. package/dist/cli/commands/assistants/setup/manualConfiguration/types.d.ts +37 -0
  129. package/dist/cli/commands/assistants/setup/manualConfiguration/types.d.ts.map +1 -0
  130. package/dist/cli/commands/assistants/setup/manualConfiguration/types.js +2 -0
  131. package/dist/cli/commands/assistants/setup/manualConfiguration/types.js.map +1 -0
  132. package/dist/cli/commands/assistants/setup/manualConfiguration/ui.d.ts +6 -0
  133. package/dist/cli/commands/assistants/setup/manualConfiguration/ui.d.ts.map +1 -0
  134. package/dist/cli/commands/assistants/setup/manualConfiguration/ui.js +103 -0
  135. package/dist/cli/commands/assistants/setup/manualConfiguration/ui.js.map +1 -0
  136. package/dist/cli/commands/assistants/setup/selection/actions.d.ts +31 -0
  137. package/dist/cli/commands/assistants/setup/selection/actions.d.ts.map +1 -0
  138. package/dist/cli/commands/assistants/setup/selection/actions.js +321 -0
  139. package/dist/cli/commands/assistants/setup/selection/actions.js.map +1 -0
  140. package/dist/cli/commands/assistants/setup/selection/constants.d.ts +79 -0
  141. package/dist/cli/commands/assistants/setup/selection/constants.d.ts.map +1 -0
  142. package/dist/cli/commands/assistants/setup/selection/constants.js +90 -0
  143. package/dist/cli/commands/assistants/setup/selection/constants.js.map +1 -0
  144. package/dist/cli/commands/assistants/setup/selection/index.d.ts +25 -0
  145. package/dist/cli/commands/assistants/setup/selection/index.d.ts.map +1 -0
  146. package/dist/cli/commands/assistants/setup/selection/index.js +127 -0
  147. package/dist/cli/commands/assistants/setup/selection/index.js.map +1 -0
  148. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.d.ts +20 -0
  149. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.d.ts.map +1 -0
  150. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.js +328 -0
  151. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.js.map +1 -0
  152. package/dist/cli/commands/assistants/setup/selection/types.d.ts +27 -0
  153. package/dist/cli/commands/assistants/setup/selection/types.d.ts.map +1 -0
  154. package/dist/cli/commands/assistants/setup/selection/types.js +2 -0
  155. package/dist/cli/commands/assistants/setup/selection/types.js.map +1 -0
  156. package/dist/cli/commands/assistants/setup/selection/ui.d.ts +11 -0
  157. package/dist/cli/commands/assistants/setup/selection/ui.d.ts.map +1 -0
  158. package/dist/cli/commands/assistants/setup/selection/ui.js +189 -0
  159. package/dist/cli/commands/assistants/setup/selection/ui.js.map +1 -0
  160. package/dist/cli/commands/assistants/setup/selection/utils.d.ts +36 -0
  161. package/dist/cli/commands/assistants/setup/selection/utils.d.ts.map +1 -0
  162. package/dist/cli/commands/assistants/setup/selection/utils.js +55 -0
  163. package/dist/cli/commands/assistants/setup/selection/utils.js.map +1 -0
  164. package/dist/cli/commands/assistants/setup/summary/index.d.ts +16 -0
  165. package/dist/cli/commands/assistants/setup/summary/index.d.ts.map +1 -0
  166. package/dist/cli/commands/assistants/setup/summary/index.js +48 -0
  167. package/dist/cli/commands/assistants/setup/summary/index.js.map +1 -0
  168. package/dist/cli/commands/install.d.ts.map +1 -1
  169. package/dist/cli/commands/install.js +8 -0
  170. package/dist/cli/commands/install.js.map +1 -1
  171. package/dist/cli/commands/log/cleaner.d.ts +33 -0
  172. package/dist/cli/commands/log/cleaner.d.ts.map +1 -0
  173. package/dist/cli/commands/log/cleaner.js +214 -0
  174. package/dist/cli/commands/log/cleaner.js.map +1 -0
  175. package/dist/cli/commands/log/filter.d.ts +55 -0
  176. package/dist/cli/commands/log/filter.d.ts.map +1 -0
  177. package/dist/cli/commands/log/filter.js +128 -0
  178. package/dist/cli/commands/log/filter.js.map +1 -0
  179. package/dist/cli/commands/log/follower.d.ts +36 -0
  180. package/dist/cli/commands/log/follower.d.ts.map +1 -0
  181. package/dist/cli/commands/log/follower.js +151 -0
  182. package/dist/cli/commands/log/follower.js.map +1 -0
  183. package/dist/cli/commands/log/formatter.d.ts +76 -0
  184. package/dist/cli/commands/log/formatter.d.ts.map +1 -0
  185. package/dist/cli/commands/log/formatter.js +261 -0
  186. package/dist/cli/commands/log/formatter.js.map +1 -0
  187. package/dist/cli/commands/log/index.d.ts +6 -0
  188. package/dist/cli/commands/log/index.d.ts.map +1 -0
  189. package/dist/cli/commands/log/index.js +398 -0
  190. package/dist/cli/commands/log/index.js.map +1 -0
  191. package/dist/cli/commands/log/parser.d.ts +20 -0
  192. package/dist/cli/commands/log/parser.d.ts.map +1 -0
  193. package/dist/cli/commands/log/parser.js +111 -0
  194. package/dist/cli/commands/log/parser.js.map +1 -0
  195. package/dist/cli/commands/log/reader.d.ts +61 -0
  196. package/dist/cli/commands/log/reader.d.ts.map +1 -0
  197. package/dist/cli/commands/log/reader.js +327 -0
  198. package/dist/cli/commands/log/reader.js.map +1 -0
  199. package/dist/cli/commands/log/types.d.ts +100 -0
  200. package/dist/cli/commands/log/types.d.ts.map +1 -0
  201. package/dist/cli/commands/log/types.js +5 -0
  202. package/dist/cli/commands/log/types.js.map +1 -0
  203. package/dist/cli/commands/setup.d.ts.map +1 -1
  204. package/dist/cli/commands/setup.js +2 -0
  205. package/dist/cli/commands/setup.js.map +1 -1
  206. package/dist/cli/commands/skill.js +1 -1
  207. package/dist/cli/commands/skill.js.map +1 -1
  208. package/dist/cli/commands/update.d.ts.map +1 -1
  209. package/dist/cli/commands/update.js +8 -0
  210. package/dist/cli/commands/update.js.map +1 -1
  211. package/dist/cli/index.js +2 -0
  212. package/dist/cli/index.js.map +1 -1
  213. package/dist/env/types.d.ts +1 -0
  214. package/dist/env/types.d.ts.map +1 -1
  215. package/dist/env/types.js.map +1 -1
  216. package/dist/providers/plugins/sso/session/SessionSyncer.d.ts +5 -0
  217. package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -1
  218. package/dist/providers/plugins/sso/session/SessionSyncer.js +102 -3
  219. package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -1
  220. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.d.ts +0 -1
  221. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.d.ts.map +1 -1
  222. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.js +25 -48
  223. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.js.map +1 -1
  224. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -1
  225. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js +8 -34
  226. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
  227. package/dist/utils/native-installer.d.ts +1 -0
  228. package/dist/utils/native-installer.d.ts.map +1 -1
  229. package/dist/utils/native-installer.js +60 -9
  230. package/dist/utils/native-installer.js.map +1 -1
  231. package/dist/utils/windows-path.d.ts +54 -0
  232. package/dist/utils/windows-path.d.ts.map +1 -0
  233. package/dist/utils/windows-path.js +347 -0
  234. package/dist/utils/windows-path.js.map +1 -0
  235. package/package.json +2 -2
  236. package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts.map +0 -1
  237. package/dist/cli/commands/assistants/generators/claude-agent-generator.js.map +0 -1
  238. package/dist/cli/commands/assistants/list.d.ts +0 -11
  239. package/dist/cli/commands/assistants/list.d.ts.map +0 -1
  240. package/dist/cli/commands/assistants/list.js +0 -323
  241. package/dist/cli/commands/assistants/list.js.map +0 -1
  242. package/dist/skills/core/SkillDiscovery.d.ts.map +0 -1
  243. package/dist/skills/core/SkillDiscovery.js.map +0 -1
  244. package/dist/skills/core/SkillManager.d.ts.map +0 -1
  245. package/dist/skills/core/SkillManager.js.map +0 -1
  246. package/dist/skills/core/types.d.ts.map +0 -1
  247. package/dist/skills/core/types.js.map +0 -1
  248. package/dist/skills/index.d.ts.map +0 -1
  249. package/dist/skills/index.js.map +0 -1
  250. package/dist/skills/utils/content-loader.d.ts.map +0 -1
  251. package/dist/skills/utils/content-loader.js.map +0 -1
  252. package/dist/skills/utils/frontmatter.d.ts.map +0 -1
  253. package/dist/skills/utils/frontmatter.js.map +0 -1
  254. package/dist/skills/utils/pattern-matcher.d.ts.map +0 -1
  255. package/dist/skills/utils/pattern-matcher.js.map +0 -1
  256. /package/dist/{skills → agents/codemie-code/skills}/core/SkillDiscovery.d.ts +0 -0
  257. /package/dist/{skills → agents/codemie-code/skills}/core/SkillManager.d.ts +0 -0
  258. /package/dist/{skills → agents/codemie-code/skills}/core/types.d.ts +0 -0
  259. /package/dist/{skills → agents/codemie-code/skills}/core/types.js +0 -0
  260. /package/dist/{skills → agents/codemie-code/skills}/index.d.ts +0 -0
  261. /package/dist/{skills → agents/codemie-code/skills}/index.js +0 -0
  262. /package/dist/{skills → agents/codemie-code/skills}/utils/content-loader.d.ts +0 -0
  263. /package/dist/{skills → agents/codemie-code/skills}/utils/frontmatter.d.ts +0 -0
  264. /package/dist/{skills → agents/codemie-code/skills}/utils/frontmatter.js +0 -0
  265. /package/dist/{skills → agents/codemie-code/skills}/utils/pattern-matcher.d.ts +0 -0
  266. /package/dist/{skills → agents/codemie-code/skills}/utils/pattern-matcher.js +0 -0
  267. /package/dist/cli/commands/assistants/{generators → setup/generators}/claude-agent-generator.d.ts +0 -0
@@ -7,6 +7,7 @@ import { AgentInstallationError } from './errors.js';
7
7
  import { logger } from './logger.js';
8
8
  import { sanitizeLogArgs, sanitizeValue } from './security.js';
9
9
  import { isValidSemanticVersion } from './version-utils.js';
10
+ import { ensureCommandInPath } from './windows-path.js';
10
11
  /**
11
12
  * Detect current platform
12
13
  * @returns Platform identifier: 'macOS' | 'windows' | 'linux'
@@ -79,7 +80,7 @@ function buildInstallerCommand(agentName, installerUrls, version, platform, inst
79
80
  * Verify installation by running the verify command
80
81
  * On Windows, retries with backoff to allow PATH updates to propagate
81
82
  *
82
- * @param verifyCommand - Command to verify (e.g., 'claude')
83
+ * @param verifyCommand - Command to verify (e.g., 'claude' or '/path/to/claude')
83
84
  * @param retries - Number of retry attempts (default: 3 on Windows, 1 on Unix)
84
85
  * @returns Installed version string or null if verification failed
85
86
  */
@@ -92,8 +93,11 @@ async function verifyInstallation(verifyCommand, retries) {
92
93
  try {
93
94
  logger.debug(`Verifying installation (attempt ${attempt}/${maxRetries})`, { command: verifyCommand });
94
95
  // Run version check command (e.g., 'claude --version')
96
+ // If verifyCommand is a path, use shell to resolve ~ and execute
97
+ const useShell = verifyCommand.includes('/') || verifyCommand.includes('\\');
95
98
  const result = await exec(verifyCommand, ['--version'], {
96
99
  timeout: 5000, // 5 second timeout for version check
100
+ shell: useShell, // Use shell for path-based commands to resolve ~
97
101
  });
98
102
  if (result.code === 0 && result.stdout) {
99
103
  // Parse version from output (usually first line, may have 'v' prefix)
@@ -114,7 +118,8 @@ async function verifyInstallation(verifyCommand, retries) {
114
118
  // Gives Windows time to update PATH without excessive wait
115
119
  if (attempt < maxRetries) {
116
120
  const delayMs = Math.min(Math.pow(2, attempt - 1) * 1000, 4000);
117
- logger.debug(`Waiting ${delayMs}ms before retry (exponential backoff)...`);
121
+ // USER FEEDBACK: Show progress during wait
122
+ logger.info(`Waiting for PATH update to propagate (${delayMs / 1000}s)...`);
118
123
  await new Promise((resolve) => setTimeout(resolve, delayMs));
119
124
  }
120
125
  }
@@ -176,23 +181,64 @@ export async function installNativeAgent(agentName, installerUrls, version, opti
176
181
  agentName,
177
182
  platform,
178
183
  });
184
+ // WINDOWS-SPECIFIC: Auto-fix PATH before verification
185
+ // Use ensureCommandInPath to automatically add command to PATH if missing
186
+ if (platform === 'windows' && options?.verifyCommand) {
187
+ logger.debug('Ensuring command is in Windows PATH', {
188
+ command: options.verifyCommand,
189
+ });
190
+ try {
191
+ const pathResult = await ensureCommandInPath(options.verifyCommand);
192
+ if (pathResult.success) {
193
+ if (pathResult.alreadyInPath) {
194
+ logger.debug('Command directory already in PATH', {
195
+ directory: pathResult.pathAdded,
196
+ });
197
+ }
198
+ else if (pathResult.pathAdded) {
199
+ logger.success(`Automatically added ${options.verifyCommand} to PATH: ${pathResult.pathAdded}`);
200
+ logger.info('PATH updated. Please restart your terminal for changes to take effect.');
201
+ }
202
+ }
203
+ else if (pathResult.error) {
204
+ // PATH fix failed, but installation succeeded
205
+ // Log warning but don't fail installation
206
+ logger.warn('Could not automatically update PATH', {
207
+ error: pathResult.error,
208
+ });
209
+ logger.info(`You may need to manually add ${options.verifyCommand} to your PATH.`);
210
+ }
211
+ }
212
+ catch (error) {
213
+ // PATH utilities failed, but don't fail installation
214
+ logger.debug('ensureCommandInPath failed', {
215
+ error: error instanceof Error ? error.message : String(error),
216
+ });
217
+ }
218
+ }
179
219
  // Verify installation if verify command provided
180
220
  let installedVersion = null;
181
- if (options?.verifyCommand) {
221
+ if (options?.verifyCommand || options?.verifyPath) {
222
+ // Prefer verifyPath (full path) over verifyCommand (PATH-based)
223
+ // This avoids PATH refresh issues on macOS/Linux
224
+ const commandToVerify = options?.verifyPath || options.verifyCommand;
182
225
  logger.debug('Verifying installation', {
183
226
  agentName,
184
- verifyCommand: options.verifyCommand,
227
+ verifyCommand: commandToVerify,
228
+ usingFullPath: !!options?.verifyPath,
185
229
  });
186
- installedVersion = await verifyInstallation(options.verifyCommand);
230
+ installedVersion = await verifyInstallation(commandToVerify);
187
231
  if (!installedVersion) {
188
232
  // Add platform-specific context for troubleshooting
189
233
  const isWindows = platform === 'windows';
190
234
  const troubleshootingHint = isWindows
191
- ? 'On Windows, you may need to restart your terminal/PowerShell/CMD to refresh PATH.'
192
- : 'Verify that the command is in your PATH.';
235
+ ? 'Restart your terminal to refresh PATH. The installation directory was automatically added to your PATH.'
236
+ : options?.verifyPath
237
+ ? `Binary exists at ${options.verifyPath} but failed to execute. Check permissions: chmod +x ${options.verifyPath}`
238
+ : 'Verify that the command is in your PATH.';
193
239
  logger.warn('Installation verification failed', {
194
240
  agentName,
195
- verifyCommand: options.verifyCommand,
241
+ verifyCommand: commandToVerify,
196
242
  platform,
197
243
  hint: troubleshootingHint,
198
244
  });
@@ -207,8 +253,13 @@ export async function installNativeAgent(agentName, installerUrls, version, opti
207
253
  // SECURITY: Sanitize output before returning
208
254
  // Prevents exposure of sensitive data in logs or UI
209
255
  const sanitizedOutput = sanitizeValue(result.stdout || result.stderr || '');
256
+ // If verification was enabled and failed, mark installation as unsuccessful
257
+ // This ensures that failed verifications are properly reported to the user
258
+ const verificationEnabled = !!options?.verifyCommand;
259
+ const verificationPassed = !!installedVersion;
260
+ const installSuccess = verificationEnabled ? verificationPassed : true;
210
261
  return {
211
- success: true,
262
+ success: installSuccess,
212
263
  installedVersion,
213
264
  output: sanitizedOutput,
214
265
  };
@@ -1 +1 @@
1
- {"version":3,"file":"native-installer.js","sourceRoot":"","sources":["../../src/utils/native-installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AA8B5D;;;GAGG;AACH,SAAS,cAAc;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IAChB,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IAClB,CAAC;SAAM,CAAC;QACP,8DAA8D;QAC9D,OAAO,OAAO,CAAC;IAChB,CAAC;AACF,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAC7B,SAAiB,EACjB,aAAoC,EACpC,OAA2B,EAC3B,QAAuC,EACvC,YAAuB;IAEvB,2DAA2D;IAC3D,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,sBAAsB,CAC/B,SAAS,EACT,iCAAiC,GAAG,EAAE,CACtC,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,oEAAoE;IACpE,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,IAAI,sBAAsB,CAC/B,SAAS,EACT,4BAA4B,OAAO,uEAAuE,CAC1G,CAAC;QACH,CAAC;IACF,CAAC;IAED,qDAAqD;IACrD,2DAA2D;IAC3D,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACnF,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,sBAAsB,CAC/B,SAAS,EACT,0BAA0B,IAAI,qBAAqB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5E,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;IAED,kCAAkC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,mEAAmE;QACnE,uDAAuD;QACvD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,OAAO,cAAc,GAAG,iCAAiC,UAAU,GAAG,QAAQ,qBAAqB,CAAC;IACrG,CAAC;SAAM,CAAC;QACP,mCAAmC;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,OAAO,cAAc,GAAG,UAAU,UAAU,GAAG,WAAW,EAAE,CAAC;IAC9D,CAAC;AACF,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,kBAAkB,CAChC,aAAqB,EACrB,OAAgB;IAEhB,2DAA2D;IAC3D,kFAAkF;IAClF,MAAM,SAAS,GAAY,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IACxD,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACJ,MAAM,CAAC,KAAK,CACX,mCAAmC,OAAO,IAAI,UAAU,GAAG,EAC3D,EAAE,OAAO,EAAE,aAAa,EAAE,CAC1B,CAAC;YAEF,uDAAuD;YACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,CAAC,EAAE;gBACvD,OAAO,EAAE,IAAI,EAAE,qCAAqC;aACpD,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACxC,sEAAsE;gBACtE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACrE,IAAI,YAAY,EAAE,CAAC;oBAClB,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE;wBAClD,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;wBACxB,OAAO;qBACP,CAAC,CAAC;oBACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CACX,qCAAqC,OAAO,SAAS,EACrD,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAClD,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,2DAA2D;QAC3D,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,0CAA0C,CAAC,CAAC;YAC3E,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAED,qBAAqB;IACrB,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE;QAClE,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,UAAU;KACpB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,SAAiB,EACjB,aAAoC,EACpC,OAAgB,EAChB,OAA8B;IAE9B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,2BAA2B;IAEvE,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE;QAClD,SAAS;QACT,QAAQ;QACR,OAAO,EAAE,OAAO,IAAI,QAAQ;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC;QACJ,0BAA0B;QAC1B,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAE1G,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC3C,SAAS;YACT,QAAQ;YACR,sDAAsD;SACtD,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE;YACtC,OAAO;YACP,GAAG,EAAE,OAAO,EAAE,GAAG;YACjB,KAAK,EAAE,IAAI,EAAE,4CAA4C;SACzD,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,8DAA8D;YAC9D,+DAA+D;YAC/D,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,IAAI,sBAAsB,CAC/B,SAAS,EACT,8BAA8B,MAAM,CAAC,IAAI,aAAa,eAAe,EAAE,CACvE,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;YAChD,SAAS;YACT,QAAQ;SACR,CAAC,CAAC;QAEH,iDAAiD;QACjD,IAAI,gBAAgB,GAAkB,IAAI,CAAC;QAC3C,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;gBACtC,SAAS;gBACT,aAAa,EAAE,OAAO,CAAC,aAAa;aACpC,CAAC,CAAC;YAEH,gBAAgB,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAEnE,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvB,oDAAoD;gBACpD,MAAM,SAAS,GAAG,QAAQ,KAAK,SAAS,CAAC;gBACzC,MAAM,mBAAmB,GAAG,SAAS;oBACpC,CAAC,CAAC,mFAAmF;oBACrF,CAAC,CAAC,0CAA0C,CAAC;gBAE9C,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;oBAC/C,SAAS;oBACT,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,QAAQ;oBACR,IAAI,EAAE,mBAAmB;iBACzB,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;oBACrC,SAAS;oBACT,gBAAgB;iBAChB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,6CAA6C;QAC7C,oDAAoD;QACpD,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAE5E,OAAO;YACN,OAAO,EAAE,IAAI;YACb,gBAAgB;YAChB,MAAM,EAAE,eAAyB;SACjC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,qDAAqD;QACrD,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;YAC7C,MAAM,KAAK,CAAC;QACb,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,sBAAsB,CAC/B,SAAS,EACT,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9E,CAAC;IACH,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"native-installer.js","sourceRoot":"","sources":["../../src/utils/native-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Windows PATH management utilities
3
+ * Handles adding CLI tools to Windows PATH environment variable
4
+ */
5
+ /**
6
+ * Result of PATH update operation
7
+ */
8
+ export interface PathUpdateResult {
9
+ success: boolean;
10
+ pathAdded?: string;
11
+ error?: string;
12
+ requiresRestart: boolean;
13
+ alreadyInPath?: boolean;
14
+ }
15
+ /**
16
+ * Find the installation directory of a command on Windows
17
+ * First tries `where` command, then falls back to checking common locations
18
+ *
19
+ * @param command - Command name (e.g., 'claude')
20
+ * @returns Full path to the executable directory or null if not found
21
+ */
22
+ export declare function findCommandDirectory(command: string): Promise<string | null>;
23
+ /**
24
+ * Check if a directory is in the user's PATH environment variable
25
+ * Queries Windows registry for current PATH value
26
+ *
27
+ * @param directory - Directory path to check
28
+ * @returns true if directory is in PATH
29
+ */
30
+ export declare function isInUserPath(directory: string): Promise<boolean>;
31
+ /**
32
+ * Add a directory to the user's PATH environment variable on Windows
33
+ * Uses `setx` command to update the registry
34
+ *
35
+ * IMPORTANT: Changes take effect in NEW sessions only. Current session is unaffected.
36
+ *
37
+ * @param directory - Directory path to add to PATH
38
+ * @returns Result with success status and whether restart is required
39
+ */
40
+ export declare function addToUserPath(directory: string): Promise<PathUpdateResult>;
41
+ /**
42
+ * Attempt to fix PATH for a command that was installed but is not in PATH
43
+ *
44
+ * Workflow:
45
+ * 1. Find where the command was installed (using `where` on the installer's session)
46
+ * 2. Check if that directory is already in user PATH
47
+ * 3. If not, add it using `setx`
48
+ * 4. Return result with instructions for user
49
+ *
50
+ * @param command - Command name (e.g., 'claude')
51
+ * @returns Result with success status and whether restart is required
52
+ */
53
+ export declare function ensureCommandInPath(command: string): Promise<PathUpdateResult>;
54
+ //# sourceMappingURL=windows-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-path.d.ts","sourceRoot":"","sources":["../../src/utils/windows-path.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AA4FD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgClF;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2CtE;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqHhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuDpF"}
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Windows PATH management utilities
3
+ * Handles adding CLI tools to Windows PATH environment variable
4
+ */
5
+ import { win32 as pathWin32 } from 'path';
6
+ import { existsSync } from 'fs';
7
+ import { exec } from './exec.js';
8
+ import { logger } from './logger.js';
9
+ import { sanitizeLogArgs } from './security.js';
10
+ /**
11
+ * Get Windows System32 directory path
12
+ * Defaults to C:\Windows\System32 if SystemRoot env var not set
13
+ */
14
+ const getWindowsSystem32 = () => {
15
+ return process.env.SystemRoot
16
+ ? `${process.env.SystemRoot}\\System32`
17
+ : 'C:\\Windows\\System32';
18
+ };
19
+ /**
20
+ * Validate directory path for security
21
+ * Ensures path is absolute and doesn't contain shell metacharacters
22
+ *
23
+ * @param directory - Directory path to validate
24
+ * @returns Normalized path if valid, null if invalid
25
+ */
26
+ function validateDirectoryPath(directory) {
27
+ try {
28
+ // Normalize path (resolve .., ., etc.)
29
+ const normalizedPath = pathWin32.normalize(directory);
30
+ // Must be absolute path
31
+ if (!pathWin32.isAbsolute(normalizedPath)) {
32
+ logger.debug('Directory path is not absolute', { directory });
33
+ return null;
34
+ }
35
+ // SECURITY: Check for shell metacharacters that could enable command injection
36
+ // Windows shell special chars: & | < > ^ ( ) " ; , \n \r
37
+ const dangerousChars = /[&|<>^();,\n\r"]/;
38
+ if (dangerousChars.test(normalizedPath)) {
39
+ logger.warn('Directory path contains dangerous shell metacharacters', {
40
+ directory: normalizedPath
41
+ });
42
+ return null;
43
+ }
44
+ return normalizedPath;
45
+ }
46
+ catch (error) {
47
+ logger.debug('Failed to validate directory path', ...sanitizeLogArgs({ directory, error }));
48
+ return null;
49
+ }
50
+ }
51
+ /**
52
+ * Check common installation directories for a command
53
+ * Checks standard Windows installation locations without relying on PATH
54
+ *
55
+ * @param command - Command name (e.g., 'claude')
56
+ * @returns Full path to the executable directory or null if not found
57
+ */
58
+ function checkCommonInstallLocations(command) {
59
+ const userProfile = process.env.USERPROFILE || '';
60
+ const programFiles = process.env.ProgramFiles || 'C:\\Program Files';
61
+ const programFilesX86 = process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)';
62
+ const localAppData = process.env.LOCALAPPDATA || `${userProfile}\\AppData\\Local`;
63
+ // Common installation locations for CLI tools on Windows
64
+ const commonLocations = [
65
+ // XDG-style user installation (Claude's preferred location)
66
+ `${userProfile}\\.local\\bin`,
67
+ // AppData Local
68
+ `${localAppData}\\Programs\\${command}`,
69
+ `${localAppData}\\${command}`,
70
+ `${localAppData}\\bin`,
71
+ // Program Files
72
+ `${programFiles}\\${command}`,
73
+ `${programFilesX86}\\${command}`,
74
+ // User-specific npm global
75
+ `${process.env.APPDATA || userProfile}\\npm`,
76
+ ];
77
+ const exeName = `${command}.exe`;
78
+ for (const dir of commonLocations) {
79
+ try {
80
+ const exePath = `${dir}\\${exeName}`;
81
+ if (existsSync(exePath)) {
82
+ logger.debug('Found command in common location', { command, directory: dir });
83
+ return dir;
84
+ }
85
+ }
86
+ catch {
87
+ // Continue checking other locations
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ /**
93
+ * Find the installation directory of a command on Windows
94
+ * First tries `where` command, then falls back to checking common locations
95
+ *
96
+ * @param command - Command name (e.g., 'claude')
97
+ * @returns Full path to the executable directory or null if not found
98
+ */
99
+ export async function findCommandDirectory(command) {
100
+ if (process.platform !== 'win32') {
101
+ return null;
102
+ }
103
+ try {
104
+ // SECURITY: Use full path to where.exe to avoid PATH hijacking
105
+ const wherePath = `${getWindowsSystem32()}\\where.exe`;
106
+ const result = await exec(wherePath, [command], { timeout: 5000 });
107
+ if (result.code === 0 && result.stdout) {
108
+ // Parse first line (where command may return multiple results)
109
+ const executablePath = result.stdout.trim().split('\n')[0].trim();
110
+ // Extract directory from full path
111
+ // Example: C:\Users\Username\AppData\Local\Programs\Claude\claude.exe
112
+ // -> C:\Users\Username\AppData\Local\Programs\Claude
113
+ const lastSlashIndex = executablePath.lastIndexOf('\\');
114
+ if (lastSlashIndex !== -1) {
115
+ const directory = executablePath.substring(0, lastSlashIndex);
116
+ logger.debug('Found command via where.exe', { command, directory });
117
+ return directory;
118
+ }
119
+ }
120
+ }
121
+ catch (error) {
122
+ logger.debug('where.exe failed, trying common locations', ...sanitizeLogArgs({ command, error }));
123
+ }
124
+ // Fallback: Check common installation directories
125
+ // This is crucial for newly installed commands that aren't in PATH yet
126
+ logger.debug('Checking common installation locations', { command });
127
+ return checkCommonInstallLocations(command);
128
+ }
129
+ /**
130
+ * Check if a directory is in the user's PATH environment variable
131
+ * Queries Windows registry for current PATH value
132
+ *
133
+ * @param directory - Directory path to check
134
+ * @returns true if directory is in PATH
135
+ */
136
+ export async function isInUserPath(directory) {
137
+ if (process.platform !== 'win32') {
138
+ return false;
139
+ }
140
+ // SECURITY: Validate and normalize directory path
141
+ const normalizedDirectory = validateDirectoryPath(directory);
142
+ if (!normalizedDirectory) {
143
+ logger.debug('Invalid directory path for PATH check', { directory });
144
+ return false;
145
+ }
146
+ try {
147
+ // SECURITY: Use full path to reg.exe to avoid PATH hijacking
148
+ const regPath = `${getWindowsSystem32()}\\reg.exe`;
149
+ const result = await exec(regPath, [
150
+ 'query',
151
+ 'HKCU\\Environment',
152
+ '/v',
153
+ 'PATH'
154
+ ], { timeout: 5000 });
155
+ if (result.code === 0 && result.stdout) {
156
+ // Parse registry output
157
+ // Format: PATH REG_EXPAND_SZ C:\path1;C:\path2;...
158
+ const pathMatch = result.stdout.match(/PATH\s+REG_(?:EXPAND_)?SZ\s+(.+)/i);
159
+ if (pathMatch) {
160
+ const pathValue = pathMatch[1].trim();
161
+ // Normalize paths for comparison (case-insensitive, handle trailing slashes)
162
+ const dirForComparison = normalizedDirectory.toLowerCase().replace(/\\+$/, '');
163
+ const pathEntries = pathValue.split(';').map(p => pathWin32.normalize(p.trim()).toLowerCase().replace(/\\+$/, ''));
164
+ return pathEntries.includes(dirForComparison);
165
+ }
166
+ }
167
+ }
168
+ catch (error) {
169
+ logger.debug('Failed to check user PATH', ...sanitizeLogArgs({ directory, error }));
170
+ }
171
+ return false;
172
+ }
173
+ /**
174
+ * Add a directory to the user's PATH environment variable on Windows
175
+ * Uses `setx` command to update the registry
176
+ *
177
+ * IMPORTANT: Changes take effect in NEW sessions only. Current session is unaffected.
178
+ *
179
+ * @param directory - Directory path to add to PATH
180
+ * @returns Result with success status and whether restart is required
181
+ */
182
+ export async function addToUserPath(directory) {
183
+ if (process.platform !== 'win32') {
184
+ return {
185
+ success: false,
186
+ error: 'Not Windows platform',
187
+ requiresRestart: false,
188
+ alreadyInPath: false
189
+ };
190
+ }
191
+ // SECURITY: Validate and normalize directory path
192
+ const normalizedDirectory = validateDirectoryPath(directory);
193
+ if (!normalizedDirectory) {
194
+ return {
195
+ success: false,
196
+ error: 'Invalid directory path: must be absolute and contain no shell metacharacters',
197
+ requiresRestart: false,
198
+ alreadyInPath: false
199
+ };
200
+ }
201
+ try {
202
+ logger.debug('Adding directory to user PATH', { directory: normalizedDirectory });
203
+ // Get current user PATH
204
+ // SECURITY: Use full path to reg.exe to avoid PATH hijacking
205
+ const regPath = `${getWindowsSystem32()}\\reg.exe`;
206
+ const queryResult = await exec(regPath, [
207
+ 'query',
208
+ 'HKCU\\Environment',
209
+ '/v',
210
+ 'PATH'
211
+ ], { timeout: 5000 });
212
+ let currentPath = '';
213
+ if (queryResult.code === 0 && queryResult.stdout) {
214
+ const pathMatch = queryResult.stdout.match(/PATH\s+REG_(?:EXPAND_)?SZ\s+(.+)/i);
215
+ if (pathMatch) {
216
+ currentPath = pathMatch[1].trim();
217
+ }
218
+ }
219
+ // Check for duplicates before adding
220
+ const dirForComparison = normalizedDirectory.toLowerCase().replace(/\\+$/, '');
221
+ const pathEntries = currentPath.split(';').map(p => pathWin32.normalize(p.trim()).toLowerCase().replace(/\\+$/, ''));
222
+ if (pathEntries.includes(dirForComparison)) {
223
+ logger.debug('Directory already in PATH, skipping', { directory: normalizedDirectory });
224
+ return {
225
+ success: true,
226
+ pathAdded: normalizedDirectory,
227
+ requiresRestart: true,
228
+ alreadyInPath: true
229
+ };
230
+ }
231
+ // Append new directory
232
+ const newPath = currentPath ? `${currentPath};${normalizedDirectory}` : normalizedDirectory;
233
+ // SECURITY: Check setx 1024 character limit
234
+ if (newPath.length > 1024) {
235
+ logger.warn('PATH exceeds setx 1024 character limit', {
236
+ currentLength: newPath.length,
237
+ limit: 1024
238
+ });
239
+ return {
240
+ success: false,
241
+ error: `PATH too long (${newPath.length} chars, limit 1024). Must update PATH manually via Registry Editor or System Properties.`,
242
+ requiresRestart: false,
243
+ alreadyInPath: false
244
+ };
245
+ }
246
+ // Update PATH using setx
247
+ // SECURITY: Use full path to setx.exe to avoid PATH hijacking
248
+ const setxPath = `${getWindowsSystem32()}\\setx.exe`;
249
+ const setxResult = await exec(setxPath, ['PATH', newPath], { timeout: 10000 });
250
+ if (setxResult.code === 0) {
251
+ logger.debug('Successfully added to PATH', { directory: normalizedDirectory });
252
+ return {
253
+ success: true,
254
+ pathAdded: normalizedDirectory,
255
+ requiresRestart: true,
256
+ alreadyInPath: false
257
+ };
258
+ }
259
+ else {
260
+ const errorMsg = setxResult.stderr || setxResult.stdout || 'Unknown error';
261
+ logger.warn('Failed to update PATH with setx', {
262
+ directory: normalizedDirectory,
263
+ error: errorMsg
264
+ });
265
+ return {
266
+ success: false,
267
+ error: `setx failed: ${errorMsg}`,
268
+ requiresRestart: false,
269
+ alreadyInPath: false
270
+ };
271
+ }
272
+ }
273
+ catch (error) {
274
+ const errorMsg = error instanceof Error ? error.message : String(error);
275
+ logger.error('Failed to add to user PATH', ...sanitizeLogArgs({
276
+ directory: normalizedDirectory,
277
+ error: errorMsg
278
+ }));
279
+ return {
280
+ success: false,
281
+ error: errorMsg,
282
+ requiresRestart: false,
283
+ alreadyInPath: false
284
+ };
285
+ }
286
+ }
287
+ /**
288
+ * Attempt to fix PATH for a command that was installed but is not in PATH
289
+ *
290
+ * Workflow:
291
+ * 1. Find where the command was installed (using `where` on the installer's session)
292
+ * 2. Check if that directory is already in user PATH
293
+ * 3. If not, add it using `setx`
294
+ * 4. Return result with instructions for user
295
+ *
296
+ * @param command - Command name (e.g., 'claude')
297
+ * @returns Result with success status and whether restart is required
298
+ */
299
+ export async function ensureCommandInPath(command) {
300
+ if (process.platform !== 'win32') {
301
+ return {
302
+ success: false,
303
+ error: 'Not Windows platform',
304
+ requiresRestart: false,
305
+ alreadyInPath: false
306
+ };
307
+ }
308
+ logger.debug('Ensuring command is in PATH', { command });
309
+ // Step 1: Try to find where the command was installed
310
+ // This works if the installer added it to the SYSTEM path or current session
311
+ const installDir = await findCommandDirectory(command);
312
+ if (!installDir) {
313
+ // Command not found anywhere, installation may have failed
314
+ logger.warn('Command not found in any PATH', { command });
315
+ return {
316
+ success: false,
317
+ error: `Could not locate ${command} installation directory`,
318
+ requiresRestart: false,
319
+ alreadyInPath: false
320
+ };
321
+ }
322
+ logger.debug('Found command installation directory', {
323
+ command,
324
+ directory: installDir
325
+ });
326
+ // Step 2: Check if already in user PATH
327
+ const alreadyInPath = await isInUserPath(installDir);
328
+ if (alreadyInPath) {
329
+ logger.debug('Command directory already in user PATH', {
330
+ command,
331
+ directory: installDir
332
+ });
333
+ return {
334
+ success: true,
335
+ pathAdded: installDir,
336
+ requiresRestart: true, // Still need restart even if already in registry
337
+ alreadyInPath: true
338
+ };
339
+ }
340
+ // Step 3: Add to PATH
341
+ logger.info('Adding command to user PATH', {
342
+ command,
343
+ directory: installDir
344
+ });
345
+ return await addToUserPath(installDir);
346
+ }
347
+ //# sourceMappingURL=windows-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-path.js","sourceRoot":"","sources":["../../src/utils/windows-path.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemieai/code",
3
- "version": "0.0.35",
3
+ "version": "0.0.37",
4
4
  "description": "Unified AI coding assistant CLI - Manage Claude Code, Gemini & custom agents. Multi-provider support (OpenAI, Azure, LiteLLM, SSO). Built-in LangGraph agent with file operations & git integration.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -112,7 +112,7 @@
112
112
  "@langchain/openai": "^1.1.0",
113
113
  "chalk": "^5.3.0",
114
114
  "cli-table3": "^0.6.5",
115
- "codemie-sdk": "^0.1.318",
115
+ "codemie-sdk": "^0.1.330",
116
116
  "commander": "^11.1.0",
117
117
  "cors": "^2.8.5",
118
118
  "dedent": "^1.7.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-agent-generator.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/assistants/generators/claude-agent-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAWzE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAmCxE;AAWD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhF;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe1E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-agent-generator.js","sourceRoot":"","sources":["../../../../../src/cli/commands/assistants/generators/claude-agent-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,SAAoB;IAC/D,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,iBAAiB,SAAS,CAAC,IAAI,EAAE,CAAC;IAE/E,OAAO,MAAM,CAAC;;YAEJ,SAAS,CAAC,IAAI;mBACP,WAAW;;;;GAI3B,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,SAAoB;IAC9D,MAAM,QAAQ,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,iBAAiB,SAAS,CAAC,IAAI,EAAE,CAAC;IAE/E,OAAO,MAAM,CAAC;MACV,QAAQ;;QAEN,SAAS,CAAC,IAAI;;MAEhB,WAAW;;;;;;;;;kCASiB,SAAS,CAAC,EAAE;;;;+GAIiE,SAAS,CAAC,IAAI;;;;;;;;+BAQ9F,SAAS,CAAC,EAAE;;;;GAIxC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAoB;IAC/D,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAK,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEnD,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;QAC1C,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,aAAa,EAAE,SAAS,CAAC,IAAI;QAC7B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,YAAY;KACb,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAErD,iCAAiC;IACjC,MAAM,OAAO,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEnD,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;QACzC,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,YAAY;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAY;IACzD,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;YAC3C,IAAI;YACJ,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE;YAC7D,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * List Assistants Command
3
- *
4
- * Unified command to view, register, and unregister CodeMie assistants
5
- */
6
- import { Command } from 'commander';
7
- /**
8
- * Create assistants list command
9
- */
10
- export declare function createAssistantsListCommand(): Command;
11
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/assistants/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAsBrD"}