xibecode 1.0.2 → 1.0.6

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 (288) hide show
  1. package/dist/commands/chat.d.ts +0 -1
  2. package/dist/commands/chat.d.ts.map +1 -1
  3. package/dist/commands/chat.js +10 -7
  4. package/dist/commands/chat.js.map +1 -1
  5. package/dist/commands/config.d.ts.map +1 -1
  6. package/dist/commands/config.js +5 -3
  7. package/dist/commands/config.js.map +1 -1
  8. package/dist/commands/diagnostics.js +1 -1
  9. package/dist/commands/diagnostics.js.map +1 -1
  10. package/dist/commands/mcp.js +1 -1
  11. package/dist/commands/mcp.js.map +1 -1
  12. package/dist/commands/resume.js +1 -1
  13. package/dist/commands/resume.js.map +1 -1
  14. package/dist/commands/run-pr.d.ts.map +1 -1
  15. package/dist/commands/run-pr.js +13 -10
  16. package/dist/commands/run-pr.js.map +1 -1
  17. package/dist/commands/run.d.ts.map +1 -1
  18. package/dist/commands/run.js +17 -14
  19. package/dist/commands/run.js.map +1 -1
  20. package/dist/commands/skills.d.ts.map +1 -1
  21. package/dist/commands/skills.js +3 -2
  22. package/dist/commands/skills.js.map +1 -1
  23. package/dist/components/AssistantMarkdown.js +1 -1
  24. package/dist/components/AssistantMarkdown.js.map +1 -1
  25. package/dist/index.js +2 -39
  26. package/dist/index.js.map +1 -1
  27. package/dist/ui/claude-style-chat.d.ts.map +1 -1
  28. package/dist/ui/claude-style-chat.js +15 -11
  29. package/dist/ui/claude-style-chat.js.map +1 -1
  30. package/dist/utils/built-in-skills-dir.d.ts +7 -0
  31. package/dist/utils/built-in-skills-dir.d.ts.map +1 -0
  32. package/dist/utils/built-in-skills-dir.js +11 -0
  33. package/dist/utils/built-in-skills-dir.js.map +1 -0
  34. package/dist/utils/config.d.ts +2 -119
  35. package/dist/utils/config.d.ts.map +1 -1
  36. package/dist/utils/config.js +3 -88
  37. package/dist/utils/config.js.map +1 -1
  38. package/package.json +11 -26
  39. package/dist/commands/punycode.d.ts +0 -5
  40. package/dist/commands/punycode.d.ts.map +0 -1
  41. package/dist/commands/punycode.js +0 -48
  42. package/dist/commands/punycode.js.map +0 -1
  43. package/dist/commands/tui.d.ts +0 -9
  44. package/dist/commands/tui.d.ts.map +0 -1
  45. package/dist/commands/tui.js +0 -83
  46. package/dist/commands/tui.js.map +0 -1
  47. package/dist/core/agent-tool-policies.d.ts +0 -5
  48. package/dist/core/agent-tool-policies.d.ts.map +0 -1
  49. package/dist/core/agent-tool-policies.js +0 -18
  50. package/dist/core/agent-tool-policies.js.map +0 -1
  51. package/dist/core/agent.d.ts +0 -181
  52. package/dist/core/agent.d.ts.map +0 -1
  53. package/dist/core/agent.js +0 -1777
  54. package/dist/core/agent.js.map +0 -1
  55. package/dist/core/background-agent.d.ts +0 -23
  56. package/dist/core/background-agent.d.ts.map +0 -1
  57. package/dist/core/background-agent.js +0 -175
  58. package/dist/core/background-agent.js.map +0 -1
  59. package/dist/core/code-graph.d.ts +0 -18
  60. package/dist/core/code-graph.d.ts.map +0 -1
  61. package/dist/core/code-graph.js +0 -105
  62. package/dist/core/code-graph.js.map +0 -1
  63. package/dist/core/conflict-solver.d.ts +0 -26
  64. package/dist/core/conflict-solver.d.ts.map +0 -1
  65. package/dist/core/conflict-solver.js +0 -108
  66. package/dist/core/conflict-solver.js.map +0 -1
  67. package/dist/core/context-compactor.d.ts +0 -10
  68. package/dist/core/context-compactor.d.ts.map +0 -1
  69. package/dist/core/context-compactor.js +0 -158
  70. package/dist/core/context-compactor.js.map +0 -1
  71. package/dist/core/context-pruner.d.ts +0 -19
  72. package/dist/core/context-pruner.d.ts.map +0 -1
  73. package/dist/core/context-pruner.js +0 -103
  74. package/dist/core/context-pruner.js.map +0 -1
  75. package/dist/core/context.d.ts +0 -82
  76. package/dist/core/context.d.ts.map +0 -1
  77. package/dist/core/context.js +0 -273
  78. package/dist/core/context.js.map +0 -1
  79. package/dist/core/conversation-recovery.d.ts +0 -9
  80. package/dist/core/conversation-recovery.d.ts.map +0 -1
  81. package/dist/core/conversation-recovery.js +0 -15
  82. package/dist/core/conversation-recovery.js.map +0 -1
  83. package/dist/core/debug-workflow.d.ts +0 -9
  84. package/dist/core/debug-workflow.d.ts.map +0 -1
  85. package/dist/core/debug-workflow.js +0 -19
  86. package/dist/core/debug-workflow.js.map +0 -1
  87. package/dist/core/docs-scraper.d.ts +0 -40
  88. package/dist/core/docs-scraper.d.ts.map +0 -1
  89. package/dist/core/docs-scraper.js +0 -386
  90. package/dist/core/docs-scraper.js.map +0 -1
  91. package/dist/core/editor.d.ts +0 -87
  92. package/dist/core/editor.d.ts.map +0 -1
  93. package/dist/core/editor.js +0 -377
  94. package/dist/core/editor.js.map +0 -1
  95. package/dist/core/export.d.ts +0 -11
  96. package/dist/core/export.d.ts.map +0 -1
  97. package/dist/core/export.js +0 -54
  98. package/dist/core/export.js.map +0 -1
  99. package/dist/core/history-manager.d.ts +0 -75
  100. package/dist/core/history-manager.d.ts.map +0 -1
  101. package/dist/core/history-manager.js +0 -146
  102. package/dist/core/history-manager.js.map +0 -1
  103. package/dist/core/marketplace-client.d.ts +0 -52
  104. package/dist/core/marketplace-client.d.ts.map +0 -1
  105. package/dist/core/marketplace-client.js +0 -71
  106. package/dist/core/marketplace-client.js.map +0 -1
  107. package/dist/core/mcp/mcp-config.d.ts +0 -10
  108. package/dist/core/mcp/mcp-config.d.ts.map +0 -1
  109. package/dist/core/mcp/mcp-config.js +0 -70
  110. package/dist/core/mcp/mcp-config.js.map +0 -1
  111. package/dist/core/mcp/mcp-policy.d.ts +0 -17
  112. package/dist/core/mcp/mcp-policy.d.ts.map +0 -1
  113. package/dist/core/mcp/mcp-policy.js +0 -56
  114. package/dist/core/mcp/mcp-policy.js.map +0 -1
  115. package/dist/core/mcp/oauth-flow.d.ts +0 -30
  116. package/dist/core/mcp/oauth-flow.d.ts.map +0 -1
  117. package/dist/core/mcp/oauth-flow.js +0 -230
  118. package/dist/core/mcp/oauth-flow.js.map +0 -1
  119. package/dist/core/mcp/oauth-store.d.ts +0 -13
  120. package/dist/core/mcp/oauth-store.d.ts.map +0 -1
  121. package/dist/core/mcp/oauth-store.js +0 -68
  122. package/dist/core/mcp/oauth-store.js.map +0 -1
  123. package/dist/core/mcp/resolve-mcp-servers.d.ts +0 -16
  124. package/dist/core/mcp/resolve-mcp-servers.d.ts.map +0 -1
  125. package/dist/core/mcp/resolve-mcp-servers.js +0 -83
  126. package/dist/core/mcp/resolve-mcp-servers.js.map +0 -1
  127. package/dist/core/mcp-client.d.ts +0 -99
  128. package/dist/core/mcp-client.d.ts.map +0 -1
  129. package/dist/core/mcp-client.js +0 -315
  130. package/dist/core/mcp-client.js.map +0 -1
  131. package/dist/core/memory-promotions.d.ts +0 -15
  132. package/dist/core/memory-promotions.d.ts.map +0 -1
  133. package/dist/core/memory-promotions.js +0 -38
  134. package/dist/core/memory-promotions.js.map +0 -1
  135. package/dist/core/memory.d.ts +0 -32
  136. package/dist/core/memory.d.ts.map +0 -1
  137. package/dist/core/memory.js +0 -121
  138. package/dist/core/memory.js.map +0 -1
  139. package/dist/core/modes.d.ts +0 -432
  140. package/dist/core/modes.d.ts.map +0 -1
  141. package/dist/core/modes.js +0 -1088
  142. package/dist/core/modes.js.map +0 -1
  143. package/dist/core/pattern-miner.d.ts +0 -43
  144. package/dist/core/pattern-miner.d.ts.map +0 -1
  145. package/dist/core/pattern-miner.js +0 -123
  146. package/dist/core/pattern-miner.js.map +0 -1
  147. package/dist/core/permission-store.d.ts +0 -15
  148. package/dist/core/permission-store.d.ts.map +0 -1
  149. package/dist/core/permission-store.js +0 -30
  150. package/dist/core/permission-store.js.map +0 -1
  151. package/dist/core/permissions.d.ts +0 -33
  152. package/dist/core/permissions.d.ts.map +0 -1
  153. package/dist/core/permissions.js +0 -141
  154. package/dist/core/permissions.js.map +0 -1
  155. package/dist/core/plan-artifacts.d.ts +0 -10
  156. package/dist/core/plan-artifacts.d.ts.map +0 -1
  157. package/dist/core/plan-artifacts.js +0 -60
  158. package/dist/core/plan-artifacts.js.map +0 -1
  159. package/dist/core/plan-session.d.ts +0 -25
  160. package/dist/core/plan-session.d.ts.map +0 -1
  161. package/dist/core/plan-session.js +0 -99
  162. package/dist/core/plan-session.js.map +0 -1
  163. package/dist/core/planMode.d.ts +0 -51
  164. package/dist/core/planMode.d.ts.map +0 -1
  165. package/dist/core/planMode.js +0 -245
  166. package/dist/core/planMode.js.map +0 -1
  167. package/dist/core/plugins.d.ts +0 -96
  168. package/dist/core/plugins.d.ts.map +0 -1
  169. package/dist/core/plugins.js +0 -202
  170. package/dist/core/plugins.js.map +0 -1
  171. package/dist/core/session-bridge.d.ts +0 -128
  172. package/dist/core/session-bridge.d.ts.map +0 -1
  173. package/dist/core/session-bridge.js +0 -328
  174. package/dist/core/session-bridge.js.map +0 -1
  175. package/dist/core/session-manager.d.ts +0 -80
  176. package/dist/core/session-manager.d.ts.map +0 -1
  177. package/dist/core/session-manager.js +0 -166
  178. package/dist/core/session-manager.js.map +0 -1
  179. package/dist/core/session-memory.d.ts +0 -45
  180. package/dist/core/session-memory.d.ts.map +0 -1
  181. package/dist/core/session-memory.js +0 -103
  182. package/dist/core/session-memory.js.map +0 -1
  183. package/dist/core/skill-selection.d.ts +0 -36
  184. package/dist/core/skill-selection.d.ts.map +0 -1
  185. package/dist/core/skill-selection.js +0 -172
  186. package/dist/core/skill-selection.js.map +0 -1
  187. package/dist/core/skills-sh-client.d.ts +0 -19
  188. package/dist/core/skills-sh-client.d.ts.map +0 -1
  189. package/dist/core/skills-sh-client.js +0 -75
  190. package/dist/core/skills-sh-client.js.map +0 -1
  191. package/dist/core/skills.d.ts +0 -97
  192. package/dist/core/skills.d.ts.map +0 -1
  193. package/dist/core/skills.js +0 -339
  194. package/dist/core/skills.js.map +0 -1
  195. package/dist/core/swarm.d.ts +0 -34
  196. package/dist/core/swarm.d.ts.map +0 -1
  197. package/dist/core/swarm.js +0 -111
  198. package/dist/core/swarm.js.map +0 -1
  199. package/dist/core/task-status.d.ts +0 -13
  200. package/dist/core/task-status.d.ts.map +0 -1
  201. package/dist/core/task-status.js +0 -17
  202. package/dist/core/task-status.js.map +0 -1
  203. package/dist/core/tool-orchestrator.d.ts +0 -30
  204. package/dist/core/tool-orchestrator.d.ts.map +0 -1
  205. package/dist/core/tool-orchestrator.js +0 -89
  206. package/dist/core/tool-orchestrator.js.map +0 -1
  207. package/dist/core/tools.d.ts +0 -462
  208. package/dist/core/tools.d.ts.map +0 -1
  209. package/dist/core/tools.js +0 -2916
  210. package/dist/core/tools.js.map +0 -1
  211. package/dist/core/transcript-cleanup.d.ts +0 -8
  212. package/dist/core/transcript-cleanup.d.ts.map +0 -1
  213. package/dist/core/transcript-cleanup.js +0 -52
  214. package/dist/core/transcript-cleanup.js.map +0 -1
  215. package/dist/core/visual-feedback.d.ts +0 -20
  216. package/dist/core/visual-feedback.d.ts.map +0 -1
  217. package/dist/core/visual-feedback.js +0 -117
  218. package/dist/core/visual-feedback.js.map +0 -1
  219. package/dist/tools/browser.d.ts +0 -120
  220. package/dist/tools/browser.d.ts.map +0 -1
  221. package/dist/tools/browser.js +0 -439
  222. package/dist/tools/browser.js.map +0 -1
  223. package/dist/tools/test-generator.d.ts +0 -157
  224. package/dist/tools/test-generator.d.ts.map +0 -1
  225. package/dist/tools/test-generator.js +0 -893
  226. package/dist/tools/test-generator.js.map +0 -1
  227. package/dist/tui/InkApp.d.ts +0 -21
  228. package/dist/tui/InkApp.d.ts.map +0 -1
  229. package/dist/tui/InkApp.js +0 -146
  230. package/dist/tui/InkApp.js.map +0 -1
  231. package/dist/tui/MarkdownMessage.d.ts +0 -16
  232. package/dist/tui/MarkdownMessage.d.ts.map +0 -1
  233. package/dist/tui/MarkdownMessage.js +0 -63
  234. package/dist/tui/MarkdownMessage.js.map +0 -1
  235. package/dist/tui/blessed-chat.d.ts +0 -9
  236. package/dist/tui/blessed-chat.d.ts.map +0 -1
  237. package/dist/tui/blessed-chat.js +0 -887
  238. package/dist/tui/blessed-chat.js.map +0 -1
  239. package/dist/tui/markdown-to-blessed.d.ts +0 -6
  240. package/dist/tui/markdown-to-blessed.d.ts.map +0 -1
  241. package/dist/tui/markdown-to-blessed.js +0 -26
  242. package/dist/tui/markdown-to-blessed.js.map +0 -1
  243. package/dist/ui/ink/App.d.ts +0 -25
  244. package/dist/ui/ink/App.d.ts.map +0 -1
  245. package/dist/ui/ink/App.js +0 -372
  246. package/dist/ui/ink/App.js.map +0 -1
  247. package/dist/utils/at-references.d.ts +0 -14
  248. package/dist/utils/at-references.d.ts.map +0 -1
  249. package/dist/utils/at-references.js +0 -47
  250. package/dist/utils/at-references.js.map +0 -1
  251. package/dist/utils/auto-memory.d.ts +0 -24
  252. package/dist/utils/auto-memory.d.ts.map +0 -1
  253. package/dist/utils/auto-memory.js +0 -153
  254. package/dist/utils/auto-memory.js.map +0 -1
  255. package/dist/utils/git.d.ts +0 -89
  256. package/dist/utils/git.d.ts.map +0 -1
  257. package/dist/utils/git.js +0 -444
  258. package/dist/utils/git.js.map +0 -1
  259. package/dist/utils/mcp-servers-file.d.ts +0 -46
  260. package/dist/utils/mcp-servers-file.d.ts.map +0 -1
  261. package/dist/utils/mcp-servers-file.js +0 -212
  262. package/dist/utils/mcp-servers-file.js.map +0 -1
  263. package/dist/utils/safety.d.ts +0 -60
  264. package/dist/utils/safety.d.ts.map +0 -1
  265. package/dist/utils/safety.js +0 -254
  266. package/dist/utils/safety.js.map +0 -1
  267. package/dist/utils/smithery.d.ts +0 -25
  268. package/dist/utils/smithery.d.ts.map +0 -1
  269. package/dist/utils/smithery.js +0 -50
  270. package/dist/utils/smithery.js.map +0 -1
  271. package/dist/utils/testRunner.d.ts +0 -44
  272. package/dist/utils/testRunner.d.ts.map +0 -1
  273. package/dist/utils/testRunner.js +0 -270
  274. package/dist/utils/testRunner.js.map +0 -1
  275. package/dist/webui/server.d.ts +0 -99
  276. package/dist/webui/server.d.ts.map +0 -1
  277. package/dist/webui/server.js +0 -2619
  278. package/dist/webui/server.js.map +0 -1
  279. package/webui-dist/assets/index-CSla6Lzy.css +0 -32
  280. package/webui-dist/assets/index-G_Z4gzPy.js +0 -457
  281. package/webui-dist/assets/index-G_Z4gzPy.js.map +0 -1
  282. package/webui-dist/assets/xterm-Da5jL1MD.js +0 -10
  283. package/webui-dist/assets/xterm-Da5jL1MD.js.map +0 -1
  284. package/webui-dist/assets/xterm-addon-fit-CMeqLIvm.js +0 -2
  285. package/webui-dist/assets/xterm-addon-fit-CMeqLIvm.js.map +0 -1
  286. package/webui-dist/assets/xterm-addon-web-links-D6m8jNVE.js +0 -2
  287. package/webui-dist/assets/xterm-addon-web-links-D6m8jNVE.js.map +0 -1
  288. package/webui-dist/index.html +0 -15
@@ -1,377 +0,0 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
3
- import * as diff from 'diff';
4
- import { sanitizePath } from '../utils/safety.js';
5
- export class FileEditor {
6
- workingDir;
7
- backupDir;
8
- constructor(workingDir) {
9
- this.workingDir = workingDir;
10
- this.backupDir = path.join(workingDir, '.xibecode_backups');
11
- }
12
- /**
13
- * Resolve filePath under workingDir (same rules as read_file / write_file).
14
- * Rejects absolute paths outside the working directory (e.g. hallucinated /workspace/...).
15
- */
16
- resolveSafePath(filePath) {
17
- const r = sanitizePath(this.workingDir, filePath);
18
- if (!r.ok) {
19
- return {
20
- ok: false,
21
- message: `${r.message} Use paths relative to the repository root (e.g. package.json, src/foo.ts), not absolute paths like /workspace or /app.`,
22
- };
23
- }
24
- return { ok: true, fullPath: r.path };
25
- }
26
- /**
27
- * Smart edit - searches for unique section and replaces it
28
- * This is the most reliable way to edit files
29
- */
30
- async smartEdit(filePath, edit) {
31
- const resolved = this.resolveSafePath(filePath);
32
- if (!resolved.ok) {
33
- return { success: false, message: resolved.message };
34
- }
35
- const fullPath = resolved.fullPath;
36
- try {
37
- const content = await fs.readFile(fullPath, 'utf-8');
38
- // Count occurrences
39
- const occurrences = (content.match(new RegExp(this.escapeRegex(edit.search), 'g')) || []).length;
40
- if (occurrences === 0) {
41
- return {
42
- success: false,
43
- message: `Search string not found in ${filePath}`,
44
- };
45
- }
46
- if (occurrences > 1 && !edit.all) {
47
- return {
48
- success: false,
49
- message: `Search string appears ${occurrences} times. Please be more specific or use all:true`,
50
- };
51
- }
52
- // Perform replacement
53
- const newContent = edit.all
54
- ? content.replaceAll(edit.search, edit.replace)
55
- : content.replace(edit.search, edit.replace);
56
- // Create backup
57
- await this.createBackup(filePath, content);
58
- // Write new content
59
- await fs.writeFile(fullPath, newContent, 'utf-8');
60
- // Generate diff
61
- const patches = diff.createPatch(filePath, content, newContent);
62
- const linesChanged = this.countChangedLines(patches);
63
- return {
64
- success: true,
65
- message: `Successfully edited ${filePath}`,
66
- diff: patches,
67
- linesChanged,
68
- };
69
- }
70
- catch (error) {
71
- return {
72
- success: false,
73
- message: `Failed to edit ${filePath}: ${error.message}`,
74
- };
75
- }
76
- }
77
- /**
78
- * Edit specific line range - good for large files
79
- */
80
- async editLineRange(filePath, edit) {
81
- const resolved = this.resolveSafePath(filePath);
82
- if (!resolved.ok) {
83
- return { success: false, message: resolved.message };
84
- }
85
- const fullPath = resolved.fullPath;
86
- try {
87
- const content = await fs.readFile(fullPath, 'utf-8');
88
- const lines = content.split('\n');
89
- if (edit.startLine < 1 || edit.endLine > lines.length) {
90
- return {
91
- success: false,
92
- message: `Invalid line range: ${edit.startLine}-${edit.endLine} (file has ${lines.length} lines)`,
93
- };
94
- }
95
- // Create backup
96
- await this.createBackup(filePath, content);
97
- // Replace lines
98
- const newLines = [
99
- ...lines.slice(0, edit.startLine - 1),
100
- ...edit.newContent.split('\n'),
101
- ...lines.slice(edit.endLine),
102
- ];
103
- const newContent = newLines.join('\n');
104
- await fs.writeFile(fullPath, newContent, 'utf-8');
105
- // Generate diff
106
- const patches = diff.createPatch(filePath, content, newContent);
107
- const linesChanged = this.countChangedLines(patches);
108
- return {
109
- success: true,
110
- message: `Successfully edited lines ${edit.startLine}-${edit.endLine} in ${filePath}`,
111
- diff: patches,
112
- linesChanged,
113
- };
114
- }
115
- catch (error) {
116
- return {
117
- success: false,
118
- message: `Failed to edit ${filePath}: ${error.message}`,
119
- };
120
- }
121
- }
122
- /**
123
- * Verified edit - requires old content to match before replacing.
124
- * This is the most reliable editing method as it prevents hallucinated edits.
125
- * If the old content doesn't match, returns the actual content so the AI can self-correct.
126
- */
127
- async verifiedEdit(filePath, edit) {
128
- const resolved = this.resolveSafePath(filePath);
129
- if (!resolved.ok) {
130
- return { success: false, message: resolved.message };
131
- }
132
- const fullPath = resolved.fullPath;
133
- try {
134
- const content = await fs.readFile(fullPath, 'utf-8');
135
- const lines = content.split('\n');
136
- // Validate line range
137
- if (edit.startLine < 1 || edit.endLine > lines.length) {
138
- return {
139
- success: false,
140
- message: `Invalid line range: ${edit.startLine}-${edit.endLine} (file has ${lines.length} lines)`,
141
- };
142
- }
143
- if (edit.startLine > edit.endLine) {
144
- return {
145
- success: false,
146
- message: `Invalid line range: start_line (${edit.startLine}) must be <= end_line (${edit.endLine})`,
147
- };
148
- }
149
- // Extract actual content at the specified lines
150
- const actualLines = lines.slice(edit.startLine - 1, edit.endLine);
151
- const actualContent = actualLines.join('\n');
152
- // Normalize for comparison: trim trailing whitespace per line, then compare
153
- const normalize = (s) => s.split('\n').map(l => l.trimEnd()).join('\n').trim();
154
- const normalizedActual = normalize(actualContent);
155
- const normalizedExpected = normalize(edit.oldContent);
156
- if (normalizedActual !== normalizedExpected) {
157
- return {
158
- success: false,
159
- message: `Content mismatch at lines ${edit.startLine}-${edit.endLine}. The old_content you provided does not match the actual file content. Re-read the file and try again.`,
160
- actual_content: actualContent,
161
- };
162
- }
163
- // Content verified — proceed with edit
164
- await this.createBackup(filePath, content);
165
- const newLines = [
166
- ...lines.slice(0, edit.startLine - 1),
167
- ...edit.newContent.split('\n'),
168
- ...lines.slice(edit.endLine),
169
- ];
170
- const newContent = newLines.join('\n');
171
- await fs.writeFile(fullPath, newContent, 'utf-8');
172
- // Generate diff
173
- const patches = diff.createPatch(filePath, content, newContent);
174
- const linesChanged = this.countChangedLines(patches);
175
- return {
176
- success: true,
177
- message: `Successfully verified and edited lines ${edit.startLine}-${edit.endLine} in ${filePath}`,
178
- diff: patches,
179
- linesChanged,
180
- };
181
- }
182
- catch (error) {
183
- return {
184
- success: false,
185
- message: `Failed to edit ${filePath}: ${error.message}`,
186
- };
187
- }
188
- }
189
- /**
190
- * Insert content at specific line
191
- */
192
- async insertAtLine(filePath, line, content) {
193
- const resolved = this.resolveSafePath(filePath);
194
- if (!resolved.ok) {
195
- return { success: false, message: resolved.message };
196
- }
197
- const fullPath = resolved.fullPath;
198
- try {
199
- const originalContent = await fs.readFile(fullPath, 'utf-8');
200
- const lines = originalContent.split('\n');
201
- if (line < 1 || line > lines.length + 1) {
202
- return {
203
- success: false,
204
- message: `Invalid line number: ${line} (file has ${lines.length} lines)`,
205
- };
206
- }
207
- // Create backup
208
- await this.createBackup(filePath, originalContent);
209
- // Insert content
210
- lines.splice(line - 1, 0, content);
211
- const newContent = lines.join('\n');
212
- await fs.writeFile(fullPath, newContent, 'utf-8');
213
- return {
214
- success: true,
215
- message: `Successfully inserted content at line ${line} in ${filePath}`,
216
- linesChanged: content.split('\n').length,
217
- };
218
- }
219
- catch (error) {
220
- return {
221
- success: false,
222
- message: `Failed to insert in ${filePath}: ${error.message}`,
223
- };
224
- }
225
- }
226
- /**
227
- * Apply unified diff patch
228
- */
229
- async applyPatch(filePath, patch) {
230
- const resolved = this.resolveSafePath(filePath);
231
- if (!resolved.ok) {
232
- return { success: false, message: resolved.message };
233
- }
234
- const fullPath = resolved.fullPath;
235
- try {
236
- const content = await fs.readFile(fullPath, 'utf-8');
237
- // Create backup
238
- await this.createBackup(filePath, content);
239
- // Apply patch
240
- const patches = diff.parsePatch(patch);
241
- if (patches.length === 0) {
242
- return {
243
- success: false,
244
- message: 'Invalid patch format',
245
- };
246
- }
247
- const result = diff.applyPatch(content, patches[0]);
248
- if (result === false) {
249
- return {
250
- success: false,
251
- message: 'Patch could not be applied (content may have changed)',
252
- };
253
- }
254
- await fs.writeFile(fullPath, result, 'utf-8');
255
- return {
256
- success: true,
257
- message: `Successfully applied patch to ${filePath}`,
258
- diff: patch,
259
- };
260
- }
261
- catch (error) {
262
- return {
263
- success: false,
264
- message: `Failed to apply patch to ${filePath}: ${error.message}`,
265
- };
266
- }
267
- }
268
- /**
269
- * Revert file to backup
270
- */
271
- async revertToBackup(filePath, backupIndex = 0) {
272
- const resolved = this.resolveSafePath(filePath);
273
- if (!resolved.ok) {
274
- return { success: false, message: resolved.message };
275
- }
276
- const backups = await this.listBackups(filePath);
277
- if (backups.length === 0) {
278
- return {
279
- success: false,
280
- message: `No backups found for ${filePath}`,
281
- };
282
- }
283
- if (backupIndex >= backups.length) {
284
- return {
285
- success: false,
286
- message: `Backup index ${backupIndex} not found (have ${backups.length} backups)`,
287
- };
288
- }
289
- const backupPath = backups[backupIndex];
290
- const fullPath = resolved.fullPath;
291
- try {
292
- const backupContent = await fs.readFile(backupPath, 'utf-8');
293
- await fs.writeFile(fullPath, backupContent, 'utf-8');
294
- return {
295
- success: true,
296
- message: `Successfully reverted ${filePath} to backup ${backupIndex}`,
297
- };
298
- }
299
- catch (error) {
300
- return {
301
- success: false,
302
- message: `Failed to revert: ${error.message}`,
303
- };
304
- }
305
- }
306
- /**
307
- * Create backup of file
308
- */
309
- async createBackup(filePath, content) {
310
- await fs.mkdir(this.backupDir, { recursive: true });
311
- const timestamp = Date.now();
312
- const backupName = `${filePath.replace(/[\/\\]/g, '_')}.${timestamp}.backup`;
313
- const backupPath = path.join(this.backupDir, backupName);
314
- await fs.writeFile(backupPath, content, 'utf-8');
315
- }
316
- /**
317
- * List backups for a file
318
- */
319
- async listBackups(filePath) {
320
- try {
321
- const backupPrefix = filePath.replace(/[\/\\]/g, '_');
322
- const files = await fs.readdir(this.backupDir);
323
- const backups = files
324
- .filter(f => f.startsWith(backupPrefix) && f.endsWith('.backup'))
325
- .sort((a, b) => {
326
- const timeA = parseInt(a.split('.')[1]);
327
- const timeB = parseInt(b.split('.')[1]);
328
- return timeB - timeA; // Most recent first
329
- })
330
- .map(f => path.join(this.backupDir, f));
331
- return backups;
332
- }
333
- catch {
334
- return [];
335
- }
336
- }
337
- /**
338
- * Count changed lines in diff
339
- */
340
- countChangedLines(patch) {
341
- const lines = patch.split('\n');
342
- return lines.filter(l => l.startsWith('+') || l.startsWith('-')).length;
343
- }
344
- /**
345
- * Escape special regex characters
346
- */
347
- escapeRegex(str) {
348
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
349
- }
350
- /**
351
- * Get file info for display
352
- */
353
- async getFileInfo(filePath) {
354
- const resolved = this.resolveSafePath(filePath);
355
- if (!resolved.ok) {
356
- return { exists: false };
357
- }
358
- const fullPath = resolved.fullPath;
359
- try {
360
- const stats = await fs.stat(fullPath);
361
- const content = await fs.readFile(fullPath, 'utf-8');
362
- const lines = content.split('\n');
363
- // Get first 10 lines as preview
364
- const preview = lines.slice(0, 10).join('\n');
365
- return {
366
- exists: true,
367
- lines: lines.length,
368
- size: stats.size,
369
- preview,
370
- };
371
- }
372
- catch {
373
- return { exists: false };
374
- }
375
- }
376
- }
377
- //# sourceMappingURL=editor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/core/editor.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { MessageParam } from '@anthropic-ai/sdk/resources/messages';
2
- import type { ChatSession } from './session-manager.js';
3
- export interface ExportMetadata {
4
- title: string;
5
- model: string;
6
- created?: string;
7
- updated?: string;
8
- }
9
- export declare function exportMessagesToMarkdown(messages: MessageParam[], meta: ExportMetadata): string;
10
- export declare function exportSessionToMarkdown(session: ChatSession): string;
11
- //# sourceMappingURL=export.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/core/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,cAAc,GACnB,MAAM,CAiCR;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAOpE"}
@@ -1,54 +0,0 @@
1
- export function exportMessagesToMarkdown(messages, meta) {
2
- const lines = [];
3
- lines.push(`# XibeCode Session: ${meta.title || 'Untitled Session'}`);
4
- lines.push('');
5
- lines.push(`**Model**: ${meta.model}`);
6
- if (meta.created) {
7
- lines.push(`**Created**: ${meta.created}`);
8
- }
9
- if (meta.updated) {
10
- lines.push(`**Updated**: ${meta.updated}`);
11
- }
12
- lines.push('');
13
- lines.push('## Conversation');
14
- lines.push('');
15
- for (const msg of messages) {
16
- if (msg.role === 'user') {
17
- const content = renderContent(msg);
18
- lines.push('**You**:');
19
- lines.push('');
20
- lines.push(content);
21
- lines.push('');
22
- }
23
- else if (msg.role === 'assistant') {
24
- const content = renderContent(msg);
25
- lines.push('**Assistant**:');
26
- lines.push('');
27
- lines.push(content);
28
- lines.push('');
29
- }
30
- }
31
- return lines.join('\n');
32
- }
33
- export function exportSessionToMarkdown(session) {
34
- return exportMessagesToMarkdown(session.messages, {
35
- title: session.title,
36
- model: session.model,
37
- created: session.created,
38
- updated: session.updated,
39
- });
40
- }
41
- function renderContent(msg) {
42
- if (typeof msg.content === 'string')
43
- return msg.content;
44
- if (!Array.isArray(msg.content))
45
- return '';
46
- const parts = [];
47
- for (const block of msg.content) {
48
- if (block.type === 'text' && block.text) {
49
- parts.push(block.text);
50
- }
51
- }
52
- return parts.join('\n');
53
- }
54
- //# sourceMappingURL=export.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/core/export.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,wBAAwB,CACtC,QAAwB,EACxB,IAAoB;IAEpB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,KAAK,IAAI,kBAAkB,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAoB;IAC1D,OAAO,wBAAwB,CAAC,OAAO,CAAC,QAAQ,EAAE;QAChD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,GAAiB;IACtC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAgB,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,75 +0,0 @@
1
- /**
2
- * Chat History Manager
3
- *
4
- * Manages persistent chat conversations stored per-project in:
5
- * ~/.xibecode/history/{project-hash}/
6
- *
7
- * Each conversation is stored as a JSON file with full message history.
8
- */
9
- export interface HistoryMessage {
10
- id: string;
11
- role: 'user' | 'assistant' | 'system' | 'tool';
12
- content: string;
13
- source?: 'tui' | 'webui';
14
- toolName?: string;
15
- toolStatus?: 'running' | 'success' | 'error';
16
- timestamp: number;
17
- }
18
- export interface SavedConversation {
19
- id: string;
20
- title: string;
21
- projectPath: string;
22
- projectName: string;
23
- created: string;
24
- updated: string;
25
- model: string;
26
- mode: string;
27
- messages: HistoryMessage[];
28
- }
29
- export interface ConversationSummary {
30
- id: string;
31
- title: string;
32
- created: string;
33
- updated: string;
34
- messageCount: number;
35
- model: string;
36
- }
37
- export declare class HistoryManager {
38
- private workingDir;
39
- private baseDir;
40
- private projectDir;
41
- constructor(workingDir: string);
42
- /**
43
- * Generate a safe directory name from the project path
44
- */
45
- private getProjectHash;
46
- /**
47
- * Ensure the history directory exists
48
- */
49
- private ensureDir;
50
- /**
51
- * Generate a title from the first user message
52
- */
53
- static summarizeTitle(firstMessage: string): string;
54
- /**
55
- * Save a conversation (create or update)
56
- */
57
- save(conversation: SavedConversation): Promise<void>;
58
- /**
59
- * Load a conversation by ID
60
- */
61
- load(id: string): Promise<SavedConversation | null>;
62
- /**
63
- * List all conversations for this project (sorted by updated, newest first)
64
- */
65
- list(): Promise<ConversationSummary[]>;
66
- /**
67
- * Delete a conversation
68
- */
69
- delete(id: string): Promise<boolean>;
70
- /**
71
- * Create a new conversation with a generated ID
72
- */
73
- static createConversation(projectPath: string, firstMessage: string, model?: string, mode?: string): SavedConversation;
74
- }
75
- //# sourceMappingURL=history-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history-manager.d.ts","sourceRoot":"","sources":["../../src/core/history-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,cAAc;IAIb,OAAO,CAAC,UAAU;IAH9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;gBAEP,UAAU,EAAE,MAAM;IAKtC;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;YACW,SAAS;IAIvB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAanD;;OAEG;IACG,IAAI,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1D;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAUzD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAyC5C;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1C;;OAEG;IACH,MAAM,CAAC,kBAAkB,CACvB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,GAAE,MAAW,EAClB,IAAI,GAAE,MAAgB,GACrB,iBAAiB;CAcrB"}