steroids-cli 0.4.47

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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +640 -0
  3. package/dist/cli/colors.d.ts +110 -0
  4. package/dist/cli/colors.d.ts.map +1 -0
  5. package/dist/cli/colors.js +228 -0
  6. package/dist/cli/colors.js.map +1 -0
  7. package/dist/cli/env.d.ts +159 -0
  8. package/dist/cli/env.d.ts.map +1 -0
  9. package/dist/cli/env.js +227 -0
  10. package/dist/cli/env.js.map +1 -0
  11. package/dist/cli/errors.d.ts +166 -0
  12. package/dist/cli/errors.d.ts.map +1 -0
  13. package/dist/cli/errors.js +244 -0
  14. package/dist/cli/errors.js.map +1 -0
  15. package/dist/cli/flags.d.ts +75 -0
  16. package/dist/cli/flags.d.ts.map +1 -0
  17. package/dist/cli/flags.js +232 -0
  18. package/dist/cli/flags.js.map +1 -0
  19. package/dist/cli/help.d.ts +97 -0
  20. package/dist/cli/help.d.ts.map +1 -0
  21. package/dist/cli/help.js +275 -0
  22. package/dist/cli/help.js.map +1 -0
  23. package/dist/cli/index.d.ts +13 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +29 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/interactive.d.ts +58 -0
  28. package/dist/cli/interactive.d.ts.map +1 -0
  29. package/dist/cli/interactive.js +127 -0
  30. package/dist/cli/interactive.js.map +1 -0
  31. package/dist/cli/output.d.ts +116 -0
  32. package/dist/cli/output.d.ts.map +1 -0
  33. package/dist/cli/output.js +178 -0
  34. package/dist/cli/output.js.map +1 -0
  35. package/dist/commands/about.d.ts +7 -0
  36. package/dist/commands/about.d.ts.map +1 -0
  37. package/dist/commands/about.js +259 -0
  38. package/dist/commands/about.js.map +1 -0
  39. package/dist/commands/ai.d.ts +6 -0
  40. package/dist/commands/ai.d.ts.map +1 -0
  41. package/dist/commands/ai.js +382 -0
  42. package/dist/commands/ai.js.map +1 -0
  43. package/dist/commands/backup.d.ts +3 -0
  44. package/dist/commands/backup.d.ts.map +1 -0
  45. package/dist/commands/backup.js +528 -0
  46. package/dist/commands/backup.js.map +1 -0
  47. package/dist/commands/completion.d.ts +3 -0
  48. package/dist/commands/completion.d.ts.map +1 -0
  49. package/dist/commands/completion.js +405 -0
  50. package/dist/commands/completion.js.map +1 -0
  51. package/dist/commands/config.d.ts +3 -0
  52. package/dist/commands/config.d.ts.map +1 -0
  53. package/dist/commands/config.js +665 -0
  54. package/dist/commands/config.js.map +1 -0
  55. package/dist/commands/disputes.d.ts +3 -0
  56. package/dist/commands/disputes.d.ts.map +1 -0
  57. package/dist/commands/disputes.js +499 -0
  58. package/dist/commands/disputes.js.map +1 -0
  59. package/dist/commands/gc.d.ts +3 -0
  60. package/dist/commands/gc.d.ts.map +1 -0
  61. package/dist/commands/gc.js +300 -0
  62. package/dist/commands/gc.js.map +1 -0
  63. package/dist/commands/git.d.ts +3 -0
  64. package/dist/commands/git.d.ts.map +1 -0
  65. package/dist/commands/git.js +458 -0
  66. package/dist/commands/git.js.map +1 -0
  67. package/dist/commands/health.d.ts +3 -0
  68. package/dist/commands/health.d.ts.map +1 -0
  69. package/dist/commands/health.js +604 -0
  70. package/dist/commands/health.js.map +1 -0
  71. package/dist/commands/hooks.d.ts +6 -0
  72. package/dist/commands/hooks.d.ts.map +1 -0
  73. package/dist/commands/hooks.js +529 -0
  74. package/dist/commands/hooks.js.map +1 -0
  75. package/dist/commands/init.d.ts +6 -0
  76. package/dist/commands/init.d.ts.map +1 -0
  77. package/dist/commands/init.js +200 -0
  78. package/dist/commands/init.js.map +1 -0
  79. package/dist/commands/llm.d.ts +7 -0
  80. package/dist/commands/llm.d.ts.map +1 -0
  81. package/dist/commands/llm.js +285 -0
  82. package/dist/commands/llm.js.map +1 -0
  83. package/dist/commands/locks.d.ts +3 -0
  84. package/dist/commands/locks.d.ts.map +1 -0
  85. package/dist/commands/locks.js +431 -0
  86. package/dist/commands/locks.js.map +1 -0
  87. package/dist/commands/logs.d.ts +3 -0
  88. package/dist/commands/logs.d.ts.map +1 -0
  89. package/dist/commands/logs.js +487 -0
  90. package/dist/commands/logs.js.map +1 -0
  91. package/dist/commands/loop-phases.d.ts +11 -0
  92. package/dist/commands/loop-phases.d.ts.map +1 -0
  93. package/dist/commands/loop-phases.js +204 -0
  94. package/dist/commands/loop-phases.js.map +1 -0
  95. package/dist/commands/loop.d.ts +3 -0
  96. package/dist/commands/loop.d.ts.map +1 -0
  97. package/dist/commands/loop.js +396 -0
  98. package/dist/commands/loop.js.map +1 -0
  99. package/dist/commands/projects.d.ts +6 -0
  100. package/dist/commands/projects.d.ts.map +1 -0
  101. package/dist/commands/projects.js +362 -0
  102. package/dist/commands/projects.js.map +1 -0
  103. package/dist/commands/purge.d.ts +3 -0
  104. package/dist/commands/purge.d.ts.map +1 -0
  105. package/dist/commands/purge.js +516 -0
  106. package/dist/commands/purge.js.map +1 -0
  107. package/dist/commands/runners.d.ts +3 -0
  108. package/dist/commands/runners.d.ts.map +1 -0
  109. package/dist/commands/runners.js +1076 -0
  110. package/dist/commands/runners.js.map +1 -0
  111. package/dist/commands/scan.d.ts +3 -0
  112. package/dist/commands/scan.d.ts.map +1 -0
  113. package/dist/commands/scan.js +291 -0
  114. package/dist/commands/scan.js.map +1 -0
  115. package/dist/commands/sections-commands.d.ts +9 -0
  116. package/dist/commands/sections-commands.d.ts.map +1 -0
  117. package/dist/commands/sections-commands.js +282 -0
  118. package/dist/commands/sections-commands.js.map +1 -0
  119. package/dist/commands/sections-graph.d.ts +25 -0
  120. package/dist/commands/sections-graph.d.ts.map +1 -0
  121. package/dist/commands/sections-graph.js +180 -0
  122. package/dist/commands/sections-graph.js.map +1 -0
  123. package/dist/commands/sections.d.ts +3 -0
  124. package/dist/commands/sections.d.ts.map +1 -0
  125. package/dist/commands/sections.js +376 -0
  126. package/dist/commands/sections.js.map +1 -0
  127. package/dist/commands/stats.d.ts +6 -0
  128. package/dist/commands/stats.d.ts.map +1 -0
  129. package/dist/commands/stats.js +324 -0
  130. package/dist/commands/stats.js.map +1 -0
  131. package/dist/commands/tasks.d.ts +3 -0
  132. package/dist/commands/tasks.d.ts.map +1 -0
  133. package/dist/commands/tasks.js +1115 -0
  134. package/dist/commands/tasks.js.map +1 -0
  135. package/dist/commands/web.d.ts +7 -0
  136. package/dist/commands/web.d.ts.map +1 -0
  137. package/dist/commands/web.js +204 -0
  138. package/dist/commands/web.js.map +1 -0
  139. package/dist/config/ai-setup.d.ts +27 -0
  140. package/dist/config/ai-setup.d.ts.map +1 -0
  141. package/dist/config/ai-setup.js +432 -0
  142. package/dist/config/ai-setup.js.map +1 -0
  143. package/dist/config/browser.d.ts +9 -0
  144. package/dist/config/browser.d.ts.map +1 -0
  145. package/dist/config/browser.js +200 -0
  146. package/dist/config/browser.js.map +1 -0
  147. package/dist/config/json-schema.d.ts +28 -0
  148. package/dist/config/json-schema.d.ts.map +1 -0
  149. package/dist/config/json-schema.js +84 -0
  150. package/dist/config/json-schema.js.map +1 -0
  151. package/dist/config/loader.d.ts +152 -0
  152. package/dist/config/loader.d.ts.map +1 -0
  153. package/dist/config/loader.js +270 -0
  154. package/dist/config/loader.js.map +1 -0
  155. package/dist/config/schema.d.ts +34 -0
  156. package/dist/config/schema.d.ts.map +1 -0
  157. package/dist/config/schema.js +437 -0
  158. package/dist/config/schema.js.map +1 -0
  159. package/dist/config/validator.d.ts +32 -0
  160. package/dist/config/validator.d.ts.map +1 -0
  161. package/dist/config/validator.js +187 -0
  162. package/dist/config/validator.js.map +1 -0
  163. package/dist/database/connection.d.ts +35 -0
  164. package/dist/database/connection.d.ts.map +1 -0
  165. package/dist/database/connection.js +208 -0
  166. package/dist/database/connection.js.map +1 -0
  167. package/dist/database/queries.d.ts +218 -0
  168. package/dist/database/queries.d.ts.map +1 -0
  169. package/dist/database/queries.js +613 -0
  170. package/dist/database/queries.js.map +1 -0
  171. package/dist/database/schema.d.ts +8 -0
  172. package/dist/database/schema.d.ts.map +1 -0
  173. package/dist/database/schema.js +160 -0
  174. package/dist/database/schema.js.map +1 -0
  175. package/dist/disputes/behavior.d.ts +106 -0
  176. package/dist/disputes/behavior.d.ts.map +1 -0
  177. package/dist/disputes/behavior.js +150 -0
  178. package/dist/disputes/behavior.js.map +1 -0
  179. package/dist/disputes/create.d.ts +59 -0
  180. package/dist/disputes/create.d.ts.map +1 -0
  181. package/dist/disputes/create.js +222 -0
  182. package/dist/disputes/create.js.map +1 -0
  183. package/dist/disputes/index.d.ts +21 -0
  184. package/dist/disputes/index.d.ts.map +1 -0
  185. package/dist/disputes/index.js +76 -0
  186. package/dist/disputes/index.js.map +1 -0
  187. package/dist/disputes/markdown.d.ts +41 -0
  188. package/dist/disputes/markdown.d.ts.map +1 -0
  189. package/dist/disputes/markdown.js +261 -0
  190. package/dist/disputes/markdown.js.map +1 -0
  191. package/dist/disputes/queries.d.ts +83 -0
  192. package/dist/disputes/queries.d.ts.map +1 -0
  193. package/dist/disputes/queries.js +180 -0
  194. package/dist/disputes/queries.js.map +1 -0
  195. package/dist/disputes/resolve.d.ts +57 -0
  196. package/dist/disputes/resolve.d.ts.map +1 -0
  197. package/dist/disputes/resolve.js +171 -0
  198. package/dist/disputes/resolve.js.map +1 -0
  199. package/dist/disputes/stale.d.ts +98 -0
  200. package/dist/disputes/stale.d.ts.map +1 -0
  201. package/dist/disputes/stale.js +205 -0
  202. package/dist/disputes/stale.js.map +1 -0
  203. package/dist/disputes/types.d.ts +92 -0
  204. package/dist/disputes/types.d.ts.map +1 -0
  205. package/dist/disputes/types.js +100 -0
  206. package/dist/disputes/types.js.map +1 -0
  207. package/dist/git/push.d.ts +26 -0
  208. package/dist/git/push.d.ts.map +1 -0
  209. package/dist/git/push.js +97 -0
  210. package/dist/git/push.js.map +1 -0
  211. package/dist/git/status.d.ts +61 -0
  212. package/dist/git/status.d.ts.map +1 -0
  213. package/dist/git/status.js +251 -0
  214. package/dist/git/status.js.map +1 -0
  215. package/dist/hooks/events.d.ts +72 -0
  216. package/dist/hooks/events.d.ts.map +1 -0
  217. package/dist/hooks/events.js +120 -0
  218. package/dist/hooks/events.js.map +1 -0
  219. package/dist/hooks/index.d.ts +19 -0
  220. package/dist/hooks/index.d.ts.map +1 -0
  221. package/dist/hooks/index.js +48 -0
  222. package/dist/hooks/index.js.map +1 -0
  223. package/dist/hooks/integration.d.ts +69 -0
  224. package/dist/hooks/integration.d.ts.map +1 -0
  225. package/dist/hooks/integration.js +179 -0
  226. package/dist/hooks/integration.js.map +1 -0
  227. package/dist/hooks/merge.d.ts +115 -0
  228. package/dist/hooks/merge.d.ts.map +1 -0
  229. package/dist/hooks/merge.js +161 -0
  230. package/dist/hooks/merge.js.map +1 -0
  231. package/dist/hooks/orchestrator.d.ts +115 -0
  232. package/dist/hooks/orchestrator.d.ts.map +1 -0
  233. package/dist/hooks/orchestrator.js +226 -0
  234. package/dist/hooks/orchestrator.js.map +1 -0
  235. package/dist/hooks/payload.d.ts +294 -0
  236. package/dist/hooks/payload.d.ts.map +1 -0
  237. package/dist/hooks/payload.js +267 -0
  238. package/dist/hooks/payload.js.map +1 -0
  239. package/dist/hooks/script-runner.d.ts +63 -0
  240. package/dist/hooks/script-runner.d.ts.map +1 -0
  241. package/dist/hooks/script-runner.js +221 -0
  242. package/dist/hooks/script-runner.js.map +1 -0
  243. package/dist/hooks/templates.d.ts +104 -0
  244. package/dist/hooks/templates.d.ts.map +1 -0
  245. package/dist/hooks/templates.js +327 -0
  246. package/dist/hooks/templates.js.map +1 -0
  247. package/dist/hooks/webhook-runner.d.ts +69 -0
  248. package/dist/hooks/webhook-runner.d.ts.map +1 -0
  249. package/dist/hooks/webhook-runner.js +208 -0
  250. package/dist/hooks/webhook-runner.js.map +1 -0
  251. package/dist/index.d.ts +7 -0
  252. package/dist/index.d.ts.map +1 -0
  253. package/dist/index.js +281 -0
  254. package/dist/index.js.map +1 -0
  255. package/dist/locking/cleanup.d.ts +70 -0
  256. package/dist/locking/cleanup.d.ts.map +1 -0
  257. package/dist/locking/cleanup.js +157 -0
  258. package/dist/locking/cleanup.js.map +1 -0
  259. package/dist/locking/queries.d.ts +116 -0
  260. package/dist/locking/queries.d.ts.map +1 -0
  261. package/dist/locking/queries.js +255 -0
  262. package/dist/locking/queries.js.map +1 -0
  263. package/dist/locking/section-lock.d.ts +74 -0
  264. package/dist/locking/section-lock.d.ts.map +1 -0
  265. package/dist/locking/section-lock.js +207 -0
  266. package/dist/locking/section-lock.js.map +1 -0
  267. package/dist/locking/task-lock.d.ts +92 -0
  268. package/dist/locking/task-lock.d.ts.map +1 -0
  269. package/dist/locking/task-lock.js +246 -0
  270. package/dist/locking/task-lock.js.map +1 -0
  271. package/dist/migrations/index.d.ts +7 -0
  272. package/dist/migrations/index.d.ts.map +1 -0
  273. package/dist/migrations/index.js +37 -0
  274. package/dist/migrations/index.js.map +1 -0
  275. package/dist/migrations/manifest.d.ts +92 -0
  276. package/dist/migrations/manifest.d.ts.map +1 -0
  277. package/dist/migrations/manifest.js +270 -0
  278. package/dist/migrations/manifest.js.map +1 -0
  279. package/dist/migrations/runner.d.ts +84 -0
  280. package/dist/migrations/runner.d.ts.map +1 -0
  281. package/dist/migrations/runner.js +351 -0
  282. package/dist/migrations/runner.js.map +1 -0
  283. package/dist/orchestrator/coder.d.ts +32 -0
  284. package/dist/orchestrator/coder.d.ts.map +1 -0
  285. package/dist/orchestrator/coder.js +174 -0
  286. package/dist/orchestrator/coder.js.map +1 -0
  287. package/dist/orchestrator/coordinator.d.ts +28 -0
  288. package/dist/orchestrator/coordinator.d.ts.map +1 -0
  289. package/dist/orchestrator/coordinator.js +256 -0
  290. package/dist/orchestrator/coordinator.js.map +1 -0
  291. package/dist/orchestrator/reviewer.d.ts +35 -0
  292. package/dist/orchestrator/reviewer.d.ts.map +1 -0
  293. package/dist/orchestrator/reviewer.js +241 -0
  294. package/dist/orchestrator/reviewer.js.map +1 -0
  295. package/dist/orchestrator/task-selector.d.ts +102 -0
  296. package/dist/orchestrator/task-selector.d.ts.map +1 -0
  297. package/dist/orchestrator/task-selector.js +341 -0
  298. package/dist/orchestrator/task-selector.js.map +1 -0
  299. package/dist/prompts/coder.d.ts +36 -0
  300. package/dist/prompts/coder.d.ts.map +1 -0
  301. package/dist/prompts/coder.js +315 -0
  302. package/dist/prompts/coder.js.map +1 -0
  303. package/dist/prompts/prompt-helpers.d.ts +51 -0
  304. package/dist/prompts/prompt-helpers.d.ts.map +1 -0
  305. package/dist/prompts/prompt-helpers.js +312 -0
  306. package/dist/prompts/prompt-helpers.js.map +1 -0
  307. package/dist/prompts/reviewer.d.ts +40 -0
  308. package/dist/prompts/reviewer.d.ts.map +1 -0
  309. package/dist/prompts/reviewer.js +438 -0
  310. package/dist/prompts/reviewer.js.map +1 -0
  311. package/dist/providers/api-models.d.ts +65 -0
  312. package/dist/providers/api-models.d.ts.map +1 -0
  313. package/dist/providers/api-models.js +323 -0
  314. package/dist/providers/api-models.js.map +1 -0
  315. package/dist/providers/claude.d.ts +53 -0
  316. package/dist/providers/claude.d.ts.map +1 -0
  317. package/dist/providers/claude.js +229 -0
  318. package/dist/providers/claude.js.map +1 -0
  319. package/dist/providers/codex.d.ts +53 -0
  320. package/dist/providers/codex.d.ts.map +1 -0
  321. package/dist/providers/codex.js +214 -0
  322. package/dist/providers/codex.js.map +1 -0
  323. package/dist/providers/gemini.d.ts +58 -0
  324. package/dist/providers/gemini.d.ts.map +1 -0
  325. package/dist/providers/gemini.js +242 -0
  326. package/dist/providers/gemini.js.map +1 -0
  327. package/dist/providers/index.d.ts +13 -0
  328. package/dist/providers/index.d.ts.map +1 -0
  329. package/dist/providers/index.js +49 -0
  330. package/dist/providers/index.js.map +1 -0
  331. package/dist/providers/interface.d.ts +173 -0
  332. package/dist/providers/interface.d.ts.map +1 -0
  333. package/dist/providers/interface.js +96 -0
  334. package/dist/providers/interface.js.map +1 -0
  335. package/dist/providers/invocation-logger.d.ts +114 -0
  336. package/dist/providers/invocation-logger.d.ts.map +1 -0
  337. package/dist/providers/invocation-logger.js +298 -0
  338. package/dist/providers/invocation-logger.js.map +1 -0
  339. package/dist/providers/openai.d.ts +53 -0
  340. package/dist/providers/openai.d.ts.map +1 -0
  341. package/dist/providers/openai.js +232 -0
  342. package/dist/providers/openai.js.map +1 -0
  343. package/dist/providers/registry.d.ts +100 -0
  344. package/dist/providers/registry.d.ts.map +1 -0
  345. package/dist/providers/registry.js +178 -0
  346. package/dist/providers/registry.js.map +1 -0
  347. package/dist/runners/activity-log.d.ts +65 -0
  348. package/dist/runners/activity-log.d.ts.map +1 -0
  349. package/dist/runners/activity-log.js +148 -0
  350. package/dist/runners/activity-log.js.map +1 -0
  351. package/dist/runners/cron.d.ts +26 -0
  352. package/dist/runners/cron.d.ts.map +1 -0
  353. package/dist/runners/cron.js +176 -0
  354. package/dist/runners/cron.js.map +1 -0
  355. package/dist/runners/daemon.d.ts +71 -0
  356. package/dist/runners/daemon.d.ts.map +1 -0
  357. package/dist/runners/daemon.js +245 -0
  358. package/dist/runners/daemon.js.map +1 -0
  359. package/dist/runners/global-db.d.ts +31 -0
  360. package/dist/runners/global-db.d.ts.map +1 -0
  361. package/dist/runners/global-db.js +230 -0
  362. package/dist/runners/global-db.js.map +1 -0
  363. package/dist/runners/hang-detector.d.ts +38 -0
  364. package/dist/runners/hang-detector.d.ts.map +1 -0
  365. package/dist/runners/hang-detector.js +136 -0
  366. package/dist/runners/hang-detector.js.map +1 -0
  367. package/dist/runners/heartbeat.d.ts +39 -0
  368. package/dist/runners/heartbeat.d.ts.map +1 -0
  369. package/dist/runners/heartbeat.js +79 -0
  370. package/dist/runners/heartbeat.js.map +1 -0
  371. package/dist/runners/lock.d.ts +47 -0
  372. package/dist/runners/lock.d.ts.map +1 -0
  373. package/dist/runners/lock.js +150 -0
  374. package/dist/runners/lock.js.map +1 -0
  375. package/dist/runners/orchestrator-loop.d.ts +20 -0
  376. package/dist/runners/orchestrator-loop.d.ts.map +1 -0
  377. package/dist/runners/orchestrator-loop.js +285 -0
  378. package/dist/runners/orchestrator-loop.js.map +1 -0
  379. package/dist/runners/projects.d.ts +96 -0
  380. package/dist/runners/projects.d.ts.map +1 -0
  381. package/dist/runners/projects.js +255 -0
  382. package/dist/runners/projects.js.map +1 -0
  383. package/dist/runners/wakeup.d.ts +34 -0
  384. package/dist/runners/wakeup.d.ts.map +1 -0
  385. package/dist/runners/wakeup.js +291 -0
  386. package/dist/runners/wakeup.js.map +1 -0
  387. package/migrations/001_initial_schema.sql +106 -0
  388. package/migrations/002_add_commit_sha.sql +12 -0
  389. package/migrations/003_add_section_priority.sql +13 -0
  390. package/migrations/004_add_section_dependencies.sql +18 -0
  391. package/migrations/005_add_audit_actor_model.sql +10 -0
  392. package/migrations/006_add_task_invocations.sql +33 -0
  393. package/migrations/007_add_file_anchor.sql +14 -0
  394. package/migrations/manifest.json +62 -0
  395. package/package.json +49 -0
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ /**
3
+ * Invocation Logger
4
+ * Logs all LLM invocations for debugging and audit purposes
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.InvocationLogger = void 0;
8
+ exports.getInvocationLogger = getInvocationLogger;
9
+ exports.setInvocationLogger = setInvocationLogger;
10
+ exports.resetInvocationLogger = resetInvocationLogger;
11
+ exports.logInvocation = logInvocation;
12
+ const node_fs_1 = require("node:fs");
13
+ const node_path_1 = require("node:path");
14
+ /**
15
+ * Default configuration
16
+ */
17
+ const DEFAULT_CONFIG = {
18
+ enabled: true,
19
+ logsDir: '.steroids/logs',
20
+ retentionDays: 7,
21
+ includePrompts: true,
22
+ includeResponses: true,
23
+ };
24
+ /**
25
+ * Invocation Logger
26
+ * Logs LLM invocations to disk for debugging and audit
27
+ */
28
+ class InvocationLogger {
29
+ config;
30
+ constructor(config = {}) {
31
+ this.config = { ...DEFAULT_CONFIG, ...config };
32
+ }
33
+ /**
34
+ * Log an invocation
35
+ */
36
+ log(entry) {
37
+ if (!this.config.enabled) {
38
+ return;
39
+ }
40
+ try {
41
+ // Ensure logs directory exists
42
+ this.ensureLogsDirectory();
43
+ // Create log file path
44
+ const logFileName = this.createLogFileName(entry);
45
+ const logFilePath = (0, node_path_1.join)(this.config.logsDir, logFileName);
46
+ // Build log content
47
+ const logContent = this.formatLogEntry(entry);
48
+ // Write to file
49
+ (0, node_fs_1.writeFileSync)(logFilePath, logContent, 'utf-8');
50
+ // Clean up old logs
51
+ this.cleanupOldLogs();
52
+ }
53
+ catch (error) {
54
+ // Don't fail the invocation if logging fails
55
+ console.warn(`Failed to log invocation: ${error}`);
56
+ }
57
+ }
58
+ /**
59
+ * Create log file name
60
+ */
61
+ createLogFileName(entry) {
62
+ const date = new Date(entry.timestamp);
63
+ const dateStr = date.toISOString().split('T')[0]; // YYYY-MM-DD
64
+ const timeStr = date.toISOString().split('T')[1].split('.')[0].replace(/:/g, '-'); // HH-MM-SS
65
+ const taskPart = entry.taskId ? `-${entry.taskId.substring(0, 8)}` : '';
66
+ const successPart = entry.success ? 'success' : 'failed';
67
+ // Ensure date directory exists
68
+ const dateDir = (0, node_path_1.join)(this.config.logsDir, dateStr);
69
+ if (!(0, node_fs_1.existsSync)(dateDir)) {
70
+ (0, node_fs_1.mkdirSync)(dateDir, { recursive: true });
71
+ }
72
+ return `${dateStr}/${timeStr}-${entry.role}-${entry.provider}-${successPart}${taskPart}.log`;
73
+ }
74
+ /**
75
+ * Format log entry as text
76
+ */
77
+ formatLogEntry(entry) {
78
+ const lines = [];
79
+ lines.push('='.repeat(80));
80
+ lines.push('LLM INVOCATION LOG');
81
+ lines.push('='.repeat(80));
82
+ lines.push('');
83
+ lines.push(`Timestamp: ${entry.timestamp}`);
84
+ lines.push(`Role: ${entry.role}`);
85
+ lines.push(`Provider: ${entry.provider}`);
86
+ lines.push(`Model: ${entry.model}`);
87
+ if (entry.taskId) {
88
+ lines.push(`Task ID: ${entry.taskId}`);
89
+ }
90
+ lines.push(`Duration: ${entry.duration}ms (${(entry.duration / 1000).toFixed(1)}s)`);
91
+ lines.push(`Exit Code: ${entry.exitCode}`);
92
+ lines.push(`Success: ${entry.success ? 'Yes' : 'No'}`);
93
+ lines.push(`Timed Out: ${entry.timedOut ? 'Yes' : 'No'}`);
94
+ lines.push('');
95
+ if (this.config.includePrompts && entry.prompt) {
96
+ lines.push('-'.repeat(80));
97
+ lines.push('PROMPT');
98
+ lines.push('-'.repeat(80));
99
+ lines.push(entry.prompt);
100
+ lines.push('');
101
+ }
102
+ if (this.config.includeResponses && entry.response) {
103
+ lines.push('-'.repeat(80));
104
+ lines.push('RESPONSE');
105
+ lines.push('-'.repeat(80));
106
+ lines.push(entry.response);
107
+ lines.push('');
108
+ }
109
+ if (entry.error) {
110
+ lines.push('-'.repeat(80));
111
+ lines.push('ERROR');
112
+ lines.push('-'.repeat(80));
113
+ lines.push(entry.error);
114
+ lines.push('');
115
+ }
116
+ lines.push('='.repeat(80));
117
+ return lines.join('\n');
118
+ }
119
+ /**
120
+ * Ensure logs directory exists
121
+ */
122
+ ensureLogsDirectory() {
123
+ if (!(0, node_fs_1.existsSync)(this.config.logsDir)) {
124
+ (0, node_fs_1.mkdirSync)(this.config.logsDir, { recursive: true });
125
+ }
126
+ }
127
+ /**
128
+ * Clean up old logs based on retention policy
129
+ */
130
+ cleanupOldLogs() {
131
+ if (this.config.retentionDays === 0) {
132
+ return; // Keep forever
133
+ }
134
+ try {
135
+ const cutoffDate = new Date();
136
+ cutoffDate.setDate(cutoffDate.getDate() - this.config.retentionDays);
137
+ // Iterate through date directories
138
+ const entries = (0, node_fs_1.readdirSync)(this.config.logsDir, { withFileTypes: true });
139
+ for (const entry of entries) {
140
+ if (!entry.isDirectory()) {
141
+ continue;
142
+ }
143
+ // Check if directory name is a date (YYYY-MM-DD)
144
+ const dateMatch = entry.name.match(/^\d{4}-\d{2}-\d{2}$/);
145
+ if (!dateMatch) {
146
+ continue;
147
+ }
148
+ const dirDate = new Date(entry.name);
149
+ if (dirDate < cutoffDate) {
150
+ // Delete old directory
151
+ const dirPath = (0, node_path_1.join)(this.config.logsDir, entry.name);
152
+ (0, node_fs_1.rmSync)(dirPath, { recursive: true, force: true });
153
+ }
154
+ }
155
+ }
156
+ catch (error) {
157
+ console.warn(`Failed to cleanup old logs: ${error}`);
158
+ }
159
+ }
160
+ /**
161
+ * Get all log files
162
+ */
163
+ getAllLogs() {
164
+ if (!(0, node_fs_1.existsSync)(this.config.logsDir)) {
165
+ return [];
166
+ }
167
+ const logs = [];
168
+ try {
169
+ const entries = (0, node_fs_1.readdirSync)(this.config.logsDir, { withFileTypes: true });
170
+ for (const entry of entries) {
171
+ if (!entry.isDirectory()) {
172
+ continue;
173
+ }
174
+ const dateDir = (0, node_path_1.join)(this.config.logsDir, entry.name);
175
+ const logFiles = (0, node_fs_1.readdirSync)(dateDir).filter((f) => f.endsWith('.log'));
176
+ for (const logFile of logFiles) {
177
+ logs.push((0, node_path_1.join)(dateDir, logFile));
178
+ }
179
+ }
180
+ }
181
+ catch (error) {
182
+ console.warn(`Failed to list logs: ${error}`);
183
+ }
184
+ return logs.sort();
185
+ }
186
+ /**
187
+ * Purge all logs
188
+ */
189
+ purgeAll() {
190
+ if ((0, node_fs_1.existsSync)(this.config.logsDir)) {
191
+ try {
192
+ (0, node_fs_1.rmSync)(this.config.logsDir, { recursive: true, force: true });
193
+ (0, node_fs_1.mkdirSync)(this.config.logsDir, { recursive: true });
194
+ }
195
+ catch (error) {
196
+ console.warn(`Failed to purge logs: ${error}`);
197
+ }
198
+ }
199
+ }
200
+ /**
201
+ * Get total size of all logs in bytes
202
+ */
203
+ getTotalSize() {
204
+ const logs = this.getAllLogs();
205
+ let totalSize = 0;
206
+ for (const logPath of logs) {
207
+ try {
208
+ const stats = (0, node_fs_1.statSync)(logPath);
209
+ totalSize += stats.size;
210
+ }
211
+ catch {
212
+ // Ignore errors
213
+ }
214
+ }
215
+ return totalSize;
216
+ }
217
+ }
218
+ exports.InvocationLogger = InvocationLogger;
219
+ /**
220
+ * Global invocation logger instance
221
+ */
222
+ let globalLogger = null;
223
+ /**
224
+ * Get the global invocation logger
225
+ */
226
+ function getInvocationLogger(config) {
227
+ if (!globalLogger) {
228
+ globalLogger = new InvocationLogger(config);
229
+ }
230
+ return globalLogger;
231
+ }
232
+ /**
233
+ * Set the global invocation logger
234
+ */
235
+ function setInvocationLogger(logger) {
236
+ globalLogger = logger;
237
+ }
238
+ /**
239
+ * Reset the global invocation logger
240
+ */
241
+ function resetInvocationLogger() {
242
+ globalLogger = null;
243
+ }
244
+ /**
245
+ * Helper to log an invocation result
246
+ * Logs to both file system and database (if taskId provided)
247
+ */
248
+ function logInvocation(prompt, result, metadata) {
249
+ const logger = getInvocationLogger();
250
+ // Log to file system
251
+ logger.log({
252
+ timestamp: new Date().toISOString(),
253
+ role: metadata.role,
254
+ provider: metadata.provider,
255
+ model: metadata.model,
256
+ taskId: metadata.taskId,
257
+ duration: result.duration,
258
+ exitCode: result.exitCode,
259
+ success: result.success,
260
+ timedOut: result.timedOut,
261
+ prompt,
262
+ response: result.stdout,
263
+ error: result.stderr || undefined,
264
+ });
265
+ // Also log to database if we have a task ID
266
+ if (metadata.taskId && (metadata.role === 'coder' || metadata.role === 'reviewer')) {
267
+ try {
268
+ // Dynamic import to avoid circular dependencies
269
+ const { openDatabase } = require('../database/connection.js');
270
+ const { createTaskInvocation } = require('../database/queries.js');
271
+ const { db, close } = openDatabase(metadata.projectPath);
272
+ try {
273
+ createTaskInvocation(db, {
274
+ taskId: metadata.taskId,
275
+ role: metadata.role,
276
+ provider: metadata.provider,
277
+ model: metadata.model,
278
+ prompt,
279
+ response: result.stdout,
280
+ error: result.stderr || undefined,
281
+ exitCode: result.exitCode,
282
+ durationMs: result.duration,
283
+ success: result.success,
284
+ timedOut: result.timedOut,
285
+ rejectionNumber: metadata.rejectionNumber,
286
+ });
287
+ }
288
+ finally {
289
+ close();
290
+ }
291
+ }
292
+ catch (error) {
293
+ // Don't fail the invocation if database logging fails
294
+ console.warn(`Failed to log invocation to database: ${error}`);
295
+ }
296
+ }
297
+ }
298
+ //# sourceMappingURL=invocation-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocation-logger.js","sourceRoot":"","sources":["../../src/providers/invocation-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * OpenAI Provider
3
+ * Implementation for OpenAI CLI
4
+ */
5
+ import { BaseAIProvider, type InvokeOptions, type InvokeResult, type ModelInfo } from './interface.js';
6
+ /**
7
+ * OpenAI Provider implementation
8
+ */
9
+ export declare class OpenAIProvider extends BaseAIProvider {
10
+ readonly name = "openai";
11
+ readonly displayName = "OpenAI";
12
+ /**
13
+ * Write prompt to a temporary file
14
+ */
15
+ private writePromptFile;
16
+ /**
17
+ * Clean up temporary prompt file
18
+ */
19
+ private cleanupPromptFile;
20
+ /**
21
+ * Get the default invocation template
22
+ */
23
+ getDefaultInvocationTemplate(): string;
24
+ /**
25
+ * Invoke OpenAI CLI with a prompt
26
+ */
27
+ invoke(prompt: string, options: InvokeOptions): Promise<InvokeResult>;
28
+ /**
29
+ * Invoke OpenAI CLI with a prompt file using the invocation template
30
+ */
31
+ private invokeWithFile;
32
+ /**
33
+ * Check if OpenAI CLI is available
34
+ */
35
+ isAvailable(): Promise<boolean>;
36
+ /**
37
+ * List available model IDs
38
+ */
39
+ listModels(): string[];
40
+ /**
41
+ * Get detailed model information
42
+ */
43
+ getModelInfo(): ModelInfo[];
44
+ /**
45
+ * Get the default model for a role
46
+ */
47
+ getDefaultModel(role: 'orchestrator' | 'coder' | 'reviewer'): string;
48
+ }
49
+ /**
50
+ * Create an OpenAI provider instance
51
+ */
52
+ export declare function createOpenAIProvider(): OpenAIProvider;
53
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAoDxB;;GAEG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAEhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,4BAA4B,IAAI,MAAM;IAItC;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAuB3E;;OAEG;IACH,OAAO,CAAC,cAAc;IAgFtB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAyBrC;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,YAAY,IAAI,SAAS,EAAE;IAI3B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM;CAGrE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI Provider
4
+ * Implementation for OpenAI CLI
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.OpenAIProvider = void 0;
8
+ exports.createOpenAIProvider = createOpenAIProvider;
9
+ const node_child_process_1 = require("node:child_process");
10
+ const node_fs_1 = require("node:fs");
11
+ const node_os_1 = require("node:os");
12
+ const node_path_1 = require("node:path");
13
+ const interface_js_1 = require("./interface.js");
14
+ /**
15
+ * Available OpenAI models
16
+ */
17
+ const OPENAI_MODELS = [
18
+ {
19
+ id: 'gpt-4',
20
+ name: 'GPT-4',
21
+ recommendedFor: ['orchestrator', 'reviewer'],
22
+ supportsStreaming: true,
23
+ },
24
+ {
25
+ id: 'gpt-4-turbo',
26
+ name: 'GPT-4 Turbo',
27
+ recommendedFor: ['coder'],
28
+ supportsStreaming: true,
29
+ },
30
+ {
31
+ id: 'gpt-4o',
32
+ name: 'GPT-4o',
33
+ recommendedFor: ['coder'],
34
+ supportsStreaming: true,
35
+ },
36
+ {
37
+ id: 'gpt-3.5-turbo',
38
+ name: 'GPT-3.5 Turbo',
39
+ recommendedFor: [],
40
+ supportsStreaming: true,
41
+ },
42
+ ];
43
+ /**
44
+ * Default models per role
45
+ */
46
+ const DEFAULT_MODELS = {
47
+ orchestrator: 'gpt-4',
48
+ coder: 'gpt-4-turbo',
49
+ reviewer: 'gpt-4',
50
+ };
51
+ /**
52
+ * Default timeout in milliseconds (15 minutes)
53
+ */
54
+ const DEFAULT_TIMEOUT = 900_000;
55
+ /**
56
+ * Default invocation template for OpenAI CLI
57
+ * Uses api chat.completions.create with message from file
58
+ */
59
+ const DEFAULT_INVOCATION_TEMPLATE = '{cli} api chat.completions.create --model {model} --message "$(cat {prompt_file})"';
60
+ /**
61
+ * OpenAI Provider implementation
62
+ */
63
+ class OpenAIProvider extends interface_js_1.BaseAIProvider {
64
+ name = 'openai';
65
+ displayName = 'OpenAI';
66
+ /**
67
+ * Write prompt to a temporary file
68
+ */
69
+ writePromptFile(prompt) {
70
+ const tempPath = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `steroids-openai-${Date.now()}.txt`);
71
+ (0, node_fs_1.writeFileSync)(tempPath, prompt, { mode: 0o600 });
72
+ return tempPath;
73
+ }
74
+ /**
75
+ * Clean up temporary prompt file
76
+ */
77
+ cleanupPromptFile(path) {
78
+ try {
79
+ if ((0, node_fs_1.existsSync)(path)) {
80
+ (0, node_fs_1.unlinkSync)(path);
81
+ }
82
+ }
83
+ catch {
84
+ // Ignore cleanup errors
85
+ }
86
+ }
87
+ /**
88
+ * Get the default invocation template
89
+ */
90
+ getDefaultInvocationTemplate() {
91
+ return DEFAULT_INVOCATION_TEMPLATE;
92
+ }
93
+ /**
94
+ * Invoke OpenAI CLI with a prompt
95
+ */
96
+ async invoke(prompt, options) {
97
+ const timeout = options.timeout ?? DEFAULT_TIMEOUT;
98
+ const cwd = options.cwd ?? process.cwd();
99
+ const streamOutput = options.streamOutput ?? true;
100
+ // Apply custom invocation template if provided in options
101
+ if (options.invocationTemplate) {
102
+ this.setInvocationTemplate(options.invocationTemplate);
103
+ }
104
+ // Write prompt to temp file
105
+ const promptFile = options.promptFile ?? this.writePromptFile(prompt);
106
+ const createdTempFile = !options.promptFile;
107
+ try {
108
+ return await this.invokeWithFile(promptFile, options.model, timeout, cwd, streamOutput);
109
+ }
110
+ finally {
111
+ if (createdTempFile) {
112
+ this.cleanupPromptFile(promptFile);
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Invoke OpenAI CLI with a prompt file using the invocation template
118
+ */
119
+ invokeWithFile(promptFile, model, timeout, cwd, streamOutput) {
120
+ return new Promise((resolve) => {
121
+ const startTime = Date.now();
122
+ let stdout = '';
123
+ let stderr = '';
124
+ let timedOut = false;
125
+ // Build command from invocation template
126
+ const command = this.buildCommand(promptFile, model);
127
+ // Spawn using shell to handle the command template
128
+ const child = (0, node_child_process_1.spawn)(command, {
129
+ shell: true,
130
+ cwd,
131
+ stdio: ['pipe', 'pipe', 'pipe'],
132
+ });
133
+ const timeoutHandle = setTimeout(() => {
134
+ timedOut = true;
135
+ child.kill('SIGTERM');
136
+ // Force kill after 5 seconds if still running
137
+ setTimeout(() => {
138
+ if (!child.killed) {
139
+ child.kill('SIGKILL');
140
+ }
141
+ }, 5000);
142
+ }, timeout);
143
+ child.stdout?.on('data', (data) => {
144
+ const text = data.toString();
145
+ stdout += text;
146
+ if (streamOutput) {
147
+ process.stdout.write(text);
148
+ }
149
+ });
150
+ child.stderr?.on('data', (data) => {
151
+ const text = data.toString();
152
+ stderr += text;
153
+ if (streamOutput) {
154
+ process.stderr.write(text);
155
+ }
156
+ });
157
+ child.on('close', (code) => {
158
+ clearTimeout(timeoutHandle);
159
+ const duration = Date.now() - startTime;
160
+ resolve({
161
+ success: code === 0 && !timedOut,
162
+ exitCode: code ?? 1,
163
+ stdout,
164
+ stderr,
165
+ duration,
166
+ timedOut,
167
+ });
168
+ });
169
+ child.on('error', (error) => {
170
+ clearTimeout(timeoutHandle);
171
+ const duration = Date.now() - startTime;
172
+ resolve({
173
+ success: false,
174
+ exitCode: 1,
175
+ stdout,
176
+ stderr: error.message,
177
+ duration,
178
+ timedOut: false,
179
+ });
180
+ });
181
+ });
182
+ }
183
+ /**
184
+ * Check if OpenAI CLI is available
185
+ */
186
+ async isAvailable() {
187
+ return new Promise((resolve) => {
188
+ const cli = this.cliPath ?? 'openai';
189
+ const child = (0, node_child_process_1.spawn)('which', [cli], {
190
+ shell: true,
191
+ stdio: ['pipe', 'pipe', 'pipe'],
192
+ });
193
+ child.on('close', (code) => {
194
+ resolve(code === 0);
195
+ });
196
+ child.on('error', () => {
197
+ resolve(false);
198
+ });
199
+ // Timeout after 5 seconds
200
+ setTimeout(() => {
201
+ child.kill();
202
+ resolve(false);
203
+ }, 5000);
204
+ });
205
+ }
206
+ /**
207
+ * List available model IDs
208
+ */
209
+ listModels() {
210
+ return OPENAI_MODELS.map((m) => m.id);
211
+ }
212
+ /**
213
+ * Get detailed model information
214
+ */
215
+ getModelInfo() {
216
+ return [...OPENAI_MODELS];
217
+ }
218
+ /**
219
+ * Get the default model for a role
220
+ */
221
+ getDefaultModel(role) {
222
+ return DEFAULT_MODELS[role];
223
+ }
224
+ }
225
+ exports.OpenAIProvider = OpenAIProvider;
226
+ /**
227
+ * Create an OpenAI provider instance
228
+ */
229
+ function createOpenAIProvider() {
230
+ return new OpenAIProvider();
231
+ }
232
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}