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,158 +0,0 @@
1
- function messageText(message) {
2
- if (typeof message.content === 'string') {
3
- return message.content;
4
- }
5
- if (Array.isArray(message.content)) {
6
- return message.content
7
- .map((block) => {
8
- if (block?.type === 'text')
9
- return String(block.text || '');
10
- if (block?.type === 'tool_use')
11
- return `[tool_use:${String(block.name || 'unknown')}]`;
12
- if (block?.type === 'tool_result')
13
- return `[tool_result:${String(block.tool_use_id || 'unknown')}]`;
14
- return String(block?.content ?? '');
15
- })
16
- .join('\n');
17
- }
18
- return '';
19
- }
20
- function shouldPreserve(message) {
21
- const text = messageText(message);
22
- return (text.includes('[[PLAN_READY]]') ||
23
- text.includes('[[TASK_COMPLETE') ||
24
- text.includes('[SYSTEM]') ||
25
- text.includes('Plan approved'));
26
- }
27
- function parseToolResultFacts(message) {
28
- if (!Array.isArray(message.content))
29
- return [];
30
- const facts = [];
31
- for (const block of message.content) {
32
- if (block?.type !== 'tool_result')
33
- continue;
34
- const raw = typeof block.content === 'string' ? block.content : JSON.stringify(block.content ?? {});
35
- let payload = null;
36
- try {
37
- payload = JSON.parse(raw);
38
- }
39
- catch {
40
- payload = null;
41
- }
42
- if (!payload || typeof payload !== 'object')
43
- continue;
44
- if (typeof payload.path === 'string') {
45
- facts.push(`Touched file: ${payload.path}`);
46
- }
47
- if (typeof payload.linesChanged === 'number') {
48
- facts.push(`Edited ${payload.linesChanged} line(s)`);
49
- }
50
- if (typeof payload.exitCode === 'number') {
51
- facts.push(`Command exit code: ${payload.exitCode}`);
52
- }
53
- if (typeof payload.totalFiles === 'number') {
54
- facts.push(`Context files: ${payload.totalFiles}`);
55
- }
56
- if (typeof payload.match_count === 'number') {
57
- facts.push(`Search matches: ${payload.match_count}`);
58
- }
59
- }
60
- return facts;
61
- }
62
- function buildGroundedFacts(messages) {
63
- const out = [];
64
- for (const message of messages) {
65
- const text = messageText(message);
66
- if (text.includes('[[TASK_COMPLETE')) {
67
- out.push('Task completion marker observed');
68
- }
69
- for (const fact of parseToolResultFacts(message)) {
70
- out.push(fact);
71
- }
72
- }
73
- return Array.from(new Set(out)).slice(-12);
74
- }
75
- function summarizeText(text, maxLen = 120) {
76
- const clean = text.replace(/\s+/g, ' ').trim();
77
- if (clean.length <= maxLen)
78
- return clean;
79
- return `${clean.slice(0, maxLen - 1)}…`;
80
- }
81
- function buildConversationSummary(messages) {
82
- const userTurns = [];
83
- const assistantTurns = [];
84
- for (const message of messages) {
85
- const text = messageText(message);
86
- if (!text)
87
- continue;
88
- if (message.role === 'user') {
89
- userTurns.push(summarizeText(text));
90
- }
91
- else if (message.role === 'assistant') {
92
- assistantTurns.push(summarizeText(text));
93
- }
94
- }
95
- const latestUser = userTurns.slice(-4);
96
- const latestAssistant = assistantTurns.slice(-4);
97
- const sections = [];
98
- if (latestUser.length > 0) {
99
- sections.push('Recent user intents:\n' +
100
- latestUser.map((line, idx) => `${idx + 1}. ${line}`).join('\n'));
101
- }
102
- if (latestAssistant.length > 0) {
103
- sections.push('Recent assistant outcomes:\n' +
104
- latestAssistant.map((line, idx) => `${idx + 1}. ${line}`).join('\n'));
105
- }
106
- return sections.join('\n\n').trim();
107
- }
108
- export function compactConversation(messages, keepRecentCount = 16) {
109
- if (messages.length <= keepRecentCount) {
110
- return {
111
- messages,
112
- droppedCount: 0,
113
- summaryNotice: '',
114
- groundedFacts: [],
115
- conversationSummary: '',
116
- };
117
- }
118
- const older = messages.slice(0, -keepRecentCount);
119
- const recent = messages.slice(-keepRecentCount);
120
- const preserved = older.filter(shouldPreserve);
121
- const groundedFacts = buildGroundedFacts(older);
122
- const conversationSummary = buildConversationSummary(older);
123
- const droppedCount = messages.length - (recent.length + preserved.length);
124
- const summaryNotice = `Conversation was compacted: dropped ${droppedCount} stale messages, ` +
125
- `kept ${preserved.length} critical and ${recent.length} recent messages.`;
126
- const compacted = [
127
- {
128
- role: 'assistant',
129
- content: summaryNotice,
130
- },
131
- ...(groundedFacts.length > 0
132
- ? [
133
- {
134
- role: 'assistant',
135
- content: `[Grounded Facts Ledger]\n${groundedFacts.map((fact) => `- ${fact}`).join('\n')}`,
136
- },
137
- ]
138
- : []),
139
- ...(conversationSummary
140
- ? [
141
- {
142
- role: 'assistant',
143
- content: `[Conversation Summary]\n${conversationSummary}`,
144
- },
145
- ]
146
- : []),
147
- ...preserved,
148
- ...recent,
149
- ];
150
- return {
151
- messages: compacted,
152
- droppedCount,
153
- summaryNotice,
154
- groundedFacts,
155
- conversationSummary,
156
- };
157
- }
158
- //# sourceMappingURL=context-compactor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-compactor.js","sourceRoot":"","sources":["../../src/core/context-compactor.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Lightweight context pruning: score files by relevance to the task
3
- * so we can cap what gets suggested to the agent and reduce tokens.
4
- */
5
- export interface PruneOptions {
6
- maxFiles?: number;
7
- extensions?: string[];
8
- /** If true, include a simple content snippet (first 500 chars) in scoring. */
9
- useContent?: boolean;
10
- /** If true, augment with PKG-style code graph (AST/import-based relevance). Requires CodeGraph. */
11
- usePkgStyleContext?: boolean;
12
- }
13
- /**
14
- * List candidate files in workingDir (by extensions), optionally read a small
15
- * content preview, score by relevance to the task, and return top maxFiles paths.
16
- * When usePkgStyleContext is true, augments with PKG-style code graph (AST) results.
17
- */
18
- export declare function pruneContext(workingDir: string, task: string, options?: PruneOptions): Promise<string[]>;
19
- //# sourceMappingURL=context-pruner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-pruner.d.ts","sourceRoot":"","sources":["../../src/core/context-pruner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mGAAmG;IACnG,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAwCD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CAmDnB"}
@@ -1,103 +0,0 @@
1
- /**
2
- * Lightweight context pruning: score files by relevance to the task
3
- * so we can cap what gets suggested to the agent and reduce tokens.
4
- */
5
- import * as fs from 'fs/promises';
6
- import * as path from 'path';
7
- import fg from 'fast-glob';
8
- const DEFAULT_MAX_FILES = 40;
9
- const DEFAULT_EXTENSIONS = ['*.ts', '*.tsx', '*.js', '*.jsx', '*.mjs', '*.cjs', '*.py', '*.go', '*.rs', '*.java', '*.md', '*.json'];
10
- const IGNORE_DIRS = ['node_modules', '.git', 'dist', 'build', '.next', 'coverage', '__pycache__', '.venv', 'vendor'];
11
- /**
12
- * Extract meaningful words from the task (ignore stopwords, short tokens).
13
- */
14
- function taskWords(task) {
15
- const stop = new Set(['the', 'and', 'for', 'with', 'this', 'that', 'from', 'have', 'has', 'can', 'will', 'are', 'was', 'were', 'been', 'being', 'into', 'through', 'during', 'before', 'after', 'when', 'where', 'which', 'what', 'your', 'need', 'add', 'fix', 'make', 'use', 'file', 'files', 'code']);
16
- const normalized = task.toLowerCase().replace(/[^\w\s]/g, ' ');
17
- const words = new Set();
18
- for (const w of normalized.split(/\s+/)) {
19
- if (w.length >= 2 && !stop.has(w))
20
- words.add(w);
21
- }
22
- return words;
23
- }
24
- /**
25
- * Score a file path (and optionally a content snippet) against task words.
26
- * Returns a number >= 0; higher = more relevant.
27
- */
28
- function scorePathAndContent(filePath, content, words) {
29
- const pathLower = filePath.toLowerCase().replace(/\\/g, '/');
30
- const pathParts = pathLower.split('/');
31
- let score = 0;
32
- for (const w of words) {
33
- if (pathLower.includes(w)) {
34
- // Prefer matches in filename over deep path
35
- const fileName = pathParts[pathParts.length - 1] ?? '';
36
- if (fileName.includes(w))
37
- score += 3;
38
- else
39
- score += 1;
40
- }
41
- }
42
- if (content) {
43
- const contentLower = content.toLowerCase();
44
- for (const w of words) {
45
- if (contentLower.includes(w))
46
- score += 1;
47
- }
48
- }
49
- return score;
50
- }
51
- /**
52
- * List candidate files in workingDir (by extensions), optionally read a small
53
- * content preview, score by relevance to the task, and return top maxFiles paths.
54
- * When usePkgStyleContext is true, augments with PKG-style code graph (AST) results.
55
- */
56
- export async function pruneContext(workingDir, task, options = {}) {
57
- const maxFiles = options.maxFiles ?? DEFAULT_MAX_FILES;
58
- const extensions = options.extensions ?? DEFAULT_EXTENSIONS;
59
- const useContent = options.useContent ?? false;
60
- const usePkgStyleContext = options.usePkgStyleContext ?? false;
61
- const words = taskWords(task);
62
- const patterns = extensions.map(ext => `**/${ext}`);
63
- const ignore = IGNORE_DIRS.map(d => `**/${d}/**`);
64
- const files = words.size > 0
65
- ? await fg(patterns, { cwd: workingDir, absolute: false, ignore, onlyFiles: true })
66
- : [];
67
- const scored = [];
68
- for (const rel of files) {
69
- let content = null;
70
- if (useContent) {
71
- try {
72
- const full = path.join(workingDir, rel);
73
- const buf = await fs.readFile(full, 'utf-8').catch(() => '');
74
- content = buf.slice(0, 500);
75
- }
76
- catch {
77
- // skip content
78
- }
79
- }
80
- const score = scorePathAndContent(rel, content, words);
81
- scored.push({ path: rel, score });
82
- }
83
- scored.sort((a, b) => b.score - a.score);
84
- const withScore = scored.filter(s => s.score > 0);
85
- let top = withScore.length > 0
86
- ? withScore.slice(0, maxFiles).map(s => s.path)
87
- : scored.slice(0, maxFiles).map(s => s.path);
88
- if (usePkgStyleContext && task.trim().length > 0) {
89
- try {
90
- const { CodeGraph } = await import('./code-graph.js');
91
- const codeGraph = new CodeGraph(workingDir);
92
- const graphResults = await codeGraph.search(task.trim().slice(0, 100));
93
- const graphPaths = [...new Set(graphResults.map(r => r.filePath).filter(Boolean))];
94
- const combined = [...new Set([...top, ...graphPaths])].slice(0, maxFiles);
95
- top = combined;
96
- }
97
- catch {
98
- // Non-fatal: fall back to keyword-only
99
- }
100
- }
101
- return top;
102
- }
103
- //# sourceMappingURL=context-pruner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-pruner.js","sourceRoot":"","sources":["../../src/core/context-pruner.ts"],"names":[],"mappings":"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"}
@@ -1,82 +0,0 @@
1
- export interface FileContext {
2
- path: string;
3
- content: string;
4
- lines: number;
5
- size: number;
6
- language?: string;
7
- }
8
- export interface ContextWindow {
9
- files: FileContext[];
10
- totalTokens: number;
11
- maxTokens: number;
12
- }
13
- export declare class ContextManager {
14
- private workingDir;
15
- private maxContextTokens;
16
- private loadedFiles;
17
- private excludePatterns;
18
- constructor(workingDir: string, maxTokens?: number);
19
- /**
20
- * Smart context builder - automatically includes relevant files
21
- */
22
- buildContext(primaryFiles?: string[]): Promise<ContextWindow>;
23
- /**
24
- * Load a single file with metadata
25
- */
26
- loadFile(filePath: string): Promise<FileContext | null>;
27
- /**
28
- * Find files related to the given files (imports, configs, tests)
29
- */
30
- private findRelatedFiles;
31
- /**
32
- * Extract import statements from code
33
- */
34
- private extractImports;
35
- /**
36
- * Resolve import path to actual file
37
- */
38
- private resolveImport;
39
- /**
40
- * Find test file for a given source file
41
- */
42
- private findTestFile;
43
- /**
44
- * Find config files in directory
45
- */
46
- private findConfigFiles;
47
- /**
48
- * Search for files matching pattern
49
- */
50
- searchFiles(pattern: string, options?: {
51
- maxResults?: number;
52
- }): Promise<string[]>;
53
- /**
54
- * Get file chunk for large files (prevents token overflow)
55
- */
56
- getFileChunk(filePath: string, startLine: number, endLine: number): Promise<string>;
57
- /**
58
- * Detect programming language from file extension
59
- */
60
- private detectLanguage;
61
- /**
62
- * Estimate token count (rough approximation: 1 token ≈ 4 chars)
63
- */
64
- private estimateTokens;
65
- /**
66
- * Check if file exists
67
- */
68
- private fileExists;
69
- /**
70
- * Clear loaded files cache
71
- */
72
- clearCache(): void;
73
- /**
74
- * Get loaded files summary
75
- */
76
- getSummary(): {
77
- fileCount: number;
78
- totalSize: number;
79
- files: string[];
80
- };
81
- }
82
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,WAAW,CAAuC;IAG1D,OAAO,CAAC,eAAe,CAUrB;gBAEU,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAKlD;;OAEG;IACG,YAAY,CAAC,YAAY,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAoCvE;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA4B7D;;OAEG;YACW,gBAAgB;IA8B9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;YACW,aAAa;IAiB3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;YACW,eAAe;IAmB7B;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBxF;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASzF;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;YACW,UAAU;IAUxB;;OAEG;IACH,UAAU;IAIV;;OAEG;IACH,UAAU,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE;CAWxE"}
@@ -1,273 +0,0 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
3
- import fg from 'fast-glob';
4
- export class ContextManager {
5
- workingDir;
6
- maxContextTokens = 100000; // ~100k tokens
7
- loadedFiles = new Map();
8
- // Files to exclude from context
9
- excludePatterns = [
10
- '**/node_modules/**',
11
- '**/dist/**',
12
- '**/build/**',
13
- '**/.git/**',
14
- '**/coverage/**',
15
- '**/*.min.js',
16
- '**/*.map',
17
- '**/package-lock.json',
18
- '**/yarn.lock',
19
- ];
20
- constructor(workingDir, maxTokens) {
21
- this.workingDir = workingDir;
22
- if (maxTokens)
23
- this.maxContextTokens = maxTokens;
24
- }
25
- /**
26
- * Smart context builder - automatically includes relevant files
27
- */
28
- async buildContext(primaryFiles = []) {
29
- const context = {
30
- files: [],
31
- totalTokens: 0,
32
- maxTokens: this.maxContextTokens,
33
- };
34
- // Load primary files first (highest priority)
35
- for (const filePath of primaryFiles) {
36
- const fileContext = await this.loadFile(filePath);
37
- if (fileContext) {
38
- context.files.push(fileContext);
39
- context.totalTokens += this.estimateTokens(fileContext.content);
40
- }
41
- }
42
- // Auto-discover related files
43
- const relatedFiles = await this.findRelatedFiles(primaryFiles);
44
- for (const filePath of relatedFiles) {
45
- if (context.totalTokens >= this.maxContextTokens * 0.8) {
46
- break; // Stop at 80% capacity
47
- }
48
- if (!this.loadedFiles.has(filePath)) {
49
- const fileContext = await this.loadFile(filePath);
50
- if (fileContext) {
51
- context.files.push(fileContext);
52
- context.totalTokens += this.estimateTokens(fileContext.content);
53
- }
54
- }
55
- }
56
- return context;
57
- }
58
- /**
59
- * Load a single file with metadata
60
- */
61
- async loadFile(filePath) {
62
- const fullPath = path.resolve(this.workingDir, filePath);
63
- try {
64
- const content = await fs.readFile(fullPath, 'utf-8');
65
- const stats = await fs.stat(fullPath);
66
- // Skip binary files or very large files
67
- if (stats.size > 1024 * 1024) { // 1MB limit
68
- return null;
69
- }
70
- const fileContext = {
71
- path: filePath,
72
- content,
73
- lines: content.split('\n').length,
74
- size: stats.size,
75
- language: this.detectLanguage(filePath),
76
- };
77
- this.loadedFiles.set(filePath, fileContext);
78
- return fileContext;
79
- }
80
- catch (error) {
81
- return null;
82
- }
83
- }
84
- /**
85
- * Find files related to the given files (imports, configs, tests)
86
- */
87
- async findRelatedFiles(files) {
88
- const related = new Set();
89
- for (const file of files) {
90
- const fileContext = this.loadedFiles.get(file);
91
- if (!fileContext)
92
- continue;
93
- // Find imports/requires
94
- const imports = this.extractImports(fileContext.content);
95
- for (const imp of imports) {
96
- const resolved = await this.resolveImport(imp, file);
97
- if (resolved)
98
- related.add(resolved);
99
- }
100
- // Find test files
101
- const testFile = this.findTestFile(file);
102
- if (testFile) {
103
- const exists = await this.fileExists(testFile);
104
- if (exists)
105
- related.add(testFile);
106
- }
107
- // Find config files in same directory
108
- const dir = path.dirname(file);
109
- const configs = await this.findConfigFiles(dir);
110
- configs.forEach(c => related.add(c));
111
- }
112
- return Array.from(related);
113
- }
114
- /**
115
- * Extract import statements from code
116
- */
117
- extractImports(content) {
118
- const imports = [];
119
- // ES6 imports
120
- const es6Regex = /import\s+.*?\s+from\s+['"](.+?)['"]/g;
121
- let match;
122
- while ((match = es6Regex.exec(content)) !== null) {
123
- imports.push(match[1]);
124
- }
125
- // CommonJS requires
126
- const cjsRegex = /require\s*\(\s*['"](.+?)['"]\s*\)/g;
127
- while ((match = cjsRegex.exec(content)) !== null) {
128
- imports.push(match[1]);
129
- }
130
- return imports;
131
- }
132
- /**
133
- * Resolve import path to actual file
134
- */
135
- async resolveImport(importPath, fromFile) {
136
- // Skip node_modules
137
- if (!importPath.startsWith('.'))
138
- return null;
139
- const dir = path.dirname(fromFile);
140
- const extensions = ['.ts', '.tsx', '.js', '.jsx', ''];
141
- for (const ext of extensions) {
142
- const resolved = path.join(dir, importPath + ext);
143
- if (await this.fileExists(resolved)) {
144
- return resolved;
145
- }
146
- }
147
- return null;
148
- }
149
- /**
150
- * Find test file for a given source file
151
- */
152
- findTestFile(filePath) {
153
- const parsed = path.parse(filePath);
154
- const testPatterns = [
155
- `${parsed.name}.test${parsed.ext}`,
156
- `${parsed.name}.spec${parsed.ext}`,
157
- path.join('__tests__', `${parsed.name}${parsed.ext}`),
158
- ];
159
- for (const pattern of testPatterns) {
160
- const testPath = path.join(parsed.dir, pattern);
161
- return testPath;
162
- }
163
- return null;
164
- }
165
- /**
166
- * Find config files in directory
167
- */
168
- async findConfigFiles(dir) {
169
- const configPatterns = [
170
- 'package.json',
171
- 'tsconfig.json',
172
- '.eslintrc*',
173
- '.prettierrc*',
174
- ];
175
- const configs = [];
176
- for (const pattern of configPatterns) {
177
- const configPath = path.join(dir, pattern);
178
- if (await this.fileExists(configPath)) {
179
- configs.push(configPath);
180
- }
181
- }
182
- return configs;
183
- }
184
- /**
185
- * Search for files matching pattern
186
- */
187
- async searchFiles(pattern, options) {
188
- const maxResults = options?.maxResults || 100;
189
- try {
190
- const files = await fg(pattern, {
191
- cwd: this.workingDir,
192
- ignore: this.excludePatterns,
193
- absolute: false,
194
- onlyFiles: true,
195
- });
196
- return files.slice(0, maxResults);
197
- }
198
- catch (error) {
199
- return [];
200
- }
201
- }
202
- /**
203
- * Get file chunk for large files (prevents token overflow)
204
- */
205
- async getFileChunk(filePath, startLine, endLine) {
206
- const fullPath = path.resolve(this.workingDir, filePath);
207
- const content = await fs.readFile(fullPath, 'utf-8');
208
- const lines = content.split('\n');
209
- const chunk = lines.slice(startLine - 1, endLine).join('\n');
210
- return chunk;
211
- }
212
- /**
213
- * Detect programming language from file extension
214
- */
215
- detectLanguage(filePath) {
216
- const ext = path.extname(filePath).toLowerCase();
217
- const langMap = {
218
- '.ts': 'typescript',
219
- '.tsx': 'typescript',
220
- '.js': 'javascript',
221
- '.jsx': 'javascript',
222
- '.py': 'python',
223
- '.java': 'java',
224
- '.cpp': 'cpp',
225
- '.c': 'c',
226
- '.go': 'go',
227
- '.rs': 'rust',
228
- '.rb': 'ruby',
229
- '.php': 'php',
230
- '.swift': 'swift',
231
- '.kt': 'kotlin',
232
- };
233
- return langMap[ext] || 'plaintext';
234
- }
235
- /**
236
- * Estimate token count (rough approximation: 1 token ≈ 4 chars)
237
- */
238
- estimateTokens(text) {
239
- return Math.ceil(text.length / 4);
240
- }
241
- /**
242
- * Check if file exists
243
- */
244
- async fileExists(filePath) {
245
- const fullPath = path.resolve(this.workingDir, filePath);
246
- try {
247
- await fs.access(fullPath);
248
- return true;
249
- }
250
- catch {
251
- return false;
252
- }
253
- }
254
- /**
255
- * Clear loaded files cache
256
- */
257
- clearCache() {
258
- this.loadedFiles.clear();
259
- }
260
- /**
261
- * Get loaded files summary
262
- */
263
- getSummary() {
264
- let totalSize = 0;
265
- const files = [];
266
- for (const [path, context] of this.loadedFiles) {
267
- files.push(path);
268
- totalSize += context.size;
269
- }
270
- return { fileCount: files.length, totalSize, files };
271
- }
272
- }
273
- //# sourceMappingURL=context.js.map