main.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package main
  2. import (
  3. "bufio"
  4. "encoding/json"
  5. "fmt"
  6. "os/exec"
  7. "time"
  8. )
  9. func main() {
  10. cmd := exec.Command("kiro-cli", "acp")
  11. cmd.Dir = "."
  12. stdin, _ := cmd.StdinPipe()
  13. stdout, _ := cmd.StdoutPipe()
  14. if err := cmd.Start(); err != nil {
  15. fmt.Printf("启动失败: %v\n", err)
  16. return
  17. }
  18. scanner := bufio.NewScanner(stdout)
  19. scanner.Buffer(make([]byte, 0, 1024*1024), 1024*1024)
  20. // 等待进程就绪
  21. time.Sleep(500 * time.Millisecond)
  22. // 发送 initialize
  23. req := map[string]any{
  24. "jsonrpc": "2.0",
  25. "id": 1,
  26. "method": "initialize",
  27. "params": map[string]any{
  28. "protocolVersion": 1,
  29. "clientCapabilities": map[string]any{},
  30. "clientInfo": map[string]any{"name": "test", "version": "1.0.0"},
  31. },
  32. }
  33. data, _ := json.Marshal(req)
  34. data = append(data, '\n')
  35. stdin.Write(data)
  36. fmt.Println("已发送 initialize,等待响应...")
  37. // 读取响应(10秒超时)
  38. done := make(chan string, 1)
  39. go func() {
  40. if scanner.Scan() {
  41. done <- scanner.Text()
  42. } else {
  43. done <- fmt.Sprintf("scan error: %v", scanner.Err())
  44. }
  45. }()
  46. select {
  47. case line := <-done:
  48. if len(line) > 200 {
  49. line = line[:200]
  50. }
  51. fmt.Printf("响应: %s\n", line)
  52. case <-time.After(10 * time.Second):
  53. fmt.Println("超时!")
  54. }
  55. stdin.Close()
  56. cmd.Process.Kill()
  57. }