@yuaone/cli 0.1.3 → 0.3.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 (115) hide show
  1. package/dist/cli.js +29 -4
  2. package/dist/cli.js.map +1 -1
  3. package/dist/tui/App.d.ts +33 -0
  4. package/dist/tui/App.d.ts.map +1 -0
  5. package/dist/tui/App.js +244 -0
  6. package/dist/tui/App.js.map +1 -0
  7. package/dist/tui/agent-bridge.d.ts +56 -0
  8. package/dist/tui/agent-bridge.d.ts.map +1 -0
  9. package/dist/tui/agent-bridge.js +138 -0
  10. package/dist/tui/agent-bridge.js.map +1 -0
  11. package/dist/tui/components/BashOutput.d.ts +12 -0
  12. package/dist/tui/components/BashOutput.d.ts.map +1 -0
  13. package/dist/tui/components/BashOutput.js +19 -0
  14. package/dist/tui/components/BashOutput.js.map +1 -0
  15. package/dist/tui/components/CollapsibleSection.d.ts +14 -0
  16. package/dist/tui/components/CollapsibleSection.d.ts.map +1 -0
  17. package/dist/tui/components/CollapsibleSection.js +7 -0
  18. package/dist/tui/components/CollapsibleSection.js.map +1 -0
  19. package/dist/tui/components/DiffView.d.ts +11 -0
  20. package/dist/tui/components/DiffView.d.ts.map +1 -0
  21. package/dist/tui/components/DiffView.js +20 -0
  22. package/dist/tui/components/DiffView.js.map +1 -0
  23. package/dist/tui/components/FooterBar.d.ts +11 -0
  24. package/dist/tui/components/FooterBar.d.ts.map +1 -0
  25. package/dist/tui/components/FooterBar.js +14 -0
  26. package/dist/tui/components/FooterBar.js.map +1 -0
  27. package/dist/tui/components/InputBox.d.ts +24 -0
  28. package/dist/tui/components/InputBox.d.ts.map +1 -0
  29. package/dist/tui/components/InputBox.js +124 -0
  30. package/dist/tui/components/InputBox.js.map +1 -0
  31. package/dist/tui/components/MarkdownRenderer.d.ts +11 -0
  32. package/dist/tui/components/MarkdownRenderer.d.ts.map +1 -0
  33. package/dist/tui/components/MarkdownRenderer.js +118 -0
  34. package/dist/tui/components/MarkdownRenderer.js.map +1 -0
  35. package/dist/tui/components/MessageBubble.d.ts +16 -0
  36. package/dist/tui/components/MessageBubble.d.ts.map +1 -0
  37. package/dist/tui/components/MessageBubble.js +38 -0
  38. package/dist/tui/components/MessageBubble.js.map +1 -0
  39. package/dist/tui/components/MessageList.d.ts +15 -0
  40. package/dist/tui/components/MessageList.d.ts.map +1 -0
  41. package/dist/tui/components/MessageList.js +31 -0
  42. package/dist/tui/components/MessageList.js.map +1 -0
  43. package/dist/tui/components/SlashMenu.d.ts +14 -0
  44. package/dist/tui/components/SlashMenu.d.ts.map +1 -0
  45. package/dist/tui/components/SlashMenu.js +21 -0
  46. package/dist/tui/components/SlashMenu.js.map +1 -0
  47. package/dist/tui/components/Spinner.d.ts +9 -0
  48. package/dist/tui/components/Spinner.d.ts.map +1 -0
  49. package/dist/tui/components/Spinner.js +19 -0
  50. package/dist/tui/components/Spinner.js.map +1 -0
  51. package/dist/tui/components/StatusBar.d.ts +13 -0
  52. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  53. package/dist/tui/components/StatusBar.js +15 -0
  54. package/dist/tui/components/StatusBar.js.map +1 -0
  55. package/dist/tui/components/ThinkingDots.d.ts +9 -0
  56. package/dist/tui/components/ThinkingDots.d.ts.map +1 -0
  57. package/dist/tui/components/ThinkingDots.js +19 -0
  58. package/dist/tui/components/ThinkingDots.js.map +1 -0
  59. package/dist/tui/components/ToolCallTree.d.ts +12 -0
  60. package/dist/tui/components/ToolCallTree.d.ts.map +1 -0
  61. package/dist/tui/components/ToolCallTree.js +45 -0
  62. package/dist/tui/components/ToolCallTree.js.map +1 -0
  63. package/dist/tui/hooks/useAgentStream.d.ts +27 -0
  64. package/dist/tui/hooks/useAgentStream.d.ts.map +1 -0
  65. package/dist/tui/hooks/useAgentStream.js +212 -0
  66. package/dist/tui/hooks/useAgentStream.js.map +1 -0
  67. package/dist/tui/hooks/useInputHistory.d.ts +17 -0
  68. package/dist/tui/hooks/useInputHistory.d.ts.map +1 -0
  69. package/dist/tui/hooks/useInputHistory.js +49 -0
  70. package/dist/tui/hooks/useInputHistory.js.map +1 -0
  71. package/dist/tui/hooks/useKeyHandler.d.ts +12 -0
  72. package/dist/tui/hooks/useKeyHandler.d.ts.map +1 -0
  73. package/dist/tui/hooks/useKeyHandler.js +20 -0
  74. package/dist/tui/hooks/useKeyHandler.js.map +1 -0
  75. package/dist/tui/hooks/useScrollPosition.d.ts +27 -0
  76. package/dist/tui/hooks/useScrollPosition.d.ts.map +1 -0
  77. package/dist/tui/hooks/useScrollPosition.js +54 -0
  78. package/dist/tui/hooks/useScrollPosition.js.map +1 -0
  79. package/dist/tui/hooks/useSlashCommands.d.ts +22 -0
  80. package/dist/tui/hooks/useSlashCommands.d.ts.map +1 -0
  81. package/dist/tui/hooks/useSlashCommands.js +61 -0
  82. package/dist/tui/hooks/useSlashCommands.js.map +1 -0
  83. package/dist/tui/hooks/useTerminalSize.d.ts +11 -0
  84. package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -0
  85. package/dist/tui/hooks/useTerminalSize.js +25 -0
  86. package/dist/tui/hooks/useTerminalSize.js.map +1 -0
  87. package/dist/tui/lib/ansi.d.ts +36 -0
  88. package/dist/tui/lib/ansi.d.ts.map +1 -0
  89. package/dist/tui/lib/ansi.js +40 -0
  90. package/dist/tui/lib/ansi.js.map +1 -0
  91. package/dist/tui/lib/box-drawing.d.ts +12 -0
  92. package/dist/tui/lib/box-drawing.d.ts.map +1 -0
  93. package/dist/tui/lib/box-drawing.js +30 -0
  94. package/dist/tui/lib/box-drawing.js.map +1 -0
  95. package/dist/tui/lib/diff-formatter.d.ts +9 -0
  96. package/dist/tui/lib/diff-formatter.d.ts.map +1 -0
  97. package/dist/tui/lib/diff-formatter.js +65 -0
  98. package/dist/tui/lib/diff-formatter.js.map +1 -0
  99. package/dist/tui/lib/tokens.d.ts +56 -0
  100. package/dist/tui/lib/tokens.d.ts.map +1 -0
  101. package/dist/tui/lib/tokens.js +61 -0
  102. package/dist/tui/lib/tokens.js.map +1 -0
  103. package/dist/tui/lib/truncate.d.ts +11 -0
  104. package/dist/tui/lib/truncate.d.ts.map +1 -0
  105. package/dist/tui/lib/truncate.js +69 -0
  106. package/dist/tui/lib/truncate.js.map +1 -0
  107. package/dist/tui/lib/update-checker.d.ts +21 -0
  108. package/dist/tui/lib/update-checker.d.ts.map +1 -0
  109. package/dist/tui/lib/update-checker.js +133 -0
  110. package/dist/tui/lib/update-checker.js.map +1 -0
  111. package/dist/tui/types.d.ts +77 -0
  112. package/dist/tui/types.d.ts.map +1 -0
  113. package/dist/tui/types.js +5 -0
  114. package/dist/tui/types.js.map +1 -0
  115. package/package.json +21 -11
package/dist/cli.js CHANGED
@@ -25,9 +25,10 @@ program
25
25
  .name("yuan")
26
26
  .description("YUAN — Autonomous Coding Agent")
27
27
  .version("0.1.0");
28
- // ─── Default: Interactive mode ───
28
+ // ─── Default: Interactive mode (TUI) ───
29
29
  program
30
- .action(async () => {
30
+ .option("--classic", "Use classic readline REPL instead of full-screen TUI")
31
+ .action(async (options) => {
31
32
  const configManager = new ConfigManager();
32
33
  const sessionManager = new SessionManager();
33
34
  if (!configManager.isConfigured()) {
@@ -36,8 +37,32 @@ program
36
37
  await configManager.interactiveSetup();
37
38
  console.log();
38
39
  }
39
- const session = new InteractiveSession(renderer, sessionManager, configManager);
40
- await session.start();
40
+ // Use classic mode if requested or not a TTY
41
+ if (options.classic || !process.stdout.isTTY) {
42
+ const session = new InteractiveSession(renderer, sessionManager, configManager);
43
+ await session.start();
44
+ return;
45
+ }
46
+ // Full-screen TUI mode (default)
47
+ const { launchTUI } = await import("./tui/App.js");
48
+ const { AgentBridge } = await import("./tui/agent-bridge.js");
49
+ const config = configManager.get();
50
+ const bridge = new AgentBridge({
51
+ provider: config.provider || "openai",
52
+ apiKey: config.apiKey,
53
+ model: config.model,
54
+ baseUrl: config.baseUrl,
55
+ workDir: process.cwd(),
56
+ });
57
+ launchTUI({
58
+ version: "0.1.3",
59
+ model: configManager.getModel(),
60
+ provider: config.provider || "openai",
61
+ bridge,
62
+ onExit: () => {
63
+ process.exit(0);
64
+ },
65
+ });
41
66
  });
42
67
  // ─── yuan code <prompt> / yuan run <prompt> ───
43
68
  const oneshotAction = async (prompt, options) => {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAExC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,gCAAgC,CAAC;KAC7C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,0CAA0C;AAC1C,OAAO;KACJ,MAAM,CAAC,WAAW,EAAE,sDAAsD,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,OAA8B,EAAE,EAAE;IAC/C,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAE5C,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC;QAClC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC1D,MAAM,aAAa,CAAC,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,6CAA6C;IAC7C,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,kBAAkB,CACpC,QAAQ,EACR,cAAc,EACd,aAAa,CACd,CAAC;QACF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;KACvB,CAAC,CAAC;IAEH,SAAS,CAAC;QACR,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE;QAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ;QACrC,MAAM;QACN,MAAM,EAAE,GAAG,EAAE;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,iDAAiD;AACjD,MAAM,aAAa,GAAG,KAAK,EAAE,MAAc,EAAE,OAA2B,EAAiB,EAAE;IACzF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,+CAA+C,CAAC;KAC5D,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,sBAAsB;AACtB,MAAM,SAAS,GAAG,OAAO;KACtB,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAE5C,SAAS;KACN,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,aAAa,CAAC,gBAAgB,EAAE,CAAC;AACzC,CAAC,CAAC,CAAC;AAEL,SAAS;KACN,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,YAAY,EAAE,wCAAwC,CAAC;KAChE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;KAC5B,MAAM,CAAC,CAAC,QAAgB,EAAE,GAAW,EAAE,EAAE;IACxC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAU,CAAC;IACrF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAyC,CAAC,EAAE,CAAC;QACxE,QAAQ,CAAC,KAAK,CAAC,qBAAqB,QAAQ,oDAAoD,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,aAAa,CAAC,MAAM,CAAC,QAAkE,EAAE,GAAG,CAAC,CAAC;IAC9F,QAAQ,CAAC,OAAO,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEL,SAAS;KACN,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,SAAS;KACN,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,oCAAoC,CAAC;KACjD,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KAC1C,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;IACvB,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACzC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,IAAI,uBAAuB,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEL,SAAS;KACN,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,sBAAsB,CAAC;KACnC,QAAQ,CAAC,OAAO,EAAE,0CAA0C,CAAC;KAC7D,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE;IACtB,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,sBAAsB;AACtB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,kBAAkB,EAAE,iCAAiC,CAAC;KAC7D,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KACxC,MAAM,CAAC,KAAK,EAAE,OAAwC,EAAE,EAAE;IACzD,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAE5C,YAAY;IACZ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG;gBACjB,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,QAAQ;gBACnB,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE;gBAC/B,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC9B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACd,OAAO,CAAC,GAAG,CACT,KAAK,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,eAAe,CAAC,CAAC,SAAS,GAAG,CAChI,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,cAAc;IACd,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;QACxB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;IAE9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACzE,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS;QAC9C,CAAC,CAAC,0BAA0B;QAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ;YAC3B,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,EAAE,CAAC;IAET,QAAQ,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC;IAC7E,QAAQ,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,QAAQ,CAAC,MAAM,kBAAkB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACrH,QAAQ,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,SAAS,OAAO,CAAC,UAAU,CAAC,KAAK,UAAU,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3J,0BAA0B;IAC1B,MAAM,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,IAAI,kBAAkB,CACxC,QAAQ,EACR,cAAc,EACd,aAAa,EACb,OAAO,CACR,CAAC;IACF,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,sBAAsB;AACtB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,QAAQ,CAAC;KACxD,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;KACrE,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;KACzE,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,qBAAqB;AACrB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,aAAa,EAAE,cAAc,EAAE,6BAA6B,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;IACtC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,sBAAsB;AACtB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,sBAAsB;AACtB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * YUAN TUI — Root App component.
3
+ * Fully wired to AgentBridge for real LLM-powered agent execution.
4
+ *
5
+ * Layout (top to bottom):
6
+ * StatusBar (1 row)
7
+ * MessageList (dynamic height — shrinks when SlashMenu opens)
8
+ * SlashMenu (0 or N rows — pushes input down, squeezes messages up)
9
+ * InputBox (1 row)
10
+ * FooterBar (1 row)
11
+ */
12
+ import { AgentBridge } from "./agent-bridge.js";
13
+ export interface AppProps {
14
+ version: string;
15
+ model: string;
16
+ provider: string;
17
+ bridge: AgentBridge;
18
+ onExit?: () => void;
19
+ }
20
+ /**
21
+ * Public API to control the TUI from outside the React tree.
22
+ */
23
+ export interface TUIController {
24
+ unmount: () => void;
25
+ bridge: AgentBridge;
26
+ }
27
+ /**
28
+ * Launch the TUI. Returns a controller.
29
+ */
30
+ export declare function launchTUI(props: Omit<AppProps, "bridge"> & {
31
+ bridge: AgentBridge;
32
+ }): TUIController;
33
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAkSD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GAAG,aAAa,CAuBlG"}
@@ -0,0 +1,244 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * YUAN TUI — Root App component.
4
+ * Fully wired to AgentBridge for real LLM-powered agent execution.
5
+ *
6
+ * Layout (top to bottom):
7
+ * StatusBar (1 row)
8
+ * MessageList (dynamic height — shrinks when SlashMenu opens)
9
+ * SlashMenu (0 or N rows — pushes input down, squeezes messages up)
10
+ * InputBox (1 row)
11
+ * FooterBar (1 row)
12
+ */
13
+ import { useCallback, useEffect, useRef, useState } from "react";
14
+ import { render, Box, useApp } from "ink";
15
+ import { enterTUI, exitTUI } from "./lib/ansi.js";
16
+ import { useTerminalSize } from "./hooks/useTerminalSize.js";
17
+ import { useAgentStream } from "./hooks/useAgentStream.js";
18
+ import { useKeyHandler } from "./hooks/useKeyHandler.js";
19
+ import { StatusBar } from "./components/StatusBar.js";
20
+ import { MessageList } from "./components/MessageList.js";
21
+ import { InputBox } from "./components/InputBox.js";
22
+ import { FooterBar } from "./components/FooterBar.js";
23
+ import { SlashMenu } from "./components/SlashMenu.js";
24
+ import { useSlashCommands } from "./hooks/useSlashCommands.js";
25
+ import { checkForUpdate, loadSettings, saveSettings } from "./lib/update-checker.js";
26
+ function App({ version, model, provider, bridge, onExit, }) {
27
+ const { exit } = useApp();
28
+ const { columns, rows } = useTerminalSize();
29
+ const agentStream = useAgentStream();
30
+ const bridgeRef = useRef(bridge);
31
+ bridgeRef.current = bridge;
32
+ // Stable ref to agentStream.handleEvent to avoid useEffect re-runs
33
+ const handleEventRef = useRef(agentStream.handleEvent);
34
+ handleEventRef.current = agentStream.handleEvent;
35
+ const [tokensPerSec, setTokensPerSec] = useState();
36
+ // Slash command state
37
+ const [slashState, slashActions] = useSlashCommands();
38
+ // Wire bridge events to useAgentStream — runs once on mount
39
+ useEffect(() => {
40
+ bridge.onEvent((event) => {
41
+ handleEventRef.current(event);
42
+ if (event.kind === "agent:token_usage") {
43
+ const input = event.input;
44
+ const output = event.output;
45
+ setTokensPerSec(input + output);
46
+ }
47
+ });
48
+ bridge.onTermination(() => {
49
+ // useAgentStream handles this via agent:completed event
50
+ });
51
+ }, [bridge]);
52
+ // Message submission
53
+ const handleSubmit = useCallback((value) => {
54
+ agentStream.addUserMessage(value);
55
+ agentStream.startAgent();
56
+ setTokensPerSec(undefined);
57
+ bridgeRef.current.sendMessage(value).catch((err) => {
58
+ agentStream.handleEvent({
59
+ kind: "agent:error",
60
+ message: err.message,
61
+ retryable: false,
62
+ });
63
+ });
64
+ }, [agentStream]);
65
+ // Interruption
66
+ const handleInterrupt = useCallback(() => {
67
+ bridgeRef.current.interrupt();
68
+ agentStream.interrupt();
69
+ }, [agentStream]);
70
+ // Slash commands
71
+ const handleSlashCommand = useCallback((cmd) => {
72
+ slashActions.close();
73
+ if (cmd === "/exit" || cmd === "/quit" || cmd === "/q") {
74
+ onExit?.();
75
+ exit();
76
+ return;
77
+ }
78
+ if (cmd === "/clear") {
79
+ agentStream.clearMessages();
80
+ return;
81
+ }
82
+ if (cmd === "/help" || cmd === "/h") {
83
+ agentStream.addSystemMessage([
84
+ "Available commands:",
85
+ " /help — Show this help",
86
+ " /status — Model, tokens, session info",
87
+ " /clear — Clear conversation",
88
+ " /model — Change model",
89
+ " /config — Show configuration",
90
+ " /session — Session info",
91
+ " /diff — Show file changes",
92
+ " /undo — Undo last change",
93
+ " /settings — Auto-update preferences",
94
+ " /exit — Exit YUAN",
95
+ "",
96
+ " yuaone.com",
97
+ ].join("\n"));
98
+ return;
99
+ }
100
+ if (cmd === "/status") {
101
+ const s = agentStream.state;
102
+ const files = bridgeRef.current.filesChanged;
103
+ agentStream.addSystemMessage([
104
+ `YUAN v${version}`,
105
+ ` Provider : ${provider}`,
106
+ ` Model : ${model}`,
107
+ ` Status : ${s.status}`,
108
+ ` Messages : ${s.messages.length}`,
109
+ ` Tokens : ${s.totalTokensUsed.toLocaleString()} total`,
110
+ s.tokensPerSecond > 0 ? ` Speed : ${s.tokensPerSecond} tok/s` : "",
111
+ ` Files : ${files.length} changed`,
112
+ "",
113
+ " yuaone.com",
114
+ ].filter(Boolean).join("\n"));
115
+ return;
116
+ }
117
+ if (cmd === "/diff") {
118
+ const files = bridgeRef.current.filesChanged;
119
+ const content = files.length > 0
120
+ ? `Changed files:\n${files.map((f) => ` ${f}`).join("\n")}`
121
+ : "No files changed in this session.";
122
+ agentStream.addSystemMessage(content);
123
+ return;
124
+ }
125
+ if (cmd === "/settings") {
126
+ const settings = loadSettings();
127
+ const current = settings.autoUpdate;
128
+ const options = ["prompt", "auto", "never"];
129
+ const currentIdx = options.indexOf(current);
130
+ // Cycle to next option
131
+ const nextIdx = (currentIdx + 1) % options.length;
132
+ const next = options[nextIdx];
133
+ settings.autoUpdate = next;
134
+ saveSettings(settings);
135
+ const labels = {
136
+ prompt: "Ask before updating",
137
+ auto: "Auto-update on launch",
138
+ never: "Never check for updates",
139
+ };
140
+ agentStream.addSystemMessage(`Auto-update: ${labels[next]}\n` +
141
+ ` 1. prompt — ${current === "prompt" ? "●" : "○"} Ask before updating\n` +
142
+ ` 2. auto — ${current === "auto" ? "●" : "○"} Auto-update on launch\n` +
143
+ ` 3. never — ${current === "never" ? "●" : "○"} Never check\n` +
144
+ `\n Changed to: ${labels[next]} (run /settings again to cycle)`);
145
+ return;
146
+ }
147
+ agentStream.addSystemMessage(`Unknown command: ${cmd}. Type /help for available commands.`);
148
+ }, [agentStream, onExit, exit, slashActions]);
149
+ // Check for updates on mount (non-blocking)
150
+ useEffect(() => {
151
+ checkForUpdate(version).then((info) => {
152
+ if (info?.hasUpdate) {
153
+ const settings = loadSettings();
154
+ if (settings.autoUpdate === "auto") {
155
+ agentStream.addSystemMessage(`Updating YUAN ${info.currentVersion} → ${info.latestVersion}...`);
156
+ import("./lib/update-checker.js").then(({ performUpdate }) => {
157
+ performUpdate().then((ok) => {
158
+ agentStream.addSystemMessage(ok
159
+ ? `Updated to ${info.latestVersion}. Restart to apply.`
160
+ : "Update failed. Run: npm i -g @yuaone/cli@latest");
161
+ });
162
+ });
163
+ }
164
+ else if (settings.autoUpdate === "prompt") {
165
+ agentStream.addSystemMessage(`Update available: ${info.currentVersion} → ${info.latestVersion}\n` +
166
+ ` Run: npm i -g @yuaone/cli@latest\n` +
167
+ ` Or: /settings to enable auto-update`);
168
+ }
169
+ }
170
+ }).catch(() => {
171
+ // Non-critical — silently ignore
172
+ });
173
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
174
+ // Input change → open/close slash menu
175
+ const handleInputChange = useCallback((value) => {
176
+ if (value.startsWith("/")) {
177
+ slashActions.filter(value);
178
+ }
179
+ else {
180
+ slashActions.close();
181
+ }
182
+ }, [slashActions]);
183
+ // Slash menu navigation
184
+ const handleSlashNavigate = useCallback((direction) => {
185
+ if (direction === "up") {
186
+ slashActions.selectPrev();
187
+ }
188
+ else {
189
+ slashActions.selectNext();
190
+ }
191
+ }, [slashActions]);
192
+ // Slash menu select → return command name
193
+ const handleSlashSelect = useCallback(() => {
194
+ const selected = slashActions.getSelected();
195
+ return selected?.name ?? null;
196
+ }, [slashActions]);
197
+ // Double Ctrl+C to exit — first press shows hint, second press exits.
198
+ // This allows terminal's native Ctrl+C copy to work during text selection.
199
+ const ctrlCTimerRef = useRef(0);
200
+ useKeyHandler({
201
+ onExit: () => {
202
+ const now = Date.now();
203
+ if (now - ctrlCTimerRef.current < 2000) {
204
+ // Double press within 2s → exit
205
+ onExit?.();
206
+ exit();
207
+ }
208
+ else {
209
+ ctrlCTimerRef.current = now;
210
+ agentStream.addSystemMessage("Press Ctrl+C again to exit.");
211
+ }
212
+ },
213
+ });
214
+ const isRunning = agentStream.state.status !== "idle";
215
+ // Calculate how many rows the slash menu takes
216
+ const slashMenuRows = slashState.isOpen
217
+ ? Math.min(slashState.filtered.length, 8) + 2 // items + top/bottom border
218
+ : 0;
219
+ // Content area height = total rows - status(1) - slashMenu(N) - input(1) - footer(1) - padding(2)
220
+ const contentHeight = Math.max(3, rows - 5 - slashMenuRows);
221
+ const messages = agentStream.state.messages;
222
+ return (_jsxs(Box, { flexDirection: "column", width: columns, height: rows, children: [_jsx(StatusBar, { version: version, model: model, provider: provider, tokensPerSec: agentStream.state.tokensPerSecond || tokensPerSec, isRunning: isRunning }), _jsx(MessageList, { messages: messages, isThinking: isRunning, maxHeight: contentHeight }), slashState.isOpen && (_jsx(SlashMenu, { commands: slashState.filtered, selectedIndex: slashState.selectedIndex, isOpen: slashState.isOpen, width: columns })), _jsx(InputBox, { onSubmit: handleSubmit, onInterrupt: handleInterrupt, onSlashCommand: handleSlashCommand, onInputChange: handleInputChange, slashMenuOpen: slashState.isOpen, onSlashNavigate: handleSlashNavigate, onSlashSelect: handleSlashSelect, onSlashClose: slashActions.close, isRunning: isRunning }), _jsx(FooterBar, { isRunning: isRunning, slashMenuOpen: slashState.isOpen })] }));
223
+ }
224
+ /**
225
+ * Launch the TUI. Returns a controller.
226
+ */
227
+ export function launchTUI(props) {
228
+ enterTUI();
229
+ const { unmount } = render(_jsx(App, { ...props }), { exitOnCtrlC: false });
230
+ const cleanup = () => {
231
+ exitTUI();
232
+ unmount();
233
+ };
234
+ process.on("exit", cleanup);
235
+ process.on("SIGINT", () => {
236
+ cleanup();
237
+ process.exit(0);
238
+ });
239
+ return {
240
+ unmount: cleanup,
241
+ bridge: props.bridge,
242
+ };
243
+ }
244
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * agent-bridge.ts — Bridges @yuaone/core AgentLoop to the TUI.
3
+ *
4
+ * This is the non-React glue layer that:
5
+ * 1. Creates AgentLoop with proper config
6
+ * 2. Subscribes to AgentLoop events
7
+ * 3. Forwards events to a callback (which the TUI App sets)
8
+ * 4. Handles interruption (Esc → hard interrupt)
9
+ * 5. Handles approval flow
10
+ */
11
+ import { type AgentEvent, type ApprovalRequest, type ApprovalResponse } from "@yuaone/core";
12
+ export interface AgentBridgeConfig {
13
+ provider: string;
14
+ apiKey: string;
15
+ model?: string;
16
+ baseUrl?: string;
17
+ workDir: string;
18
+ }
19
+ export type EventCallback = (event: AgentEvent) => void;
20
+ export type ApprovalCallback = (request: ApprovalRequest) => Promise<ApprovalResponse>;
21
+ export type TerminationCallback = (result: {
22
+ reason: string;
23
+ [key: string]: unknown;
24
+ }) => void;
25
+ export declare class AgentBridge {
26
+ private config;
27
+ private loop;
28
+ private eventCallback;
29
+ private approvalCallback;
30
+ private terminationCallback;
31
+ private changedFiles;
32
+ private isProcessing;
33
+ constructor(config: AgentBridgeConfig);
34
+ /** Set the event callback (called for every AgentEvent) */
35
+ onEvent(cb: EventCallback): void;
36
+ /** Set the approval callback */
37
+ onApproval(cb: ApprovalCallback): void;
38
+ /** Set the termination callback (called when run() completes) */
39
+ onTermination(cb: TerminationCallback): void;
40
+ /** Whether the agent is currently processing */
41
+ get running(): boolean;
42
+ /** Get list of changed files in this session */
43
+ get filesChanged(): string[];
44
+ /**
45
+ * Send a message to the agent. Creates a new AgentLoop each time
46
+ * (matching the interactive.ts pattern — stateless per request).
47
+ */
48
+ sendMessage(message: string): Promise<void>;
49
+ /** Interrupt the current agent execution (hard stop) */
50
+ interrupt(): void;
51
+ /** Handle approval requests by delegating to the callback */
52
+ private handleApproval;
53
+ /** Reset file tracking */
54
+ resetChangedFiles(): void;
55
+ }
56
+ //# sourceMappingURL=agent-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../src/tui/agent-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,UAAU,EAEf,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACvF,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KAAK,IAAI,CAAC;AAE/F,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,iBAAiB;IAIrC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAIhC,gCAAgC;IAChC,UAAU,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI;IAItC,iEAAiE;IACjE,aAAa,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI;IAI5C,gDAAgD;IAChD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gDAAgD;IAChD,IAAI,YAAY,IAAI,MAAM,EAAE,CAE3B;IAED;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4EjD,wDAAwD;IACxD,SAAS,IAAI,IAAI;IASjB,6DAA6D;YAC/C,cAAc;IAQ5B,0BAA0B;IAC1B,iBAAiB,IAAI,IAAI;CAG1B"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * agent-bridge.ts — Bridges @yuaone/core AgentLoop to the TUI.
3
+ *
4
+ * This is the non-React glue layer that:
5
+ * 1. Creates AgentLoop with proper config
6
+ * 2. Subscribes to AgentLoop events
7
+ * 3. Forwards events to a callback (which the TUI App sets)
8
+ * 4. Handles interruption (Esc → hard interrupt)
9
+ * 5. Handles approval flow
10
+ */
11
+ import { AgentLoop, DEFAULT_LOOP_CONFIG, } from "@yuaone/core";
12
+ import { createDefaultRegistry } from "@yuaone/tools";
13
+ export class AgentBridge {
14
+ config;
15
+ loop = null;
16
+ eventCallback = null;
17
+ approvalCallback = null;
18
+ terminationCallback = null;
19
+ changedFiles = [];
20
+ isProcessing = false;
21
+ constructor(config) {
22
+ this.config = config;
23
+ }
24
+ /** Set the event callback (called for every AgentEvent) */
25
+ onEvent(cb) {
26
+ this.eventCallback = cb;
27
+ }
28
+ /** Set the approval callback */
29
+ onApproval(cb) {
30
+ this.approvalCallback = cb;
31
+ }
32
+ /** Set the termination callback (called when run() completes) */
33
+ onTermination(cb) {
34
+ this.terminationCallback = cb;
35
+ }
36
+ /** Whether the agent is currently processing */
37
+ get running() {
38
+ return this.isProcessing;
39
+ }
40
+ /** Get list of changed files in this session */
41
+ get filesChanged() {
42
+ return [...this.changedFiles];
43
+ }
44
+ /**
45
+ * Send a message to the agent. Creates a new AgentLoop each time
46
+ * (matching the interactive.ts pattern — stateless per request).
47
+ */
48
+ async sendMessage(message) {
49
+ if (this.isProcessing)
50
+ return;
51
+ this.isProcessing = true;
52
+ const { provider, apiKey, model, baseUrl, workDir } = this.config;
53
+ // Build BYOK config
54
+ const byokConfig = {
55
+ provider: provider,
56
+ apiKey,
57
+ model,
58
+ baseUrl,
59
+ };
60
+ // Create tool registry
61
+ const registry = createDefaultRegistry();
62
+ const toolExecutor = registry.toExecutor(workDir);
63
+ // Build agent config
64
+ const agentConfig = {
65
+ byok: byokConfig,
66
+ loop: {
67
+ model: "coding",
68
+ maxIterations: DEFAULT_LOOP_CONFIG.maxIterations,
69
+ maxTokensPerIteration: DEFAULT_LOOP_CONFIG.maxTokensPerIteration,
70
+ totalTokenBudget: DEFAULT_LOOP_CONFIG.totalTokenBudget,
71
+ tools: toolExecutor.definitions,
72
+ systemPrompt: "You are YUAN, an autonomous coding agent. " +
73
+ "You have access to tools for reading, writing, editing files, running shell commands, and searching code. " +
74
+ "Complete the user's coding tasks efficiently and correctly.",
75
+ projectPath: workDir,
76
+ },
77
+ };
78
+ // Create AgentLoop
79
+ const loop = new AgentLoop({
80
+ config: agentConfig,
81
+ toolExecutor,
82
+ governorConfig: { planTier: "LOCAL" },
83
+ approvalHandler: (request) => this.handleApproval(request),
84
+ autoFixConfig: { maxRetries: 3, autoLint: true, autoBuild: true, autoTest: false },
85
+ });
86
+ this.loop = loop;
87
+ // Subscribe to events
88
+ loop.on("event", (event) => {
89
+ // Track file changes
90
+ if (event.kind === "agent:file_change") {
91
+ if (!this.changedFiles.includes(event.path)) {
92
+ this.changedFiles.push(event.path);
93
+ }
94
+ }
95
+ // Forward to TUI
96
+ this.eventCallback?.(event);
97
+ });
98
+ try {
99
+ const result = await loop.run(message);
100
+ this.terminationCallback?.(result);
101
+ }
102
+ catch (err) {
103
+ const errMsg = err instanceof Error ? err.message : String(err);
104
+ this.eventCallback?.({
105
+ kind: "agent:error",
106
+ message: errMsg,
107
+ retryable: false,
108
+ });
109
+ this.terminationCallback?.({ reason: "ERROR", error: errMsg });
110
+ }
111
+ finally {
112
+ this.isProcessing = false;
113
+ this.loop = null;
114
+ }
115
+ }
116
+ /** Interrupt the current agent execution (hard stop) */
117
+ interrupt() {
118
+ if (this.loop && this.isProcessing) {
119
+ this.loop.interrupt({
120
+ type: "hard",
121
+ source: "cli",
122
+ });
123
+ }
124
+ }
125
+ /** Handle approval requests by delegating to the callback */
126
+ async handleApproval(request) {
127
+ if (this.approvalCallback) {
128
+ return this.approvalCallback(request);
129
+ }
130
+ // Default: auto-approve (can be changed via config)
131
+ return "approve";
132
+ }
133
+ /** Reset file tracking */
134
+ resetChangedFiles() {
135
+ this.changedFiles = [];
136
+ }
137
+ }
138
+ //# sourceMappingURL=agent-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-bridge.js","sourceRoot":"","sources":["../../src/tui/agent-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * BashOutput — shell command output in a bordered box.
3
+ */
4
+ import React from "react";
5
+ export interface BashOutputProps {
6
+ command: string;
7
+ output: string;
8
+ exitCode?: number;
9
+ width: number;
10
+ }
11
+ export declare function BashOutput({ command: _command, output, exitCode, width, }: BashOutputProps): React.JSX.Element;
12
+ //# sourceMappingURL=BashOutput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BashOutput.d.ts","sourceRoot":"","sources":["../../../src/tui/components/BashOutput.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EAAE,QAAQ,EACjB,MAAM,EACN,QAAQ,EACR,KAAK,GACN,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkCrC"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { TOKENS } from "../lib/tokens.js";
4
+ import { truncate } from "../lib/truncate.js";
5
+ export function BashOutput({ command: _command, output, exitCode, width, }) {
6
+ const boxWidth = Math.max(20, width - 6);
7
+ const contentWidth = boxWidth - 4; // borders + padding
8
+ const lines = output.split("\n");
9
+ const maxLines = 20;
10
+ const truncatedLines = lines.length > maxLines;
11
+ const visibleLines = truncatedLines ? lines.slice(0, maxLines) : lines;
12
+ const headerColor = exitCode != null && exitCode !== 0 ? "red" : undefined;
13
+ const headerText = exitCode != null && exitCode !== 0
14
+ ? `output (exit ${exitCode})`
15
+ : "output";
16
+ const headerLine = `${TOKENS.box.topLeft}${TOKENS.box.horizontal} ${headerText} ${TOKENS.box.horizontal.repeat(Math.max(0, boxWidth - headerText.length - 5))}${TOKENS.box.topRight}`;
17
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: true, color: headerColor, children: headerLine }), visibleLines.map((line, i) => (_jsxs(Box, { children: [_jsxs(Text, { dimColor: true, children: [TOKENS.box.vertical, " "] }), _jsx(Text, { children: truncate(line, contentWidth) })] }, i))), truncatedLines && (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [TOKENS.box.vertical, " ... (", lines.length - maxLines, " more lines)"] }) })), _jsxs(Text, { dimColor: true, children: [TOKENS.box.bottomLeft, TOKENS.box.horizontal.repeat(boxWidth - 2), TOKENS.box.bottomRight] })] }));
18
+ }
19
+ //# sourceMappingURL=BashOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BashOutput.js","sourceRoot":"","sources":["../../../src/tui/components/BashOutput.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAS9C,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EAAE,QAAQ,EACjB,MAAM,EACN,QAAQ,EACR,KAAK,GACW;IAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,oBAAoB;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC/C,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEvE,MAAM,WAAW,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,MAAM,UAAU,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,CAAC;QACnD,CAAC,CAAC,gBAAgB,QAAQ,GAAG;QAC7B,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAEtL,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,QAAQ,QAAC,KAAK,EAAE,WAAW,YAAG,UAAU,GAAQ,EACrD,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC7B,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,QAAQ,mBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,UAAU,EAC7C,KAAC,IAAI,cAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,GAAQ,KAFnC,CAAC,CAGL,CACP,CAAC,EACD,cAAc,IAAI,CACjB,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,QAAQ,mBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,aAAS,KAAK,CAAC,MAAM,GAAG,QAAQ,oBAAoB,GACnF,CACP,EACD,MAAC,IAAI,IAAC,QAAQ,mBACX,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IACrF,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * CollapsibleSection — generic expand/collapse wrapper.
3
+ * Used by ToolCallTree for file reads, diffs, bash output.
4
+ */
5
+ import React from "react";
6
+ export interface CollapsibleSectionProps {
7
+ isExpanded: boolean;
8
+ onToggle: () => void;
9
+ collapsedSummary: string;
10
+ expandHint?: string;
11
+ children: React.ReactNode;
12
+ }
13
+ export declare function CollapsibleSection({ isExpanded, onToggle: _onToggle, collapsedSummary, expandHint, children, }: CollapsibleSectionProps): React.JSX.Element;
14
+ //# sourceMappingURL=CollapsibleSection.d.ts.map