agentengine-sdk-python 0.6.9__py3-none-any.whl → 0.7.0__py3-none-any.whl

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 (149) hide show
  1. {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/METADATA +6 -4
  2. {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/RECORD +123 -128
  3. ksadk/api/client.py +19 -0
  4. ksadk/cli/cmd_create.py +34 -7
  5. ksadk/cli/cmd_hermes.py +6 -2
  6. ksadk/cli/cmd_invoke.py +208 -41
  7. ksadk/cli/cmd_mcp.py +6 -1
  8. ksadk/cli/cmd_openclaw.py +6 -2
  9. ksadk/cli/cmd_run.py +13 -6
  10. ksadk/cli/network_options.py +5 -3
  11. ksadk/configs/env_registry.py +1 -0
  12. ksadk/conversations/message_projection.py +269 -0
  13. ksadk/conversations/model_context.py +11 -1
  14. ksadk/conversations/runtime.py +81 -13
  15. ksadk/deployment/base.py +1 -1
  16. ksadk/deployment/providers/serverless.py +18 -8
  17. ksadk/memory/adk/resilient_session_service.py +268 -0
  18. ksadk/memory/adk/short_term_memory.py +21 -6
  19. ksadk/runners/adk_runner.py +974 -115
  20. ksadk/runners/langchain_runner.py +219 -7
  21. ksadk/runners/langgraph_runner.py +145 -12
  22. ksadk/runners/remote_runner.py +143 -18
  23. ksadk/server/app.py +148 -6
  24. ksadk/server/static/assets/{ArtifactsPanel-C0meuOdi.js → ArtifactsPanel-D-SSn2ee.js} +1 -1
  25. ksadk/server/static/assets/{CodeBlock-BbI4HPtJ.js → CodeBlock-P16VOLYi.js} +1 -1
  26. ksadk/server/static/assets/{MathMessageMarkdown-DMLQYoLp.js → MathMessageMarkdown-CdGiQWHR.js} +1 -1
  27. ksadk/server/static/assets/{MermaidBlock-DCR8WZ17.js → MermaidBlock-IOcal8cm.js} +6 -6
  28. ksadk/server/static/assets/{NativeTerminalPanel-CKUvWhUz.js → NativeTerminalPanel-DGSDWsei.js} +1 -1
  29. ksadk/server/static/assets/{arc-bj2rZnP5.js → arc-BA13sHc9.js} +1 -1
  30. ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +1 -0
  31. ksadk/server/static/assets/{architectureDiagram-3BPJPVTR-2u1ltDIj.js → architectureDiagram-3BPJPVTR-DzJzgVoL.js} +1 -1
  32. ksadk/server/static/assets/{blockDiagram-GPEHLZMM-D6fvdK20.js → blockDiagram-GPEHLZMM-UTdVcZhn.js} +1 -1
  33. ksadk/server/static/assets/{c4Diagram-AAUBKEIU-BK82L5n5.js → c4Diagram-AAUBKEIU-Dix0GD4m.js} +1 -1
  34. ksadk/server/static/assets/channel-CTuydARX.js +1 -0
  35. ksadk/server/static/assets/{chunk-2J33WTMH-DLVdkeyQ.js → chunk-2J33WTMH-C2JxuZ42.js} +1 -1
  36. ksadk/server/static/assets/{chunk-4BX2VUAB-BbwsYcbW.js → chunk-4BX2VUAB-Be57QPgD.js} +1 -1
  37. ksadk/server/static/assets/{chunk-55IACEB6-DOairxzw.js → chunk-55IACEB6-WjSuy4nv.js} +1 -1
  38. ksadk/server/static/assets/{chunk-727SXJPM-hCO487gs.js → chunk-727SXJPM-BOovP-b5.js} +1 -1
  39. ksadk/server/static/assets/{chunk-AQP2D5EJ-XU8vDOuG.js → chunk-AQP2D5EJ-DOmZNmWj.js} +1 -1
  40. ksadk/server/static/assets/{chunk-FMBD7UC4-PrapyfMu.js → chunk-FMBD7UC4-DzwlodkU.js} +1 -1
  41. ksadk/server/static/assets/{chunk-ND2GUHAM-CboKhTZ3.js → chunk-ND2GUHAM-DMqAikEU.js} +1 -1
  42. ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +1 -0
  43. ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +1 -0
  44. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +1 -0
  45. ksadk/server/static/assets/{cose-bilkent-S5V4N54A-_N8bJ-EU.js → cose-bilkent-S5V4N54A-Zhy2GBnP.js} +1 -1
  46. ksadk/server/static/assets/{dagre-BM42HDAG-FoDlo5J2.js → dagre-BM42HDAG-CbKrtIUz.js} +1 -1
  47. ksadk/server/static/assets/{diagram-2AECGRRQ-BBp6ebBw.js → diagram-2AECGRRQ-BRApgQRK.js} +1 -1
  48. ksadk/server/static/assets/{diagram-5GNKFQAL-CqOvG1PR.js → diagram-5GNKFQAL-D0xbnDiK.js} +1 -1
  49. ksadk/server/static/assets/{diagram-KO2AKTUF-O9T3t6ba.js → diagram-KO2AKTUF-CVugVI9L.js} +1 -1
  50. ksadk/server/static/assets/{diagram-LMA3HP47-CGG8ekBO.js → diagram-LMA3HP47-DozUGgee.js} +1 -1
  51. ksadk/server/static/assets/{diagram-OG6HWLK6-4BmH1EEg.js → diagram-OG6HWLK6-ZOYsKlru.js} +1 -1
  52. ksadk/server/static/assets/{dist-BmuTWcm7.js → dist-2hInLS_J.js} +1 -1
  53. ksadk/server/static/assets/{dist-BMKM66B4.js → dist-8EEyGgDx.js} +1 -1
  54. ksadk/server/static/assets/{dist-Cp1_jKwf.js → dist-8_SfK1IP.js} +1 -1
  55. ksadk/server/static/assets/{dist-CZ6C3x8B.js → dist-B0NP_Z0z.js} +1 -1
  56. ksadk/server/static/assets/{dist-DLeM1OCK.js → dist-BIJVDMuB.js} +1 -1
  57. ksadk/server/static/assets/{dist-Cwhk4lwI.js → dist-BmlMPsCc.js} +1 -1
  58. ksadk/server/static/assets/{dist-D99wf6_X.js → dist-BrCcQ47T.js} +1 -1
  59. ksadk/server/static/assets/{dist-CWiTDN_V.js → dist-BssVmjIo.js} +1 -1
  60. ksadk/server/static/assets/{dist-BVzcWa6D.js → dist-C3HIIaN5.js} +1 -1
  61. ksadk/server/static/assets/{dist-DM0rEQPk.js → dist-CPBtqRTW.js} +1 -1
  62. ksadk/server/static/assets/{dist-BkJjNih3.js → dist-CkEKJFtk.js} +1 -1
  63. ksadk/server/static/assets/{dist-B67uF2uK.js → dist-D-JMdWPQ.js} +1 -1
  64. ksadk/server/static/assets/{dist-DI-oVAXw.js → dist-D-xOD048.js} +1 -1
  65. ksadk/server/static/assets/{dist-6kSZvCZh.js → dist-D57wnGWd.js} +1 -1
  66. ksadk/server/static/assets/{dist-Bk1l05Ni.js → dist-DL_NKc_z.js} +1 -1
  67. ksadk/server/static/assets/{dist-DbaH3p5h.js → dist-DMezvBGJ.js} +1 -1
  68. ksadk/server/static/assets/{dist-CiZHB6ZW.js → dist-DmFaq_Iy.js} +1 -1
  69. ksadk/server/static/assets/{dist-DLMjL01k.js → dist-Dp0k7bWI.js} +1 -1
  70. ksadk/server/static/assets/{dist-DCpZrjaK.js → dist-DpKtt4Bo.js} +1 -1
  71. ksadk/server/static/assets/{dist-D5JGcxBx.js → dist-DyOkZmze.js} +1 -1
  72. ksadk/server/static/assets/{dist-C2DKRFVK.js → dist-DyWsb78Q.js} +1 -1
  73. ksadk/server/static/assets/{dist-S4klkK5W.js → dist-gX6GOLKq.js} +1 -1
  74. ksadk/server/static/assets/{erDiagram-TEJ5UH35-oJhaci7S.js → erDiagram-TEJ5UH35-Bk-9bgE5.js} +1 -1
  75. ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +1 -0
  76. ksadk/server/static/assets/{flowDiagram-I6XJVG4X-DtTmUan-.js → flowDiagram-I6XJVG4X-Dn9kZVuZ.js} +1 -1
  77. ksadk/server/static/assets/{ganttDiagram-6RSMTGT7-BSsb_eij.js → ganttDiagram-6RSMTGT7-BGxXlJqm.js} +1 -1
  78. ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +1 -0
  79. ksadk/server/static/assets/{gitGraphDiagram-PVQCEYII-BR5s6Pws.js → gitGraphDiagram-PVQCEYII-C7Q0X-wi.js} +1 -1
  80. ksadk/server/static/assets/{index-BH7-pC0B.js → index-C00Lwg3L.js} +6 -6
  81. ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +1 -0
  82. ksadk/server/static/assets/{infoDiagram-5YYISTIA-DYPc5cvh.js → infoDiagram-5YYISTIA-BO_CSqq5.js} +1 -1
  83. ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-MoBdALDg.js → ishikawaDiagram-YF4QCWOH-eYLPLd46.js} +1 -1
  84. ksadk/server/static/assets/{journeyDiagram-JHISSGLW-DgLiQT8l.js → journeyDiagram-JHISSGLW-De9geSb0.js} +1 -1
  85. ksadk/server/static/assets/{kanban-definition-UN3LZRKU-CsFx112F.js → kanban-definition-UN3LZRKU-Cs80kQto.js} +1 -1
  86. ksadk/server/static/assets/{katex-DRsiwpM2.js → katex-DSrCFD8n.js} +1 -1
  87. ksadk/server/static/assets/{linear-TNRQ5Orv.js → linear-CN9sbKTF.js} +1 -1
  88. ksadk/server/static/assets/{mermaid-parser.core-D2eMVOgo.js → mermaid-parser.core-DlgSBU8l.js} +2 -2
  89. ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-BtByYFhL.js → mindmap-definition-RKZ34NQL-9afz7Oug.js} +1 -1
  90. ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +1 -0
  91. ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +1 -0
  92. ksadk/server/static/assets/{pieDiagram-4H26LBE5-DPnuCB8c.js → pieDiagram-4H26LBE5-DPv_VstN.js} +1 -1
  93. ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-miFpCPv4.js → quadrantDiagram-W4KKPZXB-o77wZ1XK.js} +1 -1
  94. ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +1 -0
  95. ksadk/server/static/assets/{requirementDiagram-4Y6WPE33-mjB_yYkW.js → requirementDiagram-4Y6WPE33-BYVw81VC.js} +1 -1
  96. ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-D7hSlZZZ.js → sankeyDiagram-5OEKKPKP-B7nZFMKT.js} +1 -1
  97. ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-D9Cx6hC3.js → sequenceDiagram-3UESZ5HK-BGRRrFw5.js} +1 -1
  98. ksadk/server/static/assets/{stateDiagram-AJRCARHV-D_zrg47o.js → stateDiagram-AJRCARHV-BUfHCoPs.js} +1 -1
  99. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +1 -0
  100. ksadk/server/static/assets/{timeline-definition-PNZ67QCA-CwSec0Wa.js → timeline-definition-PNZ67QCA-FbCTGrf9.js} +1 -1
  101. ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +1 -0
  102. ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +1 -0
  103. ksadk/server/static/assets/{vennDiagram-CIIHVFJN-agCVobiF.js → vennDiagram-CIIHVFJN-DWgwtPsJ.js} +1 -1
  104. ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +1 -0
  105. ksadk/server/static/assets/{wardleyDiagram-YWT4CUSO-TmrlhWNt.js → wardleyDiagram-YWT4CUSO-2x8G-tTM.js} +1 -1
  106. ksadk/server/static/assets/{xychartDiagram-2RQKCTM6-DV71V-ah.js → xychartDiagram-2RQKCTM6-Drma3AYl.js} +1 -1
  107. ksadk/server/static/index.html +1 -1
  108. ksadk/sessions/__init__.py +17 -21
  109. ksadk/sessions/continuity.py +28 -4
  110. ksadk/sessions/postgres_service.py +77 -14
  111. ksadk/sessions/resilience.py +52 -0
  112. ksadk/sessions/resilient.py +360 -0
  113. ksadk/toolsets/__init__.py +2 -0
  114. ksadk/toolsets/workspace.py +49 -10
  115. ksadk/tracing/setup.py +63 -0
  116. ksadk/tui/__init__.py +22 -7
  117. ksadk/tui/loop.py +1877 -0
  118. ksadk/tui/stream_render.py +68 -0
  119. ksadk/version.py +1 -1
  120. ksadk/server/static/assets/architecture-7EHR7CIX-Cr6Xz1_c.js +0 -1
  121. ksadk/server/static/assets/channel-BSSOwFIb.js +0 -1
  122. ksadk/server/static/assets/chunk-QZHKN3VN-XXpdiwUL.js +0 -1
  123. ksadk/server/static/assets/classDiagram-4FO5ZUOK-C5HvGiyK.js +0 -1
  124. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-C5HvGiyK.js +0 -1
  125. ksadk/server/static/assets/eventmodeling-FCH6USID-CIgwHJLL.js +0 -1
  126. ksadk/server/static/assets/gitGraph-WXDBUCRP-BVAJ7uo0.js +0 -1
  127. ksadk/server/static/assets/info-J43DQDTF-MT80V4ge.js +0 -1
  128. ksadk/server/static/assets/packet-YPE3B663-BLKhbXZB.js +0 -1
  129. ksadk/server/static/assets/pie-LRSECV5Y-DFOikjSY.js +0 -1
  130. ksadk/server/static/assets/radar-GUYGQ44K-095b1Ikw.js +0 -1
  131. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-J9kCb0nC.js +0 -1
  132. ksadk/server/static/assets/treeView-BLDUP644-yinfJEY6.js +0 -1
  133. ksadk/server/static/assets/treemap-LRROVOQU-DosUqN1Q.js +0 -1
  134. ksadk/server/static/assets/wardley-L42UT6IY-Bvp7-5uH.js +0 -1
  135. ksadk/tui/app.py +0 -400
  136. ksadk/tui/clipboard.py +0 -100
  137. ksadk/tui/widgets/__init__.py +0 -22
  138. ksadk/tui/widgets/assistant.py +0 -89
  139. ksadk/tui/widgets/base.py +0 -54
  140. ksadk/tui/widgets/chat_input.py +0 -246
  141. ksadk/tui/widgets/history.py +0 -156
  142. ksadk/tui/widgets/system.py +0 -87
  143. ksadk/tui/widgets/thinking.py +0 -110
  144. ksadk/tui/widgets/tool_call.py +0 -161
  145. ksadk/tui/widgets/user.py +0 -37
  146. {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/WHEEL +0 -0
  147. {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/entry_points.txt +0 -0
  148. {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/licenses/LICENSE +0 -0
  149. {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/top_level.txt +0 -0
@@ -1,110 +0,0 @@
1
- """
2
- ThinkingMessage - 思考过程组件
3
-
4
- 带 spinner 动画的思考过程展示
5
- """
6
-
7
- from textual.widgets import Static
8
- from textual.reactive import reactive
9
- from textual.timer import Timer
10
- from typing import ClassVar, Any
11
- from time import time
12
-
13
- from .base import MessageWidget
14
-
15
-
16
- class ThinkingMessage(MessageWidget):
17
- """思考过程组件
18
-
19
- 显示 AI 思考过程,支持:
20
- - spinner 动画
21
- - 实时计时
22
- - 流式内容追加
23
- - 可折叠
24
- """
25
-
26
- DEFAULT_CSS = """
27
- ThinkingMessage {
28
- height: auto;
29
- padding: 0 1;
30
- margin: 0 0 1 0;
31
- border-left: wide #7777aa;
32
- color: #ffffff;
33
- background: $surface;
34
- }
35
-
36
- ThinkingMessage .thinking-header {
37
- color: #cccccc;
38
- width: 100%;
39
- }
40
-
41
- ThinkingMessage .thinking-content {
42
- color: #ffffff;
43
- margin-left: 2;
44
- width: 100%;
45
- }
46
-
47
- /* 确保所有子组件都有正确的颜色 */
48
- ThinkingMessage * {
49
- color: #ffffff;
50
- }
51
- """
52
-
53
- # Spinner 动画帧
54
- _SPINNER_FRAMES: ClassVar[tuple[str, ...]] = ("⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏")
55
-
56
- is_active: reactive[bool] = reactive(True)
57
-
58
- def __init__(self, content: str = "", **kwargs: Any) -> None:
59
- super().__init__(content=content, **kwargs)
60
- self._thinking_content = content
61
- self._spinner_position = 0
62
- self._start_time: float = time()
63
- self._animation_timer: Timer | None = None
64
- self._header_widget: Static | None = None
65
- self._content_widget: Static | None = None
66
-
67
- def compose(self):
68
- """构建思考消息布局"""
69
- self._header_widget = Static("🧠 Thinking...", classes="thinking-header")
70
- yield self._header_widget
71
-
72
- self._content_widget = Static(self._thinking_content, classes="thinking-content")
73
- yield self._content_widget
74
-
75
- def on_mount(self) -> None:
76
- """启动动画"""
77
- if self.is_active:
78
- self._animation_timer = self.set_interval(0.1, self._update_animation)
79
-
80
- def _update_animation(self) -> None:
81
- """更新 spinner 动画"""
82
- if not self.is_active or self._header_widget is None:
83
- return
84
-
85
- frame = self._SPINNER_FRAMES[self._spinner_position]
86
- self._spinner_position = (self._spinner_position + 1) % len(self._SPINNER_FRAMES)
87
-
88
- elapsed = int(time() - self._start_time)
89
- self._header_widget.update(f"[bold #ffffff]{frame}[/] [italic #dddddd]Thinking... ({elapsed}s)[/]")
90
-
91
- async def append_content(self, delta: str) -> None:
92
- """追加思考内容"""
93
- self._thinking_content += delta
94
- if self._content_widget:
95
- self._content_widget.update(self._thinking_content)
96
-
97
- def stop(self) -> None:
98
- """停止思考动画"""
99
- self.is_active = False
100
- if self._animation_timer:
101
- self._animation_timer.stop()
102
- self._animation_timer = None
103
-
104
- if self._header_widget:
105
- elapsed = int(time() - self._start_time)
106
- self._header_widget.update(f"[bold #ffffff]💭[/] [italic #aaaaaa]Thought for {elapsed}s[/]")
107
-
108
- @property
109
- def thinking_content(self) -> str:
110
- return self._thinking_content
@@ -1,161 +0,0 @@
1
- """
2
- ToolCallMessage - 工具调用消息组件
3
-
4
- 显示 Tool Call 状态和参数。
5
- """
6
-
7
- from textual.widgets import Static
8
- from textual.reactive import reactive
9
- from textual.containers import Vertical
10
- from typing import Any, Dict, Optional
11
- import json
12
-
13
- from .base import MessageWidget
14
-
15
-
16
- class ToolStatus:
17
- """Tool Call 状态"""
18
- PENDING = "pending"
19
- RUNNING = "running"
20
- SUCCESS = "success"
21
- ERROR = "error"
22
- REJECTED = "rejected"
23
-
24
-
25
- class ToolCallMessage(MessageWidget):
26
- """工具调用消息组件
27
-
28
- 用于显示 Tool Call 的状态和参数:
29
- - pending: 等待执行(黄色)
30
- - running: 执行中(蓝色动画)
31
- - success: 成功(绿色)
32
- - error: 失败(红色)
33
- - rejected: 被拒绝(灰色)
34
- """
35
-
36
- DEFAULT_CSS = """
37
- ToolCallMessage {
38
- width: 100%;
39
- padding: 1;
40
- margin: 0 0 1 0;
41
- border: round $secondary;
42
- background: $surface;
43
- color: #ffffff;
44
- }
45
-
46
- ToolCallMessage.pending {
47
- border: round $warning;
48
- }
49
-
50
- ToolCallMessage.running {
51
- border: round $primary;
52
- }
53
-
54
- ToolCallMessage.success {
55
- border: round $success;
56
- }
57
-
58
- ToolCallMessage.error {
59
- border: round $error;
60
- }
61
-
62
- ToolCallMessage.rejected {
63
- border: round $surface-darken-2;
64
- opacity: 0.7;
65
- }
66
-
67
- ToolCallMessage .tool-header {
68
- text-style: bold;
69
- color: #ffffff;
70
- }
71
-
72
- ToolCallMessage .tool-args {
73
- color: #aaaaaa;
74
- margin-left: 2;
75
- }
76
-
77
- ToolCallMessage .tool-output {
78
- margin-top: 1;
79
- padding: 1;
80
- background: $surface-darken-1;
81
- color: #ffffff;
82
- }
83
- """
84
-
85
- status: reactive[str] = reactive(ToolStatus.PENDING)
86
- output: reactive[str] = reactive("")
87
-
88
- def __init__(
89
- self,
90
- tool_name: str,
91
- args: Dict[str, Any],
92
- tool_id: Optional[str] = None,
93
- **kwargs
94
- ) -> None:
95
- super().__init__(**kwargs)
96
- self._tool_name = tool_name
97
- self._args = args
98
- self._tool_id = tool_id
99
- self.add_class("pending")
100
-
101
- def compose(self):
102
- """构建组件"""
103
- status_icon = self._get_status_icon()
104
- yield Static(
105
- f"{status_icon} {self._tool_name}",
106
- classes="tool-header"
107
- )
108
-
109
- # 显示参数(截断过长的值)
110
- args_display = self._format_args(self._args)
111
- yield Static(args_display, classes="tool-args")
112
-
113
- # 输出区域
114
- if self.output:
115
- yield Static(self.output, classes="tool-output")
116
-
117
- def _get_status_icon(self) -> str:
118
- """获取状态图标"""
119
- icons = {
120
- ToolStatus.PENDING: "⏳",
121
- ToolStatus.RUNNING: "🔄",
122
- ToolStatus.SUCCESS: "✅",
123
- ToolStatus.ERROR: "❌",
124
- ToolStatus.REJECTED: "🚫",
125
- }
126
- return icons.get(self.status, "⏳")
127
-
128
- def _format_args(self, args: Dict[str, Any], max_len: int = 100) -> str:
129
- """格式化参数显示"""
130
- try:
131
- args_str = json.dumps(args, ensure_ascii=False, indent=2)
132
- if len(args_str) > max_len:
133
- args_str = args_str[:max_len] + "..."
134
- return args_str
135
- except Exception:
136
- return str(args)[:max_len]
137
-
138
- def _update_status(self, new_status: str) -> None:
139
- """更新状态"""
140
- self.remove_class(self.status)
141
- self.status = new_status
142
- self.add_class(new_status)
143
- self.refresh()
144
-
145
- def set_running(self) -> None:
146
- """设置为运行中"""
147
- self._update_status(ToolStatus.RUNNING)
148
-
149
- def set_success(self, output: str = "") -> None:
150
- """设置为成功"""
151
- self.output = output
152
- self._update_status(ToolStatus.SUCCESS)
153
-
154
- def set_error(self, error: str = "") -> None:
155
- """设置为失败"""
156
- self.output = f"Error: {error}"
157
- self._update_status(ToolStatus.ERROR)
158
-
159
- def set_rejected(self) -> None:
160
- """设置为被拒绝"""
161
- self._update_status(ToolStatus.REJECTED)
ksadk/tui/widgets/user.py DELETED
@@ -1,37 +0,0 @@
1
- """
2
- UserMessage - 用户消息组件
3
- """
4
-
5
- from textual.widgets import Static
6
- from rich.text import Text
7
- from typing import Any
8
-
9
- from .base import MessageWidget
10
-
11
-
12
- class UserMessage(MessageWidget):
13
- """用户消息组件
14
-
15
- 显示用户输入,左边框绿色
16
- """
17
-
18
- DEFAULT_CSS = """
19
- UserMessage {
20
- height: auto;
21
- padding: 0 1;
22
- margin: 1 0 0 0;
23
- background: transparent;
24
- border-left: wide #10b981;
25
- }
26
- """
27
-
28
- def __init__(self, content: str, **kwargs: Any) -> None:
29
- super().__init__(content=content, **kwargs)
30
- self._content = content
31
-
32
- def compose(self):
33
- """构建用户消息布局"""
34
- text = Text()
35
- text.append("> ", style="bold #10b981")
36
- text.append(self._content, style="#ffffff")
37
- yield Static(text)