whale-code 6.4.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 (319) hide show
  1. package/README.md +95 -0
  2. package/bin/swag-agent.js +9 -0
  3. package/bin/swagmanager-mcp.js +321 -0
  4. package/dist/cli/app.d.ts +26 -0
  5. package/dist/cli/app.js +64 -0
  6. package/dist/cli/chat/AgentSelector.d.ts +14 -0
  7. package/dist/cli/chat/AgentSelector.js +14 -0
  8. package/dist/cli/chat/ChatApp.d.ts +9 -0
  9. package/dist/cli/chat/ChatApp.js +267 -0
  10. package/dist/cli/chat/ChatInput.d.ts +39 -0
  11. package/dist/cli/chat/ChatInput.js +509 -0
  12. package/dist/cli/chat/MarkdownText.d.ts +10 -0
  13. package/dist/cli/chat/MarkdownText.js +20 -0
  14. package/dist/cli/chat/MessageList.d.ts +37 -0
  15. package/dist/cli/chat/MessageList.js +80 -0
  16. package/dist/cli/chat/ModelSelector.d.ts +20 -0
  17. package/dist/cli/chat/ModelSelector.js +73 -0
  18. package/dist/cli/chat/RewindViewer.d.ts +26 -0
  19. package/dist/cli/chat/RewindViewer.js +185 -0
  20. package/dist/cli/chat/StoreSelector.d.ts +14 -0
  21. package/dist/cli/chat/StoreSelector.js +24 -0
  22. package/dist/cli/chat/StreamingText.d.ts +12 -0
  23. package/dist/cli/chat/StreamingText.js +12 -0
  24. package/dist/cli/chat/SubagentPanel.d.ts +45 -0
  25. package/dist/cli/chat/SubagentPanel.js +110 -0
  26. package/dist/cli/chat/TeamPanel.d.ts +21 -0
  27. package/dist/cli/chat/TeamPanel.js +42 -0
  28. package/dist/cli/chat/ToolIndicator.d.ts +25 -0
  29. package/dist/cli/chat/ToolIndicator.js +436 -0
  30. package/dist/cli/chat/hooks/useAgentLoop.d.ts +39 -0
  31. package/dist/cli/chat/hooks/useAgentLoop.js +382 -0
  32. package/dist/cli/chat/hooks/useSlashCommands.d.ts +37 -0
  33. package/dist/cli/chat/hooks/useSlashCommands.js +387 -0
  34. package/dist/cli/commands/config-cmd.d.ts +10 -0
  35. package/dist/cli/commands/config-cmd.js +99 -0
  36. package/dist/cli/commands/doctor.d.ts +14 -0
  37. package/dist/cli/commands/doctor.js +172 -0
  38. package/dist/cli/commands/init.d.ts +16 -0
  39. package/dist/cli/commands/init.js +278 -0
  40. package/dist/cli/commands/mcp.d.ts +12 -0
  41. package/dist/cli/commands/mcp.js +162 -0
  42. package/dist/cli/login/LoginApp.d.ts +7 -0
  43. package/dist/cli/login/LoginApp.js +157 -0
  44. package/dist/cli/print-mode.d.ts +31 -0
  45. package/dist/cli/print-mode.js +202 -0
  46. package/dist/cli/serve-mode.d.ts +37 -0
  47. package/dist/cli/serve-mode.js +636 -0
  48. package/dist/cli/services/agent-definitions.d.ts +25 -0
  49. package/dist/cli/services/agent-definitions.js +91 -0
  50. package/dist/cli/services/agent-events.d.ts +178 -0
  51. package/dist/cli/services/agent-events.js +175 -0
  52. package/dist/cli/services/agent-loop.d.ts +90 -0
  53. package/dist/cli/services/agent-loop.js +762 -0
  54. package/dist/cli/services/agent-worker-base.d.ts +97 -0
  55. package/dist/cli/services/agent-worker-base.js +220 -0
  56. package/dist/cli/services/auth-service.d.ts +30 -0
  57. package/dist/cli/services/auth-service.js +160 -0
  58. package/dist/cli/services/background-processes.d.ts +126 -0
  59. package/dist/cli/services/background-processes.js +318 -0
  60. package/dist/cli/services/browser-auth.d.ts +24 -0
  61. package/dist/cli/services/browser-auth.js +180 -0
  62. package/dist/cli/services/claude-md-loader.d.ts +16 -0
  63. package/dist/cli/services/claude-md-loader.js +58 -0
  64. package/dist/cli/services/config-store.d.ts +47 -0
  65. package/dist/cli/services/config-store.js +79 -0
  66. package/dist/cli/services/debug-log.d.ts +10 -0
  67. package/dist/cli/services/debug-log.js +52 -0
  68. package/dist/cli/services/error-logger.d.ts +58 -0
  69. package/dist/cli/services/error-logger.js +269 -0
  70. package/dist/cli/services/file-history.d.ts +21 -0
  71. package/dist/cli/services/file-history.js +83 -0
  72. package/dist/cli/services/format-server-response.d.ts +16 -0
  73. package/dist/cli/services/format-server-response.js +440 -0
  74. package/dist/cli/services/git-context.d.ts +11 -0
  75. package/dist/cli/services/git-context.js +66 -0
  76. package/dist/cli/services/hooks.d.ts +85 -0
  77. package/dist/cli/services/hooks.js +258 -0
  78. package/dist/cli/services/interactive-tools.d.ts +125 -0
  79. package/dist/cli/services/interactive-tools.js +260 -0
  80. package/dist/cli/services/keybinding-manager.d.ts +52 -0
  81. package/dist/cli/services/keybinding-manager.js +115 -0
  82. package/dist/cli/services/local-tools.d.ts +22 -0
  83. package/dist/cli/services/local-tools.js +697 -0
  84. package/dist/cli/services/lsp-manager.d.ts +18 -0
  85. package/dist/cli/services/lsp-manager.js +717 -0
  86. package/dist/cli/services/mcp-client.d.ts +48 -0
  87. package/dist/cli/services/mcp-client.js +157 -0
  88. package/dist/cli/services/memory-manager.d.ts +16 -0
  89. package/dist/cli/services/memory-manager.js +57 -0
  90. package/dist/cli/services/model-manager.d.ts +18 -0
  91. package/dist/cli/services/model-manager.js +71 -0
  92. package/dist/cli/services/model-router.d.ts +26 -0
  93. package/dist/cli/services/model-router.js +149 -0
  94. package/dist/cli/services/permission-modes.d.ts +13 -0
  95. package/dist/cli/services/permission-modes.js +43 -0
  96. package/dist/cli/services/rewind.d.ts +84 -0
  97. package/dist/cli/services/rewind.js +194 -0
  98. package/dist/cli/services/ripgrep.d.ts +28 -0
  99. package/dist/cli/services/ripgrep.js +138 -0
  100. package/dist/cli/services/sandbox.d.ts +29 -0
  101. package/dist/cli/services/sandbox.js +97 -0
  102. package/dist/cli/services/server-tools.d.ts +61 -0
  103. package/dist/cli/services/server-tools.js +543 -0
  104. package/dist/cli/services/session-persistence.d.ts +23 -0
  105. package/dist/cli/services/session-persistence.js +99 -0
  106. package/dist/cli/services/subagent-worker.d.ts +19 -0
  107. package/dist/cli/services/subagent-worker.js +41 -0
  108. package/dist/cli/services/subagent.d.ts +47 -0
  109. package/dist/cli/services/subagent.js +647 -0
  110. package/dist/cli/services/system-prompt.d.ts +7 -0
  111. package/dist/cli/services/system-prompt.js +198 -0
  112. package/dist/cli/services/team-lead.d.ts +73 -0
  113. package/dist/cli/services/team-lead.js +512 -0
  114. package/dist/cli/services/team-state.d.ts +77 -0
  115. package/dist/cli/services/team-state.js +398 -0
  116. package/dist/cli/services/teammate.d.ts +31 -0
  117. package/dist/cli/services/teammate.js +689 -0
  118. package/dist/cli/services/telemetry.d.ts +61 -0
  119. package/dist/cli/services/telemetry.js +209 -0
  120. package/dist/cli/services/tools/agent-tools.d.ts +14 -0
  121. package/dist/cli/services/tools/agent-tools.js +347 -0
  122. package/dist/cli/services/tools/file-ops.d.ts +15 -0
  123. package/dist/cli/services/tools/file-ops.js +487 -0
  124. package/dist/cli/services/tools/search-tools.d.ts +8 -0
  125. package/dist/cli/services/tools/search-tools.js +186 -0
  126. package/dist/cli/services/tools/shell-exec.d.ts +10 -0
  127. package/dist/cli/services/tools/shell-exec.js +168 -0
  128. package/dist/cli/services/tools/task-manager.d.ts +28 -0
  129. package/dist/cli/services/tools/task-manager.js +209 -0
  130. package/dist/cli/services/tools/web-tools.d.ts +11 -0
  131. package/dist/cli/services/tools/web-tools.js +395 -0
  132. package/dist/cli/setup/SetupApp.d.ts +9 -0
  133. package/dist/cli/setup/SetupApp.js +191 -0
  134. package/dist/cli/shared/MatrixIntro.d.ts +4 -0
  135. package/dist/cli/shared/MatrixIntro.js +83 -0
  136. package/dist/cli/shared/Theme.d.ts +74 -0
  137. package/dist/cli/shared/Theme.js +127 -0
  138. package/dist/cli/shared/WhaleBanner.d.ts +10 -0
  139. package/dist/cli/shared/WhaleBanner.js +12 -0
  140. package/dist/cli/shared/markdown.d.ts +21 -0
  141. package/dist/cli/shared/markdown.js +756 -0
  142. package/dist/cli/status/StatusApp.d.ts +4 -0
  143. package/dist/cli/status/StatusApp.js +105 -0
  144. package/dist/cli/stores/StoreApp.d.ts +7 -0
  145. package/dist/cli/stores/StoreApp.js +81 -0
  146. package/dist/index.d.ts +15 -0
  147. package/dist/index.js +538 -0
  148. package/dist/local-agent/connection.d.ts +48 -0
  149. package/dist/local-agent/connection.js +332 -0
  150. package/dist/local-agent/discovery.d.ts +18 -0
  151. package/dist/local-agent/discovery.js +146 -0
  152. package/dist/local-agent/executor.d.ts +34 -0
  153. package/dist/local-agent/executor.js +241 -0
  154. package/dist/local-agent/index.d.ts +14 -0
  155. package/dist/local-agent/index.js +198 -0
  156. package/dist/node/adapters/base.d.ts +35 -0
  157. package/dist/node/adapters/base.js +10 -0
  158. package/dist/node/adapters/discord.d.ts +29 -0
  159. package/dist/node/adapters/discord.js +299 -0
  160. package/dist/node/adapters/email.d.ts +23 -0
  161. package/dist/node/adapters/email.js +218 -0
  162. package/dist/node/adapters/imessage.d.ts +17 -0
  163. package/dist/node/adapters/imessage.js +118 -0
  164. package/dist/node/adapters/slack.d.ts +26 -0
  165. package/dist/node/adapters/slack.js +259 -0
  166. package/dist/node/adapters/sms.d.ts +23 -0
  167. package/dist/node/adapters/sms.js +161 -0
  168. package/dist/node/adapters/telegram.d.ts +17 -0
  169. package/dist/node/adapters/telegram.js +101 -0
  170. package/dist/node/adapters/webchat.d.ts +27 -0
  171. package/dist/node/adapters/webchat.js +160 -0
  172. package/dist/node/adapters/whatsapp.d.ts +28 -0
  173. package/dist/node/adapters/whatsapp.js +230 -0
  174. package/dist/node/cli.d.ts +2 -0
  175. package/dist/node/cli.js +325 -0
  176. package/dist/node/config.d.ts +17 -0
  177. package/dist/node/config.js +31 -0
  178. package/dist/node/runtime.d.ts +50 -0
  179. package/dist/node/runtime.js +351 -0
  180. package/dist/server/handlers/__test-utils__/mock-supabase.d.ts +11 -0
  181. package/dist/server/handlers/__test-utils__/mock-supabase.js +393 -0
  182. package/dist/server/handlers/analytics.d.ts +17 -0
  183. package/dist/server/handlers/analytics.js +266 -0
  184. package/dist/server/handlers/api-keys.d.ts +6 -0
  185. package/dist/server/handlers/api-keys.js +221 -0
  186. package/dist/server/handlers/billing.d.ts +33 -0
  187. package/dist/server/handlers/billing.js +272 -0
  188. package/dist/server/handlers/browser.d.ts +10 -0
  189. package/dist/server/handlers/browser.js +517 -0
  190. package/dist/server/handlers/catalog.d.ts +99 -0
  191. package/dist/server/handlers/catalog.js +976 -0
  192. package/dist/server/handlers/comms.d.ts +254 -0
  193. package/dist/server/handlers/comms.js +588 -0
  194. package/dist/server/handlers/creations.d.ts +6 -0
  195. package/dist/server/handlers/creations.js +479 -0
  196. package/dist/server/handlers/crm.d.ts +89 -0
  197. package/dist/server/handlers/crm.js +538 -0
  198. package/dist/server/handlers/discovery.d.ts +6 -0
  199. package/dist/server/handlers/discovery.js +288 -0
  200. package/dist/server/handlers/embeddings.d.ts +92 -0
  201. package/dist/server/handlers/embeddings.js +197 -0
  202. package/dist/server/handlers/enrichment.d.ts +8 -0
  203. package/dist/server/handlers/enrichment.js +768 -0
  204. package/dist/server/handlers/image-gen.d.ts +6 -0
  205. package/dist/server/handlers/image-gen.js +409 -0
  206. package/dist/server/handlers/inventory.d.ts +319 -0
  207. package/dist/server/handlers/inventory.js +447 -0
  208. package/dist/server/handlers/kali.d.ts +10 -0
  209. package/dist/server/handlers/kali.js +210 -0
  210. package/dist/server/handlers/llm-providers.d.ts +6 -0
  211. package/dist/server/handlers/llm-providers.js +673 -0
  212. package/dist/server/handlers/local-agent.d.ts +6 -0
  213. package/dist/server/handlers/local-agent.js +118 -0
  214. package/dist/server/handlers/meta-ads.d.ts +111 -0
  215. package/dist/server/handlers/meta-ads.js +2279 -0
  216. package/dist/server/handlers/nodes.d.ts +33 -0
  217. package/dist/server/handlers/nodes.js +699 -0
  218. package/dist/server/handlers/operations.d.ts +138 -0
  219. package/dist/server/handlers/operations.js +131 -0
  220. package/dist/server/handlers/platform.d.ts +23 -0
  221. package/dist/server/handlers/platform.js +227 -0
  222. package/dist/server/handlers/supply-chain.d.ts +19 -0
  223. package/dist/server/handlers/supply-chain.js +327 -0
  224. package/dist/server/handlers/transcription.d.ts +17 -0
  225. package/dist/server/handlers/transcription.js +121 -0
  226. package/dist/server/handlers/video-gen.d.ts +6 -0
  227. package/dist/server/handlers/video-gen.js +466 -0
  228. package/dist/server/handlers/voice.d.ts +8 -0
  229. package/dist/server/handlers/voice.js +1146 -0
  230. package/dist/server/handlers/workflow-steps.d.ts +86 -0
  231. package/dist/server/handlers/workflow-steps.js +2349 -0
  232. package/dist/server/handlers/workflows.d.ts +7 -0
  233. package/dist/server/handlers/workflows.js +989 -0
  234. package/dist/server/index.d.ts +1 -0
  235. package/dist/server/index.js +2427 -0
  236. package/dist/server/lib/batch-client.d.ts +80 -0
  237. package/dist/server/lib/batch-client.js +467 -0
  238. package/dist/server/lib/code-worker-pool.d.ts +31 -0
  239. package/dist/server/lib/code-worker-pool.js +224 -0
  240. package/dist/server/lib/code-worker.d.ts +1 -0
  241. package/dist/server/lib/code-worker.js +188 -0
  242. package/dist/server/lib/compaction-service.d.ts +32 -0
  243. package/dist/server/lib/compaction-service.js +162 -0
  244. package/dist/server/lib/logger.d.ts +19 -0
  245. package/dist/server/lib/logger.js +46 -0
  246. package/dist/server/lib/otel.d.ts +38 -0
  247. package/dist/server/lib/otel.js +126 -0
  248. package/dist/server/lib/pg-rate-limiter.d.ts +21 -0
  249. package/dist/server/lib/pg-rate-limiter.js +86 -0
  250. package/dist/server/lib/prompt-sanitizer.d.ts +37 -0
  251. package/dist/server/lib/prompt-sanitizer.js +177 -0
  252. package/dist/server/lib/provider-capabilities.d.ts +85 -0
  253. package/dist/server/lib/provider-capabilities.js +190 -0
  254. package/dist/server/lib/provider-failover.d.ts +74 -0
  255. package/dist/server/lib/provider-failover.js +210 -0
  256. package/dist/server/lib/rate-limiter.d.ts +39 -0
  257. package/dist/server/lib/rate-limiter.js +147 -0
  258. package/dist/server/lib/server-agent-loop.d.ts +107 -0
  259. package/dist/server/lib/server-agent-loop.js +667 -0
  260. package/dist/server/lib/server-subagent.d.ts +78 -0
  261. package/dist/server/lib/server-subagent.js +203 -0
  262. package/dist/server/lib/session-checkpoint.d.ts +51 -0
  263. package/dist/server/lib/session-checkpoint.js +145 -0
  264. package/dist/server/lib/ssrf-guard.d.ts +13 -0
  265. package/dist/server/lib/ssrf-guard.js +240 -0
  266. package/dist/server/lib/supabase-client.d.ts +7 -0
  267. package/dist/server/lib/supabase-client.js +78 -0
  268. package/dist/server/lib/template-resolver.d.ts +31 -0
  269. package/dist/server/lib/template-resolver.js +215 -0
  270. package/dist/server/lib/utils.d.ts +16 -0
  271. package/dist/server/lib/utils.js +147 -0
  272. package/dist/server/local-agent-gateway.d.ts +82 -0
  273. package/dist/server/local-agent-gateway.js +426 -0
  274. package/dist/server/providers/anthropic.d.ts +20 -0
  275. package/dist/server/providers/anthropic.js +199 -0
  276. package/dist/server/providers/bedrock.d.ts +20 -0
  277. package/dist/server/providers/bedrock.js +194 -0
  278. package/dist/server/providers/gemini.d.ts +24 -0
  279. package/dist/server/providers/gemini.js +486 -0
  280. package/dist/server/providers/openai.d.ts +24 -0
  281. package/dist/server/providers/openai.js +522 -0
  282. package/dist/server/providers/registry.d.ts +32 -0
  283. package/dist/server/providers/registry.js +58 -0
  284. package/dist/server/providers/shared.d.ts +32 -0
  285. package/dist/server/providers/shared.js +124 -0
  286. package/dist/server/providers/types.d.ts +92 -0
  287. package/dist/server/providers/types.js +12 -0
  288. package/dist/server/proxy-handlers.d.ts +6 -0
  289. package/dist/server/proxy-handlers.js +89 -0
  290. package/dist/server/tool-router.d.ts +149 -0
  291. package/dist/server/tool-router.js +803 -0
  292. package/dist/server/validation.d.ts +24 -0
  293. package/dist/server/validation.js +301 -0
  294. package/dist/server/worker.d.ts +19 -0
  295. package/dist/server/worker.js +201 -0
  296. package/dist/setup.d.ts +8 -0
  297. package/dist/setup.js +181 -0
  298. package/dist/shared/agent-core.d.ts +157 -0
  299. package/dist/shared/agent-core.js +534 -0
  300. package/dist/shared/anthropic-types.d.ts +105 -0
  301. package/dist/shared/anthropic-types.js +7 -0
  302. package/dist/shared/api-client.d.ts +90 -0
  303. package/dist/shared/api-client.js +379 -0
  304. package/dist/shared/constants.d.ts +33 -0
  305. package/dist/shared/constants.js +80 -0
  306. package/dist/shared/sse-parser.d.ts +26 -0
  307. package/dist/shared/sse-parser.js +259 -0
  308. package/dist/shared/tool-dispatch.d.ts +52 -0
  309. package/dist/shared/tool-dispatch.js +191 -0
  310. package/dist/shared/types.d.ts +72 -0
  311. package/dist/shared/types.js +7 -0
  312. package/dist/updater.d.ts +25 -0
  313. package/dist/updater.js +140 -0
  314. package/dist/webchat/widget.d.ts +0 -0
  315. package/dist/webchat/widget.js +397 -0
  316. package/package.json +95 -0
  317. package/src/cli/services/builtin-skills/commit.md +19 -0
  318. package/src/cli/services/builtin-skills/review-pr.md +21 -0
  319. package/src/cli/services/builtin-skills/review.md +18 -0
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Matrix Rain Intro — green digital rain before chat starts
3
+ */
4
+ import chalk from "chalk";
5
+ const CHARS = "ハミヒーウシナモニサワツオリアホテマケメエカキムユラセネスタヌヘ0123456789ABCDEFZ";
6
+ const green0 = chalk.hex("#003B00");
7
+ const green1 = chalk.hex("#008F11");
8
+ const green2 = chalk.hex("#00FF41");
9
+ const white = chalk.hex("#FFFFFF");
10
+ const brand = chalk.hex("#00FF41").bold;
11
+ function randChar() {
12
+ return CHARS[Math.floor(Math.random() * CHARS.length)];
13
+ }
14
+ export async function matrixIntro(durationMs = 2200) {
15
+ return new Promise((resolve) => {
16
+ const cols = process.stdout.columns || 80;
17
+ const rows = Math.min((process.stdout.rows || 24) - 1, 24);
18
+ const drops = Array.from({ length: cols }, () => ({
19
+ y: Math.random() * -rows * 1.5,
20
+ speed: 0.3 + Math.random() * 0.7,
21
+ trail: 4 + Math.floor(Math.random() * 10),
22
+ }));
23
+ // Hide cursor, clear screen
24
+ process.stdout.write("\x1b[?25l\x1b[2J\x1b[H");
25
+ const start = Date.now();
26
+ const fadeStart = durationMs * 0.65;
27
+ const tick = setInterval(() => {
28
+ const elapsed = Date.now() - start;
29
+ const fading = elapsed > fadeStart;
30
+ let output = "\x1b[H";
31
+ for (const d of drops) {
32
+ d.y += d.speed;
33
+ if (d.y - d.trail > rows + 5) {
34
+ if (fading) {
35
+ d.y = -999;
36
+ }
37
+ else {
38
+ d.y = Math.random() * -8;
39
+ d.speed = 0.3 + Math.random() * 0.7;
40
+ d.trail = 4 + Math.floor(Math.random() * 10);
41
+ }
42
+ }
43
+ }
44
+ for (let r = 0; r < rows; r++) {
45
+ let line = "";
46
+ for (let c = 0; c < cols; c++) {
47
+ const d = drops[c];
48
+ const dist = Math.floor(d.y) - r;
49
+ if (dist < 0 || dist > d.trail) {
50
+ line += " ";
51
+ }
52
+ else {
53
+ const ch = randChar();
54
+ if (dist === 0)
55
+ line += white(ch);
56
+ else if (dist < d.trail * 0.3)
57
+ line += green2(ch);
58
+ else if (dist < d.trail * 0.6)
59
+ line += green1(ch);
60
+ else
61
+ line += green0(ch);
62
+ }
63
+ }
64
+ output += line + (r < rows - 1 ? "\n" : "");
65
+ }
66
+ process.stdout.write(output);
67
+ if (elapsed >= durationMs) {
68
+ clearInterval(tick);
69
+ // Flash brand in center
70
+ process.stdout.write("\x1b[2J\x1b[H");
71
+ const label = "◆ whale code";
72
+ const brandRow = Math.floor(rows / 2);
73
+ const brandCol = Math.max(1, Math.floor((cols - label.length) / 2));
74
+ process.stdout.write(`\x1b[${brandRow};${brandCol}H`);
75
+ process.stdout.write(brand(label));
76
+ setTimeout(() => {
77
+ process.stdout.write("\x1b[2J\x1b[H\x1b[?25h");
78
+ resolve();
79
+ }, 700);
80
+ }
81
+ }, 50);
82
+ });
83
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Theme — Apple-inspired color palette and symbols for whale CLI
3
+ *
4
+ * Colors: macOS system palette (Dark mode).
5
+ * Extended with purples, pinks, indigo for syntax/UI.
6
+ * Minimal, elegant symbols — whitespace does the heavy lifting.
7
+ *
8
+ * Override any color via ~/.swagmanager/theme.json:
9
+ * { "brand": "#FF6600", "text": "#E0E0E0" }
10
+ */
11
+ declare const DEFAULT_COLORS: {
12
+ brand: string;
13
+ brandDim: string;
14
+ success: string;
15
+ error: string;
16
+ warning: string;
17
+ info: string;
18
+ pink: string;
19
+ purple: string;
20
+ indigo: string;
21
+ mint: string;
22
+ teal: string;
23
+ lavender: string;
24
+ roseGold: string;
25
+ text: string;
26
+ secondary: string;
27
+ tertiary: string;
28
+ quaternary: string;
29
+ muted: string;
30
+ dim: string;
31
+ subtle: string;
32
+ border: string;
33
+ user: string;
34
+ assistant: string;
35
+ tool: string;
36
+ localTool: string;
37
+ serverTool: string;
38
+ gain: string;
39
+ loss: string;
40
+ panel: string;
41
+ separator: string;
42
+ diffAddedBg: string;
43
+ diffRemovedBg: string;
44
+ diffWordAdded: string;
45
+ diffWordRemoved: string;
46
+ };
47
+ export declare const colors: typeof DEFAULT_COLORS;
48
+ export declare const symbols: {
49
+ check: string;
50
+ cross: string;
51
+ warning: string;
52
+ dot: string;
53
+ bullet: string;
54
+ arrow: string;
55
+ arrowRight: string;
56
+ chevron: string;
57
+ user: string;
58
+ assistant: string;
59
+ local: string;
60
+ server: string;
61
+ divider: string;
62
+ verticalBar: string;
63
+ topLeft: string;
64
+ topRight: string;
65
+ bottomLeft: string;
66
+ bottomRight: string;
67
+ tee: string;
68
+ corner: string;
69
+ sparkle: string;
70
+ };
71
+ export declare function boxLine(width: number): string;
72
+ export declare function boxTop(width: number): string;
73
+ export declare function boxBottom(width: number): string;
74
+ export {};
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Theme — Apple-inspired color palette and symbols for whale CLI
3
+ *
4
+ * Colors: macOS system palette (Dark mode).
5
+ * Extended with purples, pinks, indigo for syntax/UI.
6
+ * Minimal, elegant symbols — whitespace does the heavy lifting.
7
+ *
8
+ * Override any color via ~/.swagmanager/theme.json:
9
+ * { "brand": "#FF6600", "text": "#E0E0E0" }
10
+ */
11
+ import { existsSync, readFileSync } from "fs";
12
+ import { join } from "path";
13
+ import { homedir } from "os";
14
+ // ============================================================================
15
+ // COLORS — macOS system palette (dark appearance)
16
+ // ============================================================================
17
+ const DEFAULT_COLORS = {
18
+ // Accents
19
+ brand: "#0A84FF", // systemBlue
20
+ brandDim: "#0071E3", // Apple link blue
21
+ success: "#30D158", // systemGreen
22
+ error: "#FF453A", // systemRed
23
+ warning: "#FF9F0A", // systemOrange
24
+ info: "#64D2FF", // systemCyan
25
+ // Extended accents
26
+ pink: "#FF375F", // systemPink
27
+ purple: "#BF5AF2", // systemPurple
28
+ indigo: "#5E5CE6", // systemIndigo
29
+ mint: "#66D4CF", // systemMint
30
+ teal: "#6AC4DC", // systemTeal
31
+ lavender: "#D4BBFF", // lavender
32
+ roseGold: "#FFB5C2", // rose gold
33
+ // Text hierarchy
34
+ text: "#F5F5F7", // Apple primary text
35
+ secondary: "#A1A1A6", // Apple secondary text
36
+ tertiary: "#6E6E73", // Apple tertiary text
37
+ quaternary: "#48484A", // systemGray3
38
+ // Legacy aliases
39
+ muted: "#A1A1A6",
40
+ dim: "#86868B", // systemGray
41
+ subtle: "#6E6E73",
42
+ border: "#38383A", // systemGray5
43
+ // Roles
44
+ user: "#F5F5F7",
45
+ assistant: "#BF5AF2", // systemPurple
46
+ tool: "#0A84FF",
47
+ // Tool types
48
+ localTool: "#BF5AF2", // purple — local
49
+ serverTool: "#FF375F", // pink — server/cloud
50
+ // Financial
51
+ gain: "#30D158", // systemGreen
52
+ loss: "#FF453A", // systemRed
53
+ // Surfaces
54
+ panel: "#1C1C1E", // systemBackground (elevated)
55
+ separator: "#38383A", // systemGray5
56
+ // Diff backgrounds (256-color safe cube values)
57
+ diffAddedBg: "#005f00",
58
+ diffRemovedBg: "#5f0000",
59
+ diffWordAdded: "#008700",
60
+ diffWordRemoved: "#870000",
61
+ };
62
+ // ============================================================================
63
+ // THEME OVERRIDES — loaded from ~/.swagmanager/theme.json
64
+ // ============================================================================
65
+ function loadThemeOverrides() {
66
+ try {
67
+ const p = join(homedir(), ".swagmanager", "theme.json");
68
+ if (existsSync(p)) {
69
+ const raw = JSON.parse(readFileSync(p, "utf-8"));
70
+ // Only accept keys that exist in DEFAULT_COLORS
71
+ const filtered = {};
72
+ for (const [key, val] of Object.entries(raw)) {
73
+ if (key in DEFAULT_COLORS && typeof val === "string") {
74
+ filtered[key] = val;
75
+ }
76
+ }
77
+ return filtered;
78
+ }
79
+ }
80
+ catch { /* ignore corrupt theme file */ }
81
+ return {};
82
+ }
83
+ export const colors = { ...DEFAULT_COLORS, ...loadThemeOverrides() };
84
+ // ============================================================================
85
+ // SYMBOLS — minimal, clean
86
+ // ============================================================================
87
+ export const symbols = {
88
+ // Status
89
+ check: "✓",
90
+ cross: "✕",
91
+ warning: "!",
92
+ dot: "·",
93
+ bullet: "●",
94
+ // Navigation
95
+ arrow: "→",
96
+ arrowRight: "›",
97
+ chevron: "›",
98
+ // Roles
99
+ user: ">",
100
+ assistant: " ",
101
+ // Tool types (JetBrains Mono-safe — no emoji-capable codepoints)
102
+ local: "▸",
103
+ server: "▹",
104
+ // Structure
105
+ divider: "─",
106
+ verticalBar: "│",
107
+ topLeft: "╭",
108
+ topRight: "╮",
109
+ bottomLeft: "╰",
110
+ bottomRight: "╯",
111
+ tee: "├",
112
+ corner: "└",
113
+ // Brand
114
+ sparkle: "◆",
115
+ };
116
+ // ============================================================================
117
+ // HELPERS
118
+ // ============================================================================
119
+ export function boxLine(width) {
120
+ return "─".repeat(width);
121
+ }
122
+ export function boxTop(width) {
123
+ return "╭" + "─".repeat(width - 2) + "╮";
124
+ }
125
+ export function boxBottom(width) {
126
+ return "╰" + "─".repeat(width - 2) + "╯";
127
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * whale code banner — clean terminal style
3
+ */
4
+ interface WhaleBannerProps {
5
+ subtitle?: string;
6
+ version?: string;
7
+ compact?: boolean;
8
+ }
9
+ export declare function WhaleBanner({ subtitle, version, compact }: WhaleBannerProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,12 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { colors, symbols, boxTop, boxBottom } from "./Theme.js";
4
+ export function WhaleBanner({ subtitle, version, compact }) {
5
+ if (compact) {
6
+ return (_jsxs(Box, { children: [_jsxs(Text, { color: colors.brand, bold: true, children: [symbols.sparkle, " whale code"] }), version && _jsxs(Text, { color: colors.dim, children: [" v", version] }), subtitle && _jsxs(Text, { color: colors.muted, children: [" ", subtitle] })] }));
7
+ }
8
+ const width = 44;
9
+ const titleLine = `${symbols.sparkle} whale code` + (version ? ` v${version}` : "");
10
+ const titlePad = Math.max(0, Math.floor((width - 2 - titleLine.length) / 2));
11
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: colors.border, children: boxTop(width) }), _jsxs(Box, { children: [_jsx(Text, { color: colors.border, children: symbols.verticalBar }), _jsx(Text, { children: " ".repeat(width - 2) }), _jsx(Text, { color: colors.border, children: symbols.verticalBar })] }), _jsxs(Box, { children: [_jsx(Text, { color: colors.border, children: symbols.verticalBar }), _jsx(Text, { children: " ".repeat(titlePad) }), _jsxs(Text, { color: colors.brand, bold: true, children: [symbols.sparkle, " whale code"] }), version && _jsxs(Text, { color: colors.dim, children: [" v", version] }), _jsx(Text, { children: " ".repeat(Math.max(0, width - 2 - titlePad - titleLine.length)) }), _jsx(Text, { color: colors.border, children: symbols.verticalBar })] }), subtitle && (_jsxs(Box, { children: [_jsx(Text, { color: colors.border, children: symbols.verticalBar }), _jsx(Text, { children: " ".repeat(titlePad) }), _jsx(Text, { color: colors.muted, children: subtitle }), _jsx(Text, { children: " ".repeat(Math.max(0, width - 2 - titlePad - subtitle.length)) }), _jsx(Text, { color: colors.border, children: symbols.verticalBar })] })), _jsxs(Box, { children: [_jsx(Text, { color: colors.border, children: symbols.verticalBar }), _jsx(Text, { children: " ".repeat(width - 2) }), _jsx(Text, { color: colors.border, children: symbols.verticalBar })] }), _jsx(Text, { color: colors.border, children: boxBottom(width) })] }));
12
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Markdown rendering — Apple-polished terminal output
3
+ *
4
+ * Syntax theme: purples, blues, pinks — no yellow.
5
+ * Financials: green for gains, red for losses/deductions.
6
+ * Uses marked + marked-terminal + cli-highlight.
7
+ */
8
+ /** Width for top-level assistant text (accounts for MessageList marginLeft=2) */
9
+ export declare function contentWidth(): number;
10
+ /** Width for content nested inside tool results (MessageList=2 + ToolIndicator=2 + safety=2) */
11
+ export declare function toolContentWidth(): number;
12
+ /**
13
+ * Close incomplete markdown fences for safe streaming rendering.
14
+ * State-tracking approach: handles nested fences, escaped markers, double-backtick spans.
15
+ */
16
+ export declare function closeIncompleteFences(input: string): string;
17
+ /**
18
+ * Render markdown to ANSI-styled terminal string.
19
+ * Optionally applies streaming-safe fence closing.
20
+ */
21
+ export declare function renderMarkdown(input: string, streaming?: boolean): string;