用户提交一项基金比较,页面开始出现文字。他又问了一个术语问题,随后刷新页面,回来时打开一条引用,最后决定停止仍在进行的比较。
单独看,每一步都很普通。放在同一条交互链上,问题才显现出来:后到的回答应该落在哪条问题下面?刷新读回的内容能否覆盖刚刚看到的新版本?点击停止之后,页面应该显示“正在停止”,还是直接宣布“已停止”?
Agent 客户端的核心工作,是把用户操作、任务进展和研究结果稳定地对应起来。 SSE 只是其中一种实时传输方式。浏览器接到了字符串,并不意味着它已经正确呈现了一次研究。
在 ETF Agent 的职责划分中,客户端负责交互与阅读。本文以既有客户端机制和公开工程记录为例,解释这项职责;文中的验收场景是设计检查方法,不是本次重新执行的测试报告。完整产品客户端与独立的 Open ETF Agent 教学实现也不是同一套交付范围。
职责示意:客户端及时回应操作,但任务状态与内容资格仍从各自的原始事实取得。
一、客户端当然有状态,但不能替其他模块宣布事实
“前端不要再造一套状态机”容易被误解成“前端不应该有状态”。实际恰好相反:输入草稿、弹层、滚动位置、当前选中的研究、尚未收到回执的按钮操作,都需要明确的本地状态。
需要避免的是:用这些本地状态替代任务的真实状态。
用户点击发送,可以立即看到自己的消息正在提交;但是否已经创建研究,要等接纳结果。点击停止,可以立即禁用重复点击并显示请求中;但浏览器关闭了网络连接,不代表原研究已经停止。打开一个引用详情,可以由客户端控制展开和焦点;但哪些资料允许当前用户查看,不能由这个展开动作自行决定。
这几项职责可以放在同一张页面上,却不应混为同一个判断:
对应到现有架构,正文发布、会话事件与历史交付、来源与引用资格各有自己的负责者。客户端消费这些事实,组织可操作、可阅读的界面,不重新裁定发布资格和研究结论。[1][2]
这种分工并不会削弱前端。它让前端真正拥有的是交互质量,而不是一份容易与服务端分叉的执行记录。
二、当回答可以乱序完成,最后一条消息就不再可靠
一个问题、一条连接、一段回答的原型,通常可以用“当前 assistant 消息”承接所有增量。只要始终串行,这个办法并不难理解。
但用户不一定按这个模型使用产品。他可以先发起长研究,再问一个很短的问题;短问先完成,长研究随后才补上阶段结果。此时,最新收到的正文未必属于界面上最后一条问题。
因此,页面需要保留三种关系:用户原问题属于哪次执行、回答属于哪次执行、每段已发布正文属于哪个内容对象。这里的 Run 可以简单理解为一次被接纳的任务执行,并不等同于整个聊天会话。
ETF Agent 的并发交互记录中,有一个很能说明问题的故障:页面先创建临时回答行,历史读取随后用正式消息替换它,流式更新却仍然指向旧临时 ID,导致后续回答找不到承载位置。修复的关键是沿原 Run 找到当前消息,而不是再复制一份回答。[3]
这给前端实现带来两个直接约束。
首先,视图位置不能充当业务身份。数组下标、最后一个气泡、当前打开的面板,都不适合决定事件归属。即使为了阅读体验调整展示顺序,回答仍要保留“回复了哪条问题”的关系。
其次,临时 UI 身份被正式身份替换时,事件路由也要完成交接。历史回读不是把组件整体换掉就结束了;它还影响后续增量、停止操作、错误提示和引用详情的目标。
同样的约束适用于没有发送成功的草稿。草稿至少要跟随账户和会话边界;会话 A 的迟到响应,不能把内容恢复进会话 B。旧消息的接纳回执,也不能顺手清空用户随后输入的新文字。[3]
归属示意:完成先后可以变化,问题、回答和控制目标不能因此串线。
三、实时事件与历史回读,合并的是同一份回答
实时流解决“现在发生了什么”,历史读取解决“目前能够重新取得什么”。它们会交错到达,不能各维护一套互不相干的正文。
MDN 对 SSE 的说明包含事件类型、事件 ID 与重连机制,但这些传输能力并没有替应用定义正文修订、查看权限和历史合并规则。采用原生 EventSource 或其他流式客户端时,都要单独处理应用层的内容身份。[4]
对一段回答,最重要的不是收到多少个片段,而是知道它属于哪个 Run、哪个正文对象,以及该对象的哪个修订。修订号只在对应对象的合同内有意义,不能把不同回答的版本号放在一起比较。
例如,页面已经显示正文 P 的第二版,较早发出的历史请求这时才返回第一版。不能因为它后到,就把屏幕退回旧内容。反过来,如果读者主动打开的是历史第一版,客户端也不应该把它悄悄升级成当前最新版。
当前视图的合并与历史版本的浏览,是两个不同的用户动作。
预览与保存之间还有一段容易忽略的时间差:文字已经显示,持久化回执尚未到达;紧接着历史读取暂时没有返回正文。此时,立刻清空界面会造成“刚出现的答案消失了”,直接把预览视为已保存又会制造虚假交付。
合理处理是:在同一查看范围、同一 Run、身份与内容严格对应的条件下,暂时保留可见预览,并继续有限度地只读核对;只有匹配的保存事实才能把它确认为持久内容。版本冲突或身份不匹配不能靠“文字看起来差不多”合并。
这里还有一个优先级更高的边界:保留预览不能对抗当前权限。 账户切换、明确的访问拒绝和资料撤权,不能被当成普通的历史读取延迟。缓存不是一份永久有效的授权。[1][2]
因此,合并逻辑应集中在明确的视图投影层,而不是分散在消息组件、历史组件和来源组件各自的副作用里。渲染层拿到的是已经对齐身份的阅读模型,不需要再猜一次正文归属。
合并示意:比较同一正文对象的修订;明确的权限拒绝优先于暂存预览。
四、连接、任务和正文,要在界面上分别说清楚
一个全局 loading 无法表达长研究中的所有情况。
网络断开时,任务可能仍在运行;任务后来失败时,前面已经保存的阶段回答可能仍然有效;任务执行结束时,客户端也可能还在等待历史视图补齐。
这不意味着要把所有内部状态暴露成十几个徽标。页面只需告诉用户与下一步有关的区别。
连接异常时,可以显示“连接暂时中断,正在重新读取进展”,不要直接给研究盖上失败印章。已有阶段结果、剩余部分未完成时,应保留仍获准展示的正文,并明确未完成的范围。读取失败时,则说明当前无法确认最新状态,而不是把旧页面包装成实时结果。
停止也是同样的道理。停止一项研究通常影响后续工作,并不等于撤销已经发生的动作,更不等于删除已保存的回答。ETF Agent 的异步交付记录已经把停止、阶段正文和后续历史读取分别处理。[1]
从组件角度看,这些区别应当有各自的数据来源;从用户角度看,它们可以压缩成一句准确的提示。内部区分是为了减少界面的误导,不是为了让用户学习内部术语。
五、发送、补充和停止,需要各自的操作回执
一个研究正在进行时,用户的新输入至少可能有三种含义:问另一个问题、补充当前研究、回答研究提出的澄清问题。停止任务则是另一种明确的控制动作。
最稳妥的交互,是在已有上下文能够确定目标时直接携带目标。例如,在某项研究面板内点击“补充要求”,输入框就应清楚显示它正在调整哪项研究;没有必要再让语言理解重新猜一次目标。用户从主输入框发出含糊的调整时,才需要澄清对象。[3]
操作回执也要对应实际发生的事情。“要求已收到”只说明输入得到接纳;“已交给研究处理”说明它进入后续处理;“报告已按要求更新”则需要结果本身支持。不能为了给用户积极反馈,把三者压成一个“已完成”。
重复点击与重试同样需要分工。客户端可以合并进行中的点击、防止按钮连按,但真正的重复请求识别要依靠服务端合同。仅在浏览器里设置一个布尔变量,不能保证刷新或重连后不重复执行。
草稿也应遵循精确确认:回执确认的是哪次提交,就只处理那次提交对应的编辑状态。发送失败可以保留原草稿,发送成功不能清空一段更晚输入的新内容。
这部分并不要求增加复杂的审批面板。多数情况下,一个明确的任务标签、一条准确的回执,以及失败后可理解的恢复动作就够了。
六、正文、引用和阅读位置,共同构成一份结果
客户端不能只保证文字没有丢,还要保证用户读到的关系没有错。
正文从第一版变成第二版后,对应引用也必须属于第二版。不能显示新结论,却继续打开旧版本的核查材料;不能因为两个段落出现相同数字,就在浏览器里推断它们引用了同一次计算。
ETF Agent 的引用设计强调,来源身份、引用对应与材料是否支持结论是不同问题。客户端应提供核查路径,但不能把一个引用图标渲染成“已经验证正确”的徽章。[2]
对读者而言,最有价值的详情往往只有几个问题:当时到底读到了什么,材料是哪一版,有没有截断或缺少上下文,以及怎样打开原来源。网页现在的内容与当时保存的片段,也应有明确区分。
交互形态不必只有一种。短内容可以就地展开,较长材料可以用侧栏或对话框;关键是能用键盘和触屏操作,而不是把全部信息藏在悬停提示里。采用折叠模式时,应正确表达展开状态;采用模态对话框时,应处理焦点进入、关闭及返回原触发位置。W3C 的 Disclosure 与 Dialog 模式分别给出了相应约定,不能混用两套交互语义。[5][6]
阅读位置也值得单独设计。用户已经向上查看引用时,新正文到达不应不断把他拉回底部。可以保留当前位置,并提供“有新内容”的入口。正文修订影响当前展开详情时,应让详情跟随准确版本重新取得,或明确提示内容已更新,不能无声混接。
这些是推荐的阅读交互要求;不能从一个来源弹层可以打开,就推断所有流式修订、焦点迁移和移动设备组合都已经验收。
七、验收应从容易错位的交接开始
只看“发送后页面出现回答”,很难发现客户端最重要的问题。更有辨识力的是让不同事件发生交错,再观察用户最终看到什么。
下面是一组适合客户端交互与阅读的验收场景,不是通过情况清单:
纯数据合并可以通过确定性测试覆盖;真实的 Tab 顺序、焦点恢复、滚动和窄屏布局则需要浏览器观察。某一层通过,并不能替另一层作保证。
这里的目标也不是用前端测试证明研究结论正确。它要证明的是:用户实际看到并操作的,确实是对应任务、对应版本、当前允许展示的内容。
八、公开代码可以先复现哪一段?
Open ETF Agent 提供了报告、来源与附件的本地回读示例,可以用来观察“重新阅读保存结果,不重新生成结果”这一基础边界。历史 v0.6 的固定提交说明保留了当时的实现与限制;持续使用入口以当前 main 的模块指南为准。
下面采用 2026 年 11 月 2 日读取的当前 main 文档步骤,要求 Node.js 26.8.1–26.x 与 npm。安装依赖可能联网,默认示例使用合成材料,不需要模型密钥:
完整复现命令见文末技术站原文。
根据公开指南,示例会在独立 Run 目录生成报告和记录;本地读取服务会打印访问地址,读者可查看已登记报告、来源窗口及相关附件。这里引用的是文档步骤,本次文章编写没有重新执行该示例。[7]
这个 reader 只监听本机 loopback 地址,没有面向公网的身份认证;它是本地阅读示例,不是可以直接对外部署的网站。
这段公开实现不是完整产品客户端:不能由本地回读服务推出多账户聊天、前台并发、SSE 恢复和全部产品交互已经公开交付。它适合先理解结果身份与阅读边界,再把这些约束带回自己的客户端设计。
回到开头:用户问完问题,继续聊天,刷新页面,核查引用,再停止原研究。一个可靠的客户端应让这些动作自然衔接,而不要求用户知道后台如何执行。它的工程价值,就在这些看似普通、却最容易错位的交接里。
用户旅程见配套文章《Agent 客户端交互全景:从提出问题,到读懂结果、继续研究》。
参考与延伸阅读
[1] ETF Agent,研究还没结束,用户已经离开了:Agent 怎样按时交付真实成果?
[2] ETF Agent,Agent 引用系统设计:从来源签发、版本绑定到独立复核
[3] ETF Agent,异步后台研究与前台并发交互实践
[4] MDN,Using server-sent events。这里引用传输与重连语义,不把它当成应用层恢复协议。
[5] W3C WAI-ARIA APG,Disclosure Pattern。
[6] W3C WAI-ARIA APG,Dialog (Modal) Pattern。
[7] Open ETF Agent,当前 README与模块指南。代码与文档取材日期:2026 年 11 月 2 日;main 是可变入口。
原文:Agent 客户端不只是展示 SSE:一次研究怎样被正确呈现?
更多 Agent 工程实践见 GitHub 文章文集,欢迎 Star。
本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。
Users submit a fund comparison and text begins to appear on the page. He asked another question about terminology, then updated the page, then returned with a reference and finally decided to stop the comparison that was still in progress.
Seen alone, every step is ordinary. Put it on the same interactive chain before the question becomes apparent: what should be the answer to the later question? Could refreshing the readback cover the new version just seen? After clicking has stopped, should the page show " Stopping ", or should it be declared " Stopping " ?
The core work of the Agent client is the steady matching of user operations, mission progress and research results. SSE is just one of those real-time transmissions. The browser received a string, which does not mean that it has correctly presented a study.
In the division of ETFAgent responsibilities, the client is responsible for interaction and reading. This paper explains this responsibility by taking as an example the established client mechanisms and open engineering records; the acceptance check scene in the text is the design of the inspection method, not the test report for this re-execution. The complete product client and the independent Open ETF Agent teaching realization are not the same range of deliverables.
Duties: Clients respond to operations in a timely manner, but mission status and content qualifications are derived from their original facts.
I. The client certainly has a state of affairs, but cannot declare facts for other modules
“Don't create another set of state machines at the front end” can be misinterpreted as “no state at the front end”. The opposite is true: input drafts, bomb layers, scroll positions, currently selected studies, button operations that have not yet received a reply require a clear local state.
What needs to be avoided is that these local conditions replace the real state of the mission.
Users click to see that their message is being submitted immediately; however, research has been created, pending acceptance. Click to stop and you can immediately disable a repeat click and display the request; however, the browser has closed the network connection and does not mean that the original study has been stopped. Opens a reference detail that can be expanded and focused by client control; however, what information allows current users to view cannot be determined by this expansion.
These duties can be placed on the same page, but should not be confused with the same judgement:
Corresponding to existing structures, the main text publish, session events and historical delivery, sources and citation have their own responsibilities. The client consumes these facts, organizes an operational, readable interface and does not re-determine publish qualifications and findings. [1][2]
This division of labour does not weaken the front end. It gives the front end real ownership of interactive quality rather than an implementation record that is easy to cross with the service end.
Two: When the answer can be done in an irregular manner, the last message is no longer reliable.
A prototype of a question, a connection, and an answer can normally be used to carry all increments using the "Current Asistant message". This approach is not difficult to understand as long as there is always a line.
However, users do not necessarily use the product according to this model. He could initiate a long-term study before asking a very short question; the short-term questions would be completed and the long-term study would be followed up with the results. At this point in time, the newly received body is not necessarily the last issue on the interface.
There are therefore three relationships that need to be maintained on the page: where the original user question was executed, where the answer was executed, and where each paragraph of publish text was the subject. Run here can simply be understood as an accepted task, not as an entire chat.
In the ETF Agent's simultaneous interactive record, there is a very illustrative malfunction: the page creates a temporary answer line, history reads it and then replaces it with a formal message, and the current update still points to the old temporary ID, which leads to the inability to locate the carrying position for the subsequent answer. The key to repair is to find the current message along the lines of Run instead of copying another answer. [3]
This leads to two direct constraints on front-end realization.
First, the view location cannot act as business identity. The array subscript, the last bubble, the currently open panel are not suitable for determining the attribution of the event. Even in order to reorder the presentation for reading experience, the answer retains the relationship between which questions were answered.
Secondly, when a temporary UI identity is replaced by an official identity, the route to the event is also completed. Historical re-reading does not end when the components are replaced as a whole; it also affects the objectives of subsequent increments, suspensions, error tips and references to details.
The same constraints apply to the failure to send successful drafts. The draft must at least follow the account and session boundary; the late response of session A does not restore content to session B. The receipt letter for the old message does not empty the new text that the user then enters. [3]
Attribution: The sequence of completion can change and the question, answer and control objectives cannot be linked.
iii. Real-time events and history review, combined with the same answer
Real-time flow solves “what happens now”, and history reads “what can be regained now”. They will be staggered and cannot each maintain a separate set of texts.
The MDN description of SSE contains the type of event, event ID and reconnection mechanism, but these transmission capabilities do not apply the definition body to revise, view permission and historical merge rules. When using a primary source source or other fluent client, the application layer content identity is handled separately. [4]
The most important answer to a paragraph is not how many clips it receives, but what Run, which body object it belongs to and which amendment to that object. Revision numbers are meaningful only in the contract of the counterparty and the versions of different answers cannot be compared together.
For example, the page already displays the second version of the body of the body P and returns the first version at an earlier historical request. The screen cannot be returned to the old content because of its late arrival. Conversely, if the reader is willing to open the first edition of history, the client should not quietly upgrade it to the latest version of the current edition.
The merge of the current view and the browsing of the historical version are two different user actions.
There is also an easily negligible time difference between preview and preservation: text has shown that a durable memory has not yet arrived; and then history reads only temporarily not back to the body. At this point, the immediate clearance of the interface will result in “the newly emerging answer disappears”, and the preview will be considered to have been preserved and create false delivery.
Reasonable treatment is to retain a visual preview for the time being under the same range, the same Run, and the strict correspondence between identity and content, and to continue to read only the check to a limited extent; only a matching preservation fact can be recognized as a durable content. Version conflicts or identity mismatches cannot be combined by words that look similar.
There is also a higher-priority border: keeping the preview cannot counter the current permission. Account switching, explicit denial of access and removal of information cannot be considered a normal historical delay. cache is not a permanent mandate. [1][2]
Therefore, the consolidation logic should concentrate on a clear view projection layer rather than being dispersed in the respective side effects of message components, historical components and source components. Rendering layers get a model of identity-matched reading, and there is no need to guess what the body belongs to.
Merger: Compare revisions of the same body object; the explicit permission refuses to take precedence over the temporary preview.
IV. Connections, tasks and text, to be clear on interfaces
A global loating cannot express everything in the long study.
When the network is disconnected, the task may still be in operation; when the mission fails, the previous stage, which has been saved, may still be valid; at the end of the task, the client may still be waiting for the historical view to be completed.
This does not mean exposing all internal conditions to a dozen logos. The page simply tells the user the difference in relation to next step.
When a connection is abnormal, you can show “the connection is temporarily broken and rereading progress” and do not simply stamp the study with a failed stamp. Where there is a stage result and the remainder is not completed, the text that is still allowed to be displayed should be retained and the scope of the unfinished business clarified. When the reading fails, it indicates that it is not possible to confirm the state of the latest, rather than wrapping the old page into a real-time result.
The same is true of cessation. Discontinuing a study usually affects follow-up and does not mean revoking an action that has already taken place, let alone deleting a saved response. ETF Agent's step-off delivery records have been processed separately for stoppage, stage text and subsequent history. [1]
From a component point of view, these differences should have their own data sources; from a user's point of view, they can be condensed into an accurate hint. Internal differentiation is intended to reduce the misleading interface and not to allow users to learn internal terminology.
Sending, supplementing and stopping, requiring respective operational back-up
When one study is under way, the user ' s new input may have at least three meanings: asking another question, complementing the current study and responding to the clarifications raised by the study. Stopping the mission is another clear control action.
The most conservative interaction is the direct carrying of a target when context is able to set the target. For example, by clicking on “additional requirements” in a research panel, the input box should clearly indicate which study it is adjusting; there is no need for a re-guessing of objectives by linguistic understanding. The user needs to clarify the object only if he/she sends an ambiguous adjustment from the main input box. [3]
Operating the reply also corresponds to what actually happened. The “request received” indicates only that the input was accepted; the “referred to the study” indicates that it is in follow-up; and the “report updated as required” requires support from the results themselves. The three cannot be reduced to one “completed” in order to give positive feedback to users.
Repeated hits require the same division of labour as retry. Clients can combine ongoing clicks, prevent buttons, but true duplicate requests for identification depend on service-end contracts. Sets only one boolean variable in the browser, which does not guarantee that you will not repeat after refreshing or reconnecting.
The draft should also be subject to precise confirmation: only the corresponding editorial status of the submission was dealt with when the reply was confirmed. Sending failed to keep the original draft, sending a new message that successfully does not empty a later input.
This part does not require the addition of complex approval panels. In most cases, a clear mission label, an accurate endorsement and understandable recovery action after failure would suffice.
VI. body text, reference and reading location, which together constitute a result
The client must not only ensure that the text is not lost, but also that the relationship read by the user is correct.
When the text is changed from the first to the second version, the corresponding reference must also belong to the second version. New findings cannot be shown, but the old version of the verification material continues to be opened; the same number cannot be inferred from the browser because of the same number of paragraphs.
The ETF Reference Design emphasizes that the question of source identity, reference to material supports the conclusion. Clients should provide a path to verification, but cannot render a reference icon to a " verified correct " badge. [2]
For readers, the most valuable details are often only a few questions: What was read, which version of the material, whether it was cut off or missing, and how it was opened. There should also be a clear distinction between the content of the web page as it now stands and the segments kept at that time.
There is no need for only one type of interaction. Short content can be carried out in situ and longer materials can be used as sidebars or dialogue boxes; the key is to operate with keyboards and touch screens, rather than to hide all information in the suspension hint. When a folding mode is used, the active state should be correctly expressed; when a model dialogue box is used, focus entry, closure and return to the original trigger position should be handled. The W3C Disclosure and Dialog models provide respective agreements and cannot be combined with two sets of interactive syntax. [5] [6]
It's also worth a separate design. When the user has looked up the reference, the new text should not keep pulling him back to the bottom. You can retain your current location and provide access to “new content”. When the text revisions affect the details of the current roll-out, the details should be retrieved with the exact version, or the content of the explicit reminder has been updated and cannot be confused in silence.
These are recommended reading interaction requirements; they cannot be opened from a source layer, assuming that all current modifications, focus migrations and mobile device combinations have already been acceptance check.
VII. acceptance check begins with an easily staggered handover
It is difficult to find the most important questions of the client simply by looking at " answers on post-transmission pages ". What is more visible is to stagger different events and then see what the user eventually sees.
The following is a set of acceptance check scenes suitable for client interaction and reading, not through the checklist:
Pure data consolidation can be covered by certainty tests; real Tab order, focus restoration, scrolling and narrow screen layout require browser observation. One level of passage does not guarantee the other.
Nor is the goal here to justify the findings with front-end tests. It is intended to prove that what the user actually sees and operates is indeed the corresponding task, the corresponding version and what is currently allowed to display.
VIII. Which part of the public code can be reproduced first?
Open ETF Agent provides examples of reports, sources and attachments that can be used to observe the base boundary of “reread saving results and do not recreate results”. The historical v0.6 fixed submission statements retain the current realizations and limitations; continuous access is based on the current main module guide.
The current main document step, read on 2 November 2026, is set out below, requiring Node.js 26.8.1-26.x and npm. The installation depends on possible networking, and the default example uses synthetic materials without model keys:
The complete reproduction command is in the original language of the technological station at the end of the text.
According to the public guide, examples generate reports and records in an independent Run directory; local reading services print access to addresses and readers can view registered reports, source windows and associated attachments. The document steps are cited here, and the example is not re-examining in this article. [7]
This reader listens only to the local loopback address, which does not have an identity certificate for the public network; it is an example of local reading, not a website that can be deployed directly from outside.
This public realization is not a complete product client: multi-account chats, front-office co-opting, SSE restoration and all product interactions are publicly delivered without local readback services. It is appropriate to understand the result identity and the reading boundary before taking these constraints back to their client design.
Back to the beginning: Users finish asking questions, continue chatting, refresh pages, verify references, then stop research. A reliable client should allow these actions to be naturally connected without requiring users to know how the back office works. Its engineering value lies in these seemingly ordinary but most easily misappropriated exchanges.
The user ' s trip is accompanied by the article Agent Client Interactive Panorama: From asking questions to reading results and continuing research.
References and extended reading
[1] ETF Agent, the study is not over, the user has left: How does Agent deliver real results on time?
[2] ETF Agent, Agent citation system design: from source issue, binding to independent review
[3] ETF Agent, Cross-step Backstage Research and Co-execution
[4] MDN, Using server-sent events. This refers to transmission and reconnection syntax and does not treat it as an application layer restoration protocol.
[5] W3C WAI-ARIA APG,Disclosure Pattern。
[6] W3C WAI-ARIA APG,Dialog (Modal) Pattern。
[7] Open ETF Argentina, current README and module guide. The code and document extract date: 2 November 2026; Main is a variable entry.
Original: Agent Client is more than just displaying SSE: How can a study be presented correctly?
More Agent engineering practices can be found in GitHub article collection, welcome Star.
Auto-fetched and translated by AI Atlas. All rights belong to the original author.