@timetotest/cli 0.2.4 → 0.3.1

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 (114) hide show
  1. package/README.md +49 -40
  2. package/dist/bin/ttt.js +0 -2
  3. package/dist/bin/ttt.js.map +1 -1
  4. package/dist/package.json +8 -3
  5. package/dist/src/commands/chat/ChatApp.js +249 -67
  6. package/dist/src/commands/chat/ChatApp.js.map +1 -1
  7. package/dist/src/commands/chat/OnboardingApp.js +49 -0
  8. package/dist/src/commands/chat/OnboardingApp.js.map +1 -0
  9. package/dist/src/commands/chat/components/Banner.js +1 -1
  10. package/dist/src/commands/chat/components/Banner.js.map +1 -1
  11. package/dist/src/commands/chat/components/ChatInput.js +61 -22
  12. package/dist/src/commands/chat/components/ChatInput.js.map +1 -1
  13. package/dist/src/commands/chat/components/ChatMessage.js +102 -0
  14. package/dist/src/commands/chat/components/ChatMessage.js.map +1 -0
  15. package/dist/src/commands/chat/components/MessageBubble.js +1 -1
  16. package/dist/src/commands/chat/components/MessageBubble.js.map +1 -1
  17. package/dist/src/commands/chat/components/PermissionPrompt.js +92 -0
  18. package/dist/src/commands/chat/components/PermissionPrompt.js.map +1 -0
  19. package/dist/src/commands/chat/components/StatusIndicator.js +21 -5
  20. package/dist/src/commands/chat/components/StatusIndicator.js.map +1 -1
  21. package/dist/src/commands/chat/components/ToolCallDisplay.js +141 -0
  22. package/dist/src/commands/chat/components/ToolCallDisplay.js.map +1 -0
  23. package/dist/src/commands/chat-ink.js +328 -93
  24. package/dist/src/commands/chat-ink.js.map +1 -1
  25. package/dist/src/commands/login.js +5 -5
  26. package/dist/src/commands/login.js.map +1 -1
  27. package/dist/src/commands/test.js +14 -291
  28. package/dist/src/commands/test.js.map +1 -1
  29. package/dist/src/lib/__tests__/code-mode-integration.test.js +381 -0
  30. package/dist/src/lib/__tests__/code-mode-integration.test.js.map +1 -0
  31. package/dist/src/lib/__tests__/config-manager.test.js +81 -0
  32. package/dist/src/lib/__tests__/config-manager.test.js.map +1 -0
  33. package/dist/src/lib/__tests__/mode-persistence-integration.test.js +75 -0
  34. package/dist/src/lib/__tests__/mode-persistence-integration.test.js.map +1 -0
  35. package/dist/src/lib/__tests__/permission-flow-integration.test.js +145 -0
  36. package/dist/src/lib/__tests__/permission-flow-integration.test.js.map +1 -0
  37. package/dist/src/lib/__tests__/permissions.test.js +132 -0
  38. package/dist/src/lib/__tests__/permissions.test.js.map +1 -0
  39. package/dist/src/lib/agent-orchestrator.js +259 -5
  40. package/dist/src/lib/agent-orchestrator.js.map +1 -1
  41. package/dist/src/lib/config.js +40 -0
  42. package/dist/src/lib/config.js.map +1 -1
  43. package/dist/src/lib/context-compactor.js +310 -0
  44. package/dist/src/lib/context-compactor.js.map +1 -0
  45. package/dist/src/lib/http.js +8 -0
  46. package/dist/src/lib/http.js.map +1 -1
  47. package/dist/src/lib/local-tools/code/__tests__/grep-search.test.js +146 -0
  48. package/dist/src/lib/local-tools/code/__tests__/grep-search.test.js.map +1 -0
  49. package/dist/src/lib/local-tools/code/__tests__/list-directory.test.js +192 -0
  50. package/dist/src/lib/local-tools/code/__tests__/list-directory.test.js.map +1 -0
  51. package/dist/src/lib/local-tools/code/__tests__/read-file.test.js +169 -0
  52. package/dist/src/lib/local-tools/code/__tests__/read-file.test.js.map +1 -0
  53. package/dist/src/lib/local-tools/code/__tests__/run-command.test.js +101 -0
  54. package/dist/src/lib/local-tools/code/__tests__/run-command.test.js.map +1 -0
  55. package/dist/src/lib/local-tools/code/__tests__/search-files.test.js +191 -0
  56. package/dist/src/lib/local-tools/code/__tests__/search-files.test.js.map +1 -0
  57. package/dist/src/lib/local-tools/code/grep-search.js +404 -0
  58. package/dist/src/lib/local-tools/code/grep-search.js.map +1 -0
  59. package/dist/src/lib/local-tools/code/index.js +11 -0
  60. package/dist/src/lib/local-tools/code/index.js.map +1 -0
  61. package/dist/src/lib/local-tools/code/list-directory.js +276 -0
  62. package/dist/src/lib/local-tools/code/list-directory.js.map +1 -0
  63. package/dist/src/lib/local-tools/code/read-file.js +301 -0
  64. package/dist/src/lib/local-tools/code/read-file.js.map +1 -0
  65. package/dist/src/lib/local-tools/code/run-command.js +235 -0
  66. package/dist/src/lib/local-tools/code/run-command.js.map +1 -0
  67. package/dist/src/lib/local-tools/code/search-files.js +297 -0
  68. package/dist/src/lib/local-tools/code/search-files.js.map +1 -0
  69. package/dist/src/lib/local-tools/code/types.js +6 -0
  70. package/dist/src/lib/local-tools/code/types.js.map +1 -0
  71. package/dist/src/lib/permissions.js +94 -0
  72. package/dist/src/lib/permissions.js.map +1 -0
  73. package/dist/src/lib/prompts/builder.js +13 -10
  74. package/dist/src/lib/prompts/builder.js.map +1 -1
  75. package/dist/src/lib/prompts/templates.js +78 -0
  76. package/dist/src/lib/prompts/templates.js.map +1 -1
  77. package/dist/src/lib/session-manager.js.map +1 -1
  78. package/dist/src/lib/testing-mode.js +2 -2
  79. package/dist/src/lib/testing-mode.js.map +1 -1
  80. package/dist/src/lib/tool-executor.js +131 -2
  81. package/dist/src/lib/tool-executor.js.map +1 -1
  82. package/dist/src/lib/tool-registry.js +171 -3
  83. package/dist/src/lib/tool-registry.js.map +1 -1
  84. package/dist/src/lib/tool-result-pruner.js +4 -4
  85. package/dist/src/lib/tool-result-pruner.js.map +1 -1
  86. package/dist/src/lib/tui/ink/components/AppFrame.js +17 -0
  87. package/dist/src/lib/tui/ink/components/AppFrame.js.map +1 -0
  88. package/dist/src/lib/tui/ink/components/CommandPalette.js +24 -0
  89. package/dist/src/lib/tui/ink/components/CommandPalette.js.map +1 -0
  90. package/dist/src/lib/tui/ink/components/Pill.js +19 -0
  91. package/dist/src/lib/tui/ink/components/Pill.js.map +1 -0
  92. package/dist/src/lib/tui/ink/components/TimetoTestLogo.js +30 -0
  93. package/dist/src/lib/tui/ink/components/TimetoTestLogo.js.map +1 -0
  94. package/dist/src/lib/tui/ink/theme.js +13 -6
  95. package/dist/src/lib/tui/ink/theme.js.map +1 -1
  96. package/dist/src/lib/tui/interactive-chat.js +35 -35
  97. package/dist/src/lib/tui/interactive-chat.js.map +1 -1
  98. package/dist/src/lib/tui/print.js +18 -18
  99. package/dist/src/lib/tui/print.js.map +1 -1
  100. package/dist/src/lib/tui/prompt.js +3 -3
  101. package/dist/src/lib/tui/prompt.js.map +1 -1
  102. package/dist/src/lib/tui/status.js +1 -1
  103. package/dist/src/lib/tui/status.js.map +1 -1
  104. package/dist/src/lib/update.js +10 -10
  105. package/dist/src/lib/update.js.map +1 -1
  106. package/package.json +8 -3
  107. package/dist/src/commands/start-test.js +0 -180
  108. package/dist/src/commands/start-test.js.map +0 -1
  109. package/dist/src/commands/stream/StreamApp.js +0 -127
  110. package/dist/src/commands/stream/StreamApp.js.map +0 -1
  111. package/dist/src/commands/stream.js +0 -52
  112. package/dist/src/commands/stream.js.map +0 -1
  113. package/dist/src/commands/test/TestRunApp.js +0 -183
  114. package/dist/src/commands/test/TestRunApp.js.map +0 -1
package/README.md CHANGED
@@ -1,66 +1,75 @@
1
- # Time to Test CLI
1
+ # TimetoTest CLI
2
2
 
3
- Transform your testing workflow with an agent that understands your application.
3
+ **Ship Faster with AI Agents That Don't Flake**
4
4
 
5
- ## Why Time to Test CLI?
5
+ Give our agent a URL and a goal. It plans, executes, and self-heals end-to-end tests in an isolated environment. Built for developers and QA engineers who demand verifiable evidence, not black-box magic.
6
6
 
7
- - Test without writing code: describe scenarios in plain English.
8
- - Local-first: runs on your machine for fast, private feedback.
9
- - Intelligent discovery: finds pages, endpoints, and flows to expand coverage.
10
- - Clear results: human-readable reports that explain what passed and why failures happened.
7
+ ## Capabilities
11
8
 
12
- ## How it works
9
+ - **UI Testing** — Real browser automation with semantic DOM understanding
10
+ - **API Testing** — Validate endpoints, schemas, and response data
11
+ - **Code Analysis** — Local code analysis for bug finding and quality checks
12
+ - **End-to-End** — Complete user journey validation
13
+ - **Regression** — Catch breaking changes before production
13
14
 
14
- The CLI launches an AI testing agent that plans and executes tests based on your prompts and your app’s behavior.
15
-
16
- - Local mode (default): runs browser automation and API checks on your machine; ideal for localhost and PR previews.
17
- - Cloud mode: optional remote execution without localhost access; better for prod/staging where local access isn’t possible.
18
- - Post-run: you get an actionable summary and a report capturing steps, assertions, and failures.
19
-
20
- ## Quick start
15
+ ## Quick Start
21
16
 
22
17
  ```bash
23
18
  npm install -g @timetotest/cli
24
19
 
25
- # Start an interactive local session (default)
20
+ # Start an interactive session
26
21
  ttt
27
22
 
28
- # Run a cloud test with a prompt (automatically handles tunnels & project context)
29
- ttt test "Smoke test the login flow" --url http://localhost:3000
23
+ # Run a test with a prompt
24
+ ttt test "Verify the login flow works" --url http://localhost:3000
30
25
  ```
31
26
 
32
- ## What makes this different
27
+ ## How It Works
33
28
 
34
- - Natural language over boilerplate tests.
35
- - The agent explores and adapts to your app instead of running only predefined scripts.
36
- - Zero config to test localhost; minimal friction to get useful feedback.
29
+ 1. **Describe Your Test** Write your testing goal in plain English. No scripts, no complex selectors.
30
+ 2. **Smart Test Planning** The agent analyzes your application and builds a comprehensive test plan.
31
+ 3. **Automated Execution** Watch the agent execute in a real browser, interacting exactly like a human.
32
+ 4. **Actionable Results** — Get clear reports with screenshots, video logs, and step-by-step diagnostics.
37
33
 
38
- ## Privacy & security
34
+ ## Technical Excellence
39
35
 
40
- - Local mode keeps execution and data on your machine.
41
- - Authentication uses secure tokens; you control what the agent can access.
36
+ - **Semantic DOM Parsing** Understands context, not just pixels. No brittle visual-only testing.
37
+ - **LLM-Powered Planning** Decomposes complex flows into atomic, verifiable actions.
38
+ - **Self-Healing Tests** — Adapts to UI changes automatically. Stop maintaining broken selectors.
39
+ - **Isolated Execution** — Tests run in ephemeral sandboxes destroyed after every run.
40
+ - **Evidence-Based Reports** — Screenshots, video logs, and step-by-step diagnostics for every test.
42
41
 
43
- ## Requirements
42
+ ## Use Cases
44
43
 
45
- - Node.js 18+
46
- - macOS, Linux, or Windows
47
- - Chrome/Chromium available for UI testing
44
+ - **Regression Testing** — Automated suites that run on every deploy
45
+ - **E2E Flow Validation** — Validate complete user journeys without writing test scripts
46
+ - **API Contract Testing** Automatic schema validation and edge case handling
47
+ - **Sprint QA Automation** — Ship faster by automating QA within your sprint cycles
48
+ - **Bug Reproduction** — Turn vague bug reports into actionable test cases with evidence
48
49
 
49
- ## Getting help
50
+ ## Code Mode
50
51
 
51
- - Docs and updates: https://timetotest.tech
52
- - Issues and support: use the support links on the website
52
+ Analyze your local codebase for bugs, run linters, and execute tests — no GitHub integration required.
53
53
 
54
- ## Social callouts
54
+ ```bash
55
+ # Start in code mode
56
+ ttt --mode code
55
57
 
56
- If this helps you ship faster, please ⭐ star the repo and share it.
58
+ # Example prompts
59
+ > "Find potential null pointer issues in src/api/"
60
+ > "Run ESLint and fix the errors"
61
+ > "Find and run the auth tests"
62
+ ```
63
+
64
+ ## Requirements
57
65
 
58
- Tweet about it: https://twitter.com/intent/tweet?text=I%20just%20tried%20Time%20to%20Test%20CLI%20%E2%80%94%20AI-powered%20tests%20from%20natural%20language.%20Zero%20config%20for%20localhost!&url=https://timetotest.tech
66
+ - Node.js 18+
67
+ - macOS, Linux, or Windows
68
+ - Chrome/Chromium for UI testing
59
69
 
60
- ## Who it’s for
70
+ ## Links
61
71
 
62
- Built for:
72
+ - Website: https://timetotest.tech
73
+ - Docs: https://timetotest.tech/docs
63
74
 
64
- - Developers who want smoke tests without writing test code
65
- - Startup teams needing fast feedback on PRs
66
- - QA engineers exploring flows rapidly in staging
75
+ No credit card required Free tier forever
package/dist/bin/ttt.js CHANGED
@@ -5,7 +5,6 @@ import { login } from "../src/commands/login.js";
5
5
  import { test } from "../src/commands/test.js";
6
6
  import { status } from "../src/commands/status.js";
7
7
  import { restart } from "../src/commands/restart.js";
8
- import { stream } from "../src/commands/stream.js";
9
8
  import { report } from "../src/commands/report.js";
10
9
  import { share } from "../src/commands/share.js";
11
10
  import { applyStyledHelpRecursively } from "../src/lib/help.js";
@@ -18,7 +17,6 @@ program.addCommand(login);
18
17
  program.addCommand(test);
19
18
  program.addCommand(status);
20
19
  program.addCommand(restart);
21
- program.addCommand(stream);
22
20
  program.addCommand(report);
23
21
  program.addCommand(share);
24
22
  program.addCommand(chat);
@@ -1 +1 @@
1
- {"version":3,"file":"ttt.js","sourceRoot":"","sources":["../../bin/ttt.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAM,IAAI,EAAE,MAAM,EAAC,CAAC;AAC9D,OAAO,EAAC,KAAK,EAAC,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAC,IAAI,EAAC,MAAM,yBAAyB,CAAC;AAC7C,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,0BAA0B,CAAC;AAG/C,OAAO,EAAC,0BAA0B,EAAC,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAC,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;AAC1D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAExE,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC5B,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAE1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAEzB,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAE3C,MAAM,0BAA0B,EAAE,CAAC;AACnC,gEAAgE;AAChE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AACD,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"ttt.js","sourceRoot":"","sources":["../../bin/ttt.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAM,IAAI,EAAE,MAAM,EAAC,CAAC;AAC9D,OAAO,EAAC,KAAK,EAAC,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAC,IAAI,EAAC,MAAM,yBAAyB,CAAC;AAC7C,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAC,0BAA0B,EAAC,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAC,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;AAC1D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAExE,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC5B,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAEzB,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAE3C,MAAM,0BAA0B,EAAE,CAAC;AACnC,gEAAgE;AAChE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AACD,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timetotest/cli",
3
- "version": "0.2.4",
3
+ "version": "0.3.1",
4
4
  "description": "Time to Test CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -23,7 +23,9 @@
23
23
  "publish": "node scripts/publish.mjs",
24
24
  "publish:dev": "node scripts/publish.mjs --channel dev",
25
25
  "publish:prod": "node scripts/publish.mjs --channel prod",
26
- "upgrade-and-push": "npm run version:patch && git push && git push --tags && npm run publish"
26
+ "upgrade-and-push": "npm run version:patch && git push && git push --tags && npm run publish",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest"
27
29
  },
28
30
  "publishConfig": {
29
31
  "access": "public"
@@ -44,6 +46,7 @@
44
46
  "fs-extra": "^11.2.0",
45
47
  "fuse.js": "^7.1.0",
46
48
  "ink": "^6.3.1",
49
+ "ink-select-input": "^6.2.0",
47
50
  "ink-spinner": "^5.0.0",
48
51
  "ink-text-input": "^6.0.0",
49
52
  "inquirer": "^9.2.12",
@@ -54,6 +57,7 @@
54
57
  "react": "^19.2.0",
55
58
  "readline": "^1.3.0",
56
59
  "socket.io-client": "^4.7.5",
60
+ "tiktoken": "^1.0.17",
57
61
  "yaml": "^2.8.1"
58
62
  },
59
63
  "devDependencies": {
@@ -62,6 +66,7 @@
62
66
  "@types/inquirer": "^9.0.9",
63
67
  "@types/node": "^20.11.19",
64
68
  "@types/react": "^19.2.2",
65
- "typescript": "^5.5.4"
69
+ "typescript": "^5.5.4",
70
+ "vitest": "^1.6.0"
66
71
  }
67
72
  }
@@ -1,28 +1,139 @@
1
- import React, { useState, useEffect } from "react";
2
- import { Box, Text, useApp, Static } from "ink";
1
+ import React, { useEffect, useMemo, useRef, useState } from "react";
2
+ import { Box, Text, useApp, useInput, useStdout } from "ink";
3
3
  import os from "node:os";
4
- import { Banner } from "./components/Banner.js";
5
4
  import { ChatInput } from "./components/ChatInput.js";
6
- import { MessageBubble } from "./components/MessageBubble.js";
7
- import { AssistantResponse } from "./components/AssistantResponse.js";
8
5
  import { StatusIndicator } from "./components/StatusIndicator.js";
9
- export const ChatApp = ({ user, context, slashCommands, onUserMessage, onSlashCommand, onExit, onCancel, initialMessages = [], }) => {
6
+ import { PermissionPrompt } from "./components/PermissionPrompt.js";
7
+ import { ToolCallDisplay } from "./components/ToolCallDisplay.js";
8
+ import { TESTING_MODES } from "../../lib/testing-mode.js";
9
+ import { TimetoTestLogo } from "../../lib/tui/ink/components/TimetoTestLogo.js";
10
+ import { ChatMessage } from "./components/ChatMessage.js";
11
+ import { CommandPalette, } from "../../lib/tui/ink/components/CommandPalette.js";
12
+ export const ChatApp = ({ user, context, slashCommands, onUserMessage, onSlashCommand, onSetTestingMode, onExit, onCancel, initialMessages = [], initialInput, }) => {
10
13
  // Single source of truth: `slashCommands` comes from `chat-ink.ts`.
11
14
  const allSlashCommands = slashCommands;
12
15
  const { exit } = useApp();
13
- // Initialize messages with banner if empty
14
- const [messages, setMessages] = useState(() => {
15
- if (initialMessages.length > 0)
16
- return initialMessages;
17
- return [{
18
- id: "banner",
19
- type: "banner",
20
- content: "banner"
21
- }];
22
- });
16
+ const { stdout } = useStdout();
17
+ const [messages, setMessages] = useState(() => initialMessages.length > 0 ? initialMessages : []);
23
18
  const [status, setStatus] = useState(null);
24
19
  const [inputDisabled, setInputDisabled] = useState(false);
25
20
  const [chatContext, setChatContext] = useState(context);
21
+ const [inputValue, setInputValue] = useState(initialInput ?? "");
22
+ const inputHistoryRef = useRef([]);
23
+ const historyIndexRef = useRef(-1);
24
+ const [showSystem, setShowSystem] = useState(true);
25
+ const [paletteOpen, setPaletteOpen] = useState(false);
26
+ const [paletteQuery, setPaletteQuery] = useState("");
27
+ const [paletteIndex, setPaletteIndex] = useState(0);
28
+ // Permission prompt state
29
+ const [permissionRequest, setPermissionRequest] = useState(null);
30
+ const permissionResolverRef = useRef(null);
31
+ const paletteItems = useMemo(() => {
32
+ const base = [
33
+ { id: "help", title: "Help", hint: "/help" },
34
+ { id: "progress", title: "Progress", hint: "/progress" },
35
+ { id: "session", title: "Session info", hint: "/session" },
36
+ { id: "bugs", title: "List Bugs", hint: "/bugs" },
37
+ { id: "report", title: "Generate Report", hint: "/report" },
38
+ { id: "screenshot", title: "Take Screenshot", hint: "/screenshot" },
39
+ { id: "scan", title: "Scan Page", hint: "/scan" },
40
+ { id: "where", title: "Where am I?", hint: "/where" },
41
+ {
42
+ id: "toggle_details",
43
+ title: showSystem ? "Hide details" : "Show details",
44
+ hint: "toggle tool/system messages",
45
+ },
46
+ { id: "clear", title: "Clear transcript", hint: "ctrl+l" },
47
+ { id: "exit_session", title: "Exit", hint: "ctrl+q" },
48
+ ];
49
+ const q = paletteQuery.trim().toLowerCase();
50
+ if (!q)
51
+ return base;
52
+ return base.filter((i) => i.title.toLowerCase().includes(q) ||
53
+ (i.hint || "").toLowerCase().includes(q));
54
+ }, [paletteQuery, showSystem]);
55
+ const runPaletteAction = async (id) => {
56
+ if (id === "help")
57
+ await onSlashCommand("help", []);
58
+ else if (id === "progress")
59
+ await onSlashCommand("progress", []);
60
+ else if (id === "bugs")
61
+ await onSlashCommand("bugs", []);
62
+ else if (id === "report")
63
+ await onSlashCommand("report", []);
64
+ else if (id === "screenshot")
65
+ await onSlashCommand("screenshot", []);
66
+ else if (id === "scan")
67
+ await onSlashCommand("scan", []);
68
+ else if (id === "where")
69
+ await onSlashCommand("where", []);
70
+ else if (id === "session")
71
+ await onSlashCommand("session", []);
72
+ else if (id === "toggle_details")
73
+ setShowSystem((v) => !v);
74
+ else if (id === "clear")
75
+ setMessages([]);
76
+ else if (id === "exit_session") {
77
+ exit();
78
+ onExit();
79
+ }
80
+ };
81
+ const toggleTestingMode = () => {
82
+ const current = chatContext.testingMode;
83
+ const idx = TESTING_MODES.indexOf(current);
84
+ const next = TESTING_MODES[(idx + 1) % TESTING_MODES.length] ?? "ui";
85
+ setChatContext((prev) => ({ ...prev, testingMode: next }));
86
+ onSetTestingMode?.(next);
87
+ };
88
+ useInput((input, key) => {
89
+ // Global keybinds (avoid fighting with input)
90
+ if (key.ctrl && input === "l") {
91
+ setMessages([]);
92
+ return;
93
+ }
94
+ if (key.ctrl && input === "q") {
95
+ exit();
96
+ onExit();
97
+ return;
98
+ }
99
+ if (key.ctrl && input === "k") {
100
+ setPaletteOpen(true);
101
+ setPaletteQuery("");
102
+ setPaletteIndex(0);
103
+ return;
104
+ }
105
+ if (!paletteOpen)
106
+ return;
107
+ // Palette input handling
108
+ if (key.escape) {
109
+ setPaletteOpen(false);
110
+ return;
111
+ }
112
+ if (key.upArrow) {
113
+ setPaletteIndex((i) => Math.max(0, i - 1));
114
+ return;
115
+ }
116
+ if (key.downArrow) {
117
+ setPaletteIndex((i) => Math.min(paletteItems.length - 1, i + 1));
118
+ return;
119
+ }
120
+ if (key.backspace || key.delete) {
121
+ setPaletteQuery((q) => q.slice(0, -1));
122
+ return;
123
+ }
124
+ if (key.return) {
125
+ const selected = paletteItems[paletteIndex];
126
+ if (selected) {
127
+ setPaletteOpen(false);
128
+ void runPaletteAction(selected.id);
129
+ }
130
+ return;
131
+ }
132
+ if (input && !key.ctrl && !key.meta) {
133
+ setPaletteQuery((q) => q + input);
134
+ setPaletteIndex(0);
135
+ }
136
+ });
26
137
  // Public methods to update UI from parent
27
138
  useEffect(() => {
28
139
  // Store reference for external updates
@@ -57,6 +168,42 @@ export const ChatApp = ({ user, context, slashCommands, onUserMessage, onSlashCo
57
168
  }
58
169
  catch { }
59
170
  },
171
+ // Update the last tool message with result
172
+ updateLastToolMessage: (update) => {
173
+ try {
174
+ setMessages((prev) => {
175
+ // Find the last tool message matching this tool (iterate backwards)
176
+ let lastIndex = -1;
177
+ for (let i = prev.length - 1; i >= 0; i--) {
178
+ if (prev[i].metadata?.isTool &&
179
+ prev[i].metadata?.toolName === update.toolName) {
180
+ lastIndex = i;
181
+ break;
182
+ }
183
+ }
184
+ if (lastIndex === -1)
185
+ return prev;
186
+ const updated = [...prev];
187
+ updated[lastIndex] = {
188
+ ...updated[lastIndex],
189
+ metadata: {
190
+ ...updated[lastIndex].metadata,
191
+ toolResult: update.result,
192
+ isLoading: update.isLoading,
193
+ },
194
+ };
195
+ return updated;
196
+ });
197
+ }
198
+ catch { }
199
+ },
200
+ // Permission prompt handler - returns a promise that resolves with user's response
201
+ promptPermission: (request) => {
202
+ return new Promise((resolve) => {
203
+ permissionResolverRef.current = resolve;
204
+ setPermissionRequest(request);
205
+ });
206
+ },
60
207
  };
61
208
  return () => {
62
209
  delete globalThis.__chatAppInterface;
@@ -72,31 +219,32 @@ export const ChatApp = ({ user, context, slashCommands, onUserMessage, onSlashCo
72
219
  // setShowIntro(false);
73
220
  // }
74
221
  // Check for exit commands
75
- if (normalized === "exit" || normalized === "quit") {
222
+ if (normalized === "exit") {
76
223
  exit();
77
224
  onExit();
78
225
  return;
79
226
  }
80
227
  // Check for slash commands
81
228
  if (trimmed.startsWith("/")) {
82
- const [cmd, ...args] = trimmed.slice(1).split(/\s+/);
229
+ const parts = trimmed.slice(1).split(/\s+/);
230
+ const cmd = parts[0];
231
+ const args = parts.slice(1);
232
+ if (!cmd)
233
+ return; // Ignore lone "/"
83
234
  // Handle client-side commands
84
235
  if (cmd === "clear") {
85
- setMessages([
86
- {
87
- id: "banner",
88
- type: "banner",
89
- content: "banner",
90
- },
91
- ]);
236
+ setMessages([]);
92
237
  return;
93
238
  }
94
239
  if (cmd === "config") {
95
- setMessages(prev => [...prev, {
240
+ setMessages((prev) => [
241
+ ...prev,
242
+ {
96
243
  id: Date.now().toString(),
97
244
  type: "system",
98
- content: `Current Configuration:\nUser: ${user}\nMode: ${chatContext.mode}\nSession ID: ${chatContext.sessionId}`
99
- }]);
245
+ content: `Current Configuration:\nUser: ${user}\nMode: ${chatContext.mode}\nSession ID: ${chatContext.sessionId}`,
246
+ },
247
+ ]);
100
248
  return;
101
249
  }
102
250
  const result = await onSlashCommand(cmd, args);
@@ -113,12 +261,21 @@ export const ChatApp = ({ user, context, slashCommands, onUserMessage, onSlashCo
113
261
  content: trimmed,
114
262
  };
115
263
  setMessages((prev) => [...prev, userMessage]);
264
+ inputHistoryRef.current.push(trimmed);
265
+ historyIndexRef.current = inputHistoryRef.current.length;
116
266
  await onUserMessage(trimmed);
117
267
  };
118
268
  const handleCancel = () => {
119
269
  setInputDisabled(false); // Re-enable input after cancellation
120
270
  onCancel?.();
121
271
  };
272
+ const handlePermissionResponse = (response) => {
273
+ if (permissionResolverRef.current) {
274
+ permissionResolverRef.current(response);
275
+ permissionResolverRef.current = null;
276
+ }
277
+ setPermissionRequest(null);
278
+ };
122
279
  const getSuggestions = (input) => {
123
280
  if (!input.startsWith("/"))
124
281
  return [];
@@ -136,44 +293,69 @@ export const ChatApp = ({ user, context, slashCommands, onUserMessage, onSlashCo
136
293
  const displayPath = workspacePath.startsWith(homeDir)
137
294
  ? `~${workspacePath.slice(homeDir.length)}`
138
295
  : workspacePath;
139
- const statusLine = `path: ${displayPath} · mode: ${chatContext.mode}`;
140
- const footerLines = ["Press ESC to stop"];
141
- return (React.createElement(Box, { flexDirection: "column" },
142
- React.createElement(Static, { items: messages }, (message, index) => {
143
- if (message.type === "user") {
144
- return (React.createElement(Box, { key: message.id },
145
- React.createElement(MessageBubble, { message: message.content })));
146
- }
147
- else if (message.type === "assistant") {
148
- return (React.createElement(Box, { key: message.id, paddingX: 1 },
149
- React.createElement(AssistantResponse, { content: message.content, isError: message.isError })));
150
- }
151
- else if (message.type === "system") {
152
- return (React.createElement(Box, { key: message.id, marginTop: index === 0 ? 0 : 1, paddingX: 1 },
153
- React.createElement(Text, { color: "gray" }, message.content)));
154
- }
155
- else if (message.type === "banner") {
156
- return (React.createElement(Box, { key: message.id, paddingX: 0, marginBottom: 1 },
157
- React.createElement(Box, { flexDirection: "column" },
158
- React.createElement(Banner, { user: user, mode: chatContext.mode, path: displayPath }),
159
- React.createElement(Box, { marginTop: 1, flexDirection: "column" },
160
- React.createElement(Text, { color: "gray" }, "To get started, describe a task or try one of these commands:"),
161
- React.createElement(Box, { marginTop: 1, flexDirection: "column" }, allSlashCommands
162
- .filter((cmd) => ["/help", "/progress", "/session", "/clear", "/stop"].includes(cmd.value))
163
- .map(cmd => (React.createElement(Text, { key: cmd.value },
164
- React.createElement(Text, { color: "white", bold: true }, cmd.label),
165
- React.createElement(Text, { color: "gray" },
166
- " \u2013 ",
167
- cmd.description)))))))));
168
- }
169
- return React.createElement(Box, { key: message.id });
170
- }),
171
- React.createElement(Box, { flexDirection: "column" },
172
- React.createElement(Box, { height: 1 }, status ? (React.createElement(StatusIndicator, { message: status.text, type: status.type })) : (React.createElement(Text, null, " "))),
173
- React.createElement(Box, { height: 1, paddingX: 1 },
174
- React.createElement(Text, { color: "gray", dimColor: true }, "100% context left")),
175
- React.createElement(Box, null,
176
- React.createElement(ChatInput, { placeholder: "Ask anything or use /help for commands", onSubmit: handleSubmit, onCancel: handleCancel, getSuggestions: getSuggestions, disabled: inputDisabled })),
177
- React.createElement(Box, { height: 1, paddingX: 1 }, footerLines && footerLines.length > 0 ? (React.createElement(Text, { color: "gray", dimColor: true }, footerLines[0])) : (React.createElement(Text, null, " "))))));
296
+ const subtitleLines = useMemo(() => {
297
+ const who = user && user !== "Unknown" ? user : "unknown (check auth profile)";
298
+ return [];
299
+ }, [
300
+ user,
301
+ chatContext.mode,
302
+ chatContext.testingMode,
303
+ chatContext.sessionId,
304
+ displayPath,
305
+ ]);
306
+ const footer = status ? (React.createElement(Box, { flexDirection: "column" },
307
+ React.createElement(StatusIndicator, { message: status.text, type: status.type }))) : undefined;
308
+ return (React.createElement(Box, { flexDirection: "column", width: "100%", height: "100%", overflow: "hidden" },
309
+ paletteOpen ? (React.createElement(CommandPalette, { query: paletteQuery, items: paletteItems, selectedIndex: paletteIndex })) : null,
310
+ React.createElement(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden" },
311
+ React.createElement(TimetoTestLogo, null),
312
+ messages.map((message) => {
313
+ if (!showSystem && message.type === "system") {
314
+ return null;
315
+ }
316
+ // Render tool calls with ToolCallDisplay
317
+ if (message.metadata?.isTool) {
318
+ return (React.createElement(ToolCallDisplay, { key: message.id, toolName: message.metadata.toolName || "unknown", args: message.metadata.toolArgs, result: message.metadata.toolResult, isLoading: message.metadata.isLoading }));
319
+ }
320
+ // Render reasoning with italic/dimmed style
321
+ if (message.metadata?.isReasoning) {
322
+ return (React.createElement(Box, { key: message.id, paddingLeft: 2, marginBottom: 1 },
323
+ React.createElement(Text, { color: "yellow", dimColor: true, italic: true }, message.content)));
324
+ }
325
+ return (React.createElement(ChatMessage, { key: message.id, type: message.type, content: message.content, isError: message.isError }));
326
+ })),
327
+ status && (React.createElement(Box, { paddingY: 1, overflow: "hidden" },
328
+ React.createElement(StatusIndicator, { message: status.text, type: status.type }))),
329
+ permissionRequest && (React.createElement(PermissionPrompt, { request: permissionRequest, onResponse: handlePermissionResponse })),
330
+ React.createElement(ChatInput, { placeholder: "Ask anything or use /help for commands", value: inputValue, onChange: setInputValue, onSubmit: handleSubmit, onCancel: handleCancel, getSuggestions: getSuggestions, disabled: inputDisabled || paletteOpen, testingMode: chatContext.testingMode, directory: displayPath, hintsRight: paletteOpen ? ("esc close") : (React.createElement(Text, null,
331
+ React.createElement(Text, { bold: true, color: "white" }, "tab"),
332
+ " ",
333
+ React.createElement(Text, { dimColor: true }, "mode"),
334
+ " \u2022 ",
335
+ React.createElement(Text, { bold: true, color: "white" }, "ctrl+k"),
336
+ " ",
337
+ React.createElement(Text, { dimColor: true }, "commands"))), onToggleMode: toggleTestingMode, onHistoryUp: () => {
338
+ const hist = inputHistoryRef.current;
339
+ if (hist.length === 0)
340
+ return;
341
+ const next = Math.max(0, (historyIndexRef.current < 0
342
+ ? hist.length
343
+ : historyIndexRef.current) - 1);
344
+ historyIndexRef.current = next;
345
+ setInputValue(hist[next] || "");
346
+ }, onHistoryDown: () => {
347
+ const hist = inputHistoryRef.current;
348
+ if (hist.length === 0)
349
+ return;
350
+ const next = Math.min(hist.length, (historyIndexRef.current < 0
351
+ ? hist.length
352
+ : historyIndexRef.current) + 1);
353
+ historyIndexRef.current = next;
354
+ if (next >= hist.length) {
355
+ setInputValue("");
356
+ return;
357
+ }
358
+ setInputValue(hist[next] || "");
359
+ } })));
178
360
  };
179
361
  //# sourceMappingURL=ChatApp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatApp.js","sourceRoot":"","sources":["../../../../src/commands/chat/ChatApp.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatApp.js","sourceRoot":"","sources":["../../../../src/commands/chat/ChatApp.tsx"],"names":[],"mappings":"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"}