fixo-cli 1.0.0

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 (303) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +530 -0
  3. package/dist/agent/agent-client.d.ts +108 -0
  4. package/dist/agent/agent-client.d.ts.map +1 -0
  5. package/dist/agent/agent-client.js +1247 -0
  6. package/dist/agent/agent-client.js.map +1 -0
  7. package/dist/agent/agent-pool.d.ts +20 -0
  8. package/dist/agent/agent-pool.d.ts.map +1 -0
  9. package/dist/agent/agent-pool.js +217 -0
  10. package/dist/agent/agent-pool.js.map +1 -0
  11. package/dist/agent/background-awareness.d.ts +55 -0
  12. package/dist/agent/background-awareness.d.ts.map +1 -0
  13. package/dist/agent/background-awareness.js +104 -0
  14. package/dist/agent/background-awareness.js.map +1 -0
  15. package/dist/agent/command-parser.d.ts +33 -0
  16. package/dist/agent/command-parser.d.ts.map +1 -0
  17. package/dist/agent/command-parser.js +120 -0
  18. package/dist/agent/command-parser.js.map +1 -0
  19. package/dist/agent/context-budget.d.ts +91 -0
  20. package/dist/agent/context-budget.d.ts.map +1 -0
  21. package/dist/agent/context-budget.js +219 -0
  22. package/dist/agent/context-budget.js.map +1 -0
  23. package/dist/agent/conversation.d.ts +190 -0
  24. package/dist/agent/conversation.d.ts.map +1 -0
  25. package/dist/agent/conversation.js +547 -0
  26. package/dist/agent/conversation.js.map +1 -0
  27. package/dist/agent/hooks.d.ts +72 -0
  28. package/dist/agent/hooks.d.ts.map +1 -0
  29. package/dist/agent/hooks.js +214 -0
  30. package/dist/agent/hooks.js.map +1 -0
  31. package/dist/agent/mcp-bridge.d.ts +13 -0
  32. package/dist/agent/mcp-bridge.d.ts.map +1 -0
  33. package/dist/agent/mcp-bridge.js +86 -0
  34. package/dist/agent/mcp-bridge.js.map +1 -0
  35. package/dist/agent/mcp-client.d.ts +24 -0
  36. package/dist/agent/mcp-client.d.ts.map +1 -0
  37. package/dist/agent/mcp-client.js +146 -0
  38. package/dist/agent/mcp-client.js.map +1 -0
  39. package/dist/agent/mcp-manager.d.ts +13 -0
  40. package/dist/agent/mcp-manager.d.ts.map +1 -0
  41. package/dist/agent/mcp-manager.js +84 -0
  42. package/dist/agent/mcp-manager.js.map +1 -0
  43. package/dist/agent/mcp-registry.d.ts +45 -0
  44. package/dist/agent/mcp-registry.d.ts.map +1 -0
  45. package/dist/agent/mcp-registry.js +98 -0
  46. package/dist/agent/mcp-registry.js.map +1 -0
  47. package/dist/agent/orchestrator.d.ts +14 -0
  48. package/dist/agent/orchestrator.d.ts.map +1 -0
  49. package/dist/agent/orchestrator.js +118 -0
  50. package/dist/agent/orchestrator.js.map +1 -0
  51. package/dist/agent/parser-adapter.d.ts +120 -0
  52. package/dist/agent/parser-adapter.d.ts.map +1 -0
  53. package/dist/agent/parser-adapter.js +265 -0
  54. package/dist/agent/parser-adapter.js.map +1 -0
  55. package/dist/agent/parsers/imports.d.ts +11 -0
  56. package/dist/agent/parsers/imports.d.ts.map +1 -0
  57. package/dist/agent/parsers/imports.js +94 -0
  58. package/dist/agent/parsers/imports.js.map +1 -0
  59. package/dist/agent/parsers/shell.d.ts +23 -0
  60. package/dist/agent/parsers/shell.d.ts.map +1 -0
  61. package/dist/agent/parsers/shell.js +200 -0
  62. package/dist/agent/parsers/shell.js.map +1 -0
  63. package/dist/agent/parsers/symbols.d.ts +17 -0
  64. package/dist/agent/parsers/symbols.d.ts.map +1 -0
  65. package/dist/agent/parsers/symbols.js +103 -0
  66. package/dist/agent/parsers/symbols.js.map +1 -0
  67. package/dist/agent/permissions.d.ts +65 -0
  68. package/dist/agent/permissions.d.ts.map +1 -0
  69. package/dist/agent/permissions.js +219 -0
  70. package/dist/agent/permissions.js.map +1 -0
  71. package/dist/agent/predictive-gate.d.ts +69 -0
  72. package/dist/agent/predictive-gate.d.ts.map +1 -0
  73. package/dist/agent/predictive-gate.js +128 -0
  74. package/dist/agent/predictive-gate.js.map +1 -0
  75. package/dist/agent/provider-cooldown.d.ts +144 -0
  76. package/dist/agent/provider-cooldown.d.ts.map +1 -0
  77. package/dist/agent/provider-cooldown.js +300 -0
  78. package/dist/agent/provider-cooldown.js.map +1 -0
  79. package/dist/agent/providers-manager.d.ts +109 -0
  80. package/dist/agent/providers-manager.d.ts.map +1 -0
  81. package/dist/agent/providers-manager.js +464 -0
  82. package/dist/agent/providers-manager.js.map +1 -0
  83. package/dist/agent/repo-map.d.ts +6 -0
  84. package/dist/agent/repo-map.d.ts.map +1 -0
  85. package/dist/agent/repo-map.js +221 -0
  86. package/dist/agent/repo-map.js.map +1 -0
  87. package/dist/agent/retry.d.ts +103 -0
  88. package/dist/agent/retry.d.ts.map +1 -0
  89. package/dist/agent/retry.js +276 -0
  90. package/dist/agent/retry.js.map +1 -0
  91. package/dist/agent/search/index.d.ts +61 -0
  92. package/dist/agent/search/index.d.ts.map +1 -0
  93. package/dist/agent/search/index.js +314 -0
  94. package/dist/agent/search/index.js.map +1 -0
  95. package/dist/agent/single-agent.d.ts +76 -0
  96. package/dist/agent/single-agent.d.ts.map +1 -0
  97. package/dist/agent/single-agent.js +697 -0
  98. package/dist/agent/single-agent.js.map +1 -0
  99. package/dist/agent/skills.d.ts +22 -0
  100. package/dist/agent/skills.d.ts.map +1 -0
  101. package/dist/agent/skills.js +139 -0
  102. package/dist/agent/skills.js.map +1 -0
  103. package/dist/agent/stream-glue.d.ts +85 -0
  104. package/dist/agent/stream-glue.d.ts.map +1 -0
  105. package/dist/agent/stream-glue.js +120 -0
  106. package/dist/agent/stream-glue.js.map +1 -0
  107. package/dist/agent/subagent.d.ts +72 -0
  108. package/dist/agent/subagent.d.ts.map +1 -0
  109. package/dist/agent/subagent.js +193 -0
  110. package/dist/agent/subagent.js.map +1 -0
  111. package/dist/agent/telemetry.d.ts +192 -0
  112. package/dist/agent/telemetry.d.ts.map +1 -0
  113. package/dist/agent/telemetry.js +400 -0
  114. package/dist/agent/telemetry.js.map +1 -0
  115. package/dist/agent/tokenizer.d.ts +42 -0
  116. package/dist/agent/tokenizer.d.ts.map +1 -0
  117. package/dist/agent/tokenizer.js +107 -0
  118. package/dist/agent/tokenizer.js.map +1 -0
  119. package/dist/agent/tool-executor.d.ts +289 -0
  120. package/dist/agent/tool-executor.d.ts.map +1 -0
  121. package/dist/agent/tool-executor.js +2519 -0
  122. package/dist/agent/tool-executor.js.map +1 -0
  123. package/dist/agent/web-impl.d.ts +2 -0
  124. package/dist/agent/web-impl.d.ts.map +1 -0
  125. package/dist/agent/web-impl.js +34 -0
  126. package/dist/agent/web-impl.js.map +1 -0
  127. package/dist/agent/web.d.ts +8 -0
  128. package/dist/agent/web.d.ts.map +1 -0
  129. package/dist/agent/web.js +8 -0
  130. package/dist/agent/web.js.map +1 -0
  131. package/dist/agent/worker-agent.d.ts +27 -0
  132. package/dist/agent/worker-agent.d.ts.map +1 -0
  133. package/dist/agent/worker-agent.js +503 -0
  134. package/dist/agent/worker-agent.js.map +1 -0
  135. package/dist/config.d.ts +162 -0
  136. package/dist/config.d.ts.map +1 -0
  137. package/dist/config.js +138 -0
  138. package/dist/config.js.map +1 -0
  139. package/dist/context/fixo-md-watcher.d.ts +42 -0
  140. package/dist/context/fixo-md-watcher.d.ts.map +1 -0
  141. package/dist/context/fixo-md-watcher.js +126 -0
  142. package/dist/context/fixo-md-watcher.js.map +1 -0
  143. package/dist/context/fixo-md.d.ts +50 -0
  144. package/dist/context/fixo-md.d.ts.map +1 -0
  145. package/dist/context/fixo-md.js +118 -0
  146. package/dist/context/fixo-md.js.map +1 -0
  147. package/dist/context/todo.d.ts +65 -0
  148. package/dist/context/todo.d.ts.map +1 -0
  149. package/dist/context/todo.js +194 -0
  150. package/dist/context/todo.js.map +1 -0
  151. package/dist/git/git-manager.d.ts +33 -0
  152. package/dist/git/git-manager.d.ts.map +1 -0
  153. package/dist/git/git-manager.js +293 -0
  154. package/dist/git/git-manager.js.map +1 -0
  155. package/dist/git/git-ops.d.ts +10 -0
  156. package/dist/git/git-ops.d.ts.map +1 -0
  157. package/dist/git/git-ops.js +131 -0
  158. package/dist/git/git-ops.js.map +1 -0
  159. package/dist/index.d.ts +3 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +352 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/indexer.d.ts +30 -0
  164. package/dist/indexer.d.ts.map +1 -0
  165. package/dist/indexer.js +273 -0
  166. package/dist/indexer.js.map +1 -0
  167. package/dist/lsp/lsp-client.d.ts +24 -0
  168. package/dist/lsp/lsp-client.d.ts.map +1 -0
  169. package/dist/lsp/lsp-client.js +205 -0
  170. package/dist/lsp/lsp-client.js.map +1 -0
  171. package/dist/lsp/lsp-manager.d.ts +17 -0
  172. package/dist/lsp/lsp-manager.d.ts.map +1 -0
  173. package/dist/lsp/lsp-manager.js +154 -0
  174. package/dist/lsp/lsp-manager.js.map +1 -0
  175. package/dist/lsp/lsp-pre-save.d.ts +137 -0
  176. package/dist/lsp/lsp-pre-save.d.ts.map +1 -0
  177. package/dist/lsp/lsp-pre-save.js +245 -0
  178. package/dist/lsp/lsp-pre-save.js.map +1 -0
  179. package/dist/lsp/syntax-fallback.d.ts +83 -0
  180. package/dist/lsp/syntax-fallback.d.ts.map +1 -0
  181. package/dist/lsp/syntax-fallback.js +275 -0
  182. package/dist/lsp/syntax-fallback.js.map +1 -0
  183. package/dist/model-outcomes.d.ts +12 -0
  184. package/dist/model-outcomes.d.ts.map +1 -0
  185. package/dist/model-outcomes.js +46 -0
  186. package/dist/model-outcomes.js.map +1 -0
  187. package/dist/planner.d.ts +32 -0
  188. package/dist/planner.d.ts.map +1 -0
  189. package/dist/planner.js +163 -0
  190. package/dist/planner.js.map +1 -0
  191. package/dist/project-memory.d.ts +29 -0
  192. package/dist/project-memory.d.ts.map +1 -0
  193. package/dist/project-memory.js +349 -0
  194. package/dist/project-memory.js.map +1 -0
  195. package/dist/review.d.ts +2 -0
  196. package/dist/review.d.ts.map +1 -0
  197. package/dist/review.js +61 -0
  198. package/dist/review.js.map +1 -0
  199. package/dist/runtime/background-jobs.d.ts +97 -0
  200. package/dist/runtime/background-jobs.d.ts.map +1 -0
  201. package/dist/runtime/background-jobs.js +331 -0
  202. package/dist/runtime/background-jobs.js.map +1 -0
  203. package/dist/runtime/credential-vault.d.ts +124 -0
  204. package/dist/runtime/credential-vault.d.ts.map +1 -0
  205. package/dist/runtime/credential-vault.js +184 -0
  206. package/dist/runtime/credential-vault.js.map +1 -0
  207. package/dist/runtime/loop-trap.d.ts +197 -0
  208. package/dist/runtime/loop-trap.d.ts.map +1 -0
  209. package/dist/runtime/loop-trap.js +420 -0
  210. package/dist/runtime/loop-trap.js.map +1 -0
  211. package/dist/runtime/policy.d.ts +15 -0
  212. package/dist/runtime/policy.d.ts.map +1 -0
  213. package/dist/runtime/policy.js +60 -0
  214. package/dist/runtime/policy.js.map +1 -0
  215. package/dist/runtime/redaction.d.ts +66 -0
  216. package/dist/runtime/redaction.d.ts.map +1 -0
  217. package/dist/runtime/redaction.js +155 -0
  218. package/dist/runtime/redaction.js.map +1 -0
  219. package/dist/runtime/session-snapshots.d.ts +76 -0
  220. package/dist/runtime/session-snapshots.d.ts.map +1 -0
  221. package/dist/runtime/session-snapshots.js +166 -0
  222. package/dist/runtime/session-snapshots.js.map +1 -0
  223. package/dist/runtime/staging.d.ts +205 -0
  224. package/dist/runtime/staging.d.ts.map +1 -0
  225. package/dist/runtime/staging.js +526 -0
  226. package/dist/runtime/staging.js.map +1 -0
  227. package/dist/runtime/task-session.d.ts +95 -0
  228. package/dist/runtime/task-session.d.ts.map +1 -0
  229. package/dist/runtime/task-session.js +263 -0
  230. package/dist/runtime/task-session.js.map +1 -0
  231. package/dist/runtime/worktree.d.ts +55 -0
  232. package/dist/runtime/worktree.d.ts.map +1 -0
  233. package/dist/runtime/worktree.js +175 -0
  234. package/dist/runtime/worktree.js.map +1 -0
  235. package/dist/setup-wizard.d.ts +8 -0
  236. package/dist/setup-wizard.d.ts.map +1 -0
  237. package/dist/setup-wizard.js +73 -0
  238. package/dist/setup-wizard.js.map +1 -0
  239. package/dist/shared/content.d.ts +43 -0
  240. package/dist/shared/content.d.ts.map +1 -0
  241. package/dist/shared/content.js +61 -0
  242. package/dist/shared/content.js.map +1 -0
  243. package/dist/shared/types.d.ts +217 -0
  244. package/dist/shared/types.d.ts.map +1 -0
  245. package/dist/shared/types.js +3 -0
  246. package/dist/shared/types.js.map +1 -0
  247. package/dist/test-runner.d.ts +5 -0
  248. package/dist/test-runner.d.ts.map +1 -0
  249. package/dist/test-runner.js +42 -0
  250. package/dist/test-runner.js.map +1 -0
  251. package/dist/types.d.ts +85 -0
  252. package/dist/types.d.ts.map +1 -0
  253. package/dist/types.js +2 -0
  254. package/dist/types.js.map +1 -0
  255. package/dist/ui/ascii.d.ts +23 -0
  256. package/dist/ui/ascii.d.ts.map +1 -0
  257. package/dist/ui/ascii.js +45 -0
  258. package/dist/ui/ascii.js.map +1 -0
  259. package/dist/ui/colors.d.ts +111 -0
  260. package/dist/ui/colors.d.ts.map +1 -0
  261. package/dist/ui/colors.js +166 -0
  262. package/dist/ui/colors.js.map +1 -0
  263. package/dist/ui/image-attach.d.ts +27 -0
  264. package/dist/ui/image-attach.d.ts.map +1 -0
  265. package/dist/ui/image-attach.js +100 -0
  266. package/dist/ui/image-attach.js.map +1 -0
  267. package/dist/ui/index.d.ts +18 -0
  268. package/dist/ui/index.d.ts.map +1 -0
  269. package/dist/ui/index.js +18 -0
  270. package/dist/ui/index.js.map +1 -0
  271. package/dist/ui/markdown-stream.d.ts +91 -0
  272. package/dist/ui/markdown-stream.d.ts.map +1 -0
  273. package/dist/ui/markdown-stream.js +524 -0
  274. package/dist/ui/markdown-stream.js.map +1 -0
  275. package/dist/ui/plan-renderer.d.ts +36 -0
  276. package/dist/ui/plan-renderer.d.ts.map +1 -0
  277. package/dist/ui/plan-renderer.js +79 -0
  278. package/dist/ui/plan-renderer.js.map +1 -0
  279. package/dist/ui/prompt.d.ts +11 -0
  280. package/dist/ui/prompt.d.ts.map +1 -0
  281. package/dist/ui/prompt.js +1960 -0
  282. package/dist/ui/prompt.js.map +1 -0
  283. package/dist/ui/render-primitives.d.ts +117 -0
  284. package/dist/ui/render-primitives.d.ts.map +1 -0
  285. package/dist/ui/render-primitives.js +322 -0
  286. package/dist/ui/render-primitives.js.map +1 -0
  287. package/dist/ui/render.d.ts +133 -0
  288. package/dist/ui/render.d.ts.map +1 -0
  289. package/dist/ui/render.js +547 -0
  290. package/dist/ui/render.js.map +1 -0
  291. package/dist/ui/session-header.d.ts +30 -0
  292. package/dist/ui/session-header.d.ts.map +1 -0
  293. package/dist/ui/session-header.js +74 -0
  294. package/dist/ui/session-header.js.map +1 -0
  295. package/dist/workspace-guard.d.ts +68 -0
  296. package/dist/workspace-guard.d.ts.map +1 -0
  297. package/dist/workspace-guard.js +168 -0
  298. package/dist/workspace-guard.js.map +1 -0
  299. package/dist/workspace-lock.d.ts +27 -0
  300. package/dist/workspace-lock.d.ts.map +1 -0
  301. package/dist/workspace-lock.js +95 -0
  302. package/dist/workspace-lock.js.map +1 -0
  303. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixo-md.js","sourceRoot":"","sources":["../../src/context/fixo-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAe5C,oEAAoE;AAEpE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,UAAU,GAA+C;QAC7D,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE;QACjE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE;QACvD,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,CAAC,EAAE;KAC9D,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO;QACP,KAAK;KACN,CAAC;AACJ,CAAC;AAED,oEAAoE;AAEpE;;;;;;;;GAQG;AACH,MAAM,UAAU,6BAA6B,CAAC,GAAW;IAIvD,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,QAAQ;QACxB,CAAC,CAAC,+CAA+C;QACjD,CAAC,CAAC,8BAA8B,MAAM,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;IAChE,MAAM,KAAK,GACT,qCAAqC,MAAM,CAAC,MAAM,MAAM;QACxD,MAAM,MAAM,MAAM;QAClB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI;QAC5B,2BAA2B,CAAC;IAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAED,iEAAiE;AAEjE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAwB;IAC7D,IAAI,CAAC;QACH,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC7E,eAAe,CACb,SAAS,CAAC,YAAY,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,65 @@
1
+ export type TodoStatus = 'pending' | 'in_progress' | 'done' | 'cancelled';
2
+ export interface TodoItem {
3
+ id: string;
4
+ content: string;
5
+ status: TodoStatus;
6
+ /** Optional blocker description — surfaced in the per-turn summary. */
7
+ blockedBy?: string;
8
+ createdAt: number;
9
+ updatedAt: number;
10
+ }
11
+ export interface TodoList {
12
+ version: 1;
13
+ items: TodoItem[];
14
+ /** Epoch ms of the most recent mutation. */
15
+ updatedAt: number;
16
+ }
17
+ export declare function emptyTodoList(): TodoList;
18
+ /**
19
+ * Read the todo list from disk. Returns an empty list when the
20
+ * file does not exist, is empty, or fails to parse — the
21
+ * loader never throws on a missing file because todo state is
22
+ * optional project metadata.
23
+ */
24
+ export declare function loadTodoList(cwd: string): TodoList;
25
+ export interface SaveResult {
26
+ ok: boolean;
27
+ path: string;
28
+ error?: string;
29
+ }
30
+ /**
31
+ * Persist the list atomically: write to `<path>.tmp`, rename
32
+ * over the final path. Creates the `.fixo` directory if it
33
+ * does not exist.
34
+ */
35
+ export declare function saveTodoList(cwd: string, list: TodoList): SaveResult;
36
+ export interface AddItemInput {
37
+ content: string;
38
+ blockedBy?: string;
39
+ }
40
+ export declare function addItem(list: TodoList, input: AddItemInput, now?: number): TodoList;
41
+ export interface SetStatusInput {
42
+ id: string;
43
+ status: TodoStatus;
44
+ }
45
+ export declare function setItemStatus(list: TodoList, input: SetStatusInput, now?: number): TodoList;
46
+ export interface RemoveItemInput {
47
+ id: string;
48
+ }
49
+ export declare function removeItem(list: TodoList, input: RemoveItemInput, now?: number): TodoList;
50
+ export declare function clearDoneItems(list: TodoList, now?: number): TodoList;
51
+ /**
52
+ * One-line summary injected as a system message after every
53
+ * turn. Format is deliberately stable so the LLM can diff
54
+ * consecutive summaries cheaply.
55
+ *
56
+ * Empty list → empty string (no message appended).
57
+ */
58
+ export declare function summariseTodoList(list: TodoList): string;
59
+ /**
60
+ * Multi-line rendering for `/todo` slash command. Markdown-like,
61
+ * deterministic ordering (open items first, by createdAt asc;
62
+ * done/cancelled at the end).
63
+ */
64
+ export declare function renderTodoList(list: TodoList): string;
65
+ //# sourceMappingURL=todo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo.d.ts","sourceRoot":"","sources":["../../src/context/todo.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAE1E,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD,wBAAgB,aAAa,IAAI,QAAQ,CAExC;AA6BD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAmBlD;AAID,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,UAAU,CAkBpE;AAID,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,GAAE,MAAmB,GAAG,QAAQ,CAY/F;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,GAAE,MAAmB,GAAG,QAAQ,CAOvG;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,GAAE,MAAmB,GAAG,QAAQ,CAErG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAE,MAAmB,GAAG,QAAQ,CAMjF;AAID;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAUxD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAuBrD"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * todo.ts — Persistent, project-local todo list for the agent.
3
+ *
4
+ * A todo list is the agent's "external working memory": a tiny,
5
+ * ordered set of `{ id, content, status, createdAt, updatedAt }`
6
+ * records the agent reads and writes as it works. Persisted as
7
+ * JSON to `<cwd>/.fixo/todo_list.json` so the user can inspect
8
+ * the agent's state at any time, and so a crashed session can
9
+ * pick up where it left off.
10
+ *
11
+ * Atomicity: writes go to `<file>.tmp` first, then `fs.renameSync`
12
+ * over the final path. This is the same pattern used elsewhere
13
+ * in the runtime (see `AtomicStagingManager`).
14
+ *
15
+ * Concurrency: the runtime is single-process, so we do not need
16
+ * a file lock — the runtime only has one REPL at a time.
17
+ */
18
+ import fs from 'node:fs';
19
+ import path from 'node:path';
20
+ import { randomUUID } from 'node:crypto';
21
+ const TODO_FILENAME = 'todo_list.json';
22
+ const TODO_SUBDIR = '.fixo';
23
+ function todoPath(cwd) {
24
+ return path.join(cwd, TODO_SUBDIR, TODO_FILENAME);
25
+ }
26
+ /* ──────────────────────── factory ──────────────────────── */
27
+ export function emptyTodoList() {
28
+ return { version: 1, items: [], updatedAt: Date.now() };
29
+ }
30
+ function normaliseItems(raw) {
31
+ if (!Array.isArray(raw))
32
+ return [];
33
+ const out = [];
34
+ const seen = new Set();
35
+ for (const r of raw) {
36
+ if (!r || typeof r !== 'object')
37
+ continue;
38
+ const obj = r;
39
+ const id = typeof obj.id === 'string' && obj.id.length > 0 ? obj.id : randomUUID();
40
+ if (seen.has(id))
41
+ continue;
42
+ seen.add(id);
43
+ const content = typeof obj.content === 'string' ? obj.content : '';
44
+ if (content.length === 0)
45
+ continue;
46
+ const status = (obj.status === 'in_progress' ||
47
+ obj.status === 'done' ||
48
+ obj.status === 'cancelled') ? obj.status : 'pending';
49
+ const blockedBy = typeof obj.blockedBy === 'string' ? obj.blockedBy : undefined;
50
+ const createdAt = typeof obj.createdAt === 'number' ? obj.createdAt : Date.now();
51
+ const updatedAt = typeof obj.updatedAt === 'number' ? obj.updatedAt : createdAt;
52
+ out.push({ id, content, status, blockedBy, createdAt, updatedAt });
53
+ }
54
+ return out;
55
+ }
56
+ /* ──────────────────────── read ──────────────────────── */
57
+ /**
58
+ * Read the todo list from disk. Returns an empty list when the
59
+ * file does not exist, is empty, or fails to parse — the
60
+ * loader never throws on a missing file because todo state is
61
+ * optional project metadata.
62
+ */
63
+ export function loadTodoList(cwd) {
64
+ const p = todoPath(cwd);
65
+ let raw;
66
+ try {
67
+ raw = fs.readFileSync(p, 'utf-8');
68
+ }
69
+ catch {
70
+ return emptyTodoList();
71
+ }
72
+ if (raw.trim().length === 0)
73
+ return emptyTodoList();
74
+ try {
75
+ const parsed = JSON.parse(raw);
76
+ if (!parsed || typeof parsed !== 'object')
77
+ return emptyTodoList();
78
+ const obj = parsed;
79
+ const items = normaliseItems(obj.items);
80
+ const updatedAt = typeof obj.updatedAt === 'number' ? obj.updatedAt : Date.now();
81
+ return { version: 1, items, updatedAt };
82
+ }
83
+ catch {
84
+ return emptyTodoList();
85
+ }
86
+ }
87
+ /**
88
+ * Persist the list atomically: write to `<path>.tmp`, rename
89
+ * over the final path. Creates the `.fixo` directory if it
90
+ * does not exist.
91
+ */
92
+ export function saveTodoList(cwd, list) {
93
+ const p = todoPath(cwd);
94
+ const dir = path.dirname(p);
95
+ try {
96
+ fs.mkdirSync(dir, { recursive: true });
97
+ }
98
+ catch (err) {
99
+ return { ok: false, path: p, error: err.message };
100
+ }
101
+ const stamped = { ...list, version: 1, updatedAt: Date.now() };
102
+ const tmp = `${p}.tmp`;
103
+ const payload = JSON.stringify(stamped, null, 2);
104
+ try {
105
+ fs.writeFileSync(tmp, payload, { encoding: 'utf-8', mode: 0o600 });
106
+ fs.renameSync(tmp, p);
107
+ return { ok: true, path: p };
108
+ }
109
+ catch (err) {
110
+ return { ok: false, path: p, error: err.message };
111
+ }
112
+ }
113
+ export function addItem(list, input, now = Date.now()) {
114
+ const trimmed = input.content.trim();
115
+ if (trimmed.length === 0)
116
+ return list;
117
+ const item = {
118
+ id: randomUUID(),
119
+ content: trimmed,
120
+ status: 'pending',
121
+ blockedBy: input.blockedBy?.trim() || undefined,
122
+ createdAt: now,
123
+ updatedAt: now,
124
+ };
125
+ return { ...list, items: [...list.items, item], updatedAt: now };
126
+ }
127
+ export function setItemStatus(list, input, now = Date.now()) {
128
+ const items = list.items.map((it) => it.id === input.id
129
+ ? { ...it, status: input.status, updatedAt: now }
130
+ : it);
131
+ return { ...list, items, updatedAt: now };
132
+ }
133
+ export function removeItem(list, input, now = Date.now()) {
134
+ return { ...list, items: list.items.filter((it) => it.id !== input.id), updatedAt: now };
135
+ }
136
+ export function clearDoneItems(list, now = Date.now()) {
137
+ return {
138
+ ...list,
139
+ items: list.items.filter((it) => it.status !== 'done' && it.status !== 'cancelled'),
140
+ updatedAt: now,
141
+ };
142
+ }
143
+ /* ──────────────────────── summary ──────────────────────── */
144
+ /**
145
+ * One-line summary injected as a system message after every
146
+ * turn. Format is deliberately stable so the LLM can diff
147
+ * consecutive summaries cheaply.
148
+ *
149
+ * Empty list → empty string (no message appended).
150
+ */
151
+ export function summariseTodoList(list) {
152
+ if (list.items.length === 0)
153
+ return '';
154
+ const open = list.items.filter((it) => it.status === 'pending' || it.status === 'in_progress');
155
+ const done = list.items.filter((it) => it.status === 'done');
156
+ const blocked = open.filter((it) => it.blockedBy && it.blockedBy.length > 0);
157
+ const inProgress = open.find((it) => it.status === 'in_progress');
158
+ const head = `Todo: ${open.length} open / ${done.length} done / ${list.items.length} total`;
159
+ const current = inProgress ? ` — current: "${inProgress.content}"` : '';
160
+ const blockSuffix = blocked.length > 0 ? ` — ${blocked.length} blocked` : '';
161
+ return head + current + blockSuffix;
162
+ }
163
+ /**
164
+ * Multi-line rendering for `/todo` slash command. Markdown-like,
165
+ * deterministic ordering (open items first, by createdAt asc;
166
+ * done/cancelled at the end).
167
+ */
168
+ export function renderTodoList(list) {
169
+ if (list.items.length === 0)
170
+ return '(todo list is empty)';
171
+ const open = list.items.filter((it) => it.status === 'pending' || it.status === 'in_progress');
172
+ const done = list.items.filter((it) => it.status === 'done' || it.status === 'cancelled');
173
+ const orderFn = (a, b) => a.createdAt - b.createdAt;
174
+ open.sort(orderFn);
175
+ done.sort(orderFn);
176
+ const renderItem = (it) => {
177
+ const tag = it.status === 'in_progress' ? '[~]' : it.status === 'done' ? '[x]' : it.status === 'cancelled' ? '[-]' : '[ ]';
178
+ const block = it.blockedBy ? ` (blocked: ${it.blockedBy})` : '';
179
+ return `${tag} ${it.content}${block}`;
180
+ };
181
+ const lines = [];
182
+ if (open.length > 0) {
183
+ lines.push('Open:');
184
+ for (const it of open)
185
+ lines.push(' ' + renderItem(it));
186
+ }
187
+ if (done.length > 0) {
188
+ lines.push('Completed:');
189
+ for (const it of done)
190
+ lines.push(' ' + renderItem(it));
191
+ }
192
+ return lines.join('\n');
193
+ }
194
+ //# sourceMappingURL=todo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo.js","sourceRoot":"","sources":["../../src/context/todo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export declare class GitManager {
2
+ private cwd;
3
+ private guard;
4
+ constructor(cwd: string);
5
+ /** Check if the current directory is inside a git repository. */
6
+ isGitRepo(): boolean;
7
+ /** Get the current branch name. */
8
+ getCurrentBranch(): string;
9
+ /** Check if there are uncommitted changes. */
10
+ hasChanges(): boolean;
11
+ /** Get a list of files with uncommitted changes (staged, unstaged, or untracked). */
12
+ getDirtyFiles(): string[];
13
+ /** Get a colored diff summary for display. */
14
+ getDiff(): string;
15
+ /**
16
+ * Auto-commit all changes with a generated commit message.
17
+ * Returns the short commit hash, or null if nothing to commit.
18
+ */
19
+ autoCommit(task: string, modifiedFiles: string[]): string | null;
20
+ /** Undo the last commit, performing a hard reset of the working tree. */
21
+ undoLastCommit(): boolean;
22
+ /** Get last N commit messages for display. */
23
+ getRecentCommits(count?: number): string;
24
+ /** Discard all uncommitted modifications and untracked files in the workspace. */
25
+ discardUncommittedChanges(): void;
26
+ /**
27
+ * Create a named workspace snapshot commit (works in non-auto-commit mode).
28
+ * Stages all changes and commits with "fixo-snapshot: <label>" message.
29
+ * Returns the short hash, or null if nothing to commit / not a git repo.
30
+ */
31
+ createSnapshot(label: string): string | null;
32
+ }
33
+ //# sourceMappingURL=git-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-manager.d.ts","sourceRoot":"","sources":["../../src/git/git-manager.ts"],"names":[],"mappings":"AAsBA,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAiB;gBAElB,GAAG,EAAE,MAAM;IAKvB,iEAAiE;IACjE,SAAS,IAAI,OAAO;IAapB,mCAAmC;IACnC,gBAAgB,IAAI,MAAM;IAY1B,8CAA8C;IAC9C,UAAU,IAAI,OAAO;IAarB,qFAAqF;IACrF,aAAa,IAAI,MAAM,EAAE;IAuBzB,8CAA8C;IAC9C,OAAO,IAAI,MAAM;IA8CjB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI;IAkEhE,yEAAyE;IACzE,cAAc,IAAI,OAAO;IAsCzB,8CAA8C;IAC9C,gBAAgB,CAAC,KAAK,SAAI,GAAG,MAAM;IAWnC,kFAAkF;IAClF,yBAAyB,IAAI,IAAI;IAWjC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAgC7C"}
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Git integration manager for automated commits, undo, and diff viewing.
3
+ * All git operations are safely sandboxed to the workspace directory.
4
+ */
5
+ import { execFileSync } from 'child_process';
6
+ import { WorkspaceGuard } from '../workspace-guard.js';
7
+ import { C } from '../ui/colors.js';
8
+ /* ──────────────────────── ANSI Colors ──────────────────────── */
9
+ const colors = {
10
+ reset: C.RESET,
11
+ bold: C.BOLD,
12
+ dim: C.SNOW4,
13
+ green: C.GREEN,
14
+ yellow: C.YELLOW,
15
+ red: C.RED,
16
+ cyan: C.BLUE,
17
+ };
18
+ /* ──────────────────────── GitManager ──────────────────────── */
19
+ export class GitManager {
20
+ cwd;
21
+ guard;
22
+ constructor(cwd) {
23
+ this.cwd = cwd;
24
+ this.guard = new WorkspaceGuard(cwd);
25
+ }
26
+ /** Check if the current directory is inside a git repository. */
27
+ isGitRepo() {
28
+ try {
29
+ const result = execFileSync('git', ['rev-parse', '--is-inside-work-tree'], {
30
+ cwd: this.cwd,
31
+ encoding: 'utf-8',
32
+ stdio: ['pipe', 'pipe', 'pipe'],
33
+ });
34
+ return result.trim() === 'true';
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ /** Get the current branch name. */
41
+ getCurrentBranch() {
42
+ try {
43
+ return execFileSync('git', ['branch', '--show-current'], {
44
+ cwd: this.cwd,
45
+ encoding: 'utf-8',
46
+ stdio: ['pipe', 'pipe', 'pipe'],
47
+ }).trim() || 'HEAD';
48
+ }
49
+ catch {
50
+ return 'unknown';
51
+ }
52
+ }
53
+ /** Check if there are uncommitted changes. */
54
+ hasChanges() {
55
+ try {
56
+ const result = execFileSync('git', ['status', '--porcelain'], {
57
+ cwd: this.cwd,
58
+ encoding: 'utf-8',
59
+ stdio: ['pipe', 'pipe', 'pipe'],
60
+ });
61
+ return result.trim().length > 0;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /** Get a list of files with uncommitted changes (staged, unstaged, or untracked). */
68
+ getDirtyFiles() {
69
+ if (!this.isGitRepo())
70
+ return [];
71
+ try {
72
+ const output = execFileSync('git', ['status', '--porcelain'], {
73
+ cwd: this.cwd,
74
+ encoding: 'utf-8',
75
+ stdio: ['pipe', 'pipe', 'pipe'],
76
+ });
77
+ return output.split('\n')
78
+ .map(line => line.trim())
79
+ .filter(line => line.length > 0)
80
+ .map(line => {
81
+ let p = line.slice(2).trim();
82
+ if (p.startsWith('"') && p.endsWith('"')) {
83
+ p = p.slice(1, -1).replace(/\\"/g, '"');
84
+ }
85
+ return p;
86
+ });
87
+ }
88
+ catch {
89
+ return [];
90
+ }
91
+ }
92
+ /** Get a colored diff summary for display. */
93
+ getDiff() {
94
+ if (!this.isGitRepo())
95
+ return '(not a git repository)';
96
+ if (!this.hasChanges())
97
+ return '(no changes)';
98
+ try {
99
+ const stat = execFileSync('git', ['diff', '--stat'], {
100
+ cwd: this.cwd,
101
+ encoding: 'utf-8',
102
+ stdio: ['pipe', 'pipe', 'pipe'],
103
+ }).trim();
104
+ const stagedStat = execFileSync('git', ['diff', '--cached', '--stat'], {
105
+ cwd: this.cwd,
106
+ encoding: 'utf-8',
107
+ stdio: ['pipe', 'pipe', 'pipe'],
108
+ }).trim();
109
+ const untrackedFiles = execFileSync('git', ['ls-files', '--others', '--exclude-standard'], { cwd: this.cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
110
+ const parts = [];
111
+ if (stagedStat) {
112
+ parts.push(`${colors.green}Staged:${colors.reset}`);
113
+ parts.push(stagedStat);
114
+ }
115
+ if (stat) {
116
+ parts.push(`${colors.yellow}Unstaged:${colors.reset}`);
117
+ parts.push(stat);
118
+ }
119
+ if (untrackedFiles) {
120
+ const files = untrackedFiles.split('\n').slice(0, 10);
121
+ parts.push(`${colors.cyan}Untracked (${files.length}):${colors.reset}`);
122
+ for (const f of files)
123
+ parts.push(` + ${f}`);
124
+ if (untrackedFiles.split('\n').length > 10)
125
+ parts.push(` ... and more`);
126
+ }
127
+ return parts.join('\n') || '(no changes)';
128
+ }
129
+ catch {
130
+ return '(could not generate diff)';
131
+ }
132
+ }
133
+ /**
134
+ * Auto-commit all changes with a generated commit message.
135
+ * Returns the short commit hash, or null if nothing to commit.
136
+ */
137
+ autoCommit(task, modifiedFiles) {
138
+ if (modifiedFiles.length === 0)
139
+ return null;
140
+ if (!this.isGitRepo())
141
+ return null;
142
+ try {
143
+ const status = execFileSync('git', ['status', '--porcelain'], {
144
+ cwd: this.cwd,
145
+ encoding: 'utf-8',
146
+ stdio: ['pipe', 'pipe', 'pipe'],
147
+ }).trim();
148
+ if (!status) {
149
+ console.log(' ℹ No local filesystem variations detected. Skipping git commit.');
150
+ return null;
151
+ }
152
+ const lowerTask = task.toLowerCase();
153
+ let prefix = 'feat';
154
+ if (/\bfix(es|ed|ing)?\b/.test(lowerTask))
155
+ prefix = 'fix';
156
+ else if (/\brefactor/.test(lowerTask))
157
+ prefix = 'refactor';
158
+ else if (/\btest/.test(lowerTask))
159
+ prefix = 'test';
160
+ else if (/\bdoc(s|umentation)?/.test(lowerTask))
161
+ prefix = 'docs';
162
+ else if (/\bstyle|format/.test(lowerTask))
163
+ prefix = 'style';
164
+ const taskSummary = task.length > 68 ? task.slice(0, 65) + '...' : task;
165
+ const message = `${prefix}: ${taskSummary}`;
166
+ for (const file of modifiedFiles) {
167
+ const relativePath = this.guard.relative(this.guard.resolve(file, 'commit file'));
168
+ execFileSync('git', ['add', '--', relativePath], {
169
+ cwd: this.cwd,
170
+ stdio: ['pipe', 'pipe', 'pipe'],
171
+ });
172
+ }
173
+ const fileListForGit = modifiedFiles
174
+ .map((f) => this.guard.relative(this.guard.resolve(f, 'commit file')));
175
+ execFileSync('git', ['commit', '-m', `${message} [fixo-run:auto]`, '--', ...fileListForGit], {
176
+ cwd: this.cwd,
177
+ encoding: 'utf-8',
178
+ stdio: ['pipe', 'pipe', 'pipe'],
179
+ });
180
+ const hash = execFileSync('git', ['rev-parse', '--short', 'HEAD'], {
181
+ cwd: this.cwd,
182
+ encoding: 'utf-8',
183
+ stdio: ['pipe', 'pipe', 'pipe'],
184
+ }).trim();
185
+ const fileList = modifiedFiles
186
+ .map((f) => this.guard.relative(f))
187
+ .slice(0, 5)
188
+ .join(', ');
189
+ console.log(`${colors.green} ✓ Committed ${colors.bold}${hash}${colors.reset}${colors.green}: ${message}${colors.reset}`);
190
+ if (fileList)
191
+ console.log(`${colors.dim} Files: ${fileList}${colors.reset}`);
192
+ return hash;
193
+ }
194
+ catch (error) {
195
+ const msg = error instanceof Error ? error.message : String(error);
196
+ console.log(`${colors.yellow} ⚠ Auto-commit failed: ${msg.slice(0, 80)}${colors.reset}`);
197
+ return null;
198
+ }
199
+ }
200
+ /** Undo the last commit, performing a hard reset of the working tree. */
201
+ undoLastCommit() {
202
+ if (!this.isGitRepo()) {
203
+ console.log(`${colors.red} ✗ Not a git repository${colors.reset}`);
204
+ return false;
205
+ }
206
+ if (this.hasChanges()) {
207
+ console.log(`${colors.red} ✗ Undo refused: You have uncommitted changes in your workspace. Please stash or commit them first to prevent data loss.${colors.reset}`);
208
+ return false;
209
+ }
210
+ try {
211
+ const currentHash = execFileSync('git', ['rev-parse', '--short', 'HEAD'], {
212
+ cwd: this.cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
213
+ }).trim();
214
+ const commitMsg = execFileSync('git', ['log', '-1', '--format=%s'], {
215
+ cwd: this.cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
216
+ }).trim();
217
+ if (!commitMsg.includes('[fixo-run:')) {
218
+ console.log(`${colors.red} ✗ Undo refused: last commit is not marked as FixO-owned${colors.reset}`);
219
+ return false;
220
+ }
221
+ execFileSync('git', ['reset', '--hard', 'HEAD~1'], { cwd: this.cwd, stdio: 'ignore' });
222
+ console.log(`${colors.green} ⏪ Hard-reset commit ${colors.bold}${currentHash}${colors.reset}${colors.green}: ${commitMsg}${colors.reset}`);
223
+ console.log(`${colors.dim} All files have been restored to the previous clean commit state.${colors.reset}`);
224
+ return true;
225
+ }
226
+ catch (error) {
227
+ const msg = error instanceof Error ? error.message : String(error);
228
+ console.log(`${colors.red} ✗ Undo failed: ${msg.slice(0, 80)}${colors.reset}`);
229
+ return false;
230
+ }
231
+ }
232
+ /** Get last N commit messages for display. */
233
+ getRecentCommits(count = 5) {
234
+ if (!this.isGitRepo())
235
+ return '(not a git repository)';
236
+ try {
237
+ return execFileSync('git', ['log', '--oneline', '-n', String(count)], {
238
+ cwd: this.cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
239
+ }).trim() || '(no commits)';
240
+ }
241
+ catch {
242
+ return '(no commits)';
243
+ }
244
+ }
245
+ /** Discard all uncommitted modifications and untracked files in the workspace. */
246
+ discardUncommittedChanges() {
247
+ if (!this.isGitRepo())
248
+ return;
249
+ try {
250
+ execFileSync('git', ['checkout', '--', '.'], { cwd: this.cwd, stdio: ['pipe', 'pipe', 'pipe'] });
251
+ execFileSync('git', ['clean', '-fd'], { cwd: this.cwd, stdio: ['pipe', 'pipe', 'pipe'] });
252
+ console.log(`${colors.green} ⏪ Discarded all uncommitted workspace changes due to execution failure.${colors.reset}`);
253
+ }
254
+ catch (error) {
255
+ console.log(`${colors.yellow} ⚠ Failed to discard uncommitted changes: ${error.message || error}${colors.reset}`);
256
+ }
257
+ }
258
+ /**
259
+ * Create a named workspace snapshot commit (works in non-auto-commit mode).
260
+ * Stages all changes and commits with "fixo-snapshot: <label>" message.
261
+ * Returns the short hash, or null if nothing to commit / not a git repo.
262
+ */
263
+ createSnapshot(label) {
264
+ if (!this.isGitRepo()) {
265
+ console.log(`${colors.red} ✗ Not a git repository — cannot create snapshot.${colors.reset}`);
266
+ return null;
267
+ }
268
+ try {
269
+ const status = execFileSync('git', ['status', '--porcelain'], {
270
+ cwd: this.cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
271
+ }).trim();
272
+ if (!status) {
273
+ console.log(`${colors.yellow} ℹ No changes to snapshot.${colors.reset}`);
274
+ return null;
275
+ }
276
+ execFileSync('git', ['add', '-A'], { cwd: this.cwd, stdio: ['pipe', 'pipe', 'pipe'] });
277
+ const safeLabel = label.slice(0, 60).replace(/[^\w\s\-]/g, '').trim() || 'manual';
278
+ execFileSync('git', ['commit', '-m', `fixo-snapshot: ${safeLabel} [fixo-run:snapshot]`], {
279
+ cwd: this.cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
280
+ });
281
+ const hash = execFileSync('git', ['rev-parse', '--short', 'HEAD'], {
282
+ cwd: this.cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
283
+ }).trim();
284
+ console.log(`${colors.green} 📸 Snapshot committed ${colors.bold}${hash}${colors.reset}${colors.green}: fixo-snapshot: ${safeLabel}${colors.reset}`);
285
+ return hash;
286
+ }
287
+ catch (error) {
288
+ console.log(`${colors.yellow} ⚠ Snapshot failed: ${(error.message || String(error)).slice(0, 80)}${colors.reset}`);
289
+ return null;
290
+ }
291
+ }
292
+ }
293
+ //# sourceMappingURL=git-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-manager.js","sourceRoot":"","sources":["../../src/git/git-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { AgentClient } from '../agent/agent-client.js';
2
+ export declare function createBranch(cwd: string, branchName: string): string;
3
+ export declare function commitChanges(cwd: string, message: string): string;
4
+ export declare function pushBranch(cwd: string, remote?: string): string;
5
+ export declare function generatePrDescription(cwd: string, client: AgentClient, model: string, baseBranch?: string): Promise<{
6
+ title: string;
7
+ body: string;
8
+ }>;
9
+ export declare function createPullRequest(cwd: string, client: AgentClient, model: string, baseBranch?: string): Promise<string>;
10
+ //# sourceMappingURL=git-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ops.d.ts","sourceRoot":"","sources":["../../src/git/git-ops.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAe5D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAiB,GAAG,MAAM,CAOzE;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAe,GAC1B,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyD1C;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAe,GAC1B,OAAO,CAAC,MAAM,CAAC,CAqDjB"}