camelagi 0.5.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 (249) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/camelagi.mjs +2 -0
  4. package/config.example.yaml +107 -0
  5. package/dist/agent/agent-openai.js +206 -0
  6. package/dist/agent/agent-openai.js.map +1 -0
  7. package/dist/agent/agent-sdk.js +209 -0
  8. package/dist/agent/agent-sdk.js.map +1 -0
  9. package/dist/agent/tool-adapter.js +31 -0
  10. package/dist/agent/tool-adapter.js.map +1 -0
  11. package/dist/agent/types.js +3 -0
  12. package/dist/agent/types.js.map +1 -0
  13. package/dist/agent.js +17 -0
  14. package/dist/agent.js.map +1 -0
  15. package/dist/approval-forward.js +42 -0
  16. package/dist/approval-forward.js.map +1 -0
  17. package/dist/approvals.js +151 -0
  18. package/dist/approvals.js.map +1 -0
  19. package/dist/boot.js +34 -0
  20. package/dist/boot.js.map +1 -0
  21. package/dist/bootstrap.js +451 -0
  22. package/dist/bootstrap.js.map +1 -0
  23. package/dist/camelagi-gateway.mjs +93611 -0
  24. package/dist/camelagi-gateway.mjs.map +7 -0
  25. package/dist/channels/adapter.js +10 -0
  26. package/dist/channels/adapter.js.map +1 -0
  27. package/dist/channels/discord.js +232 -0
  28. package/dist/channels/discord.js.map +1 -0
  29. package/dist/channels/handler.js +349 -0
  30. package/dist/channels/handler.js.map +1 -0
  31. package/dist/channels/index.js +19 -0
  32. package/dist/channels/index.js.map +1 -0
  33. package/dist/channels/registry.js +71 -0
  34. package/dist/channels/registry.js.map +1 -0
  35. package/dist/channels/telegram.js +83 -0
  36. package/dist/channels/telegram.js.map +1 -0
  37. package/dist/channels/types.js +3 -0
  38. package/dist/channels/types.js.map +1 -0
  39. package/dist/chunker.js +102 -0
  40. package/dist/chunker.js.map +1 -0
  41. package/dist/cli/cmd-agents.js +65 -0
  42. package/dist/cli/cmd-agents.js.map +1 -0
  43. package/dist/cli/cmd-bootstrap.js +10 -0
  44. package/dist/cli/cmd-bootstrap.js.map +1 -0
  45. package/dist/cli/cmd-chat.js +32 -0
  46. package/dist/cli/cmd-chat.js.map +1 -0
  47. package/dist/cli/cmd-config.js +88 -0
  48. package/dist/cli/cmd-config.js.map +1 -0
  49. package/dist/cli/cmd-cron.js +120 -0
  50. package/dist/cli/cmd-cron.js.map +1 -0
  51. package/dist/cli/cmd-daemon.js +37 -0
  52. package/dist/cli/cmd-daemon.js.map +1 -0
  53. package/dist/cli/cmd-doctor.js +18 -0
  54. package/dist/cli/cmd-doctor.js.map +1 -0
  55. package/dist/cli/cmd-logs.js +30 -0
  56. package/dist/cli/cmd-logs.js.map +1 -0
  57. package/dist/cli/cmd-pairing.js +41 -0
  58. package/dist/cli/cmd-pairing.js.map +1 -0
  59. package/dist/cli/cmd-reset.js +39 -0
  60. package/dist/cli/cmd-reset.js.map +1 -0
  61. package/dist/cli/cmd-serve.js +30 -0
  62. package/dist/cli/cmd-serve.js.map +1 -0
  63. package/dist/cli/cmd-sessions.js +56 -0
  64. package/dist/cli/cmd-sessions.js.map +1 -0
  65. package/dist/cli/cmd-setup.js +11 -0
  66. package/dist/cli/cmd-setup.js.map +1 -0
  67. package/dist/cli/cmd-soul.js +43 -0
  68. package/dist/cli/cmd-soul.js.map +1 -0
  69. package/dist/cli/parse.js +50 -0
  70. package/dist/cli/parse.js.map +1 -0
  71. package/dist/cli/registry.js +15 -0
  72. package/dist/cli/registry.js.map +1 -0
  73. package/dist/cli.js +103 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/compact.js +92 -0
  76. package/dist/compact.js.map +1 -0
  77. package/dist/config.js +153 -0
  78. package/dist/config.js.map +1 -0
  79. package/dist/constants.js +21 -0
  80. package/dist/constants.js.map +1 -0
  81. package/dist/core/config.js +212 -0
  82. package/dist/core/config.js.map +1 -0
  83. package/dist/core/constants.js +21 -0
  84. package/dist/core/constants.js.map +1 -0
  85. package/dist/core/errors.js +5 -0
  86. package/dist/core/errors.js.map +1 -0
  87. package/dist/core/log.js +41 -0
  88. package/dist/core/log.js.map +1 -0
  89. package/dist/core/models.js +123 -0
  90. package/dist/core/models.js.map +1 -0
  91. package/dist/core/types.js +3 -0
  92. package/dist/core/types.js.map +1 -0
  93. package/dist/core/update-check.js +51 -0
  94. package/dist/core/update-check.js.map +1 -0
  95. package/dist/cron.js +81 -0
  96. package/dist/cron.js.map +1 -0
  97. package/dist/daemon.js +109 -0
  98. package/dist/daemon.js.map +1 -0
  99. package/dist/doctor.js +194 -0
  100. package/dist/doctor.js.map +1 -0
  101. package/dist/errors.js +5 -0
  102. package/dist/errors.js.map +1 -0
  103. package/dist/extensions/approval-forward.js +42 -0
  104. package/dist/extensions/approval-forward.js.map +1 -0
  105. package/dist/extensions/approvals.js +144 -0
  106. package/dist/extensions/approvals.js.map +1 -0
  107. package/dist/extensions/cron.js +306 -0
  108. package/dist/extensions/cron.js.map +1 -0
  109. package/dist/extensions/hooks.js +72 -0
  110. package/dist/extensions/hooks.js.map +1 -0
  111. package/dist/extensions/skills.js +97 -0
  112. package/dist/extensions/skills.js.map +1 -0
  113. package/dist/gateway/csrf.js +44 -0
  114. package/dist/gateway/csrf.js.map +1 -0
  115. package/dist/gateway/logger.js +81 -0
  116. package/dist/gateway/logger.js.map +1 -0
  117. package/dist/gateway/rate-limit.js +33 -0
  118. package/dist/gateway/rate-limit.js.map +1 -0
  119. package/dist/gateway/routes.js +315 -0
  120. package/dist/gateway/routes.js.map +1 -0
  121. package/dist/gateway/state.js +54 -0
  122. package/dist/gateway/state.js.map +1 -0
  123. package/dist/gateway/ws-handler.js +200 -0
  124. package/dist/gateway/ws-handler.js.map +1 -0
  125. package/dist/gateway-entry.js +16 -0
  126. package/dist/gateway-entry.js.map +1 -0
  127. package/dist/hooks.js +72 -0
  128. package/dist/hooks.js.map +1 -0
  129. package/dist/lanes.js +62 -0
  130. package/dist/lanes.js.map +1 -0
  131. package/dist/model.js +30 -0
  132. package/dist/model.js.map +1 -0
  133. package/dist/policy.js +22 -0
  134. package/dist/policy.js.map +1 -0
  135. package/dist/queue.js +45 -0
  136. package/dist/queue.js.map +1 -0
  137. package/dist/retry.js +96 -0
  138. package/dist/retry.js.map +1 -0
  139. package/dist/runs.js +83 -0
  140. package/dist/runs.js.map +1 -0
  141. package/dist/runtime/compact.js +99 -0
  142. package/dist/runtime/compact.js.map +1 -0
  143. package/dist/runtime/lanes.js +66 -0
  144. package/dist/runtime/lanes.js.map +1 -0
  145. package/dist/runtime/orchestrate.js +121 -0
  146. package/dist/runtime/orchestrate.js.map +1 -0
  147. package/dist/runtime/queue.js +50 -0
  148. package/dist/runtime/queue.js.map +1 -0
  149. package/dist/runtime/retry.js +127 -0
  150. package/dist/runtime/retry.js.map +1 -0
  151. package/dist/runtime/runs.js +105 -0
  152. package/dist/runtime/runs.js.map +1 -0
  153. package/dist/serve.js +209 -0
  154. package/dist/serve.js.map +1 -0
  155. package/dist/session.js +75 -0
  156. package/dist/session.js.map +1 -0
  157. package/dist/setup.js +254 -0
  158. package/dist/setup.js.map +1 -0
  159. package/dist/skills.js +89 -0
  160. package/dist/skills.js.map +1 -0
  161. package/dist/subagent.js +71 -0
  162. package/dist/subagent.js.map +1 -0
  163. package/dist/system-prompt.js +157 -0
  164. package/dist/system-prompt.js.map +1 -0
  165. package/dist/telegram/admin-bot.js +705 -0
  166. package/dist/telegram/admin-bot.js.map +1 -0
  167. package/dist/telegram/agent-bot.js +551 -0
  168. package/dist/telegram/agent-bot.js.map +1 -0
  169. package/dist/telegram/bot-approval.js +63 -0
  170. package/dist/telegram/bot-approval.js.map +1 -0
  171. package/dist/telegram/draft-stream.js +86 -0
  172. package/dist/telegram/draft-stream.js.map +1 -0
  173. package/dist/telegram/format.js +106 -0
  174. package/dist/telegram/format.js.map +1 -0
  175. package/dist/telegram/helpers.js +87 -0
  176. package/dist/telegram/helpers.js.map +1 -0
  177. package/dist/telegram/pairing-notify.js +52 -0
  178. package/dist/telegram/pairing-notify.js.map +1 -0
  179. package/dist/telegram/pairing.js +138 -0
  180. package/dist/telegram/pairing.js.map +1 -0
  181. package/dist/telegram/resolve.js +33 -0
  182. package/dist/telegram/resolve.js.map +1 -0
  183. package/dist/telegram/transcribe.js +77 -0
  184. package/dist/telegram/transcribe.js.map +1 -0
  185. package/dist/telegram/types.js +3 -0
  186. package/dist/telegram/types.js.map +1 -0
  187. package/dist/telegram/voice-wizard.js +84 -0
  188. package/dist/telegram/voice-wizard.js.map +1 -0
  189. package/dist/telegram/wizard.js +89 -0
  190. package/dist/telegram/wizard.js.map +1 -0
  191. package/dist/telegram/wizards.js +297 -0
  192. package/dist/telegram/wizards.js.map +1 -0
  193. package/dist/telegram-admin.js +800 -0
  194. package/dist/telegram-admin.js.map +1 -0
  195. package/dist/telegram.js +118 -0
  196. package/dist/telegram.js.map +1 -0
  197. package/dist/tools/cron.js +94 -0
  198. package/dist/tools/cron.js.map +1 -0
  199. package/dist/tools/edit.js +29 -0
  200. package/dist/tools/edit.js.map +1 -0
  201. package/dist/tools/exec.js +38 -0
  202. package/dist/tools/exec.js.map +1 -0
  203. package/dist/tools/fetch.js +28 -0
  204. package/dist/tools/fetch.js.map +1 -0
  205. package/dist/tools/index.js +16 -0
  206. package/dist/tools/index.js.map +1 -0
  207. package/dist/tools/memory.js +164 -0
  208. package/dist/tools/memory.js.map +1 -0
  209. package/dist/tools/patch.js +284 -0
  210. package/dist/tools/patch.js.map +1 -0
  211. package/dist/tools/read.js +26 -0
  212. package/dist/tools/read.js.map +1 -0
  213. package/dist/tools/search.js +62 -0
  214. package/dist/tools/search.js.map +1 -0
  215. package/dist/tools/subagent.js +48 -0
  216. package/dist/tools/subagent.js.map +1 -0
  217. package/dist/tools/write.js +22 -0
  218. package/dist/tools/write.js.map +1 -0
  219. package/dist/tui/commands.js +450 -0
  220. package/dist/tui/commands.js.map +1 -0
  221. package/dist/tui/components/assistant-message.js +26 -0
  222. package/dist/tui/components/assistant-message.js.map +1 -0
  223. package/dist/tui/components/chat-log.js +94 -0
  224. package/dist/tui/components/chat-log.js.map +1 -0
  225. package/dist/tui/components/custom-editor.js +40 -0
  226. package/dist/tui/components/custom-editor.js.map +1 -0
  227. package/dist/tui/components/hint-bar.js +13 -0
  228. package/dist/tui/components/hint-bar.js.map +1 -0
  229. package/dist/tui/components/tool-execution.js +73 -0
  230. package/dist/tui/components/tool-execution.js.map +1 -0
  231. package/dist/tui/components/user-message.js +19 -0
  232. package/dist/tui/components/user-message.js.map +1 -0
  233. package/dist/tui/components/welcome.js +147 -0
  234. package/dist/tui/components/welcome.js.map +1 -0
  235. package/dist/tui/context.js +3 -0
  236. package/dist/tui/context.js.map +1 -0
  237. package/dist/tui/theme.js +91 -0
  238. package/dist/tui/theme.js.map +1 -0
  239. package/dist/tui/tui.js +389 -0
  240. package/dist/tui/tui.js.map +1 -0
  241. package/dist/tui/ws-handler.js +154 -0
  242. package/dist/tui/ws-handler.js.map +1 -0
  243. package/dist/types.js +3 -0
  244. package/dist/types.js.map +1 -0
  245. package/dist/usage.js +88 -0
  246. package/dist/usage.js.map +1 -0
  247. package/dist/workspace.js +245 -0
  248. package/dist/workspace.js.map +1 -0
  249. package/package.json +74 -0
@@ -0,0 +1,13 @@
1
+ // Hint bar component — shows keyboard shortcuts below the editor
2
+ import { Text } from "@mariozechner/pi-tui";
3
+ import chalk from "chalk";
4
+ const dim = (s) => chalk.hex("#7B7F87")(s);
5
+ export class HintBar extends Text {
6
+ constructor() {
7
+ super(dim(" ? for shortcuts"), 0, 0);
8
+ }
9
+ setHint(text) {
10
+ this.setText(dim(` ${text}`));
11
+ }
12
+ }
13
+ //# sourceMappingURL=hint-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hint-bar.js","sourceRoot":"","sources":["../../../src/tui/components/hint-bar.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnD,MAAM,OAAO,OAAQ,SAAQ,IAAI;IAC/B;QACE,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,73 @@
1
+ // Tool execution display component (adapted from OpenClaw)
2
+ import { Box, Container, Markdown, Spacer, Text } from "@mariozechner/pi-tui";
3
+ import { markdownTheme, theme } from "../theme.js";
4
+ const PREVIEW_LINES = 12;
5
+ export class ToolExecutionComponent extends Container {
6
+ box;
7
+ header;
8
+ argsLine;
9
+ output;
10
+ toolName;
11
+ args;
12
+ resultText = "";
13
+ expanded = false;
14
+ isError = false;
15
+ isPartial = true;
16
+ constructor(toolName, args) {
17
+ super();
18
+ this.toolName = toolName;
19
+ this.args = args;
20
+ this.box = new Box(1, 1, (line) => theme.toolPendingBg(line));
21
+ this.header = new Text("", 0, 0);
22
+ this.argsLine = new Text("", 0, 0);
23
+ this.output = new Markdown("", 0, 0, markdownTheme, {
24
+ color: (line) => theme.toolOutput(line),
25
+ });
26
+ this.addChild(new Spacer(1));
27
+ this.addChild(this.box);
28
+ this.box.addChild(this.header);
29
+ this.box.addChild(this.argsLine);
30
+ this.box.addChild(this.output);
31
+ this.refresh();
32
+ }
33
+ setArgs(args) {
34
+ this.args = args;
35
+ this.refresh();
36
+ }
37
+ setExpanded(expanded) {
38
+ this.expanded = expanded;
39
+ this.refresh();
40
+ }
41
+ setResult(text, opts) {
42
+ this.resultText = text;
43
+ this.isPartial = false;
44
+ this.isError = Boolean(opts?.isError);
45
+ this.refresh();
46
+ }
47
+ refresh() {
48
+ const bg = this.isPartial
49
+ ? theme.toolPendingBg
50
+ : this.isError
51
+ ? theme.toolErrorBg
52
+ : theme.toolSuccessBg;
53
+ this.box.setBgFn((line) => bg(line));
54
+ const title = `${this.toolName}${this.isPartial ? " (running)" : ""}`;
55
+ this.header.setText(theme.toolTitle(theme.bold(title)));
56
+ let argStr = "";
57
+ try {
58
+ argStr = JSON.stringify(this.args).slice(0, 200);
59
+ }
60
+ catch { /* ignore */ }
61
+ this.argsLine.setText(argStr ? theme.dim(argStr) : theme.dim(" "));
62
+ const text = this.resultText || (this.isPartial ? "..." : "");
63
+ if (!this.expanded && text) {
64
+ const lines = text.split("\n");
65
+ const preview = lines.length > PREVIEW_LINES ? `${lines.slice(0, PREVIEW_LINES).join("\n")}\n...` : text;
66
+ this.output.setText(preview);
67
+ }
68
+ else {
69
+ this.output.setText(text);
70
+ }
71
+ }
72
+ }
73
+ //# sourceMappingURL=tool-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../src/tui/components/tool-execution.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAE3D,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,OAAO,sBAAuB,SAAQ,SAAS;IAC3C,GAAG,CAAM;IACT,MAAM,CAAO;IACb,QAAQ,CAAO;IACf,MAAM,CAAW;IACjB,QAAQ,CAAS;IACjB,IAAI,CAAU;IACd,UAAU,GAAG,EAAE,CAAC;IAChB,QAAQ,GAAG,KAAK,CAAC;IACjB,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAAG,IAAI,CAAC;IAEzB,YAAY,QAAgB,EAAE,IAAa;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE;YAClD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,IAAa;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,IAA4B;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,OAAO;QACb,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS;YACvB,CAAC,CAAC,KAAK,CAAC,aAAa;YACrB,CAAC,CAAC,IAAI,CAAC,OAAO;gBACZ,CAAC,CAAC,KAAK,CAAC,WAAW;gBACnB,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAExD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,OAAO,GACX,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3F,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ // User message component (from OpenClaw)
2
+ import { Container, Markdown, Spacer } from "@mariozechner/pi-tui";
3
+ import { markdownTheme, theme } from "../theme.js";
4
+ export class UserMessageComponent extends Container {
5
+ body;
6
+ constructor(text) {
7
+ super();
8
+ this.body = new Markdown(text, 1, 1, markdownTheme, {
9
+ bgColor: (line) => theme.userBg(line),
10
+ color: (line) => theme.userText(line),
11
+ });
12
+ this.addChild(new Spacer(1));
13
+ this.addChild(this.body);
14
+ }
15
+ setText(text) {
16
+ this.body.setText(text);
17
+ }
18
+ }
19
+ //# sourceMappingURL=user-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-message.js","sourceRoot":"","sources":["../../../src/tui/components/user-message.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACzC,IAAI,CAAW;IAEvB,YAAY,IAAY;QACtB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE;YAClD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YACrC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;SACtC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,147 @@
1
+ // Welcome screen component — Claude Code-inspired layout
2
+ // Renders a bordered box with ASCII art, tips, and recent activity
3
+ import { Text, visibleWidth } from "@mariozechner/pi-tui";
4
+ import chalk from "chalk";
5
+ const palette = {
6
+ border: "#3C414B",
7
+ title: "#F6C453",
8
+ heading: "#F6C453",
9
+ text: "#E8E3D5",
10
+ dim: "#7B7F87",
11
+ accent: "#F2A65A",
12
+ camelBody: "#F6C453",
13
+ camelDetail: "#D4A843",
14
+ camelAccessory: "#F2A65A",
15
+ };
16
+ const c = {
17
+ border: (s) => chalk.hex(palette.border)(s),
18
+ title: (s) => chalk.bold.hex(palette.title)(s),
19
+ heading: (s) => chalk.hex(palette.heading)(s),
20
+ text: (s) => chalk.hex(palette.text)(s),
21
+ dim: (s) => chalk.hex(palette.dim)(s),
22
+ accent: (s) => chalk.hex(palette.accent)(s),
23
+ bold: (s) => chalk.bold.hex(palette.text)(s),
24
+ camelBody: (s) => chalk.hex(palette.camelBody)(s),
25
+ camelDetail: (s) => chalk.hex(palette.camelDetail)(s),
26
+ camelAccessory: (s) => chalk.hex(palette.camelAccessory)(s),
27
+ };
28
+ // Camel ASCII art
29
+ const CAMEL_ART = [
30
+ ` ${c.camelAccessory("╭──╮")}`,
31
+ ` ${c.camelAccessory("│")}${c.camelBody("@@")}${c.camelAccessory("│")}`,
32
+ ` ${c.camelBody("╭╯")}${c.camelAccessory("╰──╯")}${c.camelBody("╮")}`,
33
+ ` ${c.camelBody("│")} ${c.camelDetail("◉◉")} ${c.camelBody("│")}`,
34
+ ` ${c.camelBody("╭╯")} ${c.camelBody("╰──╯")} ${c.camelBody("╲")}`,
35
+ ` ${c.camelBody("│")} ${c.camelDetail("╭────╮")} ${c.camelBody("│")}`,
36
+ ` ${c.camelBody("╰╮")}${c.camelDetail("│")} ${c.camelDetail("│")}${c.camelBody("╭╯")}`,
37
+ ` ${c.camelBody("║")}${c.camelDetail("╰────╯")}${c.camelBody("║")}`,
38
+ ` ${c.camelBody("╨")} ${c.camelBody("╨╨")} ${c.camelBody("╨")}`,
39
+ ];
40
+ function padRight(str, width) {
41
+ const visible = visibleWidth(str);
42
+ if (visible >= width)
43
+ return str;
44
+ return str + " ".repeat(width - visible);
45
+ }
46
+ function formatRelativeTime(timestamp) {
47
+ const diff = Date.now() - timestamp;
48
+ const minutes = Math.floor(diff / 60_000);
49
+ if (minutes < 1)
50
+ return "just now";
51
+ if (minutes < 60)
52
+ return `${minutes}m ago`;
53
+ const hours = Math.floor(minutes / 60);
54
+ if (hours < 24)
55
+ return `${hours}h ago`;
56
+ const days = Math.floor(hours / 24);
57
+ return `${days}d ago`;
58
+ }
59
+ function truncateStr(str, maxLen) {
60
+ if (str.length <= maxLen)
61
+ return str;
62
+ return str.slice(0, maxLen - 1) + "…";
63
+ }
64
+ export function buildWelcomeScreen(opts, termWidth) {
65
+ const boxWidth = Math.min(termWidth - 2, 90);
66
+ const innerWidth = boxWidth - 4; // 2 for borders, 2 for inner padding
67
+ const leftColWidth = 30;
68
+ const rightColWidth = innerWidth - leftColWidth - 2; // 2 for gap
69
+ // --- Left column ---
70
+ const greeting = opts.userName
71
+ ? c.bold(`Welcome back ${opts.userName}!`)
72
+ : c.bold("Welcome to CamelAGI!");
73
+ const thinkingStr = opts.thinking && opts.thinking !== "off"
74
+ ? ` [think:${opts.thinking}]`
75
+ : "";
76
+ const modelLine = c.dim(`${opts.model}${thinkingStr}`);
77
+ const effortLine = c.dim(`${opts.effort} effort · ${opts.provider}`);
78
+ // Shorten cwd
79
+ const home = process.env.HOME ?? "";
80
+ let cwdDisplay = opts.cwd;
81
+ if (home && cwdDisplay.startsWith(home)) {
82
+ cwdDisplay = "~" + cwdDisplay.slice(home.length);
83
+ }
84
+ const cwdLine = c.dim(truncateStr(cwdDisplay, leftColWidth));
85
+ const leftLines = [];
86
+ leftLines.push("");
87
+ leftLines.push(greeting);
88
+ leftLines.push("");
89
+ for (const art of CAMEL_ART) {
90
+ leftLines.push(art);
91
+ }
92
+ leftLines.push("");
93
+ leftLines.push(modelLine);
94
+ leftLines.push(effortLine);
95
+ leftLines.push(cwdLine);
96
+ // --- Right column ---
97
+ const rightLines = [];
98
+ rightLines.push("");
99
+ rightLines.push(c.heading("Tips for getting started"));
100
+ rightLines.push(c.text("Type a message to start chatting"));
101
+ rightLines.push(c.text("Use /help for all commands"));
102
+ rightLines.push("");
103
+ rightLines.push(c.heading("Recent activity"));
104
+ const recentSessions = opts.sessions.slice(0, 3);
105
+ if (recentSessions.length === 0) {
106
+ rightLines.push(c.dim("No recent sessions"));
107
+ }
108
+ else {
109
+ for (const s of recentSessions) {
110
+ const timeStr = formatRelativeTime(s.createdAt);
111
+ const displayName = s.label ? `${s.id} (${s.label})` : s.id;
112
+ const idStr = truncateStr(displayName, rightColWidth - 12);
113
+ rightLines.push(c.dim(`${padRight(timeStr, 10)}`) + c.text(idStr));
114
+ }
115
+ }
116
+ rightLines.push(c.dim("/sessions for more"));
117
+ // --- Combine columns ---
118
+ const maxHeight = Math.max(leftLines.length, rightLines.length);
119
+ // Pad both columns to same height
120
+ while (leftLines.length < maxHeight)
121
+ leftLines.push("");
122
+ while (rightLines.length < maxHeight)
123
+ rightLines.push("");
124
+ // Build the box
125
+ const lines = [];
126
+ // Top border with title
127
+ const titleText = ` CamelAGI v${opts.version} `;
128
+ const titleLen = titleText.length;
129
+ const leftBorderLen = 2;
130
+ const rightBorderLen = boxWidth - leftBorderLen - titleLen - 2;
131
+ lines.push(c.border("╭─") +
132
+ c.title(titleText) +
133
+ c.border("─".repeat(Math.max(0, rightBorderLen)) + "╮"));
134
+ // Content rows
135
+ for (let i = 0; i < maxHeight; i++) {
136
+ const left = padRight(leftLines[i], leftColWidth);
137
+ const right = padRight(rightLines[i], rightColWidth);
138
+ lines.push(c.border("│") +
139
+ " " + left + " " + right +
140
+ " " + c.border("│"));
141
+ }
142
+ // Bottom border
143
+ lines.push(c.border("╰" + "─".repeat(boxWidth - 2) + "╯"));
144
+ const rendered = lines.join("\n");
145
+ return new Text(rendered, 0, 0);
146
+ }
147
+ //# sourceMappingURL=welcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../../src/tui/components/welcome.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // Shared TUI context — passed to extracted modules
2
+ export {};
3
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tui/context.ts"],"names":[],"mappings":"AAAA,mDAAmD"}
@@ -0,0 +1,91 @@
1
+ // Theme: colors and markdown styling (adapted from OpenClaw)
2
+ import chalk from "chalk";
3
+ import { highlight, supportsLanguage } from "cli-highlight";
4
+ const palette = {
5
+ text: "#E8E3D5",
6
+ dim: "#7B7F87",
7
+ accent: "#F6C453",
8
+ accentSoft: "#F2A65A",
9
+ border: "#3C414B",
10
+ userBg: "#2B2F36",
11
+ userText: "#F3EEE0",
12
+ systemText: "#9BA3B2",
13
+ toolPendingBg: "#1F2A2F",
14
+ toolSuccessBg: "#1E2D23",
15
+ toolErrorBg: "#2F1F1F",
16
+ toolTitle: "#F6C453",
17
+ toolOutput: "#E1DACB",
18
+ quote: "#8CC8FF",
19
+ quoteBorder: "#3B4D6B",
20
+ code: "#F0C987",
21
+ codeBlock: "#1E232A",
22
+ codeBorder: "#343A45",
23
+ link: "#7DD3A5",
24
+ error: "#F97066",
25
+ success: "#7DD3A5",
26
+ };
27
+ const fg = (hex) => (text) => chalk.hex(hex)(text);
28
+ const bg = (hex) => (text) => chalk.bgHex(hex)(text);
29
+ function highlightCode(code, lang) {
30
+ try {
31
+ const language = lang && supportsLanguage(lang) ? lang : undefined;
32
+ const highlighted = highlight(code, {
33
+ language,
34
+ ignoreIllegals: true,
35
+ });
36
+ return highlighted.split("\n");
37
+ }
38
+ catch {
39
+ return code.split("\n").map((line) => fg(palette.code)(line));
40
+ }
41
+ }
42
+ export const theme = {
43
+ fg: fg(palette.text),
44
+ assistantText: (text) => text,
45
+ dim: fg(palette.dim),
46
+ accent: fg(palette.accent),
47
+ accentSoft: fg(palette.accentSoft),
48
+ success: fg(palette.success),
49
+ error: fg(palette.error),
50
+ header: (text) => chalk.bold(fg(palette.accent)(text)),
51
+ system: fg(palette.systemText),
52
+ userBg: bg(palette.userBg),
53
+ userText: fg(palette.userText),
54
+ toolTitle: fg(palette.toolTitle),
55
+ toolOutput: fg(palette.toolOutput),
56
+ toolPendingBg: bg(palette.toolPendingBg),
57
+ toolSuccessBg: bg(palette.toolSuccessBg),
58
+ toolErrorBg: bg(palette.toolErrorBg),
59
+ border: fg(palette.border),
60
+ bold: (text) => chalk.bold(text),
61
+ italic: (text) => chalk.italic(text),
62
+ };
63
+ export const markdownTheme = {
64
+ heading: (text) => chalk.bold(fg(palette.accent)(text)),
65
+ link: (text) => fg(palette.link)(text),
66
+ linkUrl: (text) => chalk.dim(text),
67
+ code: (text) => fg(palette.code)(text),
68
+ codeBlock: (text) => fg(palette.code)(text),
69
+ codeBlockBorder: (text) => fg(palette.codeBorder)(text),
70
+ quote: (text) => fg(palette.quote)(text),
71
+ quoteBorder: (text) => fg(palette.quoteBorder)(text),
72
+ hr: (text) => fg(palette.border)(text),
73
+ listBullet: (text) => fg(palette.accentSoft)(text),
74
+ bold: (text) => chalk.bold(text),
75
+ italic: (text) => chalk.italic(text),
76
+ strikethrough: (text) => chalk.strikethrough(text),
77
+ underline: (text) => chalk.underline(text),
78
+ highlightCode,
79
+ };
80
+ export const selectListTheme = {
81
+ selectedPrefix: (text) => fg(palette.accent)(text),
82
+ selectedText: (text) => chalk.bold(fg(palette.accent)(text)),
83
+ description: (text) => fg(palette.dim)(text),
84
+ scrollInfo: (text) => fg(palette.dim)(text),
85
+ noMatch: (text) => fg(palette.dim)(text),
86
+ };
87
+ export const editorTheme = {
88
+ borderColor: (text) => fg(palette.border)(text),
89
+ selectList: selectListTheme,
90
+ };
91
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"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"}