@codemieai/code 0.0.2 → 0.0.4

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 (360) hide show
  1. package/README.md +357 -719
  2. package/bin/codemie-claude.js +145 -0
  3. package/bin/codemie-code.js +128 -15
  4. package/bin/codemie-codex.js +137 -0
  5. package/bin/codemie.js +1 -1
  6. package/dist/agents/adapters/claude-code.d.ts +7 -2
  7. package/dist/agents/adapters/claude-code.d.ts.map +1 -1
  8. package/dist/agents/adapters/claude-code.js +94 -58
  9. package/dist/agents/adapters/claude-code.js.map +1 -1
  10. package/dist/agents/adapters/codemie-code.d.ts +11 -2
  11. package/dist/agents/adapters/codemie-code.d.ts.map +1 -1
  12. package/dist/agents/adapters/codemie-code.js +93 -25
  13. package/dist/agents/adapters/codemie-code.js.map +1 -1
  14. package/dist/agents/adapters/codex.d.ts +7 -2
  15. package/dist/agents/adapters/codex.d.ts.map +1 -1
  16. package/dist/agents/adapters/codex.js +104 -39
  17. package/dist/agents/adapters/codex.js.map +1 -1
  18. package/dist/agents/codemie-code/agent.d.ts +89 -0
  19. package/dist/agents/codemie-code/agent.d.ts.map +1 -0
  20. package/dist/agents/codemie-code/agent.js +689 -0
  21. package/dist/agents/codemie-code/agent.js.map +1 -0
  22. package/dist/agents/codemie-code/config.d.ts +40 -0
  23. package/dist/agents/codemie-code/config.d.ts.map +1 -0
  24. package/dist/agents/codemie-code/config.js +278 -0
  25. package/dist/agents/codemie-code/config.js.map +1 -0
  26. package/dist/agents/codemie-code/filters.d.ts +91 -0
  27. package/dist/agents/codemie-code/filters.d.ts.map +1 -0
  28. package/dist/agents/codemie-code/filters.js +328 -0
  29. package/dist/agents/codemie-code/filters.js.map +1 -0
  30. package/dist/agents/codemie-code/index.d.ts +92 -0
  31. package/dist/agents/codemie-code/index.d.ts.map +1 -0
  32. package/dist/agents/codemie-code/index.js +327 -0
  33. package/dist/agents/codemie-code/index.js.map +1 -0
  34. package/dist/agents/codemie-code/modes/contextAwarePlanning.d.ts +87 -0
  35. package/dist/agents/codemie-code/modes/contextAwarePlanning.d.ts.map +1 -0
  36. package/dist/agents/codemie-code/modes/contextAwarePlanning.js +957 -0
  37. package/dist/agents/codemie-code/modes/contextAwarePlanning.js.map +1 -0
  38. package/dist/agents/codemie-code/modes/planMode.d.ts +116 -0
  39. package/dist/agents/codemie-code/modes/planMode.d.ts.map +1 -0
  40. package/dist/agents/codemie-code/modes/planMode.js +537 -0
  41. package/dist/agents/codemie-code/modes/planMode.js.map +1 -0
  42. package/dist/agents/codemie-code/prompts.d.ts +40 -0
  43. package/dist/agents/codemie-code/prompts.d.ts.map +1 -0
  44. package/dist/agents/codemie-code/prompts.js +160 -0
  45. package/dist/agents/codemie-code/prompts.js.map +1 -0
  46. package/dist/agents/codemie-code/storage/todoStorage.d.ts +78 -0
  47. package/dist/agents/codemie-code/storage/todoStorage.d.ts.map +1 -0
  48. package/dist/agents/codemie-code/storage/todoStorage.js +225 -0
  49. package/dist/agents/codemie-code/storage/todoStorage.js.map +1 -0
  50. package/dist/agents/codemie-code/tokenUtils.d.ts +108 -0
  51. package/dist/agents/codemie-code/tokenUtils.d.ts.map +1 -0
  52. package/dist/agents/codemie-code/tokenUtils.js +220 -0
  53. package/dist/agents/codemie-code/tokenUtils.js.map +1 -0
  54. package/dist/agents/codemie-code/toolMetadata.d.ts +15 -0
  55. package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -0
  56. package/dist/agents/codemie-code/toolMetadata.js +315 -0
  57. package/dist/agents/codemie-code/toolMetadata.js.map +1 -0
  58. package/dist/agents/codemie-code/tools/index.d.ts +45 -0
  59. package/dist/agents/codemie-code/tools/index.d.ts.map +1 -0
  60. package/dist/agents/codemie-code/tools/index.js +407 -0
  61. package/dist/agents/codemie-code/tools/index.js.map +1 -0
  62. package/dist/agents/codemie-code/tools/planning.d.ts +53 -0
  63. package/dist/agents/codemie-code/tools/planning.d.ts.map +1 -0
  64. package/dist/agents/codemie-code/tools/planning.js +224 -0
  65. package/dist/agents/codemie-code/tools/planning.js.map +1 -0
  66. package/dist/agents/codemie-code/types.d.ts +418 -0
  67. package/dist/agents/codemie-code/types.d.ts.map +1 -0
  68. package/dist/agents/codemie-code/types.js +35 -0
  69. package/dist/agents/codemie-code/types.js.map +1 -0
  70. package/dist/agents/codemie-code/ui/progressTracker.d.ts +125 -0
  71. package/dist/agents/codemie-code/ui/progressTracker.d.ts.map +1 -0
  72. package/dist/agents/codemie-code/ui/progressTracker.js +343 -0
  73. package/dist/agents/codemie-code/ui/progressTracker.js.map +1 -0
  74. package/dist/agents/codemie-code/ui/todoPanel.d.ts +112 -0
  75. package/dist/agents/codemie-code/ui/todoPanel.d.ts.map +1 -0
  76. package/dist/agents/codemie-code/ui/todoPanel.js +318 -0
  77. package/dist/agents/codemie-code/ui/todoPanel.js.map +1 -0
  78. package/dist/agents/codemie-code/ui.d.ts +179 -0
  79. package/dist/agents/codemie-code/ui.d.ts.map +1 -0
  80. package/dist/agents/codemie-code/ui.js +1408 -0
  81. package/dist/agents/codemie-code/ui.js.map +1 -0
  82. package/dist/agents/codemie-code/utils/progressionEnforcer.d.ts +87 -0
  83. package/dist/agents/codemie-code/utils/progressionEnforcer.d.ts.map +1 -0
  84. package/dist/agents/codemie-code/utils/progressionEnforcer.js +293 -0
  85. package/dist/agents/codemie-code/utils/progressionEnforcer.js.map +1 -0
  86. package/dist/agents/codemie-code/utils/todoParser.d.ts +41 -0
  87. package/dist/agents/codemie-code/utils/todoParser.d.ts.map +1 -0
  88. package/dist/agents/codemie-code/utils/todoParser.js +305 -0
  89. package/dist/agents/codemie-code/utils/todoParser.js.map +1 -0
  90. package/dist/agents/codemie-code/utils/todoValidator.d.ts +65 -0
  91. package/dist/agents/codemie-code/utils/todoValidator.d.ts.map +1 -0
  92. package/dist/agents/codemie-code/utils/todoValidator.js +249 -0
  93. package/dist/agents/codemie-code/utils/todoValidator.js.map +1 -0
  94. package/dist/agents/codemie-code/validators/planValidator.d.ts +94 -0
  95. package/dist/agents/codemie-code/validators/planValidator.d.ts.map +1 -0
  96. package/dist/agents/codemie-code/validators/planValidator.js +281 -0
  97. package/dist/agents/codemie-code/validators/planValidator.js.map +1 -0
  98. package/dist/agents/registry.d.ts +1 -1
  99. package/dist/agents/registry.d.ts.map +1 -1
  100. package/dist/agents/registry.js +11 -15
  101. package/dist/agents/registry.js.map +1 -1
  102. package/dist/cli/commands/auth.d.ts +3 -0
  103. package/dist/cli/commands/auth.d.ts.map +1 -0
  104. package/dist/cli/commands/auth.js +170 -0
  105. package/dist/cli/commands/auth.js.map +1 -0
  106. package/dist/cli/commands/config.d.ts +3 -0
  107. package/dist/cli/commands/config.d.ts.map +1 -0
  108. package/dist/cli/commands/config.js +350 -0
  109. package/dist/cli/commands/config.js.map +1 -0
  110. package/dist/cli/commands/doctor.d.ts.map +1 -1
  111. package/dist/cli/commands/doctor.js +308 -71
  112. package/dist/cli/commands/doctor.js.map +1 -1
  113. package/dist/cli/commands/env.d.ts +3 -0
  114. package/dist/cli/commands/env.d.ts.map +1 -0
  115. package/dist/cli/commands/env.js +19 -0
  116. package/dist/cli/commands/env.js.map +1 -0
  117. package/dist/cli/commands/install.d.ts.map +1 -1
  118. package/dist/cli/commands/install.js +28 -33
  119. package/dist/cli/commands/install.js.map +1 -1
  120. package/dist/cli/commands/list.js +18 -24
  121. package/dist/cli/commands/list.js.map +1 -1
  122. package/dist/cli/commands/run.d.ts.map +1 -1
  123. package/dist/cli/commands/run.js +297 -31
  124. package/dist/cli/commands/run.js.map +1 -1
  125. package/dist/cli/commands/setup.d.ts +3 -0
  126. package/dist/cli/commands/setup.d.ts.map +1 -0
  127. package/dist/cli/commands/setup.js +523 -0
  128. package/dist/cli/commands/setup.js.map +1 -0
  129. package/dist/cli/commands/tools.d.ts +6 -0
  130. package/dist/cli/commands/tools.d.ts.map +1 -0
  131. package/dist/cli/commands/tools.js +244 -0
  132. package/dist/cli/commands/tools.js.map +1 -0
  133. package/dist/cli/commands/uninstall.js +24 -30
  134. package/dist/cli/commands/uninstall.js.map +1 -1
  135. package/dist/cli/commands/version.d.ts.map +1 -1
  136. package/dist/cli/commands/version.js +11 -16
  137. package/dist/cli/commands/version.js.map +1 -1
  138. package/dist/cli/commands/workflow.d.ts +6 -0
  139. package/dist/cli/commands/workflow.d.ts.map +1 -0
  140. package/dist/cli/commands/workflow.js +424 -0
  141. package/dist/cli/commands/workflow.js.map +1 -0
  142. package/dist/cli/index.js +85 -35
  143. package/dist/cli/index.js.map +1 -1
  144. package/dist/clients/adapters/github.d.ts +17 -0
  145. package/dist/clients/adapters/github.d.ts.map +1 -0
  146. package/dist/clients/adapters/github.js +150 -0
  147. package/dist/clients/adapters/github.js.map +1 -0
  148. package/dist/clients/adapters/gitlab.d.ts +17 -0
  149. package/dist/clients/adapters/gitlab.d.ts.map +1 -0
  150. package/dist/clients/adapters/gitlab.js +147 -0
  151. package/dist/clients/adapters/gitlab.js.map +1 -0
  152. package/dist/clients/registry.d.ts +20 -0
  153. package/dist/clients/registry.d.ts.map +1 -0
  154. package/dist/clients/registry.js +27 -0
  155. package/dist/clients/registry.js.map +1 -0
  156. package/dist/env/manager.js +9 -46
  157. package/dist/env/manager.js.map +1 -1
  158. package/dist/index.d.ts +6 -13
  159. package/dist/index.d.ts.map +1 -1
  160. package/dist/index.js +6 -43
  161. package/dist/index.js.map +1 -1
  162. package/dist/tools/detector.d.ts +33 -0
  163. package/dist/tools/detector.d.ts.map +1 -0
  164. package/dist/tools/detector.js +145 -0
  165. package/dist/tools/detector.js.map +1 -0
  166. package/dist/tools/index.d.ts +8 -0
  167. package/dist/tools/index.d.ts.map +1 -0
  168. package/dist/tools/index.js +8 -0
  169. package/dist/tools/index.js.map +1 -0
  170. package/dist/tools/manager.d.ts +21 -0
  171. package/dist/tools/manager.d.ts.map +1 -0
  172. package/dist/tools/manager.js +104 -0
  173. package/dist/tools/manager.js.map +1 -0
  174. package/dist/tools/registry.d.ts +8 -0
  175. package/dist/tools/registry.d.ts.map +1 -0
  176. package/dist/tools/registry.js +36 -0
  177. package/dist/tools/registry.js.map +1 -0
  178. package/dist/tools/types.d.ts +41 -0
  179. package/dist/tools/types.d.ts.map +1 -0
  180. package/dist/tools/types.js +5 -0
  181. package/dist/tools/types.js.map +1 -0
  182. package/dist/types/sso.d.ts +42 -0
  183. package/dist/types/sso.d.ts.map +1 -0
  184. package/dist/types/sso.js +2 -0
  185. package/dist/types/sso.js.map +1 -0
  186. package/dist/utils/agent-compatibility.d.ts +32 -0
  187. package/dist/utils/agent-compatibility.d.ts.map +1 -0
  188. package/dist/utils/agent-compatibility.js +140 -0
  189. package/dist/utils/agent-compatibility.js.map +1 -0
  190. package/dist/utils/async-tips.d.ts.map +1 -1
  191. package/dist/utils/async-tips.js +16 -55
  192. package/dist/utils/async-tips.js.map +1 -1
  193. package/dist/utils/clipboard.d.ts +16 -0
  194. package/dist/utils/clipboard.d.ts.map +1 -0
  195. package/dist/utils/clipboard.js +179 -0
  196. package/dist/utils/clipboard.js.map +1 -0
  197. package/dist/utils/codemie-integration-validator.d.ts +17 -0
  198. package/dist/utils/codemie-integration-validator.d.ts.map +1 -0
  199. package/dist/utils/codemie-integration-validator.js +105 -0
  200. package/dist/utils/codemie-integration-validator.js.map +1 -0
  201. package/dist/utils/codemie-model-fetcher.d.ts +11 -0
  202. package/dist/utils/codemie-model-fetcher.d.ts.map +1 -0
  203. package/dist/utils/codemie-model-fetcher.js +242 -0
  204. package/dist/utils/codemie-model-fetcher.js.map +1 -0
  205. package/dist/utils/config-loader.d.ts +118 -0
  206. package/dist/utils/config-loader.d.ts.map +1 -0
  207. package/dist/utils/config-loader.js +397 -0
  208. package/dist/utils/config-loader.js.map +1 -0
  209. package/dist/utils/credential-store.d.ts +16 -0
  210. package/dist/utils/credential-store.d.ts.map +1 -0
  211. package/dist/utils/credential-store.js +109 -0
  212. package/dist/utils/credential-store.js.map +1 -0
  213. package/dist/utils/dirname.d.ts +7 -0
  214. package/dist/utils/dirname.d.ts.map +1 -0
  215. package/dist/utils/dirname.js +11 -0
  216. package/dist/utils/dirname.js.map +1 -0
  217. package/dist/utils/errors.js +7 -17
  218. package/dist/utils/errors.js.map +1 -1
  219. package/dist/utils/exec.js +3 -6
  220. package/dist/utils/exec.js.map +1 -1
  221. package/dist/utils/first-time.d.ts +34 -0
  222. package/dist/utils/first-time.d.ts.map +1 -0
  223. package/dist/utils/first-time.js +226 -0
  224. package/dist/utils/first-time.js.map +1 -0
  225. package/dist/utils/health-checker.d.ts +20 -0
  226. package/dist/utils/health-checker.d.ts.map +1 -0
  227. package/dist/utils/health-checker.js +172 -0
  228. package/dist/utils/health-checker.js.map +1 -0
  229. package/dist/utils/logger.js +12 -18
  230. package/dist/utils/logger.js.map +1 -1
  231. package/dist/utils/model-fetcher.d.ts +21 -0
  232. package/dist/utils/model-fetcher.d.ts.map +1 -0
  233. package/dist/utils/model-fetcher.js +150 -0
  234. package/dist/utils/model-fetcher.js.map +1 -0
  235. package/dist/utils/sso-auth.d.ts +15 -0
  236. package/dist/utils/sso-auth.d.ts.map +1 -0
  237. package/dist/utils/sso-auth.js +207 -0
  238. package/dist/utils/sso-auth.js.map +1 -0
  239. package/dist/utils/sso-gateway.d.ts +47 -0
  240. package/dist/utils/sso-gateway.d.ts.map +1 -0
  241. package/dist/utils/sso-gateway.js +298 -0
  242. package/dist/utils/sso-gateway.js.map +1 -0
  243. package/dist/utils/tips.d.ts.map +1 -1
  244. package/dist/utils/tips.js +13 -52
  245. package/dist/utils/tips.js.map +1 -1
  246. package/dist/workflows/detector.d.ts +37 -0
  247. package/dist/workflows/detector.d.ts.map +1 -0
  248. package/dist/workflows/detector.js +160 -0
  249. package/dist/workflows/detector.js.map +1 -0
  250. package/dist/workflows/index.d.ts +8 -0
  251. package/dist/workflows/index.d.ts.map +1 -0
  252. package/dist/workflows/index.js +8 -0
  253. package/dist/workflows/index.js.map +1 -0
  254. package/dist/workflows/installer.d.ts +24 -0
  255. package/dist/workflows/installer.d.ts.map +1 -0
  256. package/dist/workflows/installer.js +105 -0
  257. package/dist/workflows/installer.js.map +1 -0
  258. package/dist/workflows/registry.d.ts +29 -0
  259. package/dist/workflows/registry.d.ts.map +1 -0
  260. package/dist/workflows/registry.js +54 -0
  261. package/dist/workflows/registry.js.map +1 -0
  262. package/dist/workflows/templates/github/metadata.d.ts +6 -0
  263. package/dist/workflows/templates/github/metadata.d.ts.map +1 -0
  264. package/dist/workflows/templates/github/metadata.js +111 -0
  265. package/dist/workflows/templates/github/metadata.js.map +1 -0
  266. package/dist/workflows/templates/gitlab/metadata.d.ts +6 -0
  267. package/dist/workflows/templates/gitlab/metadata.d.ts.map +1 -0
  268. package/dist/workflows/templates/gitlab/metadata.js +14 -0
  269. package/dist/workflows/templates/gitlab/metadata.js.map +1 -0
  270. package/dist/workflows/types.d.ts +71 -0
  271. package/dist/workflows/types.d.ts.map +1 -0
  272. package/dist/workflows/types.js +5 -0
  273. package/dist/workflows/types.js.map +1 -0
  274. package/package.json +32 -25
  275. package/src/workflows/templates/github/code-ci.yml +529 -0
  276. package/src/workflows/templates/github/inline-fix.yml +665 -0
  277. package/src/workflows/templates/github/pr-review.yml +677 -0
  278. package/.claude/agents/README.md +0 -298
  279. package/.claude/agents/release-manager.md +0 -857
  280. package/.codemie/guides/git-workflow.md +0 -493
  281. package/CLAUDE.md +0 -855
  282. package/dist/agents/adapters/aider.d.ts +0 -12
  283. package/dist/agents/adapters/aider.d.ts.map +0 -1
  284. package/dist/agents/adapters/aider.js +0 -80
  285. package/dist/agents/adapters/aider.js.map +0 -1
  286. package/dist/cli/cli.d.ts +0 -4
  287. package/dist/cli/cli.d.ts.map +0 -1
  288. package/dist/cli/cli.js +0 -107
  289. package/dist/cli/cli.js.map +0 -1
  290. package/dist/cli/commands/mcp.d.ts +0 -3
  291. package/dist/cli/commands/mcp.d.ts.map +0 -1
  292. package/dist/cli/commands/mcp.js +0 -459
  293. package/dist/cli/commands/mcp.js.map +0 -1
  294. package/dist/code/agent-events.d.ts +0 -39
  295. package/dist/code/agent-events.d.ts.map +0 -1
  296. package/dist/code/agent-events.js +0 -4
  297. package/dist/code/agent-events.js.map +0 -1
  298. package/dist/code/agent.d.ts +0 -19
  299. package/dist/code/agent.d.ts.map +0 -1
  300. package/dist/code/agent.js +0 -144
  301. package/dist/code/agent.js.map +0 -1
  302. package/dist/code/config.d.ts +0 -13
  303. package/dist/code/config.d.ts.map +0 -1
  304. package/dist/code/config.js +0 -41
  305. package/dist/code/config.js.map +0 -1
  306. package/dist/code/index.d.ts +0 -19
  307. package/dist/code/index.d.ts.map +0 -1
  308. package/dist/code/index.js +0 -400
  309. package/dist/code/index.js.map +0 -1
  310. package/dist/code/prompts.d.ts +0 -2
  311. package/dist/code/prompts.d.ts.map +0 -1
  312. package/dist/code/prompts.js +0 -45
  313. package/dist/code/prompts.js.map +0 -1
  314. package/dist/code/tools/command.d.ts +0 -8
  315. package/dist/code/tools/command.d.ts.map +0 -1
  316. package/dist/code/tools/command.js +0 -83
  317. package/dist/code/tools/command.js.map +0 -1
  318. package/dist/code/tools/diff-utils.d.ts +0 -2
  319. package/dist/code/tools/diff-utils.d.ts.map +0 -1
  320. package/dist/code/tools/diff-utils.js +0 -45
  321. package/dist/code/tools/diff-utils.js.map +0 -1
  322. package/dist/code/tools/filesystem.d.ts +0 -11
  323. package/dist/code/tools/filesystem.d.ts.map +0 -1
  324. package/dist/code/tools/filesystem.js +0 -442
  325. package/dist/code/tools/filesystem.js.map +0 -1
  326. package/dist/code/tools/git.d.ts +0 -7
  327. package/dist/code/tools/git.d.ts.map +0 -1
  328. package/dist/code/tools/git.js +0 -111
  329. package/dist/code/tools/git.js.map +0 -1
  330. package/dist/code/tools/mcp.d.ts +0 -13
  331. package/dist/code/tools/mcp.d.ts.map +0 -1
  332. package/dist/code/tools/mcp.js +0 -230
  333. package/dist/code/tools/mcp.js.map +0 -1
  334. package/dist/data/tips.json +0 -118
  335. package/dist/ui/terminal-ui.d.ts +0 -73
  336. package/dist/ui/terminal-ui.d.ts.map +0 -1
  337. package/dist/ui/terminal-ui.js +0 -900
  338. package/dist/ui/terminal-ui.js.map +0 -1
  339. package/dist/utils/env-mapper.d.ts +0 -40
  340. package/dist/utils/env-mapper.d.ts.map +0 -1
  341. package/dist/utils/env-mapper.js +0 -122
  342. package/dist/utils/env-mapper.js.map +0 -1
  343. package/docs/USER_GUIDE.md +0 -573
  344. package/eslint.config.mjs +0 -43
  345. package/tests/agent-direct.test.mjs +0 -45
  346. package/tests/agent-output.test.mjs +0 -64
  347. package/tests/codemie-code.test.mjs +0 -42
  348. package/tests/context7-only.test.mjs +0 -42
  349. package/tests/conversation-flow.test.mjs +0 -63
  350. package/tests/interactive-simulation.test.mjs +0 -60
  351. package/tests/live-output.test.mjs +0 -53
  352. package/tests/mcp-context7.test.mjs +0 -105
  353. package/tests/mcp-e2e.test.mjs +0 -109
  354. package/tests/mcp-time-server.test.mjs +0 -58
  355. package/tests/streaming.test.mjs +0 -57
  356. package/tests/test-helpers.mjs +0 -94
  357. package/tests/text-wrapping.test.mjs +0 -33
  358. package/tests/tool-count.test.mjs +0 -81
  359. package/tests/ui-format.test.mjs +0 -39
  360. package/tests/ui-state.test.mjs +0 -72
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * CodeMie Claude Direct Agent
5
+ * Direct executable for the claude agent (bypasses registry)
6
+ */
7
+
8
+ import { ClaudeCodeAdapter } from '../dist/agents/adapters/claude-code.js';
9
+ import { ConfigLoader } from '../dist/utils/config-loader.js';
10
+ import { logger } from '../dist/utils/logger.js';
11
+ import { validateProviderCompatibility, validateModelCompatibility, displayCompatibilityError } from '../dist/utils/agent-compatibility.js';
12
+ import { Command } from 'commander';
13
+ import { readFileSync } from 'fs';
14
+ import { join } from 'path';
15
+ import { getDirname } from '../dist/utils/dirname.js';
16
+
17
+ const program = new Command();
18
+
19
+ // Read version from package.json
20
+ let version = '1.0.0';
21
+ try {
22
+ const packageJsonPath = join(getDirname(import.meta.url), '../package.json');
23
+ const packageJsonContent = readFileSync(packageJsonPath, 'utf-8');
24
+ const packageJson = JSON.parse(packageJsonContent);
25
+ version = packageJson.version;
26
+ } catch {
27
+ // Use default version if unable to read
28
+ }
29
+
30
+ program
31
+ .name('codemie-claude')
32
+ .description('CodeMie Claude - Direct access to Claude Code agent')
33
+ .version(version)
34
+ .option('-m, --model <model>', 'Override model')
35
+ .option('-p, --provider <provider>', 'Override provider')
36
+ .option('--api-key <key>', 'Override API key')
37
+ .option('--base-url <url>', 'Override base URL')
38
+ .option('--timeout <seconds>', 'Override timeout (in seconds)', parseInt)
39
+ .allowUnknownOption() // Allow passing unknown options to Claude
40
+ .passThroughOptions() // Pass through options to Claude
41
+ .argument('[args...]', 'Arguments to pass to Claude Code')
42
+ .action(async (args, options) => {
43
+ try {
44
+ const adapter = new ClaudeCodeAdapter();
45
+
46
+ // Check if Claude Code is installed
47
+ if (!(await adapter.isInstalled())) {
48
+ logger.error('Claude Code is not installed. Install it first with: codemie install claude');
49
+ process.exit(1);
50
+ }
51
+
52
+ // Load configuration with CLI overrides
53
+ const config = await ConfigLoader.load(process.cwd(), {
54
+ model: options.model,
55
+ provider: options.provider,
56
+ apiKey: options.apiKey,
57
+ baseUrl: options.baseUrl,
58
+ timeout: options.timeout
59
+ });
60
+
61
+ // Handle SSO provider detection
62
+ if (config.provider === 'ai-run-sso' || (config.baseUrl && config.baseUrl.includes('codemie'))) {
63
+ // Update provider to ai-run-sso if detected from baseUrl
64
+ if (config.provider !== 'ai-run-sso') {
65
+ config.provider = 'ai-run-sso';
66
+ }
67
+ }
68
+
69
+ // Validate essential configuration
70
+ if (!config.baseUrl || !config.apiKey || !config.model) {
71
+ logger.error('Configuration incomplete. Run: codemie setup');
72
+ process.exit(1);
73
+ }
74
+
75
+ // Validate provider compatibility
76
+ const providerResult = validateProviderCompatibility('claude', config);
77
+ if (!providerResult.valid) {
78
+ displayCompatibilityError(providerResult, logger);
79
+ process.exit(1);
80
+ }
81
+
82
+ // Validate model compatibility
83
+ const modelResult = validateModelCompatibility('claude', config);
84
+ if (!modelResult.valid) {
85
+ displayCompatibilityError(modelResult, logger);
86
+ process.exit(1);
87
+ }
88
+
89
+ // Export provider-specific environment variables
90
+ const providerEnv = ConfigLoader.exportProviderEnvVars(config);
91
+
92
+ // Collect all arguments to pass to Claude
93
+ const claudeArgs = [...args];
94
+
95
+ // Add back unknown options that were parsed
96
+ const knownOptions = ['model', 'provider', 'apiKey', 'baseUrl', 'timeout'];
97
+ for (const [key, value] of Object.entries(options)) {
98
+ if (knownOptions.includes(key)) continue;
99
+
100
+ if (key.length === 1) {
101
+ claudeArgs.push(`-${key}`);
102
+ } else {
103
+ claudeArgs.push(`--${key}`);
104
+ }
105
+
106
+ if (value !== true && value !== undefined) {
107
+ claudeArgs.push(String(value));
108
+ }
109
+ }
110
+
111
+ // Run Claude Code directly
112
+ logger.info(`Starting Claude Code with model ${config.model}...`);
113
+ await adapter.run(claudeArgs, providerEnv);
114
+ } catch (error) {
115
+ logger.error('Failed to run Claude Code:', error);
116
+ process.exit(1);
117
+ }
118
+ });
119
+
120
+ // Add health check command
121
+ program
122
+ .command('health')
123
+ .description('Check Claude Code health and installation')
124
+ .action(async () => {
125
+ try {
126
+ const adapter = new ClaudeCodeAdapter();
127
+
128
+ if (await adapter.isInstalled()) {
129
+ const version = await adapter.getVersion();
130
+ logger.success('Claude Code is installed and ready');
131
+ if (version) {
132
+ console.log(`Version: ${version}`);
133
+ }
134
+ } else {
135
+ logger.error('Claude Code is not installed');
136
+ console.log('Install with: codemie install claude');
137
+ process.exit(1);
138
+ }
139
+ } catch (error) {
140
+ logger.error('Health check failed:', error);
141
+ process.exit(1);
142
+ }
143
+ });
144
+
145
+ program.parse(process.argv);
@@ -1,23 +1,136 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * CodeMie Code - AI Coding Assistant
5
- * Entry point for the codemie-code executable
4
+ * CodeMie Native Agent
5
+ * Direct executable for the codemie-code agent
6
6
  */
7
7
 
8
- const { runCLI } = require('../dist/cli/cli.js');
9
- const { logger } = require('../dist/utils/logger.js');
8
+ import { CodeMieCode } from '../dist/agents/codemie-code/index.js';
9
+ import { loadCodeMieConfig } from '../dist/agents/codemie-code/config.js';
10
+ import { logger } from '../dist/utils/logger.js';
11
+ import { Command } from 'commander';
12
+ import { readFileSync } from 'fs';
13
+ import { join } from 'path';
14
+ import { getDirname } from '../dist/utils/dirname.js';
15
+ import chalk from 'chalk';
10
16
 
11
- async function main() {
12
- try {
13
- await runCLI();
14
- } catch (error) {
15
- logger.error('Failed to run CodeMie Code:', error);
16
- process.exit(1);
17
- }
17
+ const program = new Command();
18
+
19
+ // Read version from package.json
20
+ let version = '1.0.0';
21
+ try {
22
+ const packageJsonPath = join(getDirname(import.meta.url), '../package.json');
23
+ const packageJsonContent = readFileSync(packageJsonPath, 'utf-8');
24
+ const packageJson = JSON.parse(packageJsonContent);
25
+ version = packageJson.version;
26
+ } catch {
27
+ // Use default version if unable to read
18
28
  }
19
29
 
20
- main().catch((error) => {
21
- console.error('Unhandled error:', error);
22
- process.exit(1);
23
- });
30
+ program
31
+ .name('codemie-code')
32
+ .description('CodeMie Native Agent - Built-in LangGraph-based coding assistant')
33
+ .version(version)
34
+ .option('--task <task>', 'Execute a single task and exit')
35
+ .option('--debug', 'Enable debug logging')
36
+ .option('--plan', 'Enable structured planning mode with visual todo tracking')
37
+ .option('--plan-only', 'Generate plan without execution (planning phase only)')
38
+ .argument('[message...]', 'Initial message or conversation starter')
39
+ .action(async (message, options) => {
40
+ try {
41
+ const workingDir = process.cwd();
42
+
43
+ // Initialize the agent with debug flag
44
+ const codeMie = new CodeMieCode(workingDir);
45
+
46
+ try {
47
+ await codeMie.initialize({ debug: options.debug });
48
+ } catch (error) {
49
+ logger.error('CodeMie configuration required. Please run: codemie setup');
50
+ process.exit(1);
51
+ }
52
+
53
+ if (options.task) {
54
+ // Single task execution with modern UI
55
+ const planOptions = {
56
+ planMode: options.plan || options.planOnly,
57
+ planOnly: options.planOnly
58
+ };
59
+ const result = await codeMie.executeTaskWithUI(options.task, planOptions);
60
+ console.log(result);
61
+ } else if (message.length > 0) {
62
+ // Execute initial message then continue interactively
63
+ const initialMessage = message.join(' ');
64
+ console.log(`> ${initialMessage}`);
65
+
66
+ const planOptions = {
67
+ planMode: options.plan || options.planOnly,
68
+ planOnly: options.planOnly
69
+ };
70
+ await codeMie.executeTaskWithUI(initialMessage, planOptions);
71
+ console.log(''); // Add spacing
72
+
73
+ // Start interactive session (with plan mode if enabled)
74
+ if (options.plan && !options.planOnly) {
75
+ // Enable plan mode for interactive session
76
+ const agent = codeMie.getAgent();
77
+ if (agent) {
78
+ const { CodeMieTerminalUI } = await import('../dist/agents/codemie-code/ui.js');
79
+ const ui = new CodeMieTerminalUI(agent);
80
+ ui.enablePlanMode();
81
+ await ui.startInteractive();
82
+ ui.dispose();
83
+ } else {
84
+ await codeMie.startInteractive();
85
+ }
86
+ } else if (!options.planOnly) {
87
+ await codeMie.startInteractive();
88
+ }
89
+ } else {
90
+ // Pure interactive mode
91
+ if (options.plan) {
92
+ // Enable plan mode for interactive session (no extra console message)
93
+ const agent = codeMie.getAgent();
94
+ if (agent) {
95
+ const { CodeMieTerminalUI } = await import('../dist/agents/codemie-code/ui.js');
96
+ const ui = new CodeMieTerminalUI(agent);
97
+ ui.enablePlanMode();
98
+ await ui.startInteractive();
99
+ ui.dispose();
100
+ } else {
101
+ await codeMie.startInteractive();
102
+ }
103
+ } else {
104
+ await codeMie.startInteractive();
105
+ }
106
+ }
107
+ } catch (error) {
108
+ logger.error('Failed to run CodeMie Native:', error);
109
+ process.exit(1);
110
+ }
111
+ });
112
+
113
+ // Add health check command
114
+ program
115
+ .command('health')
116
+ .description('Check CodeMie Native health and configuration')
117
+ .action(async () => {
118
+ try {
119
+ const result = await CodeMieCode.testConnection(process.cwd());
120
+
121
+ if (result.success) {
122
+ logger.success('CodeMie Native is healthy');
123
+ console.log(`Provider: ${result.provider}`);
124
+ console.log(`Model: ${result.model}`);
125
+ } else {
126
+ logger.error('CodeMie Native health check failed:');
127
+ console.log(result.error);
128
+ process.exit(1);
129
+ }
130
+ } catch (error) {
131
+ logger.error('Health check failed:', error);
132
+ process.exit(1);
133
+ }
134
+ });
135
+
136
+ program.parse(process.argv);
@@ -0,0 +1,137 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * CodeMie Codex Direct Agent
5
+ * Direct executable for the codex agent (bypasses registry)
6
+ */
7
+
8
+ import { CodexAdapter } from '../dist/agents/adapters/codex.js';
9
+ import { ConfigLoader } from '../dist/utils/config-loader.js';
10
+ import { logger } from '../dist/utils/logger.js';
11
+ import { validateProviderCompatibility, validateModelCompatibility, displayCompatibilityError } from '../dist/utils/agent-compatibility.js';
12
+ import { Command } from 'commander';
13
+ import { readFileSync } from 'fs';
14
+ import { join } from 'path';
15
+ import { getDirname } from '../dist/utils/dirname.js';
16
+
17
+ const program = new Command();
18
+
19
+ // Read version from package.json
20
+ let version = '1.0.0';
21
+ try {
22
+ const packageJsonPath = join(getDirname(import.meta.url), '../package.json');
23
+ const packageJsonContent = readFileSync(packageJsonPath, 'utf-8');
24
+ const packageJson = JSON.parse(packageJsonContent);
25
+ version = packageJson.version;
26
+ } catch {
27
+ // Use default version if unable to read
28
+ }
29
+
30
+ program
31
+ .name('codemie-codex')
32
+ .description('CodeMie Codex - Direct access to OpenAI Codex agent')
33
+ .version(version)
34
+ .option('-m, --model <model>', 'Override model (must be OpenAI-compatible)')
35
+ .option('-p, --provider <provider>', 'Override provider')
36
+ .option('--api-key <key>', 'Override API key')
37
+ .option('--base-url <url>', 'Override base URL')
38
+ .option('--timeout <seconds>', 'Override timeout (in seconds)', parseInt)
39
+ .allowUnknownOption() // Allow passing unknown options to Codex
40
+ .passThroughOptions() // Pass through options to Codex
41
+ .argument('[args...]', 'Arguments to pass to Codex')
42
+ .action(async (args, options) => {
43
+ try {
44
+ const adapter = new CodexAdapter();
45
+
46
+ // Check if Codex is installed
47
+ if (!(await adapter.isInstalled())) {
48
+ logger.error('Codex is not installed. Install it first with: codemie install codex');
49
+ process.exit(1);
50
+ }
51
+
52
+ // Load configuration with CLI overrides
53
+ const config = await ConfigLoader.load(process.cwd(), {
54
+ model: options.model,
55
+ provider: options.provider,
56
+ apiKey: options.apiKey,
57
+ baseUrl: options.baseUrl,
58
+ timeout: options.timeout
59
+ });
60
+
61
+ // Validate essential configuration
62
+ if (!config.baseUrl || !config.apiKey || !config.model) {
63
+ logger.error('Configuration incomplete. Run: codemie setup');
64
+ process.exit(1);
65
+ }
66
+
67
+ // Validate provider compatibility
68
+ const providerResult = validateProviderCompatibility('codex', config);
69
+ if (!providerResult.valid) {
70
+ displayCompatibilityError(providerResult, logger);
71
+ process.exit(1);
72
+ }
73
+
74
+ // Validate model compatibility
75
+ const modelResult = validateModelCompatibility('codex', config);
76
+ if (!modelResult.valid) {
77
+ displayCompatibilityError(modelResult, logger);
78
+ process.exit(1);
79
+ }
80
+
81
+ // Export provider-specific environment variables
82
+ const providerEnv = ConfigLoader.exportProviderEnvVars(config);
83
+
84
+ // Collect all arguments to pass to Codex
85
+ const codexArgs = [...args];
86
+
87
+ // Add back unknown options that were parsed
88
+ const knownOptions = ['model', 'provider', 'apiKey', 'baseUrl', 'timeout'];
89
+ for (const [key, value] of Object.entries(options)) {
90
+ if (knownOptions.includes(key)) continue;
91
+
92
+ if (key.length === 1) {
93
+ codexArgs.push(`-${key}`);
94
+ } else {
95
+ codexArgs.push(`--${key}`);
96
+ }
97
+
98
+ if (value !== true && value !== undefined) {
99
+ codexArgs.push(String(value));
100
+ }
101
+ }
102
+
103
+ // Run Codex directly
104
+ logger.info(`Starting Codex with model ${config.model}...`);
105
+ await adapter.run(codexArgs, providerEnv);
106
+ } catch (error) {
107
+ logger.error('Failed to run Codex:', error);
108
+ process.exit(1);
109
+ }
110
+ });
111
+
112
+ // Add health check command
113
+ program
114
+ .command('health')
115
+ .description('Check Codex health and installation')
116
+ .action(async () => {
117
+ try {
118
+ const adapter = new CodexAdapter();
119
+
120
+ if (await adapter.isInstalled()) {
121
+ const version = await adapter.getVersion();
122
+ logger.success('Codex is installed and ready');
123
+ if (version) {
124
+ console.log(`Version: ${version}`);
125
+ }
126
+ } else {
127
+ logger.error('Codex is not installed');
128
+ console.log('Install with: codemie install codex');
129
+ process.exit(1);
130
+ }
131
+ } catch (error) {
132
+ logger.error('Health check failed:', error);
133
+ process.exit(1);
134
+ }
135
+ });
136
+
137
+ program.parse(process.argv);
package/bin/codemie.js CHANGED
@@ -5,4 +5,4 @@
5
5
  * Entry point for the codemie executable
6
6
  */
7
7
 
8
- require('../dist/cli/index.js');
8
+ import '../dist/cli/index.js';
@@ -1,12 +1,17 @@
1
- import { AgentAdapter } from '../registry';
1
+ import { AgentAdapter } from '../registry.js';
2
2
  export declare class ClaudeCodeAdapter implements AgentAdapter {
3
3
  name: string;
4
4
  displayName: string;
5
5
  description: string;
6
+ private ssoGateway;
6
7
  install(): Promise<void>;
7
8
  uninstall(): Promise<void>;
8
9
  isInstalled(): Promise<boolean>;
9
- run(args: string[]): Promise<void>;
10
+ run(args: string[], envOverrides?: Record<string, string>): Promise<void>;
10
11
  getVersion(): Promise<string | null>;
12
+ /**
13
+ * Setup SSO authentication via local gateway if required
14
+ */
15
+ private setupSSOGateway;
11
16
  }
12
17
  //# sourceMappingURL=claude-code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,qBAAa,iBAAkB,YAAW,YAAY;IACpD,IAAI,SAAY;IAChB,WAAW,SAAiB;IAC5B,WAAW,SAA+C;IAEpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAYxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAW1B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDlC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAQ3C"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM9C,qBAAa,iBAAkB,YAAW,YAAY;IACpD,IAAI,SAAY;IAChB,WAAW,SAAiB;IAC5B,WAAW,SAA+C;IAC1D,OAAO,CAAC,UAAU,CAA2B;IAEvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAYxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAW1B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDzE,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS1C;;OAEG;YACW,eAAe;CA4C9B"}
@@ -1,19 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ClaudeCodeAdapter = void 0;
4
- const exec_1 = require("../../utils/exec");
5
- const logger_1 = require("../../utils/logger");
6
- const child_process_1 = require("child_process");
7
- class ClaudeCodeAdapter {
1
+ import { exec } from '../../utils/exec.js';
2
+ import { logger } from '../../utils/logger.js';
3
+ import { spawn } from 'child_process';
4
+ import { SSOGateway } from '../../utils/sso-gateway.js';
5
+ export class ClaudeCodeAdapter {
8
6
  name = 'claude';
9
7
  displayName = 'Claude Code';
10
- description = 'Anthropic Claude Code - official CLI tool';
8
+ description = 'Claude Code - official Anthropic CLI tool';
9
+ ssoGateway = null;
11
10
  async install() {
12
- logger_1.logger.info('Installing Claude Code...');
11
+ logger.info('Installing Claude Code...');
13
12
  try {
14
13
  // Install via npm
15
- await (0, exec_1.exec)('npm', ['install', '-g', '@anthropic-ai/claude-code'], { timeout: 120000 });
16
- logger_1.logger.success('Claude Code installed successfully');
14
+ await exec('npm', ['install', '-g', '@anthropic-ai/claude-code'], { timeout: 120000 });
15
+ logger.success('Claude Code installed successfully');
17
16
  }
18
17
  catch (error) {
19
18
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -21,10 +20,10 @@ class ClaudeCodeAdapter {
21
20
  }
22
21
  }
23
22
  async uninstall() {
24
- logger_1.logger.info('Uninstalling Claude Code...');
23
+ logger.info('Uninstalling Claude Code...');
25
24
  try {
26
- await (0, exec_1.exec)('npm', ['uninstall', '-g', '@anthropic-ai/claude-code']);
27
- logger_1.logger.success('Claude Code uninstalled successfully');
25
+ await exec('npm', ['uninstall', '-g', '@anthropic-ai/claude-code']);
26
+ logger.success('Claude Code uninstalled successfully');
28
27
  }
29
28
  catch (error) {
30
29
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -33,66 +32,103 @@ class ClaudeCodeAdapter {
33
32
  }
34
33
  async isInstalled() {
35
34
  try {
36
- const result = await (0, exec_1.exec)('which', ['claude']);
35
+ const result = await exec('which', ['claude']);
37
36
  return result.code === 0;
38
37
  }
39
38
  catch {
40
39
  return false;
41
40
  }
42
41
  }
43
- async run(args) {
44
- logger_1.logger.info('Starting Claude Code...');
45
- // Prepare environment variables
46
- // Convert generic CODEMIE_* config to ANTHROPIC_* that Claude Code expects
47
- const env = { ...process.env };
48
- // Map our generic env vars to Anthropic-specific ones
49
- if (!env.ANTHROPIC_BASE_URL && env.CODEMIE_BASE_URL) {
50
- env.ANTHROPIC_BASE_URL = env.CODEMIE_BASE_URL;
51
- }
52
- if (!env.ANTHROPIC_AUTH_TOKEN && env.CODEMIE_AUTH_TOKEN) {
53
- env.ANTHROPIC_AUTH_TOKEN = env.CODEMIE_AUTH_TOKEN;
54
- }
55
- if (!env.ANTHROPIC_API_KEY && env.CODEMIE_AUTH_TOKEN) {
56
- env.ANTHROPIC_API_KEY = env.CODEMIE_AUTH_TOKEN;
57
- }
58
- if (!env.ANTHROPIC_MODEL && env.CODEMIE_MODEL) {
59
- env.ANTHROPIC_MODEL = env.CODEMIE_MODEL;
60
- }
61
- // Set subagent model to match the main model
62
- if (!env.CLAUDE_CODE_SUBAGENT_MODEL && env.CODEMIE_MODEL) {
63
- env.CLAUDE_CODE_SUBAGENT_MODEL = env.CODEMIE_MODEL;
64
- }
65
- else if (!env.CLAUDE_CODE_SUBAGENT_MODEL && env.ANTHROPIC_MODEL) {
66
- env.CLAUDE_CODE_SUBAGENT_MODEL = env.ANTHROPIC_MODEL;
67
- }
68
- // Spawn Claude Code
69
- const child = (0, child_process_1.spawn)('claude', args, {
70
- stdio: 'inherit',
71
- env
72
- });
73
- return new Promise((resolve, reject) => {
74
- child.on('error', (error) => {
75
- reject(new Error(`Failed to start Claude Code: ${error.message}`));
42
+ async run(args, envOverrides) {
43
+ logger.info('Starting Claude Code...');
44
+ // Merge environment variables: process.env < envOverrides
45
+ let env = {
46
+ ...process.env,
47
+ ...envOverrides
48
+ };
49
+ // Handle SSO authentication via local gateway if configured
50
+ await this.setupSSOGateway(env);
51
+ try {
52
+ // Spawn Claude Code
53
+ const child = spawn('claude', args, {
54
+ stdio: 'inherit',
55
+ env
76
56
  });
77
- child.on('exit', (code) => {
78
- if (code === 0) {
79
- resolve();
80
- }
81
- else {
82
- reject(new Error(`Claude Code exited with code ${code}`));
83
- }
57
+ return new Promise((resolve, reject) => {
58
+ child.on('error', (error) => {
59
+ reject(new Error(`Failed to start Claude Code: ${error.message}`));
60
+ });
61
+ child.on('exit', async (code) => {
62
+ // Clean up gateway when claude exits
63
+ if (this.ssoGateway) {
64
+ await this.ssoGateway.stop();
65
+ this.ssoGateway = null;
66
+ }
67
+ if (code === 0) {
68
+ resolve();
69
+ }
70
+ else {
71
+ reject(new Error(`Claude Code exited with code ${code}`));
72
+ }
73
+ });
84
74
  });
85
- });
75
+ }
76
+ catch (error) {
77
+ // Clean up gateway on error
78
+ if (this.ssoGateway) {
79
+ await this.ssoGateway.stop();
80
+ this.ssoGateway = null;
81
+ }
82
+ throw error;
83
+ }
86
84
  }
87
85
  async getVersion() {
88
86
  try {
89
- const result = await (0, exec_1.exec)('claude', ['--version']);
87
+ const result = await exec('claude', ['--version']);
90
88
  return result.stdout.trim();
91
89
  }
92
90
  catch {
93
91
  return null;
94
92
  }
95
93
  }
94
+ /**
95
+ * Setup SSO authentication via local gateway if required
96
+ */
97
+ async setupSSOGateway(env) {
98
+ // Check if we're using SSO provider
99
+ const isSSOProvider = env.CODEMIE_PROVIDER === 'ai-run-sso' ||
100
+ (env.CODEMIE_BASE_URL?.includes('codemie')) ||
101
+ (env.OPENAI_BASE_URL?.includes('codemie'));
102
+ if (!isSSOProvider) {
103
+ return null; // No SSO, use regular authentication
104
+ }
105
+ try {
106
+ // Get the target API URL from environment
107
+ const targetApiUrl = env.CODEMIE_BASE_URL || env.OPENAI_BASE_URL;
108
+ if (!targetApiUrl) {
109
+ throw new Error('No API URL found for SSO authentication');
110
+ }
111
+ // Create and start the SSO gateway
112
+ this.ssoGateway = new SSOGateway({
113
+ targetApiUrl,
114
+ debug: !!(env.DEBUG || env.CODEMIE_DEBUG),
115
+ clientType: 'codemie-claude'
116
+ });
117
+ const { port, url } = await this.ssoGateway.start();
118
+ // Point claude to use our local gateway
119
+ env.ANTHROPIC_BASE_URL = url;
120
+ env.ANTHROPIC_AUTH_TOKEN = 'gateway-handled'; // Placeholder since gateway handles auth
121
+ if (env.DEBUG || env.CODEMIE_DEBUG) {
122
+ logger.info('[DEBUG] SSO Gateway started for Claude Code');
123
+ logger.info(`[DEBUG] Gateway URL: ${url}`);
124
+ logger.info(`[DEBUG] Target API: ${targetApiUrl}`);
125
+ }
126
+ return { gatewayUrl: url, port };
127
+ }
128
+ catch (error) {
129
+ const errorMessage = error instanceof Error ? error.message : String(error);
130
+ throw new Error(`SSO gateway setup failed: ${errorMessage}`);
131
+ }
132
+ }
96
133
  }
97
- exports.ClaudeCodeAdapter = ClaudeCodeAdapter;
98
134
  //# sourceMappingURL=claude-code.js.map