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,131 @@
1
+ import { execFileSync } from 'child_process';
2
+ function runGit(cwd, args) {
3
+ try {
4
+ return execFileSync('git', args, {
5
+ cwd,
6
+ encoding: 'utf-8',
7
+ stdio: ['pipe', 'pipe', 'pipe'],
8
+ }).trim();
9
+ }
10
+ catch (error) {
11
+ const stderr = error.stderr?.trim() || error.message;
12
+ throw new Error(`Git error (git ${args.join(' ')}): ${stderr}`);
13
+ }
14
+ }
15
+ export function createBranch(cwd, branchName) {
16
+ runGit(cwd, ['checkout', '-b', branchName]);
17
+ return `Successfully created and checked out branch: ${branchName}`;
18
+ }
19
+ export function commitChanges(cwd, message) {
20
+ runGit(cwd, ['add', '-A']);
21
+ runGit(cwd, ['commit', '-m', message]);
22
+ const hash = runGit(cwd, ['rev-parse', '--short', 'HEAD']);
23
+ return `Successfully committed changes as ${hash}`;
24
+ }
25
+ export function pushBranch(cwd, remote = 'origin') {
26
+ const currentBranch = runGit(cwd, ['branch', '--show-current']);
27
+ if (!currentBranch) {
28
+ throw new Error('Not currently on any branch (detached HEAD?)');
29
+ }
30
+ runGit(cwd, ['push', '-u', remote, currentBranch]);
31
+ return `Successfully pushed branch ${currentBranch} to ${remote}`;
32
+ }
33
+ export async function generatePrDescription(cwd, client, model, baseBranch = 'main') {
34
+ const currentBranch = runGit(cwd, ['branch', '--show-current']);
35
+ let diff = '';
36
+ try {
37
+ diff = runGit(cwd, ['diff', `${baseBranch}...${currentBranch}`]);
38
+ }
39
+ catch {
40
+ // Fallback to local diff against HEAD~1 if comparison fails
41
+ try {
42
+ diff = runGit(cwd, ['diff', 'HEAD~1']);
43
+ }
44
+ catch {
45
+ diff = runGit(cwd, ['diff']);
46
+ }
47
+ }
48
+ // Max diff size to send to model is 40k chars (~10k tokens)
49
+ if (diff.length > 40_000) {
50
+ diff = diff.slice(0, 40_000) + '\n\n... (diff truncated for length)';
51
+ }
52
+ if (!diff.trim()) {
53
+ return {
54
+ title: `work on ${currentBranch}`,
55
+ body: `Automated PR description for branch ${currentBranch}. No changes detected in comparison to ${baseBranch}.`
56
+ };
57
+ }
58
+ const systemPrompt = `You are a pull request description generator. Given the git diff of changes, write a clean, detailed semantic PR description.
59
+ Your output must be a single valid JSON object matching this schema with NO markdown formatting, NO backticks, and NO conversational text:
60
+ {
61
+ "title": "concise semantic PR title",
62
+ "body": "detailed markdown body containing: summary of changes, motivation, and tests completed."
63
+ }`;
64
+ try {
65
+ const response = await client.chat([
66
+ { role: 'system', content: systemPrompt },
67
+ { role: 'user', content: `Here is the diff:\n\n${diff}` }
68
+ ], model, { agent_task_type: 'investigation', required_capabilities: ['fast'] });
69
+ const content = response.content?.trim() || '';
70
+ const jsonMatch = content.match(/\{[\s\S]*\}/);
71
+ const parsed = JSON.parse(jsonMatch ? jsonMatch[0] : content);
72
+ if (parsed && typeof parsed.title === 'string' && typeof parsed.body === 'string') {
73
+ return parsed;
74
+ }
75
+ }
76
+ catch (err) {
77
+ // Fallback on error
78
+ }
79
+ return {
80
+ title: `updates on branch ${currentBranch}`,
81
+ body: `## Summary\nAutomated updates on branch ${currentBranch}.\n\n## Changes\n- Code modifications applied by FixO.`
82
+ };
83
+ }
84
+ export async function createPullRequest(cwd, client, model, baseBranch = 'main') {
85
+ const currentBranch = runGit(cwd, ['branch', '--show-current']);
86
+ if (!currentBranch || currentBranch === 'main' || currentBranch === 'master') {
87
+ throw new Error(`Cannot create pull request from branch "${currentBranch}"`);
88
+ }
89
+ // 1. Generate title and body
90
+ const { title, body } = await generatePrDescription(cwd, client, model, baseBranch);
91
+ // 2. Check if GitHub CLI is installed and try to run it
92
+ try {
93
+ const ghCheck = execFileSync('which', ['gh'], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
94
+ if (ghCheck) {
95
+ const prUrl = execFileSync('gh', ['pr', 'create', '--base', baseBranch, '--head', currentBranch, '--title', title, '--body', body], { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
96
+ return `Pull request created successfully via GitHub CLI:\n${prUrl}`;
97
+ }
98
+ }
99
+ catch {
100
+ // GitHub CLI not found or failed (not logged in, etc.)
101
+ }
102
+ // 3. Fallback: Generate comparison URL
103
+ let remoteUrl = '';
104
+ try {
105
+ remoteUrl = runGit(cwd, ['remote', 'get-url', 'origin']);
106
+ }
107
+ catch {
108
+ // No remote
109
+ }
110
+ let webUrl = '';
111
+ if (remoteUrl) {
112
+ // Parse git@github.com:owner/repo.git or https://github.com/owner/repo.git
113
+ let cleanUrl = remoteUrl;
114
+ if (cleanUrl.startsWith('git@')) {
115
+ cleanUrl = cleanUrl.replace(':', '/').replace('git@', 'https://');
116
+ }
117
+ if (cleanUrl.endsWith('.git')) {
118
+ cleanUrl = cleanUrl.slice(0, -4);
119
+ }
120
+ const titleEscaped = encodeURIComponent(title);
121
+ const bodyEscaped = encodeURIComponent(body);
122
+ webUrl = `${cleanUrl}/compare/${baseBranch}...${currentBranch}?expand=1&title=${titleEscaped}&body=${bodyEscaped}`;
123
+ }
124
+ return [
125
+ `GitHub CLI (gh) was not found or not authenticated. Here is the generated PR details:`,
126
+ `\nPR Title: ${title}`,
127
+ `\nPR Body:\n${body}`,
128
+ webUrl ? `\nYou can create the pull request manually by opening this URL in your browser:\n${webUrl}` : ''
129
+ ].filter(Boolean).join('\n');
130
+ }
131
+ //# sourceMappingURL=git-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ops.js","sourceRoot":"","sources":["../../src/git/git-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,352 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * FixO CLI — Entry Point
4
+ *
5
+ * Boot sequence:
6
+ * 1. Print the lava logo + command grid (new UI is the only UI).
7
+ * 2. Load global config (~/.fixocli/config.json)
8
+ * 3. If first run → run setup wizard
9
+ * 4. Load project config (.freellmapi.yml) if present
10
+ * 5. Ensure proxy server is running on the configured port
11
+ * 6. Print the session header
12
+ * 7. Launch interactive REPL
13
+ */
14
+ import fs from 'fs';
15
+ import path from 'path';
16
+ import { loadConfig, saveConfig } from './config.js';
17
+ import { runSetupWizard } from './setup-wizard.js';
18
+ import { startREPL } from './ui/prompt.js';
19
+ import yaml from 'js-yaml';
20
+ import { C } from './ui/colors.js';
21
+ import { renderLogo, renderCommandGrid, renderSessionHeader } from './ui/index.js';
22
+ /* ──────────────────────── CLI Args ──────────────────────── */
23
+ function parseArgs() {
24
+ const args = process.argv.slice(2);
25
+ const result = {
26
+ help: false,
27
+ version: false,
28
+ verbose: false,
29
+ yes: false,
30
+ model: undefined,
31
+ port: undefined,
32
+ task: undefined,
33
+ resume: undefined,
34
+ };
35
+ for (let i = 0; i < args.length; i++) {
36
+ const arg = args[i];
37
+ switch (arg) {
38
+ case '--help':
39
+ case '-h':
40
+ result.help = true;
41
+ break;
42
+ case '--version':
43
+ case '-V':
44
+ result.version = true;
45
+ break;
46
+ case '--verbose':
47
+ case '-v':
48
+ result.verbose = true;
49
+ break;
50
+ case '--yes':
51
+ case '-y':
52
+ result.yes = true;
53
+ break;
54
+ case '--model':
55
+ case '-m':
56
+ if (i + 1 < args.length)
57
+ result.model = args[++i];
58
+ break;
59
+ case '--port':
60
+ case '-p':
61
+ if (i + 1 < args.length)
62
+ result.port = parseInt(args[++i], 10);
63
+ break;
64
+ case '--resume':
65
+ case '-r':
66
+ if (i + 1 < args.length)
67
+ result.resume = args[++i];
68
+ break;
69
+ case '--task':
70
+ case '-t':
71
+ if (i + 1 < args.length && !result.task) {
72
+ result.task = args.slice(i + 1).join(' ');
73
+ i = args.length; // consume rest
74
+ }
75
+ break;
76
+ default:
77
+ // If no flag, treat rest as task
78
+ if (!arg.startsWith('-') && !result.task) {
79
+ result.task = args.slice(i).join(' ');
80
+ i = args.length;
81
+ }
82
+ break;
83
+ }
84
+ }
85
+ return result;
86
+ }
87
+ function printHelpMessage() {
88
+ console.log(`
89
+ ${C.LAVA}${C.BOLD}FixO CLI${C.RESET} — Autonomous Free Multi-Provider LLM Coding Tool
90
+
91
+ ${C.BOLD}USAGE${C.RESET}
92
+ fixo Start interactive REPL
93
+ fixo "fix the bug" Run a one-shot task
94
+ fixo --help Show this help
95
+
96
+ ${C.BOLD}OPTIONS${C.RESET}
97
+ -h, --help Show help
98
+ -V, --version Show version
99
+ -v, --verbose Enable verbose/debug output
100
+ -y, --yes Allow low-risk actions without repeated prompts
101
+ -m, --model <name> Set the model (default: auto)
102
+ -p, --port <port> Proxy server port (default: 3001)
103
+ -t, --task <text> Run a one-shot task
104
+ -r, --resume <id> Resume a previous session snapshot by id
105
+
106
+ ${C.BOLD}INTERACTIVE COMMANDS${C.RESET}
107
+ /help Show all commands
108
+ /model [name|list] Set model or list available models
109
+ /providers Manage AI provider API keys
110
+ /mode [mode] Set PLAN/BUILD/EXPLORE/SCOUT mode
111
+ /select [file] Pin a file for agent context
112
+ /unselect Clear all pinned files
113
+ /plan <task> Generate a structured execution plan
114
+ /run-plan Execute the last saved plan
115
+ /diff Show git diff
116
+ /undo Undo last AI change
117
+ /snapshot [label] Create a named git snapshot
118
+ /log Show recent git commits
119
+ /clear Clear conversation
120
+ /compact Summarise & compress conversation
121
+ /stats Show usage statistics
122
+ /session Manage sessions (list|load|new)
123
+ /runs List recent FixO task ledgers
124
+ /show-run <id> Show details of a specific run
125
+ /review Review current git diff
126
+ /test Run detected project checks
127
+ /fix-ci Fix CI failures (paste logs)
128
+ /memory Show project memory
129
+ /remember <fact> Add a project fact to memory
130
+ /forget Clear all project memory
131
+ /index Build local repo index
132
+ /find <query> Search the repo index
133
+ /explain <target> Explain a file or symbol
134
+ /skills List registered skill profiles
135
+ /doctor Run FixO diagnostics
136
+ /theme Toggle Dark Void / Inverted theme
137
+ /exit Exit
138
+
139
+ ${C.BOLD}EXAMPLES${C.RESET}
140
+ ${C.SNOW4}# Start interactive mode${C.RESET}
141
+ fixo
142
+
143
+ ${C.SNOW4}# One-shot task${C.RESET}
144
+ fixo "add input validation to user.ts"
145
+
146
+ ${C.SNOW4}# Use a specific model${C.RESET}
147
+ fixo -m gemini-2.5-flash "explain this codebase"
148
+ `);
149
+ }
150
+ /* ──────────────────────── Project Config ──────────────────────── */
151
+ const KNOWN_CONFIG_KEYS = new Set(['model', 'checkCommand', 'autoCommit', 'policy', 'executionMode', 'maxAttempts', 'systemPrompt', 'plugins', 'trustedPlugins']);
152
+ function loadProjectConfig(cwd) {
153
+ const yamlPath = path.join(cwd, '.freellmapi.yml');
154
+ const yamlAltPath = path.join(cwd, '.freellmapi.yaml');
155
+ let configPath;
156
+ if (fs.existsSync(yamlPath))
157
+ configPath = yamlPath;
158
+ else if (fs.existsSync(yamlAltPath))
159
+ configPath = yamlAltPath;
160
+ if (!configPath)
161
+ return undefined;
162
+ try {
163
+ const content = fs.readFileSync(configPath, 'utf-8');
164
+ const doc = yaml.load(content);
165
+ if (!doc || typeof doc !== 'object')
166
+ return undefined;
167
+ for (const key of Object.keys(doc)) {
168
+ if (!KNOWN_CONFIG_KEYS.has(key)) {
169
+ console.warn(`${C.YELLOW}⚠ Unknown config key "${key}" in ${path.basename(configPath)}${C.RESET}`);
170
+ }
171
+ }
172
+ const config = {};
173
+ if (typeof doc.model === 'string')
174
+ config.model = doc.model;
175
+ if (typeof doc.checkCommand === 'string')
176
+ config.checkCommand = doc.checkCommand;
177
+ if (doc.autoCommit !== undefined)
178
+ config.autoCommit = Boolean(doc.autoCommit);
179
+ if (typeof doc.policy === 'string')
180
+ config.policy = doc.policy;
181
+ if (typeof doc.executionMode === 'string')
182
+ config.executionMode = doc.executionMode;
183
+ if (doc.maxAttempts !== undefined)
184
+ config.maxAttempts = parseInt(String(doc.maxAttempts), 10);
185
+ if (typeof doc.systemPrompt === 'string')
186
+ config.systemPrompt = doc.systemPrompt;
187
+ if (Array.isArray(doc.plugins))
188
+ config.plugins = doc.plugins.map(String);
189
+ if (Array.isArray(doc.trustedPlugins))
190
+ config.trustedPlugins = doc.trustedPlugins.map(String);
191
+ return config;
192
+ }
193
+ catch {
194
+ return undefined;
195
+ }
196
+ }
197
+ /* ──────────────────────── Main ──────────────────────── */
198
+ async function main() {
199
+ // ──── Step 0: Print the lava logo (the new UI is the only UI) ────
200
+ renderLogo();
201
+ renderCommandGrid();
202
+ // Node version check (major >= 24)
203
+ const nodeMajor = parseInt(process.versions.node.split('.')[0], 10);
204
+ if (nodeMajor < 24) {
205
+ console.error(`${C.RED}Error: FixO CLI requires Node.js version 24.0.0 or higher (current version: ${process.version}).${C.RESET}`);
206
+ process.exit(1);
207
+ }
208
+ const args = parseArgs();
209
+ if (args.help) {
210
+ printHelpMessage();
211
+ process.exit(0);
212
+ }
213
+ if (args.version) {
214
+ try {
215
+ const pkgPath = new URL('../package.json', import.meta.url);
216
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
217
+ console.log(`fixo-cli v${pkg.version}`);
218
+ }
219
+ catch {
220
+ console.log('fixo-cli v1.0.0');
221
+ }
222
+ process.exit(0);
223
+ }
224
+ // ──── Step 1: Load config ────
225
+ let config = loadConfig();
226
+ // Pillar 3 — LSP pre-flight. Run a synchronous PATH check for
227
+ // common language servers and warn (not block) the user if
228
+ // none are present. The full pre-save gate is still wired in
229
+ // via the `LspPreSaveGate` and falls back to a brace-balance
230
+ // check when `FIXO_LSP_FALLBACK=syntax-only` is set.
231
+ try {
232
+ const { checkLspSanity } = await import('./lsp/syntax-fallback.js');
233
+ const sanity = checkLspSanity(process.env);
234
+ if (!sanity.ok) {
235
+ console.warn(`${C.YELLOW}⚠ ${sanity.reason}${C.RESET}\n` +
236
+ `${C.SNOW4} Set FIXO_LSP_FALLBACK=syntax-only to enable brace-balance fallback.${C.RESET}`);
237
+ }
238
+ }
239
+ catch {
240
+ // best-effort — never block boot on this check
241
+ }
242
+ // ──── Step 2: First-run wizard & Validation ────
243
+ if (!config._firstRunComplete || !config.freellmapi_api_key || !config.apiUrl) {
244
+ config = await runSetupWizard();
245
+ saveConfig(config);
246
+ }
247
+ else {
248
+ // Validate API Key
249
+ try {
250
+ const controller = new AbortController();
251
+ const timeoutId = setTimeout(() => controller.abort(), 5000);
252
+ const res = await fetch(`${config.apiUrl}/models`, {
253
+ headers: { Authorization: `Bearer ${config.freellmapi_api_key}` },
254
+ signal: controller.signal
255
+ });
256
+ clearTimeout(timeoutId);
257
+ if (res.status === 401 || res.status === 403) {
258
+ console.warn(`${C.YELLOW}⚠ Warning: API Key appears invalid (HTTP ${res.status}). You may need to re-run setup.${C.RESET}`);
259
+ }
260
+ }
261
+ catch (err) {
262
+ console.warn(`${C.YELLOW}⚠ Warning: Could not validate API key (connection failed). Proceeding in offline mode or assuming temporary network issue.${C.RESET}`);
263
+ }
264
+ }
265
+ // ──── Apply CLI port override ────
266
+ if (args.port) {
267
+ if (config.apiUrl) {
268
+ try {
269
+ const url = new URL(config.apiUrl);
270
+ url.port = args.port.toString();
271
+ config.apiUrl = url.toString();
272
+ }
273
+ catch {
274
+ config.apiUrl = `http://localhost:${args.port}/v1`;
275
+ }
276
+ }
277
+ else {
278
+ config.apiUrl = `http://localhost:${args.port}/v1`;
279
+ }
280
+ }
281
+ // ──── Step 3: Load project config ────
282
+ const cwd = process.cwd();
283
+ const projectConfig = loadProjectConfig(cwd);
284
+ // ──── Step 3.5: Initialize MCP & Plugins ────
285
+ const { mcpManager, mcpBridgeManager, initializePlugins } = await import('./agent/tool-executor.js');
286
+ await mcpManager.initialize();
287
+ await mcpBridgeManager.initialize(cwd);
288
+ const { skillsManager } = await import('./agent/skills.js');
289
+ skillsManager.initialize(cwd);
290
+ await initializePlugins(cwd, projectConfig);
291
+ // Register shutdown hook
292
+ process.on('exit', () => {
293
+ mcpManager.shutdown();
294
+ mcpBridgeManager.shutdown();
295
+ });
296
+ // ──── Apply CLI overrides ────
297
+ const model = args.model ?? projectConfig?.model ?? config.defaultModel;
298
+ const verbose = args.verbose;
299
+ // ──── Step 4: Launch ────
300
+ if (args.task) {
301
+ // One-shot mode: run task and exit
302
+ const { SingleAgent } = await import('./agent/single-agent.js');
303
+ const { ConversationManager } = await import('./agent/conversation.js');
304
+ const agent = new SingleAgent(verbose);
305
+ const conversation = new ConversationManager();
306
+ const result = await agent.runStreaming({
307
+ task: args.task,
308
+ model: model ?? 'auto',
309
+ cwd,
310
+ verbose,
311
+ selectedFiles: [],
312
+ systemPromptOverride: projectConfig?.systemPrompt,
313
+ checkCommand: projectConfig?.checkCommand,
314
+ policy: projectConfig?.policy ?? config.preferences.policy,
315
+ yes: args.yes,
316
+ }, conversation);
317
+ // Print final stats
318
+ const modelPart = result.model ? `${result.model} · ` : '';
319
+ console.log(`\n${C.SNOW4}${modelPart}${result.tokensUsed.total_tokens} tokens · ${result.toolCallCount} tool calls · ${(result.durationMs / 1000).toFixed(1)}s${C.RESET}`);
320
+ const { stopLspManager } = await import('./agent/tool-executor.js');
321
+ await stopLspManager();
322
+ process.exit(result.success ? 0 : 1);
323
+ }
324
+ // Interactive REPL mode — print the session header before
325
+ // handing off to startREPL so the boot sequence is:
326
+ // logo → command grid → session header → › prompt.
327
+ const sessionModel = model ?? 'auto';
328
+ renderSessionHeader({
329
+ status: 'new',
330
+ startedAt: new Date().toISOString(),
331
+ provider: 'auto',
332
+ model: sessionModel,
333
+ mode: 'BUILD',
334
+ routing: 'auto',
335
+ contextWindow: '200k',
336
+ });
337
+ await startREPL({
338
+ config,
339
+ projectConfig,
340
+ cwd,
341
+ verbose,
342
+ resume: args.resume,
343
+ });
344
+ const { stopLspManager } = await import('./agent/tool-executor.js');
345
+ await stopLspManager();
346
+ }
347
+ // ──── Run ────
348
+ main().catch((error) => {
349
+ console.error(`${C.RED}Fatal error: ${error.message ?? error}${C.RESET}`);
350
+ process.exit(1);
351
+ });
352
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface IndexedFile {
2
+ path: string;
3
+ hash: string;
4
+ symbols: string[];
5
+ imports: string[];
6
+ resolvedImports?: string[];
7
+ dependents?: string[];
8
+ importance?: number;
9
+ }
10
+ export interface RepoIndex {
11
+ updatedAt: string;
12
+ files: IndexedFile[];
13
+ }
14
+ /**
15
+ * Builds a fresh `RepoIndex` for the workspace at `cwd` and persists it
16
+ * to `.fixo/index/repo-index.json`. Routes symbol and import extraction
17
+ * through the `ParserFactory` so the same call site transparently uses
18
+ * tree-sitter when the WASM is available and the regex fallback when
19
+ * it is not.
20
+ */
21
+ export declare function buildIndex(cwd: string): Promise<RepoIndex>;
22
+ /**
23
+ * Loads the cached `RepoIndex` for `cwd`. If no cache exists, builds one
24
+ * first (sharing the in-flight promise with any concurrent caller).
25
+ */
26
+ export declare function loadIndex(cwd: string): Promise<RepoIndex>;
27
+ export declare function findInIndex(cwd: string, query: string): Promise<string>;
28
+ export declare function explainIndexedTarget(cwd: string, query: string): Promise<string>;
29
+ export declare function findCodebaseDependencies(cwd: string, targetPath: string): Promise<string>;
30
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AA6FD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAuF1D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAmBzD;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB7E;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBtF;AAED,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B/F"}