codemeld 2.1.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 (243) hide show
  1. package/README.md +514 -0
  2. package/bin/cli.js +2 -0
  3. package/dist/ai/agent.d.ts +124 -0
  4. package/dist/ai/agent.d.ts.map +1 -0
  5. package/dist/ai/agent.js +289 -0
  6. package/dist/ai/agent.js.map +1 -0
  7. package/dist/ai/index.d.ts +10 -0
  8. package/dist/ai/index.d.ts.map +1 -0
  9. package/dist/ai/index.js +10 -0
  10. package/dist/ai/index.js.map +1 -0
  11. package/dist/ai/prompts.d.ts +35 -0
  12. package/dist/ai/prompts.d.ts.map +1 -0
  13. package/dist/ai/prompts.js +166 -0
  14. package/dist/ai/prompts.js.map +1 -0
  15. package/dist/ai/refinement-loop.d.ts +29 -0
  16. package/dist/ai/refinement-loop.d.ts.map +1 -0
  17. package/dist/ai/refinement-loop.js +180 -0
  18. package/dist/ai/refinement-loop.js.map +1 -0
  19. package/dist/ai/tools.d.ts +17 -0
  20. package/dist/ai/tools.d.ts.map +1 -0
  21. package/dist/ai/tools.js +353 -0
  22. package/dist/ai/tools.js.map +1 -0
  23. package/dist/ai/visual-compare.d.ts +43 -0
  24. package/dist/ai/visual-compare.d.ts.map +1 -0
  25. package/dist/ai/visual-compare.js +176 -0
  26. package/dist/ai/visual-compare.js.map +1 -0
  27. package/dist/cli.d.ts +3 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +179 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/converter.d.ts +10 -0
  32. package/dist/converter.d.ts.map +1 -0
  33. package/dist/converter.js +836 -0
  34. package/dist/converter.js.map +1 -0
  35. package/dist/deconverter.d.ts +19 -0
  36. package/dist/deconverter.d.ts.map +1 -0
  37. package/dist/deconverter.js +188 -0
  38. package/dist/deconverter.js.map +1 -0
  39. package/dist/frameworks/angular-adapter.d.ts +27 -0
  40. package/dist/frameworks/angular-adapter.d.ts.map +1 -0
  41. package/dist/frameworks/angular-adapter.js +617 -0
  42. package/dist/frameworks/angular-adapter.js.map +1 -0
  43. package/dist/frameworks/index.d.ts +10 -0
  44. package/dist/frameworks/index.d.ts.map +1 -0
  45. package/dist/frameworks/index.js +21 -0
  46. package/dist/frameworks/index.js.map +1 -0
  47. package/dist/frameworks/nextjs-adapter.d.ts +22 -0
  48. package/dist/frameworks/nextjs-adapter.d.ts.map +1 -0
  49. package/dist/frameworks/nextjs-adapter.js +392 -0
  50. package/dist/frameworks/nextjs-adapter.js.map +1 -0
  51. package/dist/frameworks/react-adapter.d.ts +21 -0
  52. package/dist/frameworks/react-adapter.d.ts.map +1 -0
  53. package/dist/frameworks/react-adapter.js +71 -0
  54. package/dist/frameworks/react-adapter.js.map +1 -0
  55. package/dist/frameworks/svelte-adapter.d.ts +27 -0
  56. package/dist/frameworks/svelte-adapter.d.ts.map +1 -0
  57. package/dist/frameworks/svelte-adapter.js +519 -0
  58. package/dist/frameworks/svelte-adapter.js.map +1 -0
  59. package/dist/frameworks/types.d.ts +78 -0
  60. package/dist/frameworks/types.d.ts.map +1 -0
  61. package/dist/frameworks/types.js +2 -0
  62. package/dist/frameworks/types.js.map +1 -0
  63. package/dist/frameworks/vue-adapter.d.ts +34 -0
  64. package/dist/frameworks/vue-adapter.d.ts.map +1 -0
  65. package/dist/frameworks/vue-adapter.js +632 -0
  66. package/dist/frameworks/vue-adapter.js.map +1 -0
  67. package/dist/generators/accessibility-generator.d.ts +43 -0
  68. package/dist/generators/accessibility-generator.d.ts.map +1 -0
  69. package/dist/generators/accessibility-generator.js +507 -0
  70. package/dist/generators/accessibility-generator.js.map +1 -0
  71. package/dist/generators/asset-handler.d.ts +14 -0
  72. package/dist/generators/asset-handler.d.ts.map +1 -0
  73. package/dist/generators/asset-handler.js +79 -0
  74. package/dist/generators/asset-handler.js.map +1 -0
  75. package/dist/generators/build-verifier.d.ts +8 -0
  76. package/dist/generators/build-verifier.d.ts.map +1 -0
  77. package/dist/generators/build-verifier.js +64 -0
  78. package/dist/generators/build-verifier.js.map +1 -0
  79. package/dist/generators/component-extractor.d.ts +25 -0
  80. package/dist/generators/component-extractor.d.ts.map +1 -0
  81. package/dist/generators/component-extractor.js +146 -0
  82. package/dist/generators/component-extractor.js.map +1 -0
  83. package/dist/generators/component-generator.d.ts +12 -0
  84. package/dist/generators/component-generator.d.ts.map +1 -0
  85. package/dist/generators/component-generator.js +724 -0
  86. package/dist/generators/component-generator.js.map +1 -0
  87. package/dist/generators/deploy-generator.d.ts +9 -0
  88. package/dist/generators/deploy-generator.d.ts.map +1 -0
  89. package/dist/generators/deploy-generator.js +409 -0
  90. package/dist/generators/deploy-generator.js.map +1 -0
  91. package/dist/generators/error-boundary.d.ts +5 -0
  92. package/dist/generators/error-boundary.d.ts.map +1 -0
  93. package/dist/generators/error-boundary.js +59 -0
  94. package/dist/generators/error-boundary.js.map +1 -0
  95. package/dist/generators/form-generator.d.ts +42 -0
  96. package/dist/generators/form-generator.d.ts.map +1 -0
  97. package/dist/generators/form-generator.js +662 -0
  98. package/dist/generators/form-generator.js.map +1 -0
  99. package/dist/generators/hooks-generator.d.ts +40 -0
  100. package/dist/generators/hooks-generator.d.ts.map +1 -0
  101. package/dist/generators/hooks-generator.js +297 -0
  102. package/dist/generators/hooks-generator.js.map +1 -0
  103. package/dist/generators/html-generator.d.ts +27 -0
  104. package/dist/generators/html-generator.d.ts.map +1 -0
  105. package/dist/generators/html-generator.js +772 -0
  106. package/dist/generators/html-generator.js.map +1 -0
  107. package/dist/generators/jquery-converter.d.ts +41 -0
  108. package/dist/generators/jquery-converter.d.ts.map +1 -0
  109. package/dist/generators/jquery-converter.js +594 -0
  110. package/dist/generators/jquery-converter.js.map +1 -0
  111. package/dist/generators/pattern-implementer.d.ts +26 -0
  112. package/dist/generators/pattern-implementer.d.ts.map +1 -0
  113. package/dist/generators/pattern-implementer.js +336 -0
  114. package/dist/generators/pattern-implementer.js.map +1 -0
  115. package/dist/generators/performance-generator.d.ts +51 -0
  116. package/dist/generators/performance-generator.d.ts.map +1 -0
  117. package/dist/generators/performance-generator.js +428 -0
  118. package/dist/generators/performance-generator.js.map +1 -0
  119. package/dist/generators/router-generator.d.ts +21 -0
  120. package/dist/generators/router-generator.d.ts.map +1 -0
  121. package/dist/generators/router-generator.js +178 -0
  122. package/dist/generators/router-generator.js.map +1 -0
  123. package/dist/generators/scaffolder.d.ts +28 -0
  124. package/dist/generators/scaffolder.d.ts.map +1 -0
  125. package/dist/generators/scaffolder.js +266 -0
  126. package/dist/generators/scaffolder.js.map +1 -0
  127. package/dist/generators/seo-generator.d.ts +29 -0
  128. package/dist/generators/seo-generator.d.ts.map +1 -0
  129. package/dist/generators/seo-generator.js +223 -0
  130. package/dist/generators/seo-generator.js.map +1 -0
  131. package/dist/generators/test-generator.d.ts +19 -0
  132. package/dist/generators/test-generator.d.ts.map +1 -0
  133. package/dist/generators/test-generator.js +398 -0
  134. package/dist/generators/test-generator.js.map +1 -0
  135. package/dist/generators/type-generator.d.ts +33 -0
  136. package/dist/generators/type-generator.d.ts.map +1 -0
  137. package/dist/generators/type-generator.js +663 -0
  138. package/dist/generators/type-generator.js.map +1 -0
  139. package/dist/index.d.ts +23 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +12 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/parsers/css-processor.d.ts +23 -0
  144. package/dist/parsers/css-processor.d.ts.map +1 -0
  145. package/dist/parsers/css-processor.js +129 -0
  146. package/dist/parsers/css-processor.js.map +1 -0
  147. package/dist/parsers/framework-parser.d.ts +48 -0
  148. package/dist/parsers/framework-parser.d.ts.map +1 -0
  149. package/dist/parsers/framework-parser.js +770 -0
  150. package/dist/parsers/framework-parser.js.map +1 -0
  151. package/dist/parsers/html-parser.d.ts +12 -0
  152. package/dist/parsers/html-parser.d.ts.map +1 -0
  153. package/dist/parsers/html-parser.js +444 -0
  154. package/dist/parsers/html-parser.js.map +1 -0
  155. package/dist/parsers/js-analyzer.d.ts +199 -0
  156. package/dist/parsers/js-analyzer.d.ts.map +1 -0
  157. package/dist/parsers/js-analyzer.js +680 -0
  158. package/dist/parsers/js-analyzer.js.map +1 -0
  159. package/dist/parsers/js-resolver.d.ts +8 -0
  160. package/dist/parsers/js-resolver.d.ts.map +1 -0
  161. package/dist/parsers/js-resolver.js +45 -0
  162. package/dist/parsers/js-resolver.js.map +1 -0
  163. package/dist/parsers/tailwind-detector.d.ts +23 -0
  164. package/dist/parsers/tailwind-detector.d.ts.map +1 -0
  165. package/dist/parsers/tailwind-detector.js +104 -0
  166. package/dist/parsers/tailwind-detector.js.map +1 -0
  167. package/dist/tests/advanced-features.test.d.ts +2 -0
  168. package/dist/tests/advanced-features.test.d.ts.map +1 -0
  169. package/dist/tests/advanced-features.test.js +235 -0
  170. package/dist/tests/advanced-features.test.js.map +1 -0
  171. package/dist/tests/css-modules.test.d.ts +2 -0
  172. package/dist/tests/css-modules.test.d.ts.map +1 -0
  173. package/dist/tests/css-modules.test.js +61 -0
  174. package/dist/tests/css-modules.test.js.map +1 -0
  175. package/dist/tests/css-processor.test.d.ts +2 -0
  176. package/dist/tests/css-processor.test.d.ts.map +1 -0
  177. package/dist/tests/css-processor.test.js +48 -0
  178. package/dist/tests/css-processor.test.js.map +1 -0
  179. package/dist/tests/html-parser.test.d.ts +2 -0
  180. package/dist/tests/html-parser.test.d.ts.map +1 -0
  181. package/dist/tests/html-parser.test.js +78 -0
  182. package/dist/tests/html-parser.test.js.map +1 -0
  183. package/dist/tests/integration.test.d.ts +2 -0
  184. package/dist/tests/integration.test.d.ts.map +1 -0
  185. package/dist/tests/integration.test.js +65 -0
  186. package/dist/tests/integration.test.js.map +1 -0
  187. package/dist/tests/js-analyzer.test.d.ts +2 -0
  188. package/dist/tests/js-analyzer.test.d.ts.map +1 -0
  189. package/dist/tests/js-analyzer.test.js +58 -0
  190. package/dist/tests/js-analyzer.test.js.map +1 -0
  191. package/dist/tests/naming.test.d.ts +2 -0
  192. package/dist/tests/naming.test.d.ts.map +1 -0
  193. package/dist/tests/naming.test.js +43 -0
  194. package/dist/tests/naming.test.js.map +1 -0
  195. package/dist/tests/router-generator.test.d.ts +2 -0
  196. package/dist/tests/router-generator.test.d.ts.map +1 -0
  197. package/dist/tests/router-generator.test.js +60 -0
  198. package/dist/tests/router-generator.test.js.map +1 -0
  199. package/dist/tui/chat.d.ts +13 -0
  200. package/dist/tui/chat.d.ts.map +1 -0
  201. package/dist/tui/chat.js +499 -0
  202. package/dist/tui/chat.js.map +1 -0
  203. package/dist/tui/design-guide.d.ts +41 -0
  204. package/dist/tui/design-guide.d.ts.map +1 -0
  205. package/dist/tui/design-guide.js +184 -0
  206. package/dist/tui/design-guide.js.map +1 -0
  207. package/dist/tui/input.d.ts +30 -0
  208. package/dist/tui/input.d.ts.map +1 -0
  209. package/dist/tui/input.js +239 -0
  210. package/dist/tui/input.js.map +1 -0
  211. package/dist/tui/renderer.d.ts +48 -0
  212. package/dist/tui/renderer.d.ts.map +1 -0
  213. package/dist/tui/renderer.js +212 -0
  214. package/dist/tui/renderer.js.map +1 -0
  215. package/dist/tui/tools.d.ts +14 -0
  216. package/dist/tui/tools.d.ts.map +1 -0
  217. package/dist/tui/tools.js +1370 -0
  218. package/dist/tui/tools.js.map +1 -0
  219. package/dist/types.d.ts +93 -0
  220. package/dist/types.d.ts.map +1 -0
  221. package/dist/types.js +2 -0
  222. package/dist/types.js.map +1 -0
  223. package/dist/utils/config.d.ts +20 -0
  224. package/dist/utils/config.d.ts.map +1 -0
  225. package/dist/utils/config.js +33 -0
  226. package/dist/utils/config.js.map +1 -0
  227. package/dist/utils/formatter.d.ts +5 -0
  228. package/dist/utils/formatter.d.ts.map +1 -0
  229. package/dist/utils/formatter.js +68 -0
  230. package/dist/utils/formatter.js.map +1 -0
  231. package/dist/utils/logger.d.ts +8 -0
  232. package/dist/utils/logger.d.ts.map +1 -0
  233. package/dist/utils/logger.js +19 -0
  234. package/dist/utils/logger.js.map +1 -0
  235. package/dist/utils/naming.d.ts +17 -0
  236. package/dist/utils/naming.d.ts.map +1 -0
  237. package/dist/utils/naming.js +48 -0
  238. package/dist/utils/naming.js.map +1 -0
  239. package/dist/utils/report.d.ts +56 -0
  240. package/dist/utils/report.d.ts.map +1 -0
  241. package/dist/utils/report.js +339 -0
  242. package/dist/utils/report.js.map +1 -0
  243. package/package.json +61 -0
@@ -0,0 +1,499 @@
1
+ /**
2
+ * Interactive TUI Chat — Claude Code-style terminal interface
3
+ * for the CodeMeld AI agent.
4
+ *
5
+ * Features:
6
+ * - Highlighted input box with borders
7
+ * - Slash command autocomplete dropdown
8
+ * - @file attachment support
9
+ * - Auto-compact when history > 30 turns
10
+ * - Input history navigation
11
+ */
12
+ import { resolve, join } from 'path';
13
+ import { existsSync } from 'fs';
14
+ import { chatCompletion, truncateToolResult } from '../ai/agent.js';
15
+ import { chatToolDefinitions, createChatToolExecutor } from './tools.js';
16
+ import { createEnhancedInput, parseFileAttachments, buildMessageWithAttachments, clipboardRead, clipboardWrite, } from './input.js';
17
+ import { COLORS, Spinner, printHeader, printAssistantMessage, printToolCall, printToolResult, printError, printHelp, } from './renderer.js';
18
+ // ─── Constants ───────────────────────────────────────────────────────
19
+ const AUTO_COMPACT_THRESHOLD = 30; // Auto-compact when user+assistant messages exceed this
20
+ const COMPACT_KEEP_RECENT = 8; // Keep this many recent messages when compacting
21
+ /** Sanitize error messages to never leak internal URLs, commands, or file paths. */
22
+ function sanitizeError(err) {
23
+ const msg = err instanceof Error ? err.message : String(err);
24
+ // If the message already looks user-friendly (from our sanitized throws), pass it through
25
+ const leakPatterns = [
26
+ /https?:\/\/\S+/i, // URLs
27
+ /curl\s/i, // curl commands
28
+ /Command failed:/i, // child_process errors
29
+ /<html/i, // raw HTML responses
30
+ /ECONNREFUSED|ENOTFOUND|ETIMEDOUT|ENAMETOOLONG/i, // raw Node errors
31
+ /\/tmp\/|\\AppData\\|\\Temp\\/i, // temp file paths
32
+ ];
33
+ if (leakPatterns.some(p => p.test(msg))) {
34
+ return 'AI request failed. Please try again.';
35
+ }
36
+ return msg;
37
+ }
38
+ // ─── System Prompt ───────────────────────────────────────────────────
39
+ function buildSystemPrompt(projectDir) {
40
+ return `You are an expert full-stack developer and coding assistant inside a terminal chat. You have full access to the user's project through a comprehensive set of development tools.
41
+
42
+ CRITICAL — TOOL USAGE:
43
+ - You MUST ONLY use the tools explicitly listed below. These are YOUR tools that execute on the user's machine.
44
+ - NEVER use any built-in/internal/server-side tools. If you have access to any tools not listed below (like built-in file reading, code execution, web browsing, or any other internal capability), DO NOT use them.
45
+ - ONLY call the function tools provided in the tools array of this conversation. Nothing else.
46
+ - When you need to perform an action, ALWAYS return a tool_call using one of the listed tools. Never try to handle it internally.
47
+
48
+ ENVIRONMENT:
49
+ - Project directory: ${projectDir}
50
+ - Platform: ${process.platform === 'win32' ? 'Windows' : process.platform === 'darwin' ? 'macOS' : 'Linux'}
51
+ - CRITICAL: All file/directory paths must be RELATIVE to the project root.
52
+ Good: "src/App.tsx", "package.json", ".", "src/components"
53
+ Bad: "${projectDir}/src/App.tsx" (NEVER use absolute paths)
54
+
55
+ YOUR TOOLS:
56
+ File Operations:
57
+ - read_file (with offset/limit), write_file, edit_file (with replace_all), multi_edit, insert_at_line
58
+ - delete_file, move_file, copy_file
59
+
60
+ Search & Discovery:
61
+ - glob ("**/*.tsx"), grep (regex with context/file_type), list_files (recursive), file_info, project_overview
62
+
63
+ Build & Dev:
64
+ - run_build, run_typecheck, npm_install, bash (any shell command)
65
+
66
+ Git:
67
+ - git_status, git_diff, git_log, git_commit
68
+
69
+ Todo Management (persisted to .todos.json):
70
+ - todo_list, todo_add, todo_update, todo_remove, todo_batch
71
+
72
+ Design System:
73
+ - generate_design_guide: Generate a unique design system (fonts, colors, layouts, animations)
74
+ with the a0 design AI. Saves to .design-guide.md. Call this BEFORE creating UI components.
75
+
76
+ BEHAVIOR RULES:
77
+ 1. ALWAYS use tools. Do NOT guess file contents or project structure.
78
+ 2. Before editing, read the file first.
79
+ 3. Use edit_file for small changes, write_file for large rewrites.
80
+ 4. After code changes, verify with run_build or run_typecheck.
81
+ 5. Use glob and grep to find things — don't ask the user.
82
+ 6. Be concise. Lead with actions, not explanations.
83
+ 7. For complex tasks, use todo_batch to create a plan, then IMMEDIATELY start executing.
84
+ Flow: explore → plan (create todos) → execute (mark in_progress) → verify (mark done).
85
+ 8. Use bash for anything not covered by specialized tools.
86
+ 9. When working on multi-step tasks, use todo tools to track your progress.
87
+ 10. BEFORE creating or modifying UI components, call generate_design_guide to get a
88
+ unique design system. If .design-guide.md already exists, read it first.
89
+
90
+ CRITICAL — AUTONOMOUS EXECUTION:
91
+ - NEVER ask the user to confirm before proceeding. NEVER say "if that sounds good" or "shall I proceed" or "let me know". Just DO IT.
92
+ - When the user asks you to build something, START BUILDING IMMEDIATELY. Create the plan with todos, then execute every step without stopping.
93
+ - You have full permission to create files, install packages, modify code, and run commands. USE that permission.
94
+ - Do NOT stop after making a plan. The plan is step 1 — execute ALL steps in one go.
95
+ - Only stop to ask the user if there is a genuine ambiguity that cannot be resolved (e.g., two contradictory requirements).
96
+
97
+ DESIGN GUIDE RULES:
98
+ - When the user asks to create UI, build pages, or style components, FIRST call
99
+ generate_design_guide with the project type to get typography, colors, and layout direction.
100
+ - Apply the design system consistently: use the CSS variables, Google Fonts, and layout patterns.
101
+ - BANNED: Inter, Roboto, Arial, Poppins fonts. BANNED: purple gradients, floating blobs, emojis as icons.
102
+ - Use Lucide React icons (20px, stroke-width 1.5). NEVER use emojis as icons.
103
+ - Images: use https://api.a0.dev/assets/image?text={description}&aspect=16:9
104
+ - Real content only: specific names, prices, dates — never lorem ipsum or "coming soon".
105
+ - Mobile-first responsive: hamburger nav, grid-cols-1→md:2→lg:3, min 44px touch targets.
106
+ - Every dark:bg-* needs matching dark:text-* on all children.
107
+
108
+ CONTEXT:
109
+ The user may attach file contents using @filename. When they do, the file content appears in the message under "Attached file contents:". Use this context to understand the code they're referencing.
110
+
111
+ FORMATTING:
112
+ - Use markdown: **bold**, \`code\`, \`\`\`code blocks\`\`\`
113
+ - Keep responses focused and concise`;
114
+ }
115
+ // ─── Auto-Compact (AI-powered summarization) ───────────────────────
116
+ async function autoCompact(session) {
117
+ const conversationMsgs = session.messages.filter(m => m.role === 'user' || m.role === 'assistant');
118
+ if (conversationMsgs.length < AUTO_COMPACT_THRESHOLD)
119
+ return false;
120
+ const systemMsg = session.messages[0];
121
+ const recentMessages = session.messages.slice(-COMPACT_KEEP_RECENT);
122
+ const oldMessages = session.messages.slice(1, -COMPACT_KEEP_RECENT);
123
+ // Build conversation text to summarize
124
+ const conversationText = oldMessages
125
+ .filter(m => (m.role === 'user' || m.role === 'assistant') && m.content)
126
+ .map(m => `[${m.role}]: ${(m.content || '').slice(0, 300)}`)
127
+ .join('\n');
128
+ // Use the AI API to generate a proper synthesized summary
129
+ let summary;
130
+ try {
131
+ const summaryResponse = await chatCompletion({
132
+ messages: [
133
+ {
134
+ role: 'system',
135
+ content: 'You are a conversation summarizer. Summarize the following conversation history into a concise but complete summary. Include: key decisions made, files modified, errors encountered and how they were fixed, what the user asked for, and the current state of the project. Keep it under 500 words. Output ONLY the summary, no preamble.',
136
+ },
137
+ {
138
+ role: 'user',
139
+ content: `Summarize this conversation:\n\n${conversationText}`,
140
+ },
141
+ ],
142
+ temperature: 0.2,
143
+ max_tokens: 1024,
144
+ });
145
+ summary = summaryResponse.choices[0]?.message?.content || '';
146
+ if (summaryResponse.usage) {
147
+ session.totalTokens += summaryResponse.usage.total_tokens;
148
+ }
149
+ }
150
+ catch {
151
+ // Fallback to simple truncation if API fails
152
+ const turns = oldMessages.filter(m => m.role === 'user' || (m.role === 'assistant' && m.content));
153
+ summary = turns
154
+ .map(m => `[${m.role}]: ${(m.content || '').slice(0, 150)}`)
155
+ .slice(0, 15)
156
+ .join('\n');
157
+ }
158
+ session.messages = [
159
+ systemMsg,
160
+ {
161
+ role: 'user',
162
+ content: `[Conversation History Summary — ${conversationMsgs.length} messages compacted]\n\n${summary}\n\n[End of summary. Continue the conversation from here.]`,
163
+ },
164
+ {
165
+ role: 'assistant',
166
+ content: 'I have the full context from our previous conversation. Ready to continue.',
167
+ },
168
+ ...recentMessages,
169
+ ];
170
+ return true;
171
+ }
172
+ /**
173
+ * Force compact (for /compact command). Always runs even below threshold.
174
+ */
175
+ async function forceCompact(session) {
176
+ if (session.messages.length <= 6)
177
+ return false;
178
+ const systemMsg = session.messages[0];
179
+ const recentMessages = session.messages.slice(-6);
180
+ const oldMessages = session.messages.slice(1, -6);
181
+ const conversationText = oldMessages
182
+ .filter(m => (m.role === 'user' || m.role === 'assistant') && m.content)
183
+ .map(m => `[${m.role}]: ${(m.content || '').slice(0, 300)}`)
184
+ .join('\n');
185
+ let summary;
186
+ try {
187
+ const summaryResponse = await chatCompletion({
188
+ messages: [
189
+ {
190
+ role: 'system',
191
+ content: 'Summarize this conversation concisely. Include key decisions, files changed, errors fixed, and current state. Under 400 words. Output ONLY the summary.',
192
+ },
193
+ { role: 'user', content: conversationText },
194
+ ],
195
+ temperature: 0.2,
196
+ max_tokens: 800,
197
+ });
198
+ summary = summaryResponse.choices[0]?.message?.content || '';
199
+ if (summaryResponse.usage) {
200
+ session.totalTokens += summaryResponse.usage.total_tokens;
201
+ }
202
+ }
203
+ catch {
204
+ const turns = oldMessages.filter(m => (m.role === 'user' || m.role === 'assistant') && m.content);
205
+ summary = turns.map(m => `[${m.role}]: ${(m.content || '').slice(0, 150)}`).slice(0, 15).join('\n');
206
+ }
207
+ session.messages = [
208
+ systemMsg,
209
+ {
210
+ role: 'user',
211
+ content: `[Conversation Summary]\n\n${summary}\n\n[Continue from here.]`,
212
+ },
213
+ { role: 'assistant', content: 'Understood, continuing with full context.' },
214
+ ...recentMessages,
215
+ ];
216
+ return true;
217
+ }
218
+ // ─── Process Message ────────────────────────────────────────────────
219
+ async function processMessage(session, userInput) {
220
+ const { messages, projectDir } = session;
221
+ messages.push({ role: 'user', content: userInput });
222
+ session.turnCount++;
223
+ const toolCtx = {
224
+ projectDir,
225
+ onToolStart: (name, args) => printToolCall(name, args),
226
+ onToolEnd: (name, result, success) => printToolResult(name, result, success),
227
+ };
228
+ const toolExecutor = createChatToolExecutor(toolCtx);
229
+ const spinner = new Spinner('Thinking...');
230
+ spinner.start();
231
+ let step = 0;
232
+ let finalContent = '';
233
+ try {
234
+ let consecutiveCheckCalls = 0;
235
+ while (step < 50) {
236
+ step++;
237
+ const response = await chatCompletion({
238
+ messages,
239
+ tools: chatToolDefinitions,
240
+ temperature: 0.3,
241
+ max_tokens: 16000,
242
+ });
243
+ const choice = response.choices[0];
244
+ const content = choice.message.content || '';
245
+ const toolCalls = choice.message.tool_calls || [];
246
+ const finishReason = choice.finish_reason;
247
+ if (response.usage) {
248
+ session.totalTokens += response.usage.total_tokens;
249
+ }
250
+ spinner.stop();
251
+ if (finishReason === 'stop' || toolCalls.length === 0) {
252
+ finalContent = content;
253
+ break;
254
+ }
255
+ if (content) {
256
+ console.log(COLORS.dim(` ${content.split('\n')[0].slice(0, 100)}`));
257
+ }
258
+ messages.push({
259
+ role: 'assistant',
260
+ content: content || null,
261
+ tool_calls: toolCalls,
262
+ });
263
+ // Loop detection
264
+ const toolNames = toolCalls.map(tc => tc.function.name);
265
+ const isFileOp = toolNames.some(n => !['run_build', 'run_typecheck'].includes(n));
266
+ const isCheckOp = toolNames.some(n => ['run_build', 'run_typecheck'].includes(n));
267
+ if (isCheckOp && !isFileOp) {
268
+ consecutiveCheckCalls++;
269
+ }
270
+ else {
271
+ consecutiveCheckCalls = 0;
272
+ }
273
+ // Execute tools
274
+ for (const tc of toolCalls) {
275
+ let args;
276
+ try {
277
+ args = JSON.parse(tc.function.arguments);
278
+ }
279
+ catch {
280
+ args = {};
281
+ }
282
+ let result;
283
+ try {
284
+ result = await toolExecutor(tc.function.name, args);
285
+ }
286
+ catch (err) {
287
+ result = `Error: ${err instanceof Error ? err.message : String(err)}`;
288
+ }
289
+ result = truncateToolResult(result);
290
+ messages.push({
291
+ role: 'tool',
292
+ tool_call_id: tc.id,
293
+ content: result,
294
+ });
295
+ }
296
+ if (consecutiveCheckCalls >= 2) {
297
+ messages.push({
298
+ role: 'user',
299
+ content: 'You are running build/typecheck repeatedly. Use read_file then edit_file/write_file to fix issues before checking again.',
300
+ });
301
+ consecutiveCheckCalls = 0;
302
+ }
303
+ spinner.update(`Step ${step}...`);
304
+ spinner.start();
305
+ }
306
+ }
307
+ catch (err) {
308
+ spinner.stop();
309
+ printError(sanitizeError(err));
310
+ return;
311
+ }
312
+ if (finalContent) {
313
+ printAssistantMessage(finalContent);
314
+ messages.push({ role: 'assistant', content: finalContent });
315
+ session.turnCount++;
316
+ }
317
+ // Auto-compact check
318
+ const compacted = await autoCompact(session);
319
+ if (compacted) {
320
+ console.log(COLORS.dim(' ⟳ Chat history auto-compacted (AI-summarized) to save context\n'));
321
+ }
322
+ }
323
+ // ─── Slash Commands ──────────────────────────────────────────────────
324
+ async function handleSlashCommand(command, session) {
325
+ const parts = command.trim().split(/\s+/);
326
+ const cmd = parts[0].toLowerCase();
327
+ const rest = parts.slice(1).join(' ');
328
+ switch (cmd) {
329
+ case '/quit':
330
+ case '/exit':
331
+ case '/q':
332
+ console.log(COLORS.dim('\n Goodbye!\n'));
333
+ return true;
334
+ case '/help':
335
+ case '/h':
336
+ printHelp();
337
+ return false;
338
+ case '/clear':
339
+ console.clear();
340
+ session.messages = [{ role: 'system', content: buildSystemPrompt(session.projectDir) }];
341
+ session.turnCount = 0;
342
+ printHeader(session.projectDir);
343
+ console.log(COLORS.success(' Chat history cleared.\n'));
344
+ return false;
345
+ case '/build':
346
+ await processMessage(session, 'Run vite build and show me the results. If it fails, show the errors clearly.');
347
+ return false;
348
+ case '/typecheck':
349
+ case '/tsc':
350
+ await processMessage(session, 'Run TypeScript type checking and show me any errors with file locations.');
351
+ return false;
352
+ case '/files':
353
+ case '/tree':
354
+ await processMessage(session, 'Show me the project directory tree recursively.');
355
+ return false;
356
+ case '/git':
357
+ await processMessage(session, `Run git ${rest || 'status'} and show me the output.`);
358
+ return false;
359
+ case '/fix':
360
+ await processMessage(session, 'Run a typecheck and build. If there are any errors, read the broken files, fix them, and verify the fixes. Keep going until everything passes.');
361
+ return false;
362
+ case '/overview':
363
+ await processMessage(session, 'Give me a comprehensive overview of this project: structure, dependencies, config, and key files.');
364
+ return false;
365
+ case '/install':
366
+ await processMessage(session, rest ? `Install the npm package(s): ${rest}` : 'Run npm install to install all dependencies.');
367
+ return false;
368
+ case '/design': {
369
+ if (rest) {
370
+ await processMessage(session, `Generate a unique design system for this project type: "${rest}". Call generate_design_guide and then show me the key design decisions (fonts, colors, layout approach).`);
371
+ }
372
+ else {
373
+ await processMessage(session, 'Generate a unique design system for this project. Analyze the project type from package.json and existing code, then call generate_design_guide. Show me the key design decisions.');
374
+ }
375
+ return false;
376
+ }
377
+ case '/todos':
378
+ case '/todo': {
379
+ if (rest === 'clear') {
380
+ await processMessage(session, 'Remove all completed (done) todos from the list.');
381
+ }
382
+ else if (rest) {
383
+ await processMessage(session, `Add a todo: "${rest}"`);
384
+ }
385
+ else {
386
+ await processMessage(session, 'Show me the current todo list with progress.');
387
+ }
388
+ return false;
389
+ }
390
+ case '/compact': {
391
+ const before = session.messages.length;
392
+ const spinner = new Spinner('Summarizing conversation...');
393
+ spinner.start();
394
+ const didCompact = await forceCompact(session);
395
+ spinner.stop();
396
+ if (didCompact) {
397
+ console.log(COLORS.success(` ✓ Compacted ${before} → ${session.messages.length} messages (AI-summarized).\n`));
398
+ }
399
+ else {
400
+ console.log(COLORS.dim(' Nothing to compact.\n'));
401
+ }
402
+ return false;
403
+ }
404
+ case '/copy': {
405
+ // Copy last assistant response to clipboard
406
+ const lastAssistant = [...session.messages].reverse().find(m => m.role === 'assistant');
407
+ if (lastAssistant && lastAssistant.content) {
408
+ const text = typeof lastAssistant.content === 'string' ? lastAssistant.content : JSON.stringify(lastAssistant.content);
409
+ if (clipboardWrite(text)) {
410
+ console.log(COLORS.success(' ✓ Last response copied to clipboard.\n'));
411
+ }
412
+ else {
413
+ printError('Could not access clipboard. Install xclip or xsel on Linux.');
414
+ }
415
+ }
416
+ else {
417
+ console.log(COLORS.dim(' No assistant response to copy.\n'));
418
+ }
419
+ return false;
420
+ }
421
+ case '/paste': {
422
+ // Paste clipboard content as a user message
423
+ const pasted = clipboardRead();
424
+ if (pasted) {
425
+ console.log(COLORS.dim(` ✓ Pasted ${pasted.length} chars from clipboard.\n`));
426
+ await processMessage(session, pasted);
427
+ }
428
+ else {
429
+ printError('Clipboard is empty or not accessible. Install xclip or xsel on Linux.');
430
+ }
431
+ return false;
432
+ }
433
+ default:
434
+ printError(`Unknown command: ${cmd}. Type /help for available commands.`);
435
+ return false;
436
+ }
437
+ }
438
+ // ─── Main Entry Point ───────────────────────────────────────────────
439
+ export async function startChat(projectDir) {
440
+ const dir = resolve(projectDir || process.cwd());
441
+ const hasPackageJson = existsSync(join(dir, 'package.json'));
442
+ printHeader(dir);
443
+ if (!hasPackageJson) {
444
+ console.log(COLORS.warning(' Warning: No package.json found. Some tools may not work.\n'));
445
+ }
446
+ const session = {
447
+ messages: [{ role: 'system', content: buildSystemPrompt(dir) }],
448
+ projectDir: dir,
449
+ totalTokens: 0,
450
+ turnCount: 0,
451
+ };
452
+ let running = true;
453
+ while (running) {
454
+ try {
455
+ // Show token usage in input box
456
+ const tokenInfo = session.totalTokens > 0
457
+ ? `tokens: ${(session.totalTokens / 1000).toFixed(1)}k • turns: ${session.turnCount}`
458
+ : undefined;
459
+ const { text, attachedFiles } = await createEnhancedInput(dir, tokenInfo);
460
+ const trimmed = text.trim();
461
+ if (!trimmed)
462
+ continue;
463
+ // Handle slash commands
464
+ if (trimmed.startsWith('/')) {
465
+ const shouldExit = await handleSlashCommand(trimmed, session);
466
+ if (shouldExit) {
467
+ running = false;
468
+ break;
469
+ }
470
+ continue;
471
+ }
472
+ // Parse @file attachments
473
+ const parsed = await parseFileAttachments(trimmed, dir);
474
+ const fullMessage = buildMessageWithAttachments(parsed);
475
+ // Display attached files (user's typed text is already visible in the input line)
476
+ if (attachedFiles.length > 0 || parsed.attachedFiles.length > 0) {
477
+ const allFiles = [...new Set([...attachedFiles, ...parsed.attachedFiles.map(f => f.path)])];
478
+ for (const f of allFiles) {
479
+ console.log(` ${COLORS.success('📎')} ${COLORS.dim(f)} attached`);
480
+ }
481
+ }
482
+ console.log(''); // spacing before response
483
+ await processMessage(session, fullMessage);
484
+ }
485
+ catch (err) {
486
+ if (err.code === 'ERR_USE_AFTER_CLOSE') {
487
+ break;
488
+ }
489
+ printError(sanitizeError(err));
490
+ }
491
+ }
492
+ }
493
+ // Allow running directly
494
+ import { fileURLToPath } from 'url';
495
+ const currentFile = fileURLToPath(import.meta.url);
496
+ if (process.argv[1] === currentFile) {
497
+ startChat(process.argv[2]).catch(console.error);
498
+ }
499
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/tui/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Design Guide Generator — calls the a0 LLM API to create
3
+ * project-specific design systems with unique typography, colors, and layouts.
4
+ * Uses native Node.js fetch — no curl dependency.
5
+ */
6
+ export interface DesignData {
7
+ a: string;
8
+ df: string;
9
+ bf: string;
10
+ p: string;
11
+ pl: string;
12
+ ac: string;
13
+ s: string;
14
+ sa: string;
15
+ t: string;
16
+ tm: string;
17
+ bd: string;
18
+ ds: string;
19
+ dt: string;
20
+ hero: string;
21
+ layouts: string;
22
+ motion: string;
23
+ texture: string;
24
+ unique: string;
25
+ heading: string;
26
+ sub: string;
27
+ cta: string;
28
+ sections: string;
29
+ }
30
+ /**
31
+ * Generate a design guide for a project type using the a0 LLM API.
32
+ */
33
+ export declare function generateDesignGuide(projectType: string, userMessage?: string): Promise<{
34
+ guide: string;
35
+ design: DesignData;
36
+ }>;
37
+ /**
38
+ * Fallback design guide when API call fails.
39
+ */
40
+ export declare function getFallbackGuide(projectType: string): string;
41
+ //# sourceMappingURL=design-guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-guide.d.ts","sourceRoot":"","sources":["../../src/tui/design-guide.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC,CAyDhD;AAyFD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA2B5D"}