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.
- {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/METADATA +6 -4
- {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/RECORD +123 -128
- ksadk/api/client.py +19 -0
- ksadk/cli/cmd_create.py +34 -7
- ksadk/cli/cmd_hermes.py +6 -2
- ksadk/cli/cmd_invoke.py +208 -41
- ksadk/cli/cmd_mcp.py +6 -1
- ksadk/cli/cmd_openclaw.py +6 -2
- ksadk/cli/cmd_run.py +13 -6
- ksadk/cli/network_options.py +5 -3
- ksadk/configs/env_registry.py +1 -0
- ksadk/conversations/message_projection.py +269 -0
- ksadk/conversations/model_context.py +11 -1
- ksadk/conversations/runtime.py +81 -13
- ksadk/deployment/base.py +1 -1
- ksadk/deployment/providers/serverless.py +18 -8
- ksadk/memory/adk/resilient_session_service.py +268 -0
- ksadk/memory/adk/short_term_memory.py +21 -6
- ksadk/runners/adk_runner.py +974 -115
- ksadk/runners/langchain_runner.py +219 -7
- ksadk/runners/langgraph_runner.py +145 -12
- ksadk/runners/remote_runner.py +143 -18
- ksadk/server/app.py +148 -6
- ksadk/server/static/assets/{ArtifactsPanel-C0meuOdi.js → ArtifactsPanel-D-SSn2ee.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-BbI4HPtJ.js → CodeBlock-P16VOLYi.js} +1 -1
- ksadk/server/static/assets/{MathMessageMarkdown-DMLQYoLp.js → MathMessageMarkdown-CdGiQWHR.js} +1 -1
- ksadk/server/static/assets/{MermaidBlock-DCR8WZ17.js → MermaidBlock-IOcal8cm.js} +6 -6
- ksadk/server/static/assets/{NativeTerminalPanel-CKUvWhUz.js → NativeTerminalPanel-DGSDWsei.js} +1 -1
- ksadk/server/static/assets/{arc-bj2rZnP5.js → arc-BA13sHc9.js} +1 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-3BPJPVTR-2u1ltDIj.js → architectureDiagram-3BPJPVTR-DzJzgVoL.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-GPEHLZMM-D6fvdK20.js → blockDiagram-GPEHLZMM-UTdVcZhn.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-AAUBKEIU-BK82L5n5.js → c4Diagram-AAUBKEIU-Dix0GD4m.js} +1 -1
- ksadk/server/static/assets/channel-CTuydARX.js +1 -0
- ksadk/server/static/assets/{chunk-2J33WTMH-DLVdkeyQ.js → chunk-2J33WTMH-C2JxuZ42.js} +1 -1
- ksadk/server/static/assets/{chunk-4BX2VUAB-BbwsYcbW.js → chunk-4BX2VUAB-Be57QPgD.js} +1 -1
- ksadk/server/static/assets/{chunk-55IACEB6-DOairxzw.js → chunk-55IACEB6-WjSuy4nv.js} +1 -1
- ksadk/server/static/assets/{chunk-727SXJPM-hCO487gs.js → chunk-727SXJPM-BOovP-b5.js} +1 -1
- ksadk/server/static/assets/{chunk-AQP2D5EJ-XU8vDOuG.js → chunk-AQP2D5EJ-DOmZNmWj.js} +1 -1
- ksadk/server/static/assets/{chunk-FMBD7UC4-PrapyfMu.js → chunk-FMBD7UC4-DzwlodkU.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-CboKhTZ3.js → chunk-ND2GUHAM-DMqAikEU.js} +1 -1
- ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +1 -0
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-_N8bJ-EU.js → cose-bilkent-S5V4N54A-Zhy2GBnP.js} +1 -1
- ksadk/server/static/assets/{dagre-BM42HDAG-FoDlo5J2.js → dagre-BM42HDAG-CbKrtIUz.js} +1 -1
- ksadk/server/static/assets/{diagram-2AECGRRQ-BBp6ebBw.js → diagram-2AECGRRQ-BRApgQRK.js} +1 -1
- ksadk/server/static/assets/{diagram-5GNKFQAL-CqOvG1PR.js → diagram-5GNKFQAL-D0xbnDiK.js} +1 -1
- ksadk/server/static/assets/{diagram-KO2AKTUF-O9T3t6ba.js → diagram-KO2AKTUF-CVugVI9L.js} +1 -1
- ksadk/server/static/assets/{diagram-LMA3HP47-CGG8ekBO.js → diagram-LMA3HP47-DozUGgee.js} +1 -1
- ksadk/server/static/assets/{diagram-OG6HWLK6-4BmH1EEg.js → diagram-OG6HWLK6-ZOYsKlru.js} +1 -1
- ksadk/server/static/assets/{dist-BmuTWcm7.js → dist-2hInLS_J.js} +1 -1
- ksadk/server/static/assets/{dist-BMKM66B4.js → dist-8EEyGgDx.js} +1 -1
- ksadk/server/static/assets/{dist-Cp1_jKwf.js → dist-8_SfK1IP.js} +1 -1
- ksadk/server/static/assets/{dist-CZ6C3x8B.js → dist-B0NP_Z0z.js} +1 -1
- ksadk/server/static/assets/{dist-DLeM1OCK.js → dist-BIJVDMuB.js} +1 -1
- ksadk/server/static/assets/{dist-Cwhk4lwI.js → dist-BmlMPsCc.js} +1 -1
- ksadk/server/static/assets/{dist-D99wf6_X.js → dist-BrCcQ47T.js} +1 -1
- ksadk/server/static/assets/{dist-CWiTDN_V.js → dist-BssVmjIo.js} +1 -1
- ksadk/server/static/assets/{dist-BVzcWa6D.js → dist-C3HIIaN5.js} +1 -1
- ksadk/server/static/assets/{dist-DM0rEQPk.js → dist-CPBtqRTW.js} +1 -1
- ksadk/server/static/assets/{dist-BkJjNih3.js → dist-CkEKJFtk.js} +1 -1
- ksadk/server/static/assets/{dist-B67uF2uK.js → dist-D-JMdWPQ.js} +1 -1
- ksadk/server/static/assets/{dist-DI-oVAXw.js → dist-D-xOD048.js} +1 -1
- ksadk/server/static/assets/{dist-6kSZvCZh.js → dist-D57wnGWd.js} +1 -1
- ksadk/server/static/assets/{dist-Bk1l05Ni.js → dist-DL_NKc_z.js} +1 -1
- ksadk/server/static/assets/{dist-DbaH3p5h.js → dist-DMezvBGJ.js} +1 -1
- ksadk/server/static/assets/{dist-CiZHB6ZW.js → dist-DmFaq_Iy.js} +1 -1
- ksadk/server/static/assets/{dist-DLMjL01k.js → dist-Dp0k7bWI.js} +1 -1
- ksadk/server/static/assets/{dist-DCpZrjaK.js → dist-DpKtt4Bo.js} +1 -1
- ksadk/server/static/assets/{dist-D5JGcxBx.js → dist-DyOkZmze.js} +1 -1
- ksadk/server/static/assets/{dist-C2DKRFVK.js → dist-DyWsb78Q.js} +1 -1
- ksadk/server/static/assets/{dist-S4klkK5W.js → dist-gX6GOLKq.js} +1 -1
- ksadk/server/static/assets/{erDiagram-TEJ5UH35-oJhaci7S.js → erDiagram-TEJ5UH35-Bk-9bgE5.js} +1 -1
- ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +1 -0
- ksadk/server/static/assets/{flowDiagram-I6XJVG4X-DtTmUan-.js → flowDiagram-I6XJVG4X-Dn9kZVuZ.js} +1 -1
- ksadk/server/static/assets/{ganttDiagram-6RSMTGT7-BSsb_eij.js → ganttDiagram-6RSMTGT7-BGxXlJqm.js} +1 -1
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-PVQCEYII-BR5s6Pws.js → gitGraphDiagram-PVQCEYII-C7Q0X-wi.js} +1 -1
- ksadk/server/static/assets/{index-BH7-pC0B.js → index-C00Lwg3L.js} +6 -6
- ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +1 -0
- ksadk/server/static/assets/{infoDiagram-5YYISTIA-DYPc5cvh.js → infoDiagram-5YYISTIA-BO_CSqq5.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-MoBdALDg.js → ishikawaDiagram-YF4QCWOH-eYLPLd46.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-DgLiQT8l.js → journeyDiagram-JHISSGLW-De9geSb0.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-CsFx112F.js → kanban-definition-UN3LZRKU-Cs80kQto.js} +1 -1
- ksadk/server/static/assets/{katex-DRsiwpM2.js → katex-DSrCFD8n.js} +1 -1
- ksadk/server/static/assets/{linear-TNRQ5Orv.js → linear-CN9sbKTF.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-D2eMVOgo.js → mermaid-parser.core-DlgSBU8l.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-BtByYFhL.js → mindmap-definition-RKZ34NQL-9afz7Oug.js} +1 -1
- ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +1 -0
- ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +1 -0
- ksadk/server/static/assets/{pieDiagram-4H26LBE5-DPnuCB8c.js → pieDiagram-4H26LBE5-DPv_VstN.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-miFpCPv4.js → quadrantDiagram-W4KKPZXB-o77wZ1XK.js} +1 -1
- ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +1 -0
- ksadk/server/static/assets/{requirementDiagram-4Y6WPE33-mjB_yYkW.js → requirementDiagram-4Y6WPE33-BYVw81VC.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-D7hSlZZZ.js → sankeyDiagram-5OEKKPKP-B7nZFMKT.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-D9Cx6hC3.js → sequenceDiagram-3UESZ5HK-BGRRrFw5.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-AJRCARHV-D_zrg47o.js → stateDiagram-AJRCARHV-BUfHCoPs.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +1 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-CwSec0Wa.js → timeline-definition-PNZ67QCA-FbCTGrf9.js} +1 -1
- ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +1 -0
- ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +1 -0
- ksadk/server/static/assets/{vennDiagram-CIIHVFJN-agCVobiF.js → vennDiagram-CIIHVFJN-DWgwtPsJ.js} +1 -1
- ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-YWT4CUSO-TmrlhWNt.js → wardleyDiagram-YWT4CUSO-2x8G-tTM.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-2RQKCTM6-DV71V-ah.js → xychartDiagram-2RQKCTM6-Drma3AYl.js} +1 -1
- ksadk/server/static/index.html +1 -1
- ksadk/sessions/__init__.py +17 -21
- ksadk/sessions/continuity.py +28 -4
- ksadk/sessions/postgres_service.py +77 -14
- ksadk/sessions/resilience.py +52 -0
- ksadk/sessions/resilient.py +360 -0
- ksadk/toolsets/__init__.py +2 -0
- ksadk/toolsets/workspace.py +49 -10
- ksadk/tracing/setup.py +63 -0
- ksadk/tui/__init__.py +22 -7
- ksadk/tui/loop.py +1877 -0
- ksadk/tui/stream_render.py +68 -0
- ksadk/version.py +1 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-Cr6Xz1_c.js +0 -1
- ksadk/server/static/assets/channel-BSSOwFIb.js +0 -1
- ksadk/server/static/assets/chunk-QZHKN3VN-XXpdiwUL.js +0 -1
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-C5HvGiyK.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-C5HvGiyK.js +0 -1
- ksadk/server/static/assets/eventmodeling-FCH6USID-CIgwHJLL.js +0 -1
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BVAJ7uo0.js +0 -1
- ksadk/server/static/assets/info-J43DQDTF-MT80V4ge.js +0 -1
- ksadk/server/static/assets/packet-YPE3B663-BLKhbXZB.js +0 -1
- ksadk/server/static/assets/pie-LRSECV5Y-DFOikjSY.js +0 -1
- ksadk/server/static/assets/radar-GUYGQ44K-095b1Ikw.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-J9kCb0nC.js +0 -1
- ksadk/server/static/assets/treeView-BLDUP644-yinfJEY6.js +0 -1
- ksadk/server/static/assets/treemap-LRROVOQU-DosUqN1Q.js +0 -1
- ksadk/server/static/assets/wardley-L42UT6IY-Bvp7-5uH.js +0 -1
- ksadk/tui/app.py +0 -400
- ksadk/tui/clipboard.py +0 -100
- ksadk/tui/widgets/__init__.py +0 -22
- ksadk/tui/widgets/assistant.py +0 -89
- ksadk/tui/widgets/base.py +0 -54
- ksadk/tui/widgets/chat_input.py +0 -246
- ksadk/tui/widgets/history.py +0 -156
- ksadk/tui/widgets/system.py +0 -87
- ksadk/tui/widgets/thinking.py +0 -110
- ksadk/tui/widgets/tool_call.py +0 -161
- ksadk/tui/widgets/user.py +0 -37
- {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/top_level.txt +0 -0
ksadk/tui/widgets/thinking.py
DELETED
|
@@ -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
|
ksadk/tui/widgets/tool_call.py
DELETED
|
@@ -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)
|
|
File without changes
|
{agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{agentengine_sdk_python-0.6.9.dist-info → agentengine_sdk_python-0.7.0.dist-info}/top_level.txt
RENAMED
|
File without changes
|