@timetotest/cli 0.1.10 → 0.2.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 (187) hide show
  1. package/README.md +201 -190
  2. package/dist/bin/ttt.js +4 -2
  3. package/dist/bin/ttt.js.map +1 -1
  4. package/dist/package.json +20 -3
  5. package/dist/src/commands/ask/AskApp.js +121 -0
  6. package/dist/src/commands/ask/AskApp.js.map +1 -0
  7. package/dist/src/commands/ask/components/AssistantResponse.js +31 -0
  8. package/dist/src/commands/ask/components/AssistantResponse.js.map +1 -0
  9. package/dist/src/commands/ask/components/Banner.js +15 -0
  10. package/dist/src/commands/ask/components/Banner.js.map +1 -0
  11. package/dist/src/commands/ask/components/ChatInput.js +93 -0
  12. package/dist/src/commands/ask/components/ChatInput.js.map +1 -0
  13. package/dist/src/commands/ask/components/Divider.js +17 -0
  14. package/dist/src/commands/ask/components/Divider.js.map +1 -0
  15. package/dist/src/commands/ask/components/IntroTips.js +19 -0
  16. package/dist/src/commands/ask/components/IntroTips.js.map +1 -0
  17. package/dist/src/commands/ask/components/MessageBubble.js +47 -0
  18. package/dist/src/commands/ask/components/MessageBubble.js.map +1 -0
  19. package/dist/src/commands/ask/components/SessionInfo.js +20 -0
  20. package/dist/src/commands/ask/components/SessionInfo.js.map +1 -0
  21. package/dist/src/commands/ask/components/StatusIndicator.js +67 -0
  22. package/dist/src/commands/ask/components/StatusIndicator.js.map +1 -0
  23. package/dist/src/commands/ask-ink.js +380 -0
  24. package/dist/src/commands/ask-ink.js.map +1 -0
  25. package/dist/src/commands/ask.js +138 -50
  26. package/dist/src/commands/ask.js.map +1 -1
  27. package/dist/src/commands/chat/ChatApp.js +125 -0
  28. package/dist/src/commands/chat/ChatApp.js.map +1 -0
  29. package/dist/src/commands/chat-ink.js +436 -0
  30. package/dist/src/commands/chat-ink.js.map +1 -0
  31. package/dist/src/commands/chat.js +82 -0
  32. package/dist/src/commands/chat.js.map +1 -0
  33. package/dist/src/commands/login.js +6 -4
  34. package/dist/src/commands/login.js.map +1 -1
  35. package/dist/src/commands/start-test.js +62 -88
  36. package/dist/src/commands/start-test.js.map +1 -1
  37. package/dist/src/commands/stream.js +9 -9
  38. package/dist/src/commands/stream.js.map +1 -1
  39. package/dist/src/commands/test.js +58 -125
  40. package/dist/src/commands/test.js.map +1 -1
  41. package/dist/src/lib/agent-orchestrator.js +546 -0
  42. package/dist/src/lib/agent-orchestrator.js.map +1 -0
  43. package/dist/src/lib/cloudinary-service.js +65 -0
  44. package/dist/src/lib/cloudinary-service.js.map +1 -0
  45. package/dist/src/lib/config.js +3 -2
  46. package/dist/src/lib/config.js.map +1 -1
  47. package/dist/src/lib/events.js +73 -60
  48. package/dist/src/lib/events.js.map +1 -1
  49. package/dist/src/lib/http.js +34 -1
  50. package/dist/src/lib/http.js.map +1 -1
  51. package/dist/src/lib/legacy-chat-runner.js +37 -0
  52. package/dist/src/lib/legacy-chat-runner.js.map +1 -0
  53. package/dist/src/lib/local-tools/api/api-discovery.js +17 -0
  54. package/dist/src/lib/local-tools/api/api-discovery.js.map +1 -0
  55. package/dist/src/lib/local-tools/api/build-request.js +20 -0
  56. package/dist/src/lib/local-tools/api/build-request.js.map +1 -0
  57. package/dist/src/lib/local-tools/api/extract-response-fields.js +26 -0
  58. package/dist/src/lib/local-tools/api/extract-response-fields.js.map +1 -0
  59. package/dist/src/lib/local-tools/api/generate-api-test.js +20 -0
  60. package/dist/src/lib/local-tools/api/generate-api-test.js.map +1 -0
  61. package/dist/src/lib/local-tools/api/generate-curl.js +8 -0
  62. package/dist/src/lib/local-tools/api/generate-curl.js.map +1 -0
  63. package/dist/src/lib/local-tools/api/get-api-parameters.js +17 -0
  64. package/dist/src/lib/local-tools/api/get-api-parameters.js.map +1 -0
  65. package/dist/src/lib/local-tools/api/index.js +10 -0
  66. package/dist/src/lib/local-tools/api/index.js.map +1 -0
  67. package/dist/src/lib/local-tools/api/request.js +43 -0
  68. package/dist/src/lib/local-tools/api/request.js.map +1 -0
  69. package/dist/src/lib/local-tools/api/set-auth-header.js +8 -0
  70. package/dist/src/lib/local-tools/api/set-auth-header.js.map +1 -0
  71. package/dist/src/lib/local-tools/api/types.js +2 -0
  72. package/dist/src/lib/local-tools/api/types.js.map +1 -0
  73. package/dist/src/lib/local-tools/api/utils.js +33 -0
  74. package/dist/src/lib/local-tools/api/utils.js.map +1 -0
  75. package/dist/src/lib/local-tools/api/validate-response.js +41 -0
  76. package/dist/src/lib/local-tools/api/validate-response.js.map +1 -0
  77. package/dist/src/lib/local-tools/file-tools.js +45 -0
  78. package/dist/src/lib/local-tools/file-tools.js.map +1 -0
  79. package/dist/src/lib/local-tools/general/discover-local-services.js +95 -0
  80. package/dist/src/lib/local-tools/general/discover-local-services.js.map +1 -0
  81. package/dist/src/lib/local-tools/general/index.js +2 -0
  82. package/dist/src/lib/local-tools/general/index.js.map +1 -0
  83. package/dist/src/lib/local-tools/ui/click-element.js +105 -0
  84. package/dist/src/lib/local-tools/ui/click-element.js.map +1 -0
  85. package/dist/src/lib/local-tools/ui/dom-rag.js +201 -0
  86. package/dist/src/lib/local-tools/ui/dom-rag.js.map +1 -0
  87. package/dist/src/lib/local-tools/ui/find-element.js +31 -0
  88. package/dist/src/lib/local-tools/ui/find-element.js.map +1 -0
  89. package/dist/src/lib/local-tools/ui/hover-element.js +94 -0
  90. package/dist/src/lib/local-tools/ui/hover-element.js.map +1 -0
  91. package/dist/src/lib/local-tools/ui/index.js +3 -0
  92. package/dist/src/lib/local-tools/ui/index.js.map +1 -0
  93. package/dist/src/lib/local-tools/ui/manage-tab.js +65 -0
  94. package/dist/src/lib/local-tools/ui/manage-tab.js.map +1 -0
  95. package/dist/src/lib/local-tools/ui/navigate.js +35 -0
  96. package/dist/src/lib/local-tools/ui/navigate.js.map +1 -0
  97. package/dist/src/lib/local-tools/ui/page-discovery.js +32 -0
  98. package/dist/src/lib/local-tools/ui/page-discovery.js.map +1 -0
  99. package/dist/src/lib/local-tools/ui/playwright-mcp.js +217 -0
  100. package/dist/src/lib/local-tools/ui/playwright-mcp.js.map +1 -0
  101. package/dist/src/lib/local-tools/ui/screenshot.js +19 -0
  102. package/dist/src/lib/local-tools/ui/screenshot.js.map +1 -0
  103. package/dist/src/lib/local-tools/ui/search-interactive-elements.js +18 -0
  104. package/dist/src/lib/local-tools/ui/search-interactive-elements.js.map +1 -0
  105. package/dist/src/lib/local-tools/ui/selector-resolver.js +153 -0
  106. package/dist/src/lib/local-tools/ui/selector-resolver.js.map +1 -0
  107. package/dist/src/lib/local-tools/ui/snapshot-query.js +129 -0
  108. package/dist/src/lib/local-tools/ui/snapshot-query.js.map +1 -0
  109. package/dist/src/lib/local-tools/ui/type-text.js +40 -0
  110. package/dist/src/lib/local-tools/ui/type-text.js.map +1 -0
  111. package/dist/src/lib/local-tools/ui/types.js +2 -0
  112. package/dist/src/lib/local-tools/ui/types.js.map +1 -0
  113. package/dist/src/lib/local-tools/utility/finish-overall-test.js +12 -0
  114. package/dist/src/lib/local-tools/utility/finish-overall-test.js.map +1 -0
  115. package/dist/src/lib/local-tools/utility/index.js +2 -0
  116. package/dist/src/lib/local-tools/utility/index.js.map +1 -0
  117. package/dist/src/lib/prompts/builder.js +38 -0
  118. package/dist/src/lib/prompts/builder.js.map +1 -0
  119. package/dist/src/lib/prompts/index.js +7 -0
  120. package/dist/src/lib/prompts/index.js.map +1 -0
  121. package/dist/src/lib/prompts/templates.js +166 -0
  122. package/dist/src/lib/prompts/templates.js.map +1 -0
  123. package/dist/src/lib/session-manager.js +201 -0
  124. package/dist/src/lib/session-manager.js.map +1 -0
  125. package/dist/src/lib/socket.js +78 -6
  126. package/dist/src/lib/socket.js.map +1 -1
  127. package/dist/src/lib/testing-mode.js +33 -0
  128. package/dist/src/lib/testing-mode.js.map +1 -0
  129. package/dist/src/lib/tool-descriptions.js +59 -0
  130. package/dist/src/lib/tool-descriptions.js.map +1 -0
  131. package/dist/src/lib/tool-executor.js +537 -0
  132. package/dist/src/lib/tool-executor.js.map +1 -0
  133. package/dist/src/lib/tool-registry.js +803 -0
  134. package/dist/src/lib/tool-registry.js.map +1 -0
  135. package/dist/src/lib/tool-result-pruner.js +384 -0
  136. package/dist/src/lib/tool-result-pruner.js.map +1 -0
  137. package/dist/src/lib/tui/components/AskIntro.js +6 -0
  138. package/dist/src/lib/tui/components/AskIntro.js.map +1 -0
  139. package/dist/src/lib/tui/components/Banner.js +15 -0
  140. package/dist/src/lib/tui/components/Banner.js.map +1 -0
  141. package/dist/src/lib/tui/components/Divider.js +17 -0
  142. package/dist/src/lib/tui/components/Divider.js.map +1 -0
  143. package/dist/src/lib/tui/components/EventLine.js +110 -0
  144. package/dist/src/lib/tui/components/EventLine.js.map +1 -0
  145. package/dist/src/lib/tui/components/Header.js +15 -0
  146. package/dist/src/lib/tui/components/Header.js.map +1 -0
  147. package/dist/src/lib/tui/components/InputBox.js +9 -0
  148. package/dist/src/lib/tui/components/InputBox.js.map +1 -0
  149. package/dist/src/lib/tui/components/Mapping.js +8 -0
  150. package/dist/src/lib/tui/components/Mapping.js.map +1 -0
  151. package/dist/src/lib/tui/components/ProjectList.js +6 -0
  152. package/dist/src/lib/tui/components/ProjectList.js.map +1 -0
  153. package/dist/src/lib/tui/components/Spinner.js +20 -0
  154. package/dist/src/lib/tui/components/Spinner.js.map +1 -0
  155. package/dist/src/lib/tui/components/StatusBanner.js +12 -0
  156. package/dist/src/lib/tui/components/StatusBanner.js.map +1 -0
  157. package/dist/src/lib/tui/components/StatusBar.js +11 -0
  158. package/dist/src/lib/tui/components/StatusBar.js.map +1 -0
  159. package/dist/src/lib/tui/components/UserBubble.js +6 -0
  160. package/dist/src/lib/tui/components/UserBubble.js.map +1 -0
  161. package/dist/src/lib/tui/components/index.js +16 -0
  162. package/dist/src/lib/tui/components/index.js.map +1 -0
  163. package/dist/src/lib/tui/events.js +716 -76
  164. package/dist/src/lib/tui/events.js.map +1 -1
  165. package/dist/src/lib/tui/icons.js +14 -0
  166. package/dist/src/lib/tui/icons.js.map +1 -1
  167. package/dist/src/lib/tui/ink-print.js +41 -0
  168. package/dist/src/lib/tui/ink-print.js.map +1 -0
  169. package/dist/src/lib/tui/interactive-chat.js +345 -0
  170. package/dist/src/lib/tui/interactive-chat.js.map +1 -0
  171. package/dist/src/lib/tui/print.js +31 -26
  172. package/dist/src/lib/tui/print.js.map +1 -1
  173. package/dist/src/lib/tui/prompt.js +21 -18
  174. package/dist/src/lib/tui/prompt.js.map +1 -1
  175. package/dist/src/test-agent-flow.js +148 -0
  176. package/dist/src/test-agent-flow.js.map +1 -0
  177. package/dist/src/test-browser-session.js +152 -0
  178. package/dist/src/test-browser-session.js.map +1 -0
  179. package/dist/src/test-browser-snapshot.js +187 -0
  180. package/dist/src/test-browser-snapshot.js.map +1 -0
  181. package/dist/src/test-snapshot-detailed.js +219 -0
  182. package/dist/src/test-snapshot-detailed.js.map +1 -0
  183. package/dist/src/test-snapshot-simple.js +85 -0
  184. package/dist/src/test-snapshot-simple.js.map +1 -0
  185. package/dist/src/test-snapshot-tabs.js +110 -0
  186. package/dist/src/test-snapshot-tabs.js.map +1 -0
  187. package/package.json +20 -3
@@ -0,0 +1,15 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { stripAnsi } from "../utils.js";
4
+ export function Header({ title, subtitles = [] }) {
5
+ const lines = [title, ...subtitles];
6
+ const maxLen = Math.max(...lines.map((l) => stripAnsi(l).length));
7
+ const width = Math.min(Math.max(maxLen + 4, 28), 80);
8
+ const borderLine = "─".repeat(width - 2);
9
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "gray", children: ["\u250C", borderLine, "\u2510"] }), lines.map((line, i) => {
10
+ const pad = width - 2 - stripAnsi(line).length;
11
+ const padding = " ".repeat(Math.max(0, pad - 1));
12
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "gray", children: "\u2502" }), " ", line, padding, _jsx(Text, { color: "gray", children: "\u2502" })] }, i));
13
+ }), _jsxs(Text, { color: "gray", children: ["\u2514", borderLine, "\u2518"] })] }));
14
+ }
15
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/Header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAOtC,MAAM,UAAU,MAAM,CAAC,EAAC,KAAK,EAAE,SAAS,GAAG,EAAE,EAAc;IACzD,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAEzC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAG,UAAU,cAAS,EACvC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjD,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAS,EAC1B,GAAG,EACH,IAAI,EACJ,OAAO,EACR,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAS,KALlB,CAAC,CAML,CACR,CAAC;YACJ,CAAC,CAAC,EACF,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAG,UAAU,cAAS,IACpC,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { stripAnsi } from "../utils.js";
4
+ export function InputBox({ placeholder }) {
5
+ const width = Math.min(Math.max(stripAnsi(placeholder).length + 8, 32), 80);
6
+ const borderLine = "─".repeat(width - 2);
7
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "gray", children: ["\u250C", borderLine, "\u2510"] }), _jsxs(Text, { children: [" ", _jsx(Text, { color: "cyan", children: ">" }), " ", _jsx(Text, { dimColor: true, children: placeholder })] }), _jsxs(Text, { color: "gray", children: ["\u2514", borderLine, "\u2518"] })] }));
8
+ }
9
+ //# sourceMappingURL=InputBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputBox.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/InputBox.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAMtC,MAAM,UAAU,QAAQ,CAAC,EAAC,WAAW,EAAgB;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAEzC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAG,UAAU,cAAS,EACxC,MAAC,IAAI,eACF,IAAI,EACL,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,GAAG,GAAQ,OAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,WAAW,GAAQ,IAC9D,EACP,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAG,UAAU,cAAS,IACpC,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text } from "ink";
3
+ import { icons } from "../icons.js";
4
+ export function Mapping({ title, from, to }) {
5
+ const timestamp = new Date().toISOString().slice(11, 19);
6
+ return (_jsxs(Text, { children: [_jsxs(Text, { dimColor: true, children: ["[", timestamp, "]"] }), " ", icons.tunnel, " ", _jsx(Text, { color: "gray", children: title }), " ", from, " ", _jsx(Text, { color: "gray", children: "\u2192" }), " ", _jsx(Text, { color: "cyan", children: to })] }));
7
+ }
8
+ //# sourceMappingURL=Mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mapping.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/Mapping.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAQlC,MAAM,UAAU,OAAO,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAe;IACrD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEzD,OAAO,CACL,MAAC,IAAI,eACH,MAAC,IAAI,IAAC,QAAQ,wBAAG,SAAS,SAAS,OAAE,KAAK,CAAC,MAAM,OAAE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,KAAK,GAAQ,EAAC,GAAG,EACvF,IAAI,OAAE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAS,OAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,EAAE,GAAQ,IAC5D,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ export function ProjectList({ projects }) {
4
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Available Projects:" }), projects.map((project, idx) => (_jsxs(Text, { children: [idx + 1, ". ", project.name, " ", _jsxs(Text, { dimColor: true, children: ["(ID: ", project.id, ")"] })] }, project.id)))] }));
5
+ }
6
+ //# sourceMappingURL=ProjectList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectList.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/ProjectList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAY9B,MAAM,UAAU,WAAW,CAAC,EAAC,QAAQ,EAAmB;IACtD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,0CAA2B,EACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAC9B,MAAC,IAAI,eACF,GAAG,GAAG,CAAC,QAAI,OAAO,CAAC,IAAI,OAAE,MAAC,IAAI,IAAC,QAAQ,4BAAO,OAAO,CAAC,EAAE,SAAS,KADzD,OAAO,CAAC,EAAE,CAEd,CACR,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { Box, Text } from "ink";
4
+ const spinnerFrames = {
5
+ dots: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
6
+ line: ["-", "\\", "|", "/"],
7
+ dots2: ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"],
8
+ };
9
+ export function Spinner({ text, type = "dots" }) {
10
+ const [frame, setFrame] = useState(0);
11
+ const frames = spinnerFrames[type];
12
+ useEffect(() => {
13
+ const timer = setInterval(() => {
14
+ setFrame((prev) => (prev + 1) % frames.length);
15
+ }, 80);
16
+ return () => clearInterval(timer);
17
+ }, [frames.length]);
18
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: frames[frame] }), text && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(Text, { children: text })] }))] }));
19
+ }
20
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/Spinner.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAO9B,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACxD,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAC3B,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CAChD,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,EAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAe;IACzD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpB,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,MAAM,CAAC,KAAK,CAAC,GAAQ,EACxC,IAAI,IAAI,CACP,8BACE,KAAC,IAAI,oBAAS,EACd,KAAC,IAAI,cAAE,IAAI,GAAQ,IAClB,CACJ,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ export function StatusBanner({ message, tone = "info" }) {
4
+ const palette = {
5
+ info: "cyan",
6
+ success: "green",
7
+ warn: "yellow",
8
+ };
9
+ const color = palette[tone];
10
+ return (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: color, children: "\u25CF" }), " ", message] }) }));
11
+ }
12
+ //# sourceMappingURL=StatusBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBanner.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/StatusBanner.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAO9B,MAAM,UAAU,YAAY,CAAC,EAAC,OAAO,EAAE,IAAI,GAAG,MAAM,EAAoB;IACtE,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;KACN,CAAC;IAEX,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YACzC,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,uBAAU,OAAE,OAAO,IAChC,GACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { Box, Text } from "ink";
4
+ import { accentText } from "../style.js";
5
+ export function StatusBar({ segments }) {
6
+ return (_jsx(Box, { children: segments.map((seg, i) => (_jsxs(React.Fragment, { children: [i > 0 && _jsx(Text, { color: "gray", children: " \u00B7 " }), _jsx(Text, { color: "gray", children: seg.label }), _jsx(Text, { children: " " }), seg.accent ? (_jsx(Text, { children: accentText(seg.value) })) : (_jsx(Text, { children: seg.value }))] }, i))) }));
7
+ }
8
+ export function StatusSegments({ segments }) {
9
+ return _jsx(StatusBar, { segments: segments });
10
+ }
11
+ //# sourceMappingURL=StatusBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/StatusBar.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAYvC,MAAM,UAAU,SAAS,CAAC,EAAC,QAAQ,EAAiB;IAClD,OAAO,CACL,KAAC,GAAG,cACD,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,MAAC,KAAK,CAAC,QAAQ,eACZ,CAAC,GAAG,CAAC,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAW,EACvC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,GAAG,CAAC,KAAK,GAAQ,EACrC,KAAC,IAAI,oBAAS,EACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,cAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAQ,CACrC,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,cAAE,GAAG,CAAC,KAAK,GAAQ,CACzB,KARkB,CAAC,CASL,CAClB,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,cAAc,CAAC,EAAC,QAAQ,EAAsB;IAC5D,OAAO,KAAC,SAAS,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ export function UserBubble({ message }) {
4
+ return (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: "yellow", children: ">" }), " ", _jsx(Text, { color: "gray", children: message })] }) }));
5
+ }
6
+ //# sourceMappingURL=UserBubble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserBubble.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/UserBubble.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAM9B,MAAM,UAAU,UAAU,CAAC,EAAC,OAAO,EAAkB;IACnD,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YACzC,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,GAAG,GAAQ,OAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,OAAO,GAAQ,IAChE,GACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ // Core display components
2
+ export { Header } from "./Header.js";
3
+ export { Banner } from "./Banner.js";
4
+ export { Divider } from "./Divider.js";
5
+ export { StatusBanner } from "./StatusBanner.js";
6
+ export { UserBubble } from "./UserBubble.js";
7
+ export { InputBox } from "./InputBox.js";
8
+ export { Mapping } from "./Mapping.js";
9
+ export { AskIntro } from "./AskIntro.js";
10
+ // Interactive components
11
+ export { ProjectList } from "./ProjectList.js";
12
+ export { StatusBar, StatusSegments } from "./StatusBar.js";
13
+ export { Spinner } from "./Spinner.js";
14
+ // Event components
15
+ export { EventLine, formatEventLines } from "./EventLine.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/tui/components/index.tsx"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AACrC,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AACrC,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,yBAAyB;AACzB,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,mBAAmB;AACnB,OAAO,EAAC,SAAS,EAAE,gBAAgB,EAAC,MAAM,gBAAgB,CAAC"}