{"id":107761,"date":"2026-09-20T08:57:15","date_gmt":"2026-09-20T00:57:15","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/107761.html"},"modified":"2026-09-20T08:57:15","modified_gmt":"2026-09-20T00:57:15","slug":"deepseek-harness-%e4%b8%ba%e4%bb%80%e4%b9%88-deepseek-%e6%8a%8a%e6%95%b4%e4%b8%aa-agent-%e9%83%bd%e5%81%9a%e6%88%90%e4%ba%86-plugin%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/107761.html","title":{"rendered":"DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f"},"content":{"rendered":"<\/p>\n<h2><\/h2>\n<p>\u9879\u76ee\u7c7b\u578b&#xff1a;Agent Runtime \/ Plugin-native Agent Harness \u8d4f\u6790\u76ee\u6807&#xff1a;\u5b66\u4e60\u4e00\u4e2a\u771f\u5b9e Agent \u9879\u76ee\u5982\u4f55\u628a Agent\u3001Session\u3001Event\u3001Plugin\u3001Runtime\u3001Extension \u7ec4\u7ec7\u6210\u4e00\u5957\u53ef\u7ec4\u5408\u7cfb\u7edf \u6838\u5fc3\u95ee\u9898&#xff1a;\u4e3a\u4ec0\u4e48\u5b83\u6562\u628a\u300cAgent Loop \u672c\u8eab\u300d\u4e5f\u53d8\u6210\u63d2\u4ef6&#xff1f; \u6e90\u7801\u7248\u672c&#xff1a;deepseek-ai\/deepseek-harness&#xff0c;main \u5206\u652f&#xff0c;commit ddefc45&#xff0c;\u7248\u672c 0.1.6-alpha.2&#xff08;2026-09-17&#xff09;<\/p>\n<p>\u524d\u9762\u516b\u4e2a\u9879\u76ee\u8d4f\u6790&#xff0c;\u6211\u8d70\u8fc7\u4e86\u8fd9\u6837\u4e00\u6761\u8def&#xff1a;<\/p>\n<p>LangGraph          \u2192 \u4efb\u52a1\u600e\u4e48\u7f16\u6392<br \/>\nOpenHands          \u2192 Agent \u600e\u4e48\u6267\u884c\u771f\u5b9e\u52a8\u4f5c<br \/>\nbrowser-use        \u2192 Agent \u600e\u4e48\u611f\u77e5\u771f\u5b9e\u754c\u9762<br \/>\nDeerFlow 2.0       \u2192 \u957f\u4efb\u52a1\u600e\u4e48\u8dd1\u4e0d\u6b7b<br \/>\nHermes Agent       \u2192 Agent \u600e\u4e48\u81ea\u6211\u8fdb\u5316<br \/>\nOpenCode           \u2192 Terminal Agent \u600e\u4e48\u7ec4\u7ec7\u4ea7\u54c1<br \/>\nGoose              \u2192 \u5de5\u5177\u600e\u4e48\u53d8\u6210 MCP \u670d\u52a1<\/p>\n<p>\u8fd9\u516b\u4e2a\u9879\u76ee&#xff0c;\u867d\u7136\u8bed\u8a00\u3001\u8def\u7ebf\u3001\u5b9a\u4f4d\u90fd\u4e0d\u540c&#xff0c;\u4f46\u5b83\u4eec\u6709\u4e00\u4e2a\u5171\u540c\u70b9&#xff1a;<\/p>\n<p>\u5b83\u4eec\u7684 Agent \u5185\u6838\u90fd\u662f\u300c\u81ea\u5df1\u5199\u6b7b\u7684\u300d\u3002<\/p>\n<p>OpenHands \u6709\u81ea\u5df1\u4e00\u5957 Runtime&#xff0c;DeerFlow \u6709\u81ea\u5df1\u4e00\u5957 harness&#xff0c;OpenCode \u6709\u81ea\u5df1\u4e00\u5957 Session \u5904\u7406\u5668\u3002\u4f60\u53ef\u4ee5\u6362\u5de5\u5177\u3001\u6362\u6a21\u578b\u3001\u6362\u6c99\u7bb1&#xff0c;\u4f46\u4f60\u6362\u4e0d\u6389 Agent Loop \u672c\u8eab\u2014\u2014\u90a3\u662f\u7a0b\u5e8f\u7684\u9aa8\u67b6\u3002<\/p>\n<p>DeepSeek Harness&#xff08;\u4e0b\u6587\u7b80\u79f0 dsh&#xff09;\u505a\u7684\u4e8b\u60c5&#xff0c;\u6070\u597d\u76f8\u53cd&#xff1a;<\/p>\n<p>\u5b83\u628a Agent Loop \u4e5f\u505a\u6210\u4e86\u63d2\u4ef6\u3002<\/p>\n<p>\u5b98\u65b9 README \u7684\u7b2c\u4e00\u53e5\u8bdd\u5c31\u662f&#xff1a;<\/p>\n<p>\u5b83\u6784\u5efa\u4e8e\u4e00\u5207\u7686\u63d2\u4ef6\u7684\u67b6\u6784\u4e4b\u4e0a&#xff0c;\u7531 Cordis \u9a71\u52a8&#xff0c;\u5176\u8bbe\u8ba1\u53c2\u89c1\u8bba\u6587 A Programming Paradigm for Spatiotemporal Composability\u3002<\/p>\n<p>\u800c docs\/architecture.zh.md \u628a\u8fd9\u53e5\u8bdd\u8bf4\u5f97\u66f4\u72e0&#xff1a;<\/p>\n<p>\u4ea7\u54c1\u7684\u6bcf\u4e00\u90e8\u5206\u90fd\u662f\u63d2\u4ef6&#xff0c;\u5305\u62ec\u6a21\u578b\u9002\u914d\u5668\u3001\u5de5\u5177\u6ce8\u518c\u8868\u3001\u4f1a\u8bdd\u65e5\u5fd7&#xff0c;\u4ee5\u53ca agent loop&#xff08;\u667a\u80fd\u4f53\u5faa\u73af&#xff09;\u672c\u8eab&#xff0c;\u56e0\u6b64\u6bcf\u4e2a\u90fd\u53ef\u4ee5\u4ece\u914d\u7f6e\u66ff\u6362\u3002<\/p>\n<p>\u4e0d\u5b58\u5728\u9700\u8981\u6253\u8865\u4e01\u7684\u7279\u6743\u5185\u6838&#xff1a;\u6269\u5c55 dsh \u7684\u65b9\u5f0f\u662f\u628a\u63d2\u4ef6\u6302\u8f7d\u5230\u5176\u4ed6\u63d2\u4ef6\u65c1\u8fb9&#xff0c;\u800c\u5404\u9879\u6ce8\u518c\u90fd\u662f\u526f\u4f5c\u7528&#xff0c;\u4f1a\u5728\u5176\u63d2\u4ef6\u5378\u8f7d\u65f6\u64a4\u9500\u3002<\/p>\n<p>&#034;\u4e0d\u5b58\u5728\u9700\u8981\u6253\u8865\u4e01\u7684\u7279\u6743\u5185\u6838&#034;\u2014\u2014\u8fd9\u53e5\u8bdd\u662f\u6574\u7bc7\u6587\u7ae0\u7684\u94a5\u5319\u3002<\/p>\n<p>\u8fd9\u7bc7\u8d4f\u6790\u8981\u56de\u7b54\u4e09\u4e2a\u95ee\u9898&#xff1a;<\/p>\n<li>\u4e3a\u4ec0\u4e48\u5b83\u6562\u628a Agent Loop \u672c\u8eab\u53d8\u6210\u63d2\u4ef6&#xff1f;<\/li>\n<li>\u4e3a\u4ec0\u4e48 Session \u8981\u505a\u6210\u4e8b\u4ef6\u6eaf\u6e90&#xff0c;\u800c\u4e0d\u662f\u76f4\u63a5\u5b58 message history&#xff1f;<\/li>\n<li>&#034;Everything is a Plugin&#034; \u5e26\u6765\u4ec0\u4e48\u6536\u76ca&#xff0c;\u53c8\u4f1a\u4e0d\u4f1a\u9020\u6210\u62bd\u8c61\u8fc7\u5ea6&#xff1f;<\/li>\n<hr \/>\n<h2>\u4e00\u3001\u5148\u770b\u6e05\u8fd9\u662f\u4e00\u4e2a\u4ec0\u4e48\u91cf\u7ea7\u7684\u9879\u76ee<\/h2>\n<p>\u5728\u8c08\u8bbe\u8ba1\u4e4b\u524d&#xff0c;\u5148\u8bf4\u6e05\u695a\u5b83\u7684\u89c4\u6a21\u2014\u2014\u56e0\u4e3a\u8fd9\u51b3\u5b9a\u4e86&#034;\u8fd9\u5957\u67b6\u6784\u662f\u4e0d\u662f\u8fc7\u5ea6\u8bbe\u8ba1&#034;\u7684\u5224\u65ad\u57fa\u51c6\u3002<\/p>\n<table>\n<tr>\u7ef4\u5ea6\u6570\u636e<\/tr>\n<tbody>\n<tr>\n<td>\u7248\u672c<\/td>\n<td>0.1.6-alpha.2&#xff08;\u5f00\u53d1\u8005\u9884\u89c8\u9636\u6bb5&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u6700\u65b0\u63d0\u4ea4<\/td>\n<td>ddefc45&#xff0c;2026-09-17<\/td>\n<\/tr>\n<tr>\n<td>\u5305\u6570\u91cf<\/td>\n<td>54 \u4e2a&#xff08;packages\/&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>TypeScript \u6587\u4ef6<\/td>\n<td>3198 \u4e2a<\/td>\n<\/tr>\n<tr>\n<td>\u4ee3\u7801\u884c\u6570<\/td>\n<td>119 \u4e07\u884c&#xff08;\u542b\u6d4b\u8bd5&#xff09;&#xff0f;\u7ea6 63 \u4e07\u884c&#xff08;\u6392\u9664 tests\/&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u6d4b\u8bd5\u6587\u4ef6<\/td>\n<td>1329 \u4e2a<\/td>\n<\/tr>\n<tr>\n<td>\u51b3\u7b56\u8bb0\u5f55&#xff08;Agent Notes&#xff09;<\/td>\n<td>2206 \u7bc7&#xff08;.agents\/notes\/&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u4e2d\u6587\u6587\u6863<\/td>\n<td>166 \u7bc7&#xff08;docs\/**\/*.zh.md&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u5b98\u65b9\u6545\u969c\u590d\u76d8<\/td>\n<td>4 \u7bc7&#xff08;docs\/postmortem\/&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u5e94\u7528\u5f62\u6001<\/td>\n<td>Web \/ Desktop(Electron) \/ CLI \/ SDK(TypeScript &amp; Python) \/ ACP<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u51e0\u4e2a\u6570\u5b57\u503c\u5f97\u505c\u4e0b\u6765\u770b\u4e00\u773c&#xff1a;<\/p>\n<ul>\n<li>2206 \u7bc7\u51b3\u7b56\u8bb0\u5f55\u3002\u8fd9\u4e0d\u662f\u666e\u901a\u7684 changelog&#xff0c;\u800c\u662f\u6bcf\u4e00\u5904\u67b6\u6784\u51b3\u7b56\u7684&#034;\u4e3a\u4ec0\u4e48&#034;\u3002\u6bd4\u5982 2026-09-02-system-prompt-as-surface-node.zh.md&#xff08;\u4e3a\u4ec0\u4e48\u7cfb\u7edf\u63d0\u793a\u8bcd\u8981\u53d8\u6210 surface \u8282\u70b9&#xff09;\u30012026-09-01-v2-embedded-assistant-streams.zh.md&#xff08;\u4e3a\u4ec0\u4e48 assistant stream \u8981\u5185\u5d4c\u8fdb\u4e8b\u4ef6&#xff09;\u3002<\/li>\n<li>4 \u7bc7 postmortem\u3002\u5b98\u65b9\u4e3b\u52a8\u516c\u5f00\u81ea\u5df1\u7684\u4e8b\u6545\u590d\u76d8\u2014\u2014\u8fd9\u5728\u5f00\u6e90\u9879\u76ee\u91cc\u6781\u5176\u7f55\u89c1&#xff0c;\u4e5f\u662f\u8fd9\u7bc7\u8d4f\u6790\u6700\u6709\u4ef7\u503c\u7684\u7d20\u6750\u6765\u6e90&#xff08;\u540e\u9762\u4f1a\u4e13\u95e8\u7528\u4e00\u8282\u8bb2\u5176\u4e2d\u4e00\u6b21\u6545\u969c&#xff09;\u3002<\/li>\n<li>54 \u4e2a\u5305&#xff0c;\u4f46\u4e3b\u5e72\u53ea\u6709 6 \u4e2a\u3002packages\/ \u4e0b\u5927\u90e8\u5206\u662f\u80fd\u529b\u63d0\u4f9b\u65b9&#xff08;LLM \u9002\u914d\u5668\u3001\u6c99\u7bb1\u3001\u5de5\u5177\u3001UI&#xff09;&#xff0c;\u4e3b\u5e72\u7531 packages\/core\/ \u7684\u516d\u4e2a\u5305\u627f\u62c5\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e00\u8282\u5148\u7ed9\u4e00\u4e2a\u5224\u65ad&#xff1a;54 \u4e2a\u5305 &#043; 2206 \u7bc7\u51b3\u7b56\u8bb0\u5f55 &#043; 6 \u4e2a\u4e3b\u5e72\u5305&#xff0c;\u8bf4\u660e\u8fd9\u5957\u67b6\u6784\u4e0d\u662f\u4e3a\u5c0f\u9879\u76ee\u8bbe\u8ba1\u7684\u3002\u5b83\u9762\u5411\u7684\u662f&#034;\u4e00\u4e2a\u8981\u88ab\u53cd\u590d\u91cd\u65b0\u7ec4\u88c5\u7684\u4ea7\u54c1&#034;\u3002\u8fd9\u4e2a\u524d\u63d0\u5f88\u91cd\u8981&#xff0c;\u56e0\u4e3a\u540e\u9762\u8ba8\u8bba&#034;\u4ee3\u4ef7&#034;\u65f6&#xff0c;\u8861\u91cf\u6807\u51c6\u4e0d\u662f&#034;\u7406\u89e3\u5b83\u96be\u4e0d\u96be&#034;&#xff0c;\u800c\u662f&#034;\u5b83\u8981\u89e3\u51b3\u7684\u95ee\u9898\u503c\u4e0d\u503c\u8fd9\u4e2a\u590d\u6742\u5ea6&#034;\u3002<\/p>\n<hr \/>\n<h2>\u4e8c\u3001\u7b2c\u4e00\u4e2a\u53cd\u76f4\u89c9\u4e8b\u5b9e&#xff1a;\u5b83\u6ca1\u6709\u81ea\u7814\u63d2\u4ef6\u6846\u67b6<\/h2>\n<p>\u8fd9\u662f\u6211\u6700\u6ca1\u60f3\u5230\u7684\u4e00\u70b9\u3002<\/p>\n<p>\u4e00\u4e2a\u4ee5&#034;\u4e00\u5207\u7686\u63d2\u4ef6&#034;\u4e3a\u5356\u70b9\u3001\u8fd8\u628a\u8bbe\u8ba1\u5199\u6210\u8bba\u6587\u7684\u9879\u76ee&#xff0c;\u6211\u4ee5\u4e3a\u5b83\u4f1a\u81ea\u5df1\u5b9e\u73b0\u4e00\u5957\u63d2\u4ef6\u6846\u67b6\u3002\u7ed3\u679c\u6ca1\u6709\u3002<\/p>\n<p>docs\/rescope.zh.md \u5199\u5f97\u5f88\u6e05\u695a&#xff1a;<\/p>\n<table>\n<tr>\u76ee\u5f55\u4e0a\u6e38\u540d\u53d1\u5e03\u540d\u4e0a\u6e38\u7248\u672c\u89d2\u8272<\/tr>\n<tbody>\n<tr>\n<td>vendor\/cordis\/<\/td>\n<td>cordis<\/td>\n<td>&#064;deepseek-ai\/cordis<\/td>\n<td>4.0.0-rc.7<\/td>\n<td>\u6846\u67b6\u6838\u5fc3&#xff1a;Context\u3001Service\u3001Fiber\u3001\u4e8b\u4ef6<\/td>\n<\/tr>\n<tr>\n<td>vendor\/cosmokit\/<\/td>\n<td>cosmokit<\/td>\n<td>&#064;deepseek-ai\/cosmokit<\/td>\n<td>1.8.1<\/td>\n<td>\u57fa\u7840\u5de5\u5177<\/td>\n<\/tr>\n<tr>\n<td>vendor\/schemastery\/<\/td>\n<td>schemastery<\/td>\n<td>&#064;deepseek-ai\/schemastery<\/td>\n<td>3.18.0<\/td>\n<td>\u914d\u7f6e schema<\/td>\n<\/tr>\n<tr>\n<td>vendor\/loader\/<\/td>\n<td>&#064;cordisjs\/plugin-loader<\/td>\n<td>&#064;deepseek-ai\/cordis-plugin-loader<\/td>\n<td>1.0.0-rc.5<\/td>\n<td>\u914d\u7f6e\u88c5\u8f7d<\/td>\n<\/tr>\n<tr>\n<td>vendor\/include\/<\/td>\n<td>&#064;cordisjs\/plugin-include<\/td>\n<td>\u2026<\/td>\n<td>1.0.4<\/td>\n<td>\u914d\u7f6e\u5305\u542b\u4e0e patch \u53e0\u52a0<\/td>\n<\/tr>\n<tr>\n<td>vendor\/hmr\/<\/td>\n<td>&#064;cordisjs\/plugin-hmr<\/td>\n<td>\u2026<\/td>\n<td>1.0.15<\/td>\n<td>\u63d2\u4ef6\u4e0e\u914d\u7f6e\u70ed\u66ff\u6362<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Cordis \u662f\u4e00\u4e2a\u73b0\u6210\u7684\u7b2c\u4e09\u65b9\u63d2\u4ef6\u6846\u67b6&#xff08;\u6765\u81ea cordiverse \u751f\u6001&#xff0c;\u5373 Koishi \u673a\u5668\u4eba\u5bb6\u65cf\u80cc\u540e\u7684\u6846\u67b6&#xff09;\u3002dsh \u505a\u7684\u4e8b\u60c5\u662f&#xff1a;\u628a\u5b83\u7684\u6e90\u7801 vendor \u8fdb\u4ed3\u5e93&#xff0c;\u6539\u6389 npm scope \u540d&#xff0c;\u7136\u540e\u5728\u8fd9\u5957\u6846\u67b6\u4e4b\u4e0a\u5199\u81ea\u5df1\u7684 Agent \u4ea7\u54c1\u3002<\/p>\n<p>\u4e3a\u4ec0\u4e48\u8981\u6539\u540d&#xff1f;rescope.zh.md \u7ed9\u7684\u7406\u7531\u5f88\u5b9e\u5728&#xff1a;<\/p>\n<p>\u6bcf\u4e2a harness \u5305\u90fd\u628a\u6846\u67b6\u58f0\u660e\u4e3a peer dependency&#xff0c;\u53d1\u5e03 harness \u5c31\u4f1a\u8fde\u5e26\u53d1\u5e03\u8fd9\u4e00\u5c42&#xff0c;\u7528\u4e0a\u6e38\u540d\u53d1\u5e03\u7b49\u4e8e\u5728 registry \u4e0a\u5360\u7528\u522b\u4eba\u7684\u540d\u5b57\u3002<\/p>\n<p>\u8fd9\u4ef6\u4e8b\u672c\u8eab\u5c31\u662f\u4e00\u5802\u5de5\u7a0b\u8bfe&#xff1a;<\/p>\n<p>\u5728\u6700\u60f3\u5c55\u793a&#034;\u6211\u4eec\u67b6\u6784\u5f88\u5148\u8fdb&#034;\u7684\u5730\u65b9&#xff0c;\u4ed6\u4eec\u9009\u62e9\u4e86\u7528\u522b\u4eba\u7684\u6846\u67b6\u3002<\/p>\n<p>\u5bf9\u6bd4\u4e00\u4e0b\u524d\u9762\u7684\u9879\u76ee\u5c31\u66f4\u6e05\u695a\u4e86&#xff1a;<\/p>\n<p>OpenHands   \u2192 \u81ea\u5df1\u9020 Runtime \/ Event System<br \/>\nDeerFlow    \u2192 \u7ad9\u5728 LangGraph \u80a9\u4e0a&#xff08;langchain.agents.create_agent&#xff09;<br \/>\nOpenCode    \u2192 \u7528 Effect-TS \u505a\u4f9d\u8d56\u6ce8\u5165<br \/>\nHermes      \u2192 \u624b\u6413\u72b6\u6001\u673a loop<br \/>\nGoose       \u2192 \u76f4\u63a5\u7528 MCP \u5f53\u6269\u5c55\u673a\u5236<br \/>\ndsh         \u2192 vendor \u4e00\u4e2a\u7b2c\u4e09\u65b9\u63d2\u4ef6\u6846\u67b6&#xff0c;\u4e13\u6ce8\u5199\u4e1a\u52a1<\/p>\n<p>&#034;\u4e00\u5207\u7686\u63d2\u4ef6&#034;\u662f\u4e2a\u67b6\u6784\u4e3b\u5f20&#xff0c;\u4f46&#034;\u63d2\u4ef6\u6846\u67b6&#034;\u662f\u4e2a\u5df2\u7ecf\u89e3\u51b3\u7684\u95ee\u9898\u3002 dsh \u628a\u4e24\u4ef6\u4e8b\u5206\u5f00\u4e86&#xff1a;\u6846\u67b6\u7528\u522b\u4eba\u6210\u719f\u7684&#xff0c;\u81ea\u5df1\u7684\u521b\u65b0\u653e\u5728 Agent \u8bed\u4e49\u4e0a\u3002<\/p>\n<p>\u8fd9\u4e2a\u5224\u65ad\u5728\u540e\u9762\u7684\u6240\u6709\u8bbe\u8ba1\u91cc\u90fd\u80fd\u770b\u5230\u2014\u2014\u5b83\u6ca1\u6709\u91cd\u65b0\u53d1\u660e\u4f9d\u8d56\u6ce8\u5165&#xff0c;\u800c\u662f\u7528\u522b\u4eba\u7684\u4f9d\u8d56\u6ce8\u5165&#xff0c;\u53bb\u89e3\u51b3 Agent \u7279\u6709\u7684\u95ee\u9898\u3002<\/p>\n<hr \/>\n<h2>\u4e09\u3001\u6838\u5fc3\u547d\u9898&#xff1a;\u4e0d\u662f&#034;\u53ef\u6269\u5c55&#034;&#xff0c;\u662f&#034;\u65f6\u7a7a\u53ef\u7ec4\u5408\u6027&#034;<\/h2>\n<p>&#034;Everything is a Plugin&#034; \u542c\u8d77\u6765\u50cf\u662f\u4e00\u53e5&#034;\u53ef\u6269\u5c55\u6027&#034;\u7684\u53e3\u53f7\u3002\u4f46\u5982\u679c\u6211\u4eec\u53ea\u7406\u89e3\u6210&#034;\u53ef\u4ee5\u52a0\u63d2\u4ef6&#034;&#xff0c;\u5c31\u4f1a\u770b\u9519\u8fd9\u4e2a\u9879\u76ee\u3002<\/p>\n<p>\u771f\u6b63\u7684\u5173\u952e\u8bcd\u5728\u8bba\u6587\u6807\u9898\u91cc&#xff1a;Spatiotemporal Composability&#xff08;\u65f6\u7a7a\u53ef\u7ec4\u5408\u6027&#xff09;\u3002<\/p>\n<p>\u62c6\u5f00\u770b&#xff0c;\u5b83\u662f\u4e24\u4e2a\u7ef4\u5ea6&#xff1a;<\/p>\n<p>\u7a7a\u95f4\u7ef4\u5ea6&#xff08;Spatial&#xff09;  \u2192  Scope<br \/>\n                       \u540c\u4e00\u4efd\u4ee3\u7801&#xff0c;\u53ef\u4ee5\u6309 agent \u9694\u79bb\u51fa\u4e0d\u540c\u7684\u6ce8\u518c\u4f5c\u7528\u57df<br \/>\n                       &#034;\u8fd9\u4e2a\u5de5\u5177\u53ea\u5728 A \u4f1a\u8bdd\u91cc\u5b58\u5728&#xff0c;B \u4f1a\u8bdd\u770b\u4e0d\u5230&#034;<\/p>\n<p>\u65f6\u95f4\u7ef4\u5ea6&#xff08;Temporal&#xff09; \u2192  \u53ef\u9006\u526f\u4f5c\u7528<br \/>\n                       \u6bcf\u4e2a\u6ce8\u518c\u90fd\u8fd4\u56de disposer<br \/>\n                       \u63d2\u4ef6\u5378\u8f7d\u65f6&#xff0c;\u5b83\u8d21\u732e\u7684\u4e00\u5207\u81ea\u52a8\u64a4\u9500<\/p>\n<p>\u8fd9\u4e24\u4e2a\u7ef4\u5ea6\u5408\u8d77\u6765&#xff0c;\u624d\u8ba9&#034;\u8fde Agent Loop \u90fd\u662f\u63d2\u4ef6&#034;\u771f\u7684\u6210\u7acb\u2014\u2014\u56e0\u4e3a loop \u88c5\u4e0a\u53bb\u3001\u53ef\u4ee5\u5378\u4e0b\u6765\u3001\u53ef\u4ee5\u88ab\u53e6\u4e00\u4e2a\u5b9e\u73b0\u66ff\u6362&#xff0c;\u800c\u4e0d\u7559\u4e0b\u5b64\u513f\u6ce8\u518c\u3002<\/p>\n<p>\u5982\u679c\u7528\u4e00\u53e5\u8bdd\u6982\u62ec\u6574\u5957\u67b6\u6784\u7684\u8bbe\u8ba1\u76ee\u6807&#xff1a;<\/p>\n<p>\u4e0d\u662f&#034;\u80fd\u8ba9\u522b\u4eba\u6269\u5c55\u6211&#034;&#xff0c;\u800c\u662f&#034;\u6211\u81ea\u5df1\u4e5f\u53ef\u4ee5\u88ab\u6362\u6389&#034;\u3002<\/p>\n<p>\u8fd9\u4e2a\u533a\u522b\u975e\u5e38\u5173\u952e\u3002\u524d\u8005\u662f\u5f00\u653e\u6269\u5c55\u70b9&#xff0c;\u540e\u8005\u662f\u628a\u81ea\u5df1\u4e5f\u53d8\u6210\u53ef\u66ff\u6362\u7684\u4e00\u5c42\u3002<\/p>\n<p>\u800c\u4e00\u65e6\u63a5\u53d7\u4e86\u8fd9\u4e2a\u76ee\u6807&#xff0c;\u540e\u9762\u4e24\u4e2a\u770b\u8d77\u6765&#034;\u8fc7\u5ea6\u8bbe\u8ba1&#034;\u7684\u9009\u62e9\u5c31\u90fd\u53d8\u5f97\u5fc5\u8981\u4e86&#xff08;\u7b2c \u516d\u3001\u4e03 \u8282\u4f1a\u7ec6\u8bb2&#xff09;&#xff1a;<\/p>\n<ul>\n<li>Session \u5fc5\u987b\u4e8b\u4ef6\u6eaf\u6e90\u2014\u2014\u56e0\u4e3a\u5982\u679c\u5386\u53f2\u5355\u72ec\u5b58\u4e00\u4efd\u3001\u7531 loop \u7ef4\u62a4&#xff0c;\u90a3\u4e48\u6362\u6389 loop&#xff0c;\u5386\u53f2\u5c31\u65ad\u4e86\u3002<\/li>\n<li>Agent Loop \u5fc5\u987b\u662f\u65e0\u7279\u6743\u7684\u2014\u2014\u56e0\u4e3a\u5b83\u662f&#034;\u53ef\u4ee5\u88ab\u66ff\u6362\u7684\u4e00\u5c42&#034;&#xff0c;\u800c\u4e0d\u662f&#034;\u7a0b\u5e8f\u9aa8\u67b6&#034;\u3002<\/li>\n<\/ul>\n<hr \/>\n<h2>\u56db\u3001\u8bfb\u61c2\u6e90\u7801\u7684\u95e8\u69db&#xff1a;Cordis \u7684\u4e94\u4e2a\u6982\u5ff5<\/h2>\n<p>\u60f3\u8bfb\u61c2 dsh \u7684\u6e90\u7801&#xff0c;\u5148\u5f97\u61c2 Cordis\u3002\u597d\u5728\u5b98\u65b9\u4e13\u95e8\u5199\u4e86 docs\/cordis-primer.zh.md&#xff0c;\u628a\u5b83\u538b\u7f29\u6210\u4e94\u4e2a\u6982\u5ff5&#xff1a;<\/p>\n<table>\n<tr>\u6982\u5ff5\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>\u63d2\u4ef6\u662f\u5b9e\u73b0 Service \u7684\u5bf9\u8c61<\/td>\n<td>\u53ef\u4ee5\u662f\u5e26 inject \u548c apply(ctx) \u7684\u51fd\u6570&#xff0c;\u4e5f\u53ef\u4ee5\u662f Service \u5b50\u7c7b<\/td>\n<\/tr>\n<tr>\n<td>\u4e0a\u4e0b\u6587\u662f\u670d\u52a1\u7684\u5bb9\u5668<\/td>\n<td>\u4e00\u4e2a\u670d\u52a1\u5360\u4e00\u4e2a\u7a33\u5b9a\u7684 ctx.&lt;key&gt;&#xff08;\u5982 ctx.tools\u3001ctx.llm\u3001ctx.sessions&#xff09;&#xff1b;\u5176\u4ed6\u63d2\u4ef6\u901a\u8fc7 key \u67e5\u627e&#xff0c;\u800c\u4e0d\u662f\u5bfc\u5165\u5177\u4f53\u5b9e\u73b0<\/td>\n<\/tr>\n<tr>\n<td>inject \u58f0\u660e\u670d\u52a1\u4f9d\u8d56<\/td>\n<td>\u58f0\u660e\u6240\u9700\u670d\u52a1\u540e\u81ea\u52a8\u7b49\u5f85\u5176\u5c31\u7eea&#xff1b;\u52a0\u8f7d\u987a\u5e8f\u7531\u4f9d\u8d56\u8868\u8fbe&#xff0c;\u800c\u975e\u624b\u5de5\u7f16\u6392<\/td>\n<\/tr>\n<tr>\n<td>\u7c7b\u578b\u5316\u4e8b\u4ef6\u7528\u4e8e\u901a\u4fe1<\/td>\n<td>TypeScript \u58f0\u660e\u5408\u5e76\u6ce8\u518c\u4e8b\u4ef6\u540d&#xff0c;\u4e94\u79cd\u5206\u53d1\u65b9\u5f0f<\/td>\n<\/tr>\n<tr>\n<td>\u6ce8\u518c\u662f\u53ef\u9006\u7684\u526f\u4f5c\u7528<\/td>\n<td>\u901a\u8fc7 ctx.effect() \/ ctx.on() \u5b89\u88c5&#xff0c;reload \u548c teardown \u65f6\u64a4\u9500<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u7b2c\u4e09\u70b9\u503c\u5f97\u7279\u522b\u6ce8\u610f&#xff1a;&#034;\u5176\u4ed6\u63d2\u4ef6\u901a\u8fc7 key \u67e5\u627e\u670d\u52a1&#xff0c;\u800c\u975e\u5bfc\u5165\u5177\u4f53\u5b9e\u73b0&#034;\u3002\u8fd9\u662f\u4f9d\u8d56\u5012\u7f6e\u7684\u5177\u4f53\u843d\u5730\u2014\u2014\u6269\u5c55\u63d2\u4ef6\u53ea\u4f9d\u8d56 agent \u8fd9\u4e2a\u63a5\u53e3\u5305&#xff0c;\u800c\u7edd\u4e0d\u76f4\u63a5\u4f9d\u8d56 agent-loop\u3002\u5b98\u65b9\u5728 core.zh.md \u91cc\u628a\u8fd9\u6761\u89c4\u77e9\u5199\u6210\u4e86\u786c\u7ea6\u675f&#xff1a;<\/p>\n<p>\u6269\u5c55\u63d2\u4ef6\u4f9d\u8d56 agent\u2014\u2014\u5305\u62ec\u9700\u8981\u53d1\u8d77 Agent \u65f6\u2014\u2014\u800c\u7edd\u4e0d\u76f4\u63a5\u4f9d\u8d56 agent-loop&#xff0c;\u56e0\u6b64\u5faa\u73af\u4fdd\u6301\u53ef\u66ff\u6362\u3002<\/p>\n<p>&#034;\u7edd\u4e0d&#034;\u4e24\u4e2a\u5b57&#xff0c;\u662f\u6574\u5957\u67b6\u6784\u80fd\u4e0d\u80fd\u6210\u7acb\u7684\u5206\u6c34\u5cad\u3002 \u53ea\u8981\u6709\u4e00\u4e2a\u6269\u5c55\u63d2\u4ef6 import \u4e86 agent-loop \u7684\u5185\u90e8\u5b9e\u73b0&#xff0c;&#034;loop \u53ef\u66ff\u6362&#034;\u5c31\u53ea\u662f\u7eb8\u9762\u627f\u8bfa\u3002<\/p>\n<p>\u518d\u770b\u7b2c\u4e94\u70b9\u7684\u5b9e\u73b0\u65b9\u5f0f\u2014\u2014\u4e94\u79cd\u4e8b\u4ef6\u5206\u53d1\u6a21\u5f0f&#xff1a;<\/p>\n<table>\n<tr>\u6a21\u5f0f\u662f\u5426 await\u5206\u53d1\u987a\u5e8f\u6709\u8fd4\u56de\u503c<\/tr>\n<tbody>\n<tr>\n<td>emit<\/td>\n<td>\u5426<\/td>\n<td>\u6309\u6ce8\u518c\u987a\u5e8f\u89c2\u5bdf<\/td>\n<td>\u5426<\/td>\n<\/tr>\n<tr>\n<td>waterfall<\/td>\n<td>\u5426<\/td>\n<td>\u6309\u6ce8\u518c\u987a\u5e8f<\/td>\n<td>\u662f<\/td>\n<\/tr>\n<tr>\n<td>parallel<\/td>\n<td>\u662f<\/td>\n<td>\u5168\u90e8\u5e76\u884c<\/td>\n<td>\u5426<\/td>\n<\/tr>\n<tr>\n<td>serial<\/td>\n<td>\u662f<\/td>\n<td>\u6309\u6ce8\u518c\u987a\u5e8f<\/td>\n<td>\u662f<\/td>\n<\/tr>\n<tr>\n<td>bail<\/td>\n<td>\u5426<\/td>\n<td>\u5230\u9996\u4e2a bail \u503c\u505c\u6b62<\/td>\n<td>\u662f<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5176\u4e2d waterfall \u662f\u7406\u89e3 dsh \u7684\u5173\u952e&#xff0c;\u5b83\u7684\u8bed\u4e49\u5f88\u50cf Koa \u7684\u6d0b\u8471\u6a21\u578b\u4e2d\u95f4\u4ef6&#xff1a;<\/p>\n<p>ctx.waterfall \u662f\u73af\u7ed5\u4e2d\u95f4\u4ef6\u3002\u76d1\u542c\u5668\u63a5\u6536 (&#8230;args, next)\u3002\u8c03\u7528 next() \u4f1a\u6267\u884c\u4e0b\u6e38\u76d1\u542c\u5668&#xff1b;\u4e0b\u6e38\u8fd4\u56de\u503c\u901a\u8fc7 next() \u8fd4\u56de\u5f53\u524d\u5305\u88c5\u5c42&#xff0c;\u53ef\u7531\u8be5\u5c42\u5305\u88c5\u540e\u7ee7\u7eed\u5411\u5916\u8fd4\u56de\u3002\u4e0d\u8c03\u7528 next() \u76f4\u63a5\u8fd4\u56de\u5219\u77ed\u8def\u3002<\/p>\n<p>\u8fd9\u5c31\u89e3\u91ca\u4e86 dsh \u91cc&#034;\u62e6\u622a&#034;\u673a\u5236\u7684\u7edf\u4e00\u5f62\u6001\u2014\u2014\u60f3\u89c2\u5bdf\u5c31\u8c03\u7528 next()&#xff0c;\u60f3\u63a5\u7ba1\u5c31\u76f4\u63a5\u8fd4\u56de\u3002\u6bd4\u5982 agent\/pre-step&#xff08;\u51b3\u5b9a\u662f\u5426\u63a5\u7eb3\u672c\u6b65\u9aa4\u7684\u8f93\u5165&#xff09;\u5c31\u662f\u4e00\u4e2a waterfall&#xff1a;<\/p>\n<p>Driver \u2192 agent\/pre-step (waterfall)<br \/>\n       \u2190 \u76d1\u542c\u5668&#xff1a;\u8c03\u7528 next() \u8868\u793a&#034;\u6211\u4e0d\u7ba1&#xff0c;\u5f80\u4e0b\u8d70&#034;<br \/>\n       \u2190 \u76d1\u542c\u5668&#xff1a;\u76f4\u63a5\u8fd4\u56de reject\/enter&#xff0c;\u8868\u793a&#034;\u6211\u62cd\u677f&#034;<\/p>\n<p>\u7528\u540c\u4e00\u5957\u673a\u5236\u8868\u8fbe&#034;\u89c2\u5bdf\u3001\u5305\u88c5\u3001\u62cd\u677f&#034;\u4e09\u4ef6\u4e8b&#xff0c;\u8fd9\u662f Cordis \u7ed9 dsh \u7684\u6700\u5927\u7ea2\u5229\u3002<\/p>\n<hr \/>\n<h2>\u4e94\u3001\u4e3b\u5e72&#xff1a;\u4e00\u4e2a\u8f6e\u6b21\u5982\u4f55\u6d41\u7ecf\u516d\u4e2a\u5305<\/h2>\n<p>dsh \u7684 packages\/core\/ \u53ea\u6709\u516d\u4e2a\u5305&#xff0c;\u4f46\u5b83\u4eec\u6784\u6210\u4e86\u4e00\u6761\u5b8c\u6574\u7684\u5faa\u73af&#xff1a;<\/p>\n<table>\n<tr>\u5305\u8d1f\u8d23\u5185\u5bb9ctx \u952e<\/tr>\n<tbody>\n<tr>\n<td>session\/<\/td>\n<td>\u4ec5\u8ffd\u52a0\u7684 SessionEvent \u65e5\u5fd7\u4e0e\u5185\u5b58 store\u2014\u2014\u552f\u4e00\u771f\u6e90<\/td>\n<td>ctx.sessions<\/td>\n<\/tr>\n<tr>\n<td>system-prompt\/<\/td>\n<td>\u63d0\u793a\u8bcd\u6bb5\u843d\u4e0e\u5de5\u5177 schema \u7ec4\u88c5<\/td>\n<td>ctx.systemPrompt<\/td>\n<\/tr>\n<tr>\n<td>tools\/<\/td>\n<td>\u5e26\u4f5c\u7528\u57df\u7684\u5de5\u5177\u6ce8\u518c\u8868\u4e0e\u53d7\u4fdd\u62a4\u7684\u6267\u884c\u6d41\u6c34\u7ebf<\/td>\n<td>ctx.tools<\/td>\n<\/tr>\n<tr>\n<td>agent\/<\/td>\n<td>Agent \u63a5\u53e3\u3001\u5b9e\u65f6\u6ce8\u518c\u8868\u3001agent\/* \u4e8b\u4ef6\u8bcd\u6c47<\/td>\n<td>ctx.agents<\/td>\n<\/tr>\n<tr>\n<td>agent-loop\/<\/td>\n<td>\u5b9e\u73b0\u516c\u5f00 Agent \u7ea6\u5b9a\u7684\u5177\u4f53 driver<\/td>\n<td>ctx.agentLoop<\/td>\n<\/tr>\n<tr>\n<td>scope\/<\/td>\n<td>\u6309 agent \u5212\u5206\u4f5c\u7528\u57df\u7684\u6ce8\u518c\u539f\u8bed&#xff08;\u96f6\u4f9d\u8d56\u5e93&#xff0c;\u4e0d\u662f\u670d\u52a1&#xff09;<\/td>\n<td>\u65e0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"1216\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260920005714-6aaf2f6a49c23.png\" width=\"756\" \/><\/p>\n<p>\u5148\u8bb0\u4f4f\u4e24\u4e2a\u672f\u8bed&#xff0c;\u5b98\u65b9\u5b9a\u4e49\u5f97\u975e\u5e38\u6e05\u695a&#xff1a;<\/p>\n<p>\u4e00\u4e2a\u6b65\u9aa4&#xff08;step&#xff09;\u662f\u4e00\u6b21\u6a21\u578b\u8bf7\u6c42\u52a0\u4e0a\u5b83\u8c03\u7528\u7684\u5de5\u5177\u3002\u4e00\u4e2a\u8f6e\u6b21&#xff08;turn&#xff09;\u5305\u542b\u96f6\u4e2a\u6216\u591a\u4e2a\u6b65\u9aa4&#xff1a;\u5b83\u5728\u9886\u53d6\u9996\u6761\u8f93\u5165\u4e4b\u524d\u6253\u5f00&#xff0c;\u5e76\u5728\u4e0d\u518d\u6b20\u4e0b\u4efb\u4f55\u5de5\u4f5c\u65f6\u5173\u95ed\u3002<\/p>\n<p>\u800c docs\/architecture.zh.md \u7ed9\u51fa\u7684\u8f6e\u6b21\u6d41\u7a0b\u662f\u6574\u4e2a\u9879\u76ee\u6700\u6838\u5fc3\u7684\u4e00\u6bb5\u4f2a\u4ee3\u7801&#xff1a;<\/p>\n<p>turn\/start<br \/>\n  claim next-step input plus one queued message<br \/>\n  assemble prompt sections &#043; tool schemas; project runtime context<br \/>\n  -&gt; agent\/pre-step                   reject | enter(messages, startsRequestSeries?)<br \/>\n     reject, or a first enter rewritten empty -&gt; close the turn with no step<br \/>\n     step\/start<br \/>\n     agent\/request -&gt; prepareCall (cancellation commits neither system nor users)<br \/>\n     reconcile system\/message using the prepared call capability<br \/>\n     append entered messages as user\/message; log request\/header and request\/context as needed<br \/>\n     derive and freeze model history from the log<br \/>\n     stream the bound prepared call -&gt; llm\/stream -&gt; agent\/assistant-stream start<br \/>\n       agent\/assistant-stream chunk*<br \/>\n       assistant\/message | assistant\/attempt -&gt; agent\/assistant-stream end<br \/>\n     tool\/call* -&gt; tools\/pre-execute -&gt; tools\/execute -&gt; tools\/post-execute -&gt; tool\/result*<br \/>\n     step\/end<br \/>\n     tools owe another request, or next-step input arrived -&gt; claim -&gt; next step<br \/>\n  -&gt; agent\/turn-stopping<br \/>\nturn\/end<\/p>\n<p>\u5982\u679c\u4f60\u53ea\u770b\u8fd9\u6bb5\u4f2a\u4ee3\u7801\u91cc\u7684\u52a8\u8bcd&#xff0c;\u4f1a\u53d1\u73b0\u4e00\u4e9b\u975e\u5e38\u6709\u610f\u601d\u7684\u63aa\u8f9e&#xff1a;<\/p>\n<p>claim      \u9886\u53d6   \u2014\u2014 \u8f93\u5165\u4e0d\u662f&#034;\u88ab\u63a8\u9001&#034;&#xff0c;\u800c\u662f\u88ab&#034;\u8ba4\u9886&#034;<br \/>\nderive     \u6d3e\u751f   \u2014\u2014 \u6a21\u578b\u5386\u53f2\u4e0d\u662f&#034;\u5b58\u50a8&#034;&#xff0c;\u800c\u662f&#034;\u4ece\u65e5\u5fd7\u63a8\u5bfc&#034;<br \/>\nfreeze     \u51bb\u7ed3   \u2014\u2014 \u8bf7\u6c42\u4e00\u65e6\u6784\u9020\u5c31\u4e0d\u53ef\u53d8<br \/>\nreconcile  \u6821\u51c6   \u2014\u2014 \u7cfb\u7edf\u63d0\u793a\u8bcd\u6309\u8282\u70b9\u5bf9\u9f50<br \/>\nowe        \u6b20     \u2014\u2014 \u662f\u5426\u8fd8\u6709\u5de5\u4f5c\u662f&#034;\u503a\u52a1&#034;\u5173\u7cfb<\/p>\n<p>\u8fd9\u4e9b\u52a8\u8bcd\u4e0d\u662f\u968f\u4fbf\u9009\u7684&#xff0c;\u5b83\u4eec\u5404\u81ea\u5bf9\u5e94\u4e00\u6761\u8bbe\u8ba1\u7ea6\u675f&#xff1a;<\/p>\n<table>\n<tr>\u52a8\u8bcd\u80cc\u540e\u7684\u7ea6\u675f<\/tr>\n<tbody>\n<tr>\n<td>claim<\/td>\n<td>\u8f93\u5165\u5728 inbox \u91cc\u6392\u961f&#xff0c;\u7531 loop \u4e3b\u52a8\u8ba4\u9886&#xff1b;\u5faa\u73af\u8282\u594f\u7531 loop \u638c\u63a7&#xff0c;\u4e0d\u88ab\u5916\u90e8\u6253\u65ad<\/td>\n<\/tr>\n<tr>\n<td>derive<\/td>\n<td>\u6a21\u578b\u53ef\u89c1\u7684\u5386\u53f2\u4ece\u65e5\u5fd7\u6d3e\u751f \u2192 \u65e5\u5fd7\u662f\u552f\u4e00\u771f\u6e90<\/td>\n<\/tr>\n<tr>\n<td>freeze<\/td>\n<td>\u8bf7\u6c42\u6784\u9020\u540e\u4e0d\u53ef\u53d8 \u2192 \u91cd\u8bd5\u4e0d\u5fc5\u91cd\u65b0\u7ec4\u88c5&#xff0c;\u4e5f\u4e0d\u4f1a\u4ea7\u751f\u5206\u53c9<\/td>\n<\/tr>\n<tr>\n<td>reconcile<\/td>\n<td>\u7cfb\u7edf\u63d0\u793a\u8bcd\u6309\u8282\u70b9\u5bf9\u9f50 \u2192 \u63d0\u793a\u8bcd\u53d8\u5316\u53ef\u88ab\u8bb0\u5f55\u3001\u53ef\u88ab\u56de\u653e<\/td>\n<\/tr>\n<tr>\n<td>owe<\/td>\n<td>&#034;\u8fd8\u6b20\u4e0d\u6b20\u4e00\u6b21\u8bf7\u6c42&#034;\u51b3\u5b9a\u6b65\u9aa4\u662f\u5426\u7ee7\u7eed \u2192 \u5faa\u73af\u7ec8\u6b62\u6761\u4ef6\u662f\u53ef\u5224\u5b9a\u7684<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u800c\u8fd9\u6bb5\u6d41\u7a0b\u91cc&#xff0c;\u53ea\u6709 8 \u4e2a\u4e8b\u4ef6\u662f\u6301\u4e45\u4f1a\u8bdd\u4e8b\u4ef6&#xff08;turn\/*\u3001step\/*\u3001system\/message\u3001user\/message\u3001assistant\/message\u3001assistant\/attempt\u3001tool\/*&#xff09;&#xff0c;\u5176\u4f59\u90fd\u662f\u5b9e\u65f6\u6269\u5c55\u70b9\u3002<\/p>\n<p>&#034;\u6301\u4e45&#034;\u4e0e&#034;\u5b9e\u65f6&#034;\u7684\u5206\u754c\u7ebf&#xff0c;\u5c31\u662f&#034;\u8981\u4e0d\u8981\u5728\u91cd\u542f\u540e\u8fd8\u80fd\u91cd\u5efa&#034;\u7684\u5206\u754c\u7ebf\u3002<\/p>\n<hr \/>\n<h2>\u516d\u3001\u95ea\u5149\u70b9\u4e00&#xff1a;Session \u662f append-only \u65e5\u5fd7&#xff0c;message history \u662f\u6d3e\u751f\u7684<\/h2>\n<p>\u8fd9\u662f dsh \u6700\u6709\u8fa8\u8bc6\u5ea6\u7684\u8bbe\u8ba1&#xff0c;\u4e5f\u662f\u5b83\u548c\u51e0\u4e4e\u6240\u6709\u5176\u4ed6 Agent \u6846\u67b6\u6700\u4e0d\u4e00\u6837\u7684\u5730\u65b9\u3002<\/p>\n<p>\u5927\u591a\u6570\u6846\u67b6\u662f\u8fd9\u4e48\u505a\u7684&#xff1a;<\/p>\n<p>Agent<br \/>\n \u251c\u2500\u2500 self.messages &#061; []        \u2190 \u6d88\u606f\u5386\u53f2\u81ea\u5df1\u5b58\u4e00\u4efd<br \/>\n \u2514\u2500\u2500 self.state &#061; {&#8230;}        \u2190 \u72b6\u6001\u4e5f\u81ea\u5df1\u5b58\u4e00\u4efd<\/p>\n<p>dsh \u662f\u8fd9\u4e48\u505a\u7684&#xff1a;<\/p>\n<p>Session &#061; SessionEvent[]        \u2190 \u4ec5\u8ffd\u52a0\u7684\u4e8b\u4ef6\u65e5\u5fd7&#xff0c;\u552f\u4e00\u771f\u6e90<br \/>\n    \u2193 deriveMessages()<br \/>\nMessage[]                       \u2190 \u6a21\u578b\u5386\u53f2&#034;\u6d3e\u751f&#034;\u51fa\u6765&#xff0c;\u4ece\u4e0d\u5355\u72ec\u5b58\u50a8<\/p>\n<p>docs\/subsystems\/session.zh.md \u5f00\u95e8\u89c1\u5c71&#xff1a;<\/p>\n<p>Session \u662f\u4e00\u4efd\u7531\u7c7b\u578b\u5316 SessionEvent \u7ec4\u6210\u7684\u4ec5\u8ffd\u52a0\u65e5\u5fd7&#xff0c;\u662f agent \u5b8c\u6574\u4ea4\u4e92\u5386\u53f2\u7684\u552f\u4e00\u771f\u6e90\u3002LLM \u6d88\u606f\u5386\u53f2\u4ece\u65e5\u5fd7\u6d3e\u751f\u800c\u6765&#xff0c;\u4ece\u4e0d\u5355\u72ec\u5b58\u50a8&#xff1b;\u56de\u653e\u5373\u4ece\u540c\u4e00\u7ec4\u4e8b\u4ef6\u91cd\u65b0\u6d3e\u751f\u3002<\/p>\n<p>\u800c\u6e90\u7801\u91cc\u8fd9\u6761\u89c4\u5219\u975e\u5e38\u6734\u7d20\u2014\u2014packages\/core\/session\/src\/surface.ts:119 \u7684 deriveEventMessage() \u5c31\u662f\u4e00\u4e2a\u7eaf\u51fd\u6570&#xff1a;<\/p>\n<p>export function deriveEventMessage(<br \/>\n  event: SessionEvent,<br \/>\n  projectedMessages?: ReadonlyMap&lt;SessionSeq, Message&gt;,<br \/>\n): Message | null {<br \/>\n  const projected &#061; projectedMessages?.get(event.seq)<br \/>\n  if (projected !&#061;&#061; undefined) return projected<br \/>\n  \/\/ Intentionally non-exhaustive: only message-producing events derive<br \/>\n  \/\/ history; turn\/step boundaries, failed attempts, and errors are trace\/replay<br \/>\n  \/\/ data.<br \/>\n  switch (event.type) {<br \/>\n    case &#039;user\/message&#039;: {<br \/>\n      return event.data<br \/>\n    }<br \/>\n    case &#039;system\/message&#039;:<br \/>\n    case &#039;assistant\/message&#039;: {<br \/>\n      if (event.data.message.content.length &#061;&#061;&#061; 0) return null<br \/>\n      return event.data.message<br \/>\n    }<br \/>\n    case &#039;tool\/result&#039;: {<br \/>\n      return event.data.message<br \/>\n    }<br \/>\n    default:<br \/>\n      \/\/ A non-surface event (boundary, attempt, log-only record) projects to<br \/>\n      \/\/ no message. Merge-extensible union: no assertNever here.<br \/>\n      return null<br \/>\n  }<br \/>\n}<\/p>\n<p>\u6ce8\u610f\u8fd9\u4e2a default: return null \u7684\u6ce8\u91ca\u2014\u2014&#034;\u8fb9\u754c\u4e8b\u4ef6\u3001\u5931\u8d25\u7684\u5c1d\u8bd5\u3001\u7eaf\u65e5\u5fd7\u8bb0\u5f55&#xff0c;\u90fd\u4e0d\u6295\u5f71\u6210\u6d88\u606f&#034;\u3002<\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4&#xff1a;<\/p>\n<p>turn\/start, step\/start, step\/end, turn\/end   \u2192 \u7ed3\u6784\u4fe1\u606f&#xff0c;\u4e0d\u7ed9\u6a21\u578b\u770b<br \/>\nassistant\/attempt                            \u2192 \u5931\u8d25\u7684\u5c1d\u8bd5&#xff0c;\u53ea\u7559\u6863&#xff0c;\u4e0d\u7ed9\u6a21\u578b\u770b<br \/>\nuser\/message, system\/message                 \u2192 \u7ed9\u6a21\u578b\u770b<br \/>\nassistant\/message, tool\/result               \u2192 \u7ed9\u6a21\u578b\u770b<\/p>\n<p>\u65e5\u5fd7\u6bd4&#034;\u6a21\u578b\u770b\u5230\u7684\u4e1c\u897f&#034;\u591a\u3002 \u65e5\u5fd7\u91cc\u6709\u5b8c\u6574\u7684\u6267\u884c\u8f68\u8ff9&#xff08;\u8c01\u5728\u4ec0\u4e48\u65f6\u5019\u5f00\u4e86\u4e00\u4e2a\u6b65\u9aa4\u3001\u54ea\u6b21\u8bf7\u6c42\u5931\u8d25\u4e86\u3001token \u7528\u4e86\u591a\u5c11&#xff09;&#xff0c;\u4f46\u6a21\u578b\u53ea\u770b\u5176\u4e2d\u4e00\u90e8\u5206\u3002<\/p>\n<p>\u8fd9\u662f\u4e8b\u4ef6\u6eaf\u6e90&#xff08;Event Sourcing&#xff09;\u7684\u7ecf\u5178\u5f62\u6001\u3002\u4f46 dsh \u5728\u6b64\u4e4b\u4e0a\u52a0\u4e86\u4e00\u6761\u975e\u5e38\u5f3a\u786c\u7684\u4e0d\u53d8\u91cf&#xff1a;<\/p>\n<h3>\u6a21\u578b\u53ef\u89c1\u5373\u5df2\u8bb0\u5f55\u3002<\/h3>\n<p>\u62b5\u8fbe\u6a21\u578b\u8bf7\u6c42\u7684\u4e00\u5207\u90fd\u5fc5\u987b\u80fd\u4ece\u65e5\u5fd7\u91cd\u5efa&#xff0c;\u5e76\u7531\u4e00\u9879\u8fd0\u884c\u65f6\u4e0d\u53d8\u91cf\u65ad\u8a00\u8fd9\u4e00\u70b9\u3002 \u65b0\u589e\u6a21\u578b\u53ef\u89c1\u8f93\u5165\u9700\u8981\u4e00\u4e2a\u4f1a\u8bdd\u4e8b\u4ef6\u3002<\/p>\n<p>\u8fd9\u6761\u89c4\u5219\u770b\u8d77\u6765\u53ea\u662f&#034;\u65e5\u5fd7\u8981\u5b8c\u6574&#034;&#xff0c;\u4f46\u5b83\u5176\u5b9e\u662f\u5728\u56de\u7b54\u4e00\u4e2a\u66f4\u96be\u7684\u95ee\u9898&#xff1a;<\/p>\n<p>\u5982\u679c Agent Loop \u53ef\u4ee5\u88ab\u66ff\u6362&#xff0c;\u8c01\u4fdd\u8bc1&#034;\u6362\u4e86 loop \u4e4b\u540e\u5386\u53f2\u8fd8\u5728&#034;&#xff1f;<\/p>\n<p>\u7b54\u6848\u662f&#xff1a;\u4e0d\u9760 loop \u4fdd\u8bc1&#xff0c;\u9760\u65e5\u5fd7\u683c\u5f0f\u4fdd\u8bc1\u3002<\/p>\n<p>\u53ea\u8981\u65b0 loop \u9075\u5b88&#034;\u6a21\u578b\u53ef\u89c1\u5373\u5df2\u8bb0\u5f55&#034;&#xff0c;\u5b83\u5f80\u65e5\u5fd7\u91cc\u8ffd\u52a0\u4e8b\u4ef6&#xff0c;\u5386\u53f2\u5c31\u81ea\u52a8\u6210\u7acb&#xff1b;\u800c\u6240\u6709\u6d88\u8d39\u8005&#xff08;UI\u3001\u56de\u653e\u3001fork\u3001\u8bc4\u4f30\u3001\u9065\u6d4b&#xff09;\u90fd\u53ea\u8bfb\u65e5\u5fd7&#xff0c;\u4e0d\u8bfb loop \u7684\u5185\u90e8\u72b6\u6001\u3002\u6240\u4ee5&#xff1a;<\/p>\n<p>\u65e7 loop \u5378\u8f7d \u2500\u2500\u2717\u2500\u2500\u2192 \u4e0d\u5e26\u8d70\u5386\u53f2&#xff08;\u5386\u53f2\u4e0d\u5728 loop \u91cc&#xff09;<br \/>\n\u65b0 loop \u6302\u8f7d \u2500\u2500\u2713\u2500\u2500\u2192 \u8bfb\u540c\u4e00\u4efd\u65e5\u5fd7&#xff0c;\u7ee7\u7eed\u8dd1<\/p>\n<p>\u8fd9\u5c31\u662f\u7b2c\u516d\u8282\u5f00\u5934\u90a3\u4e2a\u95ee\u9898\u7684\u7b54\u6848&#xff1a;Session \u8981\u4e8b\u4ef6\u6eaf\u6e90&#xff0c;\u4e0d\u662f\u56e0\u4e3a&#034;\u65e5\u5fd7\u597d\u770b&#034;&#xff0c;\u800c\u662f\u56e0\u4e3a&#034;loop \u53ef\u66ff\u6362&#034;\u8fd9\u4e2a\u76ee\u6807\u8981\u6c42\u72b6\u6001\u5fc5\u987b\u79bb\u5f00 loop\u3002<\/p>\n<h3>\u987a\u5e26\u4e00\u4e2a\u6f02\u4eae\u7684\u526f\u4ea7\u54c1&#xff1a;fork<\/h3>\n<p>\u56e0\u4e3a\u5386\u53f2\u662f&#034;\u4e8b\u4ef6\u5e8f\u5217 &#043; \u6d3e\u751f\u51fd\u6570&#034;&#xff0c;fork \u5c31\u53d8\u6210\u4e86\u4e00\u4e2a\u7eaf\u64cd\u4f5c\u3002SessionStore.fork()&#xff1a;<\/p>\n<p>fork(source, boundary?, childSessionId?)<\/p>\n<p>\u5b83\u9009\u53d6\u5230\u67d0\u4e2a SessionSeq \u4e3a\u6b62\u7684\u6e90\u4e8b\u4ef6&#xff08;\u9ed8\u8ba4\u6700\u540e\u4e00\u4e2a&#xff09;&#xff0c;\u8981\u6c42\u6240\u9009\u524d\u7f00\u7ed3\u675f\u65f6\u6ca1\u6709\u5f00\u653e\u8f6e\u6b21&#xff0c;\u7136\u540e\u521b\u5efa\u5b50\u4f1a\u8bdd\u3002<\/p>\n<p>\u6ce8\u610f&#034;\u8981\u6c42\u524d\u7f00\u7ed3\u675f\u65f6\u6ca1\u6709\u5f00\u653e\u8f6e\u6b21&#034;\u2014\u2014\u8fd9\u662f\u4e00\u4e2a\u62d2\u7edd\u975e\u6cd5\u8f93\u5165\u7684\u4f8b\u5b50\u3002\u6587\u6863\u660e\u786e\u5199&#xff1a;<\/p>\n<p>\u663e\u5f0f boundary \u5141\u8bb8\u8c03\u7528\u8005\u4ece\u4efb\u610f\u7a33\u5b9a\u7684\u8f6e\u6b21\u95f4\u4f4d\u7f6e fork\u2026\u2026API \u62d2\u7edd\u7ed3\u675f\u4e8e\u5f00\u653e\u8f6e\u6b21\u5185\u7684\u524d\u7f00&#xff0c;\u800c\u4e0d\u662f\u9759\u9ed8\u622a\u65ad\u3002<\/p>\n<p>\u53e6\u5916\u6709\u4e2a\u7ec6\u8282\u5f88\u89c1\u529f\u529b&#xff1a;fork \u4f1a\u8ffd\u52a0\u4e00\u6761 session\/end-seed { inherited: true } \u8fb9\u754c\u6807\u8bb0\u3002\u4e3a\u4ec0\u4e48\u9700\u8981\u5b83&#xff1f;<\/p>\n<p>\u5b83\u4e4b\u6240\u4ee5\u5fc5\u8981&#xff0c;\u662f\u56e0\u4e3a\u79cd\u5b50\u5386\u53f2\u4e0e\u5b9e\u65f6\u5de5\u4f5c\u5728\u5b57\u8282\u5c42\u9762\u5b8c\u5168\u76f8\u540c&#xff0c;\u8fd9\u4f1a\u8ba9\u4efb\u4f55\u62e5\u6709\u72ec\u7acb\u5f00&#xff0f;\u95ed\u62ec\u53f7\u7684\u63d2\u4ef6\u5931\u6548&#xff1a;\u4e00\u4e2a\u672a\u914d\u5bf9\u7684 compaction\/start&#xff0c;\u65e0\u8bba\u5199\u5165\u65b9\u662f\u5728\u538b\u7f29\u4e2d\u9014\u5d29\u6e83\u3001\u8fd8\u662f\u6b64\u523b\u6b63\u5728\u538b\u7f29&#xff0c;\u8bfb\u8d77\u6765\u90fd\u4e00\u6837\u3002<\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4&#xff1a;\u5982\u679c A \u4f1a\u8bdd\u5728\u538b\u7f29\u4e2d\u9014\u88ab fork \u51fa B \u4f1a\u8bdd&#xff0c;B \u7684\u5386\u53f2\u91cc\u4f1a\u7559\u7740\u4e00\u4e2a&#034;\u672a\u95ed\u5408\u7684\u538b\u7f29\u5f00\u59cb&#034;\u3002\u6ca1\u6709\u8fd9\u6761\u8fb9\u754c\u6807\u8bb0&#xff0c;B \u6839\u672c\u65e0\u6cd5\u5206\u8fa8&#034;\u8fd9\u662f\u6211\u7ee7\u627f\u6765\u7684\u6b7b\u62ec\u53f7&#034;\u8fd8\u662f&#034;\u6211\u73b0\u5728\u6b63\u5728\u538b\u7f29&#034;\u3002<\/p>\n<p>\u4e00\u884c\u6807\u8bb0\u89e3\u51b3\u4e00\u4e2a\u8bed\u4e49\u6b67\u4e49\u2014\u2014\u8fd9\u662f&#034;\u4e8b\u4ef6\u6eaf\u6e90\u505a\u5bf9\u4e86&#034;\u7684\u6837\u5b50\u3002<\/p>\n<hr \/>\n<h2>\u4e03\u3001\u95ea\u5149\u70b9\u4e8c&#xff1a;Agent Loop \u672c\u8eab\u662f\u63d2\u4ef6<\/h2>\n<p>\u73b0\u5728\u56de\u7b54\u6587\u7ae0\u6807\u9898\u91cc\u7684\u95ee\u9898\u3002<\/p>\n<p>\u5728\u524d\u9762\u516b\u4e2a\u9879\u76ee\u91cc&#xff0c;Agent Loop \u662f\u7a0b\u5e8f\u9aa8\u67b6&#xff1a;<\/p>\n<p>OpenHands \/ DeerFlow \/ OpenCode \/ Hermes \/ Goose<br \/>\n    \u2193<br \/>\n\u4f60\u53ef\u4ee5\u6362 Tool\u3001\u6362 Model\u3001\u6362 Sandbox<br \/>\n\u4f46\u4f60\u6362\u4e0d\u6389 &#034;loop \u957f\u4ec0\u4e48\u6837&#034;<\/p>\n<p>dsh \u628a\u8fd9\u4ef6\u4e8b\u7ffb\u4e86&#xff1a;<\/p>\n<p>packages\/core\/agent\/            \u2192 \u5b9a\u4e49 Agent \u63a5\u53e3 &#043; agent\/* \u4e8b\u4ef6\u8bcd\u6c47<br \/>\npackages\/core\/agent-loop\/       \u2192 \u53ea\u662f\u4e00\u4e2a&#034;\u5b9e\u73b0&#034;<\/p>\n<p>\u6e90\u7801\u8bc1\u636e\u5728 packages\/core\/agent-loop\/src\/agent.ts:72&#xff1a;<\/p>\n<p>\/** Drives one session through turn and step boundaries. *\/<br \/>\nexport class ReactLoopAgent implements Agent {<\/p>\n<p>\u6ce8\u610f\u8fd9\u4e2a\u7c7b\u540d\u2014\u2014ReactLoopAgent&#xff0c;\u4e0d\u662f Agent\u3002<\/p>\n<p>\u5b83 implements Agent&#xff0c;\u8bf4\u660e\u5b83\u53ea\u662f\u4e00\u4e2a\u5b9e\u73b0\u4e86\u516c\u5f00\u63a5\u53e3\u7684\u5b9e\u73b0\u7c7b\u3002\u800c packages\/core\/agent\/src\/types.ts \u91cc\u7684 Agent \u63a5\u53e3\u624d\u662f\u5951\u7ea6\u3002<\/p>\n<p>\u6587\u6863\u628a\u8fd9\u6761\u8fb9\u754c\u5199\u5f97\u5f88\u786c&#xff1a;<\/p>\n<p>\u5177\u4f53\u5b9e\u73b0\u4e3a dsh-agent-loop \u5305\u5185\u90e8\u7ec6\u8282&#xff1b;\u5faa\u73af\u5916\u6ca1\u6709\u4efb\u4f55\u7ec4\u4ef6\u4f9d\u8d56\u5b83\u3002<\/p>\n<p>\u800c ctx.agentLoop \u8fd9\u4e2a\u952e\u7684\u5b58\u5728&#xff0c;\u610f\u5473\u7740 loop \u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u66ff\u6362&#xff1a;<\/p>\n<table>\n<tr>\u76ee\u6807\u673a\u5236<\/tr>\n<tbody>\n<tr>\n<td>\u8ba9\u67d0\u4e2a\u4f1a\u8bdd\u62e5\u6709\u4e0d\u540c\u7684\u80fd\u529b\u96c6\u5408<\/td>\n<td>\u7ec4\u88c5\u4e00\u4e2a agent preset<\/td>\n<\/tr>\n<tr>\n<td>\u66ff\u6362\u5faa\u73af\u5b9e\u73b0<\/td>\n<td>\u5728 ctx.agentLoop \u4e0a\u6ce8\u518c\u53e6\u4e00\u4e2a\u5b9e\u73b0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u90a3\u4e48&#xff0c;\u628a loop \u505a\u6210\u63d2\u4ef6\u5230\u5e95\u6362\u6765\u4e86\u4ec0\u4e48&#xff1f;<\/p>\n<p>\u6211\u8ba4\u4e3a\u6709\u4e09\u4e2a\u5c42\u6b21\u7684\u6536\u76ca&#xff0c;\u4e00\u5c42\u6bd4\u4e00\u5c42\u5b9e\u5728&#xff1a;<\/p>\n<h4>\u7b2c\u4e00\u5c42&#xff1a;\u53ef\u66ff\u6362&#xff08;\u7406\u8bba\u6536\u76ca&#xff09;<\/h4>\n<p>\u7406\u8bba\u4e0a\u4f60\u53ef\u4ee5\u5199\u4e00\u4e2a PlanExecuteLoopAgent\u3001ReflexionLoopAgent&#xff0c;\u88c5\u4e0a\u53bb\u5c31\u6362\u6389\u4e86\u6574\u4e2a\u63a8\u7406\u8303\u5f0f\u3002<\/p>\n<p>\u8fd9\u4e00\u5c42\u6700\u5bb9\u6613\u5ba3\u4f20&#xff0c;\u4f46\u5b9e\u9645\u6536\u76ca\u6709\u9650\u2014\u2014\u5927\u591a\u6570\u56e2\u961f\u5e76\u4e0d\u4f1a\u771f\u7684\u91cd\u5199 loop\u3002<\/p>\n<h4>\u7b2c\u4e8c\u5c42&#xff1a;\u53ef\u62e6\u622a&#xff08;\u771f\u5b9e\u6536\u76ca&#xff09;<\/h4>\n<p>\u56e0\u4e3a loop \u4e0d\u62e5\u6709\u7279\u6743&#xff0c;\u5b83\u548c\u6240\u6709\u63d2\u4ef6\u4e00\u6837\u8981\u8d70\u4e8b\u4ef6&#xff1a;<\/p>\n<p>agent\/pre-step         \u2190 \u51b3\u5b9a\u662f\u5426\u63a5\u7eb3\u8fd9\u4e00\u6b65\u7684\u8f93\u5165<br \/>\nagent\/request          \u2190 \u6784\u9020\u8bf7\u6c42\u524d\u4e00\u62cd<br \/>\nagent\/assistant-stream \u2190 \u6d41\u5f0f\u8f93\u51fa\u8fc7\u7a0b<br \/>\nagent\/turn-stopping    \u2190 \u81ea\u7136\u505c\u6b62\u524d\u7684\u6700\u540e\u68c0\u67e5\u70b9<br \/>\nagent\/request-error    \u2190 \u8bf7\u6c42\u5931\u8d25&#xff0c;\u53ef\u4ee5\u8fd4\u56de&#034;\u91cd\u8bd5&#034;\u6216\u4fdd\u7559\u539f\u9519\u8bef<\/p>\n<p>\u8fd9\u610f\u5473\u7740&#034;\u6211\u8981\u5728\u6bcf\u6b21\u8bf7\u6c42\u524d\u52a0\u4e00\u5c42\u4e0a\u4e0b\u6587\u538b\u7f29&#034;\u8fd9\u7c7b\u9700\u6c42&#xff0c;\u4e0d\u9700\u8981\u6539 loop \u6e90\u7801\u3002dsh \u81ea\u5df1\u5c31\u662f\u8fd9\u4e48\u5e72\u7684\u2014\u2014dsh-compaction-basic \u63d2\u4ef6\u5c31\u662f\u901a\u8fc7 agent\/pre-step \u5904\u7406\u4e0a\u4e0b\u6587\u538b\u529b\u7684&#xff1a;<\/p>\n<p>dsh-compaction-basic \u5728\u6d3e\u751f\u8bf7\u6c42\u4e4b\u524d\u901a\u8fc7 agent\/pre-step \u5904\u7406\u538b\u529b&#xff0c;\u800c agent\/request-error \u4ec5\u7528\u4e8e\u89c4\u8303\u7684\u4e0a\u4e0b\u6587\u6ea2\u51fa\u3002<\/p>\n<p>\u538b\u7f29\u662f\u63d2\u4ef6&#xff0c;\u4e0d\u662f loop \u7684\u5185\u7f6e\u529f\u80fd\u3002 \u8fd9\u662f&#034;loop \u65e0\u7279\u6743&#034;\u7684\u76f4\u63a5\u5151\u73b0\u3002<\/p>\n<h4>\u7b2c\u4e09\u5c42&#xff1a;\u53ef\u7ec4\u5408&#xff08;\u67b6\u6784\u6536\u76ca&#xff09;<\/h4>\n<p>\u8fd9\u662f\u6700\u5bb9\u6613\u88ab\u5ffd\u7565\u3001\u4f46\u6700\u91cd\u8981\u7684\u4e00\u5c42\u3002<\/p>\n<p>\u56e0\u4e3a loop \u53ea\u662f&#034;\u4e00\u68f5\u63d2\u4ef6\u6811\u4e0a\u7684\u4e00\u4e2a\u8282\u70b9&#034;&#xff0c;\u5b83\u5c31\u53ef\u4ee5\u548c\u522b\u7684\u8282\u70b9\u81ea\u7531\u7ec4\u5408&#xff1a;<\/p>\n<p>\u540c\u4e00\u4e2a loop \u5b9e\u73b0<br \/>\n    &#043;<br \/>\n\u4e0d\u540c\u7684 agent preset&#xff08;\u6bcf\u4e2a\u4f1a\u8bdd\u80fd\u529b\u96c6\u4e0d\u540c&#xff09;<br \/>\n    &#043;<br \/>\n\u4e0d\u540c\u7684 Profile&#xff08;web \/ headless \/ sdk \/ acp&#xff09;<br \/>\n    &#043;<br \/>\n\u4e0d\u540c\u7684 Scope&#xff08;\u6bcf\u4e2a agent \u72ec\u7acb\u6ce8\u518c\u4f5c\u7528\u57df&#xff09;<br \/>\n    &#061;<br \/>\nN \u79cd\u4ea7\u54c1\u5f62\u6001<\/p>\n<p>\u5bf9\u6bd4\u4e00\u4e0b\u524d\u516b\u4e2a\u9879\u76ee&#xff1a;<\/p>\n<table>\n<tr>\u9879\u76ee\u6362\u6267\u884c\u73af\u5883\u6362 Agent Loop<\/tr>\n<tbody>\n<tr>\n<td>OpenHands<\/td>\n<td>\u2705 \u6362 Runtime<\/td>\n<td>\u274c \u9aa8\u67b6<\/td>\n<\/tr>\n<tr>\n<td>DeerFlow<\/td>\n<td>\u2705 \u6362 Sandbox<\/td>\n<td>\u274c \u9aa8\u67b6&#xff08;\u8d70\u7684 create_agent&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>OpenCode<\/td>\n<td>\u2705 \u6362 Provider\/Tool<\/td>\n<td>\u274c \u9aa8\u67b6<\/td>\n<\/tr>\n<tr>\n<td>Hermes<\/td>\n<td>\u2705 \u6362 Provider\/Memory<\/td>\n<td>\u274c \u9aa8\u67b6&#xff08;\u624b\u6413\u72b6\u6001\u673a&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>dsh<\/td>\n<td>\u2705 \u6362\u4e00\u5207 provider<\/td>\n<td>\u2705 \u6362 loop<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#034;\u80fd\u4e0d\u80fd\u6362\u6389\u81ea\u5df1&#034;&#xff0c;\u662f\u8fd9\u4e00\u5c42\u67b6\u6784\u548c\u524d\u516b\u4e2a\u9879\u76ee\u771f\u6b63\u7684\u5206\u754c\u7ebf\u3002<\/p>\n<h3>\u4e00\u4e2a\u5fc5\u987b\u8bf4\u6e05\u7684\u4ee3\u4ef7<\/h3>\n<p>\u628a loop \u505a\u6210\u63d2\u4ef6&#xff0c;\u610f\u5473\u7740\u6bcf\u4e00\u4e2a\u539f\u672c&#034;\u987a\u5e8f\u6267\u884c\u7684\u51fd\u6570\u8c03\u7528&#034;\u90fd\u53d8\u6210\u4e86&#034;\u4e8b\u4ef6\u5206\u53d1&#034;\u3002<\/p>\n<p>\u7528\u4e8b\u4ef6\u8868\u8fbe\u6d41\u7a0b&#xff0c;\u5f97\u5230\u7684\u662f\u89e3\u8026&#xff1b;\u4ed8\u51fa\u7684\u662f\u2014\u2014\u4f60\u65e0\u6cd5\u518d\u9760\u9605\u8bfb\u4e00\u4e2a\u51fd\u6570\u6765\u7406\u89e3\u6267\u884c\u987a\u5e8f\u3002\u60f3\u641e\u6e05&#034;\u4e00\u6b21\u8bf7\u6c42\u5230\u5e95\u53d1\u751f\u4e86\u4ec0\u4e48&#034;&#xff0c;\u5f97\u540c\u65f6\u770b&#xff1a;<\/p>\n<p>\u67b6\u6784\u6587\u6863\u7684\u8f6e\u6b21\u6d41\u7a0b\u4f2a\u4ee3\u7801<br \/>\n&#043; agent-lifecycle.zh.md \u7684\u65f6\u5e8f\u56fe<br \/>\n&#043; \u6bcf\u4e2a\u4e8b\u4ef6\u7684\u751f\u4ea7\u65b9\/\u6d88\u8d39\u65b9&#xff08;event-producer-consumer.zh.md&#xff09;<br \/>\n&#043; \u5404\u4e2a\u63d2\u4ef6\u7684\u76d1\u542c\u5668<\/p>\n<p>\u6587\u6863\u91cc\u751a\u81f3\u4e13\u95e8\u63d0\u4f9b\u4e86 docs\/event-producer-consumer.zh.md&#xff08;\u4e8b\u4ef6\u6620\u5c04&#xff1a;\u6bcf\u4e2a\u4e8b\u4ef6\u7684\u751f\u4ea7\u65b9\u4e0e\u6d88\u8d39\u65b9&#xff09;\u548c docs\/graph-atlas.zh.md&#xff08;\u56fe\u96c6&#xff09;\u2014\u2014\u9700\u8981\u4e13\u95e8\u5199\u5de5\u5177\u6765\u5e2e\u4f60\u7406\u89e3\u81ea\u5df1\u7684\u7cfb\u7edf&#xff0c;\u8fd9\u672c\u8eab\u5c31\u662f\u590d\u6742\u5ea6\u7684\u5ea6\u91cf\u3002<\/p>\n<hr \/>\n<h2>\u516b\u3001\u95ea\u5149\u70b9\u4e09&#xff1a;\u4e09\u7c7b\u4e8b\u4ef6\u57df&#xff0c;\u5404\u7ba1\u4e00\u4ef6\u4e8b<\/h2>\n<p>dsh \u6700\u8ba9\u6211\u6b23\u8d4f\u7684\u4e00\u4e2a\u8bbe\u8ba1\u51b3\u5b9a&#xff0c;\u662f\u5b83\u6ca1\u6709\u628a\u6240\u6709\u4e1c\u897f\u90fd\u585e\u8fdb\u4e00\u4e2a event bus&#xff0c;\u800c\u662f\u628a\u4e8b\u4ef6\u5206\u6210\u4e86\u4e09\u4e2a\u57df&#xff0c;\u5e76\u7ed9\u51fa\u660e\u786e\u7684\u9009\u578b\u89c4\u5219&#xff1a;<\/p>\n<table>\n<tr>\u4e8b\u4ef6\u57df\u627f\u8f7d\u4ec0\u4e48\u4ec0\u4e48\u65f6\u5019\u7528<\/tr>\n<tbody>\n<tr>\n<td>\u4f1a\u8bdd\u4e8b\u4ef6&#xff08;session\/event&#xff09;<\/td>\n<td>\u8ffd\u52a0\u5230\u65e5\u5fd7\u7684\u6301\u4e45\u4e8b\u5b9e<\/td>\n<td>\u5f53\u67d0\u4e2a\u4e8b\u5b9e\u5fc5\u987b\u5728\u91cd\u65b0\u52a0\u8f7d\u540e\u4ecd\u7136\u5b58\u5728\u65f6<\/td>\n<\/tr>\n<tr>\n<td>Agent \u4e8b\u4ef6&#xff08;agent\/*&#xff09;<\/td>\n<td>\u643a\u5e26\u6d3b\u8dc3 Agent \u7684\u5b9e\u65f6\u4fe1\u53f7&#xff1a;inbox\u3001\u6b65\u9aa4\u3001\u72b6\u6001\u3001\u8bf7\u6c42\u3001\u9a8c\u8bc1\u3001\u7eed\u8dd1<\/td>\n<td>\u8981\u89c2\u5bdf\u6216\u62e6\u622a\u8fdb\u884c\u4e2d\u7684\u5de5\u4f5c\u65f6<\/td>\n<\/tr>\n<tr>\n<td>\u80fd\u529b\u4e8b\u4ef6&#xff08;fs\/*\u3001tools\/*\u3001telemetry\/*&#xff09;<\/td>\n<td>\u5411\u67d0\u4e2a seam \u9644\u52a0\u7b56\u7565\u548c\u9002\u914d\u5668<\/td>\n<td>\u9700\u8981\u4e0d\u5f15\u5165\u5faa\u73af\u4f9d\u8d56\u5730\u6302\u7b56\u7565\u65f6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6587\u6863\u539f\u8bdd&#xff1a;<\/p>\n<p>\u4e8b\u4ef6\u5c31\u662f\u6269\u5c55\u70b9&#xff0c;\u800c\u9009\u5bf9\u4e8b\u4ef6\u57df\u662f\u5927\u591a\u6570\u6539\u52a8\u7684\u7b2c\u4e00\u4e2a\u51b3\u5b9a\u3002<\/p>\n<p>\u8fd9\u53e5\u8bdd\u89e3\u51b3\u4e86\u4e00\u4e2a\u771f\u5b9e\u75db\u70b9\u3002\u5728\u5355 event bus \u7684\u67b6\u6784\u91cc&#xff0c;\u4f60\u7ecf\u5e38\u4f1a\u770b\u5230\u8fd9\u79cd\u6df7\u4e71&#xff1a;<\/p>\n<p>\u540c\u4e00\u4e2a\u4e8b\u4ef6\u6d41\u91cc\u6df7\u7740&#xff1a;<br \/>\n  &#8211; &#034;\u7528\u6237\u8bf4\u4e86\u4ec0\u4e48&#034;&#xff08;\u8981\u6301\u4e45\u5316&#xff09;<br \/>\n  &#8211; &#034;\u5f53\u524d\u72b6\u6001\u662f running&#034;&#xff08;\u4e0d\u8981\u6301\u4e45\u5316&#xff0c;\u662f\u77ac\u65f6\u7684&#xff09;<br \/>\n  &#8211; &#034;\u8981\u4e0d\u8981\u62e6\u622a\u8fd9\u6b21\u5de5\u5177\u8c03\u7528&#034;&#xff08;\u662f\u4e00\u6b21\u51b3\u7b56&#xff0c;\u4e0d\u8be5\u8fdb\u65e5\u5fd7&#xff09;<\/p>\n<p>\u4e09\u79cd\u4e1c\u897f\u7684\u751f\u547d\u5468\u671f\u5b8c\u5168\u4e0d\u540c&#xff0c;\u585e\u5728\u4e00\u8d77\u5c31\u5fc5\u7136\u8981\u6253\u6807\u8bb0\u533a\u5206\u3002 dsh \u7684\u505a\u6cd5\u662f&#xff1a;\u751f\u547d\u5468\u671f\u4e0d\u540c&#xff0c;\u5c31\u4e0d\u8981\u653e\u5728\u4e00\u8d77\u3002<\/p>\n<p>\u8fd9\u4e2a\u8bbe\u8ba1\u6709\u4e00\u4e2a\u5f88\u81ea\u7136\u7684\u63a8\u8bba\u2014\u2014\u5224\u65ad\u6807\u51c6\u662f&#034;\u8981\u4e0d\u8981\u5728\u91cd\u542f\u540e\u91cd\u5efa&#034;&#xff0c;\u800c\u4e0d\u662f&#034;\u8fd9\u4e2a\u4fe1\u606f\u91cd\u4e0d\u91cd\u8981&#034;\u3002\u6240\u4ee5&#xff1a;<\/p>\n<p>turn\/start, step\/start        \u2192 \u6301\u4e45&#xff08;\u91cd\u542f\u540e\u8981\u80fd\u770b\u51fa&#034;\u4e0a\u6b21\u8dd1\u5230\u54ea\u4e00\u6b65\u4e86&#034;&#xff09;<br \/>\nagent\/status: running         \u2192 \u5b9e\u65f6&#xff08;\u8fdb\u7a0b\u6b7b\u4e86&#xff0c;\u8fd9\u4e2a\u72b6\u6001\u5c31\u8be5\u6d88\u5931&#xff09;<br \/>\ntools\/pre-execute             \u2192 \u5b9e\u65f6\u51b3\u7b56&#xff08;\u62e6\u622a\u662f\u6b64\u523b\u7684\u884c\u4e3a&#xff0c;\u4e0d\u662f\u5386\u53f2\u4e8b\u5b9e&#xff09;<br \/>\nassistant\/message             \u2192 \u6301\u4e45&#xff08;\u6a21\u578b\u770b\u5230\u8fc7\u4ec0\u4e48&#xff0c;\u5fc5\u987b\u7559\u4e0b&#xff09;<br \/>\nagent\/assistant-stream chunk  \u2192 \u77ac\u6001&#xff08;\u6d41\u5f0f\u589e\u91cf&#xff0c;settlement \u540e\u7531\u5b8c\u6574 stream \u53d6\u4ee3&#xff09;<\/p>\n<p>\u6700\u540e\u4e00\u6761\u5c24\u5176\u7cbe\u5999\u3002\u6587\u6863\u8bf4&#xff1a;<\/p>\n<p>agent\/assistant-stream \u53d1\u5e03\u8fdb\u7a0b\u672c\u5730 start\u3001\u77ac\u6001 chunk \u4e0e end frame\u3002loop \u4f1a\u5728 committed end frame \u524d\u628a\u5b8c\u6574\u7d27\u51d1 stream \u63d0\u4ea4\u4e3a\u4e00\u4e2a message \u6216\u4ec5\u65e5\u5fd7 attempt\u3002<\/p>\n<p>\u5982\u679c\u8fdb\u7a0b\u5728 settlement \u524d\u786c\u4e2d\u65ad&#xff0c;\u5219\u4e0d\u4f1a\u7559\u4e0b\u6301\u4e45 attempt stream\u3002<\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4&#xff1a;\u6d41\u5f0f\u8f93\u51fa\u662f&#034;\u76f4\u64ad&#034;&#xff0c;\u6210\u54c1\u7684 stream \u662f&#034;\u5f55\u50cf&#034;\u3002 \u76f4\u64ad\u53ef\u4ee5\u4e22&#xff0c;\u5f55\u50cf\u5fc5\u987b\u5b8c\u6574\u3002\u4e22\u5931\u4e00\u6b21\u7684\u4ee3\u4ef7\u662f&#034;\u8fd9\u6b21\u8f93\u51fa\u6ca1\u7559\u4e0b\u75d5\u8ff9&#034;&#xff08;\u800c\u4e0d\u662f&#034;\u65e5\u5fd7\u91cc\u591a\u4e86\u4e00\u4e2a\u534a\u622a\u7684\u5783\u573e&#034;&#xff09;\u3002<\/p>\n<p>&#034;\u5b81\u53ef\u4e0d\u7559&#xff0c;\u4e5f\u4e0d\u7559\u534a\u622a&#034;\u2014\u2014\u8fd9\u662f\u4e8b\u4ef6\u65e5\u5fd7\u8bbe\u8ba1\u7684\u6b63\u786e\u6d01\u7656\u3002<\/p>\n<hr \/>\n<h2>\u4e5d\u3001\u95ea\u5149\u70b9\u56db&#xff1a;Scope \u2014\u2014 \u7a7a\u95f4\u7ef4\u5ea6\u7684\u53ef\u7ec4\u5408\u6027<\/h2>\n<p>\u524d\u9762\u8bf4\u8fc7&#xff0c;&#034;\u65f6\u7a7a\u53ef\u7ec4\u5408\u6027&#034;\u6709\u4e24\u4e2a\u7ef4\u5ea6\u3002\u65f6\u95f4\u7ef4\u5ea6\u662f&#034;\u53ef\u9006\u526f\u4f5c\u7528&#034;&#xff08;ctx.effect() \u8fd4\u56de disposer&#xff09;&#xff0c;\u7a7a\u95f4\u7ef4\u5ea6\u5c31\u662f Scope\u3002<\/p>\n<p>packages\/core\/scope\/ \u662f\u516d\u4e2a\u4e3b\u5e72\u5305\u91cc\u552f\u4e00\u7684\u96f6\u4f9d\u8d56\u5e93&#xff08;\u4e0d\u662f\u670d\u52a1&#xff09;\u3002\u5b83\u7684\u6838\u5fc3\u7c7b\u578b\u7b80\u5355\u5f97\u51fa\u5947&#xff1a;<\/p>\n<p>\/\/ packages\/core\/scope\/src\/index.ts:15<br \/>\n\/** An opaque, identity-compared scope key. *\/<br \/>\nexport type ScopeKey &#061; object<\/p>\n<p>\u4e00\u4e2a\u4e0d\u900f\u660e\u5bf9\u8c61\u8eab\u4efd\u3002\u6587\u6863\u89e3\u91ca&#xff1a;<\/p>\n<p>\u5df2\u4ea4\u4ed8\u7684 agent loop \u4f7f\u7528\u6d3b\u8dc3\u7684 Agent \u5bf9\u8c61\u4f5c\u4e3a\u81ea\u8eab\u7684 key&#xff0c;\u4f46\u8be5\u539f\u8bed\u4ece\u4e0d\u68c0\u89c6\u8be5\u5bf9\u8c61\u3002<\/p>\n<p>&#034;\u4ece\u4e0d\u68c0\u89c6\u8be5\u5bf9\u8c61&#034;\u2014\u2014\u8fd9\u662f\u4e2a\u5f88\u514b\u5236\u7684\u8bbe\u8ba1\u3002scope \u4e0d\u5173\u5fc3 key \u662f\u4ec0\u4e48\u7c7b\u578b\u3001\u6709\u4ec0\u4e48\u5b57\u6bb5&#xff0c;\u5b83\u53ea\u505a\u8eab\u4efd\u6bd4\u8f83\u3002\u6240\u4ee5&#xff1a;<\/p>\n<p>ScopeKey \u53ef\u4ee5\u662f\u4e00\u4e2a Agent \u5bf9\u8c61<br \/>\n\u4e5f\u53ef\u4ee5\u662f\u4e00\u4e2a\u4f1a\u8bdd id<br \/>\n\u4e5f\u53ef\u4ee5\u662f\u4efb\u4f55\u4f60\u60f3\u8981\u7684&#034;\u4f5c\u7528\u57df\u8fb9\u754c&#034;<\/p>\n<p>\u800c\u8fd9\u4e2a\u539f\u8bed\u89e3\u51b3\u7684\u95ee\u9898\u662f&#xff1a;<\/p>\n<p>\u540c\u4e00\u6ce8\u518c\u4e0a\u4e0b\u6587\u540c\u65f6\u8868\u8fbe\u6bcf\u4e2a agent \u7684\u53ef\u89c1\u6027\u548c\u5171\u4eab\u751f\u547d\u5468\u671f\u6240\u6709\u6743\u3002<\/p>\n<p>\u7528\u4eba\u8bdd\u8bf4&#xff1a;\u540c\u4e00\u4e2a ctx.tools \u6ce8\u518c\u8868&#xff0c;\u53ef\u4ee5\u8ba9\u4e0d\u540c agent \u770b\u5230\u4e0d\u540c\u7684\u5de5\u5177\u96c6\u3002<\/p>\n<p>\u8fd9\u5728\u591a Agent \u573a\u666f\u4e0b\u662f\u521a\u9700\u3002\u56de\u60f3\u4e00\u4e0b\u524d\u9762\u51e0\u4e2a\u9879\u76ee\u600e\u4e48\u5904\u7406\u8fd9\u4e2a\u95ee\u9898\u7684&#xff1a;<\/p>\n<p>OpenHands  \u2192 \u6bcf\u4e2a\u4f1a\u8bdd\u4e00\u4e2a Runtime&#xff0c;\u9760\u8fdb\u7a0b\/\u5bb9\u5668\u9694\u79bb<br \/>\nDeerFlow   \u2192 sub-agent \u6709\u72ec\u7acb\u6267\u884c\u4e0a\u4e0b\u6587<br \/>\nGoose      \u2192 \u6bcf\u4e2a agent \u4e00\u4efd extension \u5217\u8868<\/p>\n<p>\u5b83\u4eec\u9760&#034;\u591a\u5b9e\u4f8b&#034;\u6765\u9694\u79bb&#xff0c;dsh \u9760&#034;\u4f5c\u7528\u57df&#034;\u6765\u9694\u79bb\u3002 \u524d\u8005\u8981\u590d\u5236\u6574\u4e2a\u4e16\u754c&#xff0c;\u540e\u8005\u53ea\u5728\u4f60\u9700\u8981\u7684\u5730\u65b9\u52a0\u4e00\u5c42\u8fc7\u6ee4\u3002<\/p>\n<p>docs\/subsystems\/scope.zh.md \u91cc\u8fd8\u6709\u4e00\u4e2a\u7ec6\u8282\u503c\u5f97\u6ce8\u610f\u2014\u2014\u6709\u4e2a\u53eb ToolRestriction \u7684\u6982\u5ff5&#xff1a;<\/p>\n<p>ToolRestriction\u2014\u2014\u5355\u4e2a\u4f5c\u7528\u57df\u5bf9\u5176\u7ee7\u627f\u5185\u5bb9\u7684\u5b9e\u65f6\u8fc7\u6ee4\u5668\u3002<\/p>\n<p>\u6ce8\u610f&#034;\u5b9e\u65f6&#034;\u548c&#034;\u7ee7\u627f&#034;&#xff1a;\u4f5c\u7528\u57df\u662f\u53ef\u4ee5\u7ee7\u627f\u7684&#xff08;scopeChainOf\u3001bindScopeParent&#xff09;&#xff0c;\u800c\u9650\u5236\u662f\u52a8\u6001\u751f\u6548\u7684\u3002\u8fd9\u5c31\u5141\u8bb8\u4e00\u79cd\u5f88\u5b9e\u7528\u7684\u6a21\u5f0f&#xff1a;<\/p>\n<p>\u7236\u4f5c\u7528\u57df&#xff1a;\u6ce8\u518c 20 \u4e2a\u5de5\u5177<br \/>\n  \u2193 \u7ee7\u627f<br \/>\n\u5b50\u4f5c\u7528\u57df&#xff08;\u67d0\u4e2a\u53d7\u9650 agent&#xff09;&#xff1a;\u5b9e\u65f6\u8fc7\u6ee4\u6389 15 \u4e2a\u5371\u9669\u5de5\u5177<\/p>\n<p>\u540c\u4e00\u4efd\u771f\u6e90&#xff0c;\u4e0d\u540c\u7684\u53ef\u89c1\u6027\u89c6\u56fe\u3002 \u8fd9\u548c Session \u7684\u505a\u6cd5&#xff08;\u4e00\u4efd\u65e5\u5fd7&#xff0c;\u591a\u79cd\u6d3e\u751f&#xff09;\u5728\u54f2\u5b66\u4e0a\u5b8c\u5168\u4e00\u81f4&#xff1a;<\/p>\n<p>dsh \u91cc\u5230\u5904\u90fd\u5728\u505a\u540c\u4e00\u4ef6\u4e8b&#xff1a;\u4fdd\u6301\u552f\u4e00\u771f\u6e90&#xff0c;\u7528\u6295\u5f71\/\u8fc7\u6ee4\u5668\u4ea7\u751f\u4e0d\u540c\u89c6\u56fe\u3002<\/p>\n<hr \/>\n<h2>\u5341\u3001\u95ea\u5149\u70b9\u4e94&#xff1a;Capability Seam \u2014\u2014 \u66ff\u6362\u4e00\u4e2a provider&#xff0c;\u6539\u53d8\u6574\u4e2a\u4ea7\u54c1<\/h2>\n<p>docs\/capability-seams.zh.md \u5b9a\u4e49\u4e86\u4e00\u4e2a\u53eb seam \u7684\u6982\u5ff5&#xff1a;<\/p>\n<p>\u4e00\u4e2a seam \u662f\u4e00\u9879\u53ef\u66ff\u6362\u80fd\u529b&#xff0c;\u5305\u542b\u4e09\u79cd\u89d2\u8272&#xff1a;\u58f0\u660e\u63a5\u53e3\u7684 Service Definition\u3001\u5b9e\u73b0\u5b83\u7684 Service Provider&#xff0c;\u4ee5\u53ca\u4f7f\u7528\u5b83\u7684 Consumer&#xff08;\u901a\u5e38\u662f\u9762\u5411\u6a21\u578b\u7684\u5de5\u5177&#xff09;\u3002<\/p>\n<p>\u4e00\u4e2a\u5305\u53ef\u4ee5\u5408\u5e76\u627f\u62c5\u591a\u4e2a\u89d2\u8272&#xff0c;\u4f46\u5355\u4e00\u89d2\u8272\u672c\u8eab\u4e0d\u662f seam&#xff1b;\u6dfb\u52a0\u4e00\u9879\u80fd\u529b\u610f\u5473\u7740\u628a\u4e09\u8005\u4e00\u5e76\u8bbe\u8ba1\u3002<\/p>\n<p>\u5b83\u7ed9\u51fa\u7684\u4f8b\u5b50&#xff0c;\u662f\u6574\u4e2a\u9879\u76ee\u91cc\u6700\u80fd\u8bf4\u660e&#034;\u4e3a\u4ec0\u4e48\u8fd9\u6837\u8bbe\u8ba1&#034;\u7684\u4e00\u6bb5&#xff1a;<\/p>\n<p>seam \u6b63\u662f\u66ff\u6362\u4e00\u4e2a\u63d0\u4f9b\u65b9\u5c31\u80fd\u6539\u53d8\u6574\u4e2a\u4ea7\u54c1\u7684\u539f\u56e0\u3002\u6587\u4ef6\u7cfb\u7edf\u4e0e\u8fdb\u7a0b\u63d0\u4f9b\u65b9\u5171\u4eab\u540c\u4e00\u4e2a\u6267\u884c\u4e16\u754c&#xff0c;\u56e0\u6b64\u628a\u5b83\u4eec\u6307\u5411\u8fdc\u7a0b\u6c99\u7bb1&#xff0c;\u4e5f\u5c31\u628a Bash\u3001PTY \u548c LSP \u4e00\u5e76\u642c\u4e86\u8fc7\u53bb&#xff0c;\u65e0\u9700\u63d0\u4f9b\u65b9\u4e13\u7528 fork\u3002<\/p>\n<p>\u8fd9\u53e5\u8bdd\u503c\u5f97\u53cd\u590d\u8bfb\u3002\u5b83\u8bf4\u7684\u662f&#xff1a;<\/p>\n<p>\u4e0d\u662f&#034;\u7ed9 bash \u52a0\u4e00\u4e2a\u8fdc\u7a0b\u6a21\u5f0f&#034;<br \/>\n\u800c\u662f&#034;\u628a\u6587\u4ef6\u7cfb\u7edf\u548c\u8fdb\u7a0b\u7684 provider \u6362\u6389&#034;<br \/>\n    \u2193<br \/>\nbash \u8ddf\u7740\u8d70\u4e86<br \/>\nPTY \u8ddf\u7740\u8d70\u4e86<br \/>\nLSP \u8ddf\u7740\u8d70\u4e86<\/p>\n<p>\u56e0\u4e3a\u5b83\u4eec\u5171\u4eab\u540c\u4e00\u4e2a&#034;\u6267\u884c\u4e16\u754c&#034;\u3002<\/p>\n<p>\u8fd9\u5c31\u548c\u524d\u9762\u51e0\u4e2a\u9879\u76ee\u7684\u505a\u6cd5\u5f62\u6210\u4e86\u9c9c\u660e\u5bf9\u6bd4&#xff1a;<\/p>\n<table>\n<tr>\u9879\u76ee\u6c99\u7bb1\/\u6267\u884c\u9694\u79bb\u7684\u505a\u6cd5\u7ed3\u679c<\/tr>\n<tbody>\n<tr>\n<td>OpenHands<\/td>\n<td>\u4e13\u95e8\u7684 Runtime \u62bd\u8c61&#xff08;Docker\/Remote\/Modal\/Runloop&#xff09;<\/td>\n<td>\u6bcf\u4e2a Runtime \u5b9e\u73b0\u8981\u8986\u76d6\u6240\u6709\u80fd\u529b<\/td>\n<\/tr>\n<tr>\n<td>DeerFlow<\/td>\n<td>sandbox\/tools.py &#043; \u591a provider&#xff08;E2B\/AIO\/local&#xff09;<\/td>\n<td>\u6c99\u7bb1\u63d0\u4f9b\u7684\u80fd\u529b\u8981\u663e\u5f0f\u5bf9\u9f50<\/td>\n<\/tr>\n<tr>\n<td>Goose<\/td>\n<td>Builtin \u6269\u5c55\u5f00 use_docker<\/td>\n<td>Docker \u662f\u6269\u5c55\u7684\u4e00\u4e2a\u5f00\u5173<\/td>\n<\/tr>\n<tr>\n<td>dsh<\/td>\n<td>\u6362\u6389 fs &#043; subprocess \u4e24\u4e2a provider<\/td>\n<td>bash\/PTY\/LSP \u4e00\u8d77\u642c\u5bb6&#xff0c;\u65e0\u9700\u4e13\u7528 fork<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>dsh \u7684\u505a\u6cd5\u6709\u4e2a\u9690\u542b\u524d\u63d0&#xff1a;&#034;\u6267\u884c\u4e16\u754c&#034;\u8981\u5148\u88ab\u62bd\u8c61\u6210\u5c11\u6570\u51e0\u4e2a\u57fa\u7840 provider\u3002 \u5982\u679c bash \u662f\u76f4\u63a5\u8c03 child_process.spawn&#xff0c;\u90a3\u5c31\u505a\u4e0d\u5230\u3002<\/p>\n<p>\u6240\u4ee5 seam \u7684\u4ef7\u503c\u4e0d\u5728\u4e8e&#034;\u591a\u4e00\u4e2a\u62bd\u8c61\u5c42&#034;&#xff0c;\u800c\u5728\u4e8e&#034;\u628a\u62bd\u8c61\u5c42\u753b\u5728\u6b63\u786e\u7684\u4f4d\u7f6e&#034;\u3002 \u753b\u5bf9\u4e86&#xff0c;\u6362\u4e00\u4e2a provider \u5c31\u642c\u8d70\u4e86\u6574\u4e2a\u6267\u884c\u4e16\u754c&#xff1b;\u753b\u9519\u4e86&#xff0c;\u5c31\u53d8\u6210&#034;\u6bcf\u52a0\u4e00\u4e2a\u73af\u5883&#xff0c;\u5c31\u8981\u6539\u4e94\u4e2a\u5730\u65b9&#034;\u3002<\/p>\n<h3>seam \u4e5f\u8981\u7ed9 subagent \u7528<\/h3>\n<p>\u6587\u6863\u91cc\u8fd8\u6709\u4e00\u53e5\u5f88\u503c\u5f97\u6ce8\u610f&#xff1a;<\/p>\n<p>subagent \u63d0\u4f9b\u65b9\u5728\u540c\u4e00\u4e2a\u63a5\u53e3\u4e4b\u540e\u540c\u6837\u5343\u5dee\u4e07\u522b&#xff0c;\u4ece\u65b0\u5efa\u4e00\u4e2a\u5b50 agent&#xff0c;\u5230\u628a\u4e00\u4e2a\u8f6e\u6b21\u59d4\u6d3e\u7ed9\u53e6\u4e00\u4e2a\u4ea7\u54c1\u3002<\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4&#xff1a;&#034;\u6d3e\u751f\u5b50\u4ee3\u7406&#034;\u8fd9\u4ef6\u4e8b\u672c\u8eab\u4e5f\u662f seam\u3002\u5b83\u7684\u4e24\u79cd\u6781\u7aef\u5b9e\u73b0\u662f&#xff1a;<\/p>\n<p>\u5b9e\u73b0 A&#xff1a;\u65b0\u5efa\u4e00\u4e2a\u5b50 Agent&#xff08;\u8fdb\u7a0b\u5185&#xff0c;\u5171\u4eab runtime&#xff09;<br \/>\n\u5b9e\u73b0 B&#xff1a;\u628a\u4e00\u4e2a\u8f6e\u6b21\u59d4\u6d3e\u7ed9\u53e6\u4e00\u4e2a\u4ea7\u54c1&#xff08;\u6bd4\u5982\u628a\u4efb\u52a1\u8f6c\u7ed9\u522b\u7684 Agent \u4ea7\u54c1&#xff09;<\/p>\n<p>dsh \u751a\u81f3\u628a\u5b9e\u9a8c\u6027\u7684 Agent Teams \u4e5f\u505a\u6210\u4e86 seam&#xff1a;<\/p>\n<p>\u5b9e\u9a8c\u6027 Agent Teams \u662f ctx.agentTeams \u4e0a\u516c\u5f00\u53d1\u5e03\u3001\u663e\u5f0f\u542f\u7528\u7684\u534f\u4f5c seam&#xff0c;\u5728\u53ef\u7ee7\u7eed subagent \u4e4b\u4e0a\u63d0\u4f9b\u6301\u4e45 roster\u3001\u4efb\u52a1\u677f\u548c mailbox\u3002<\/p>\n<p>\u628a&#034;\u591a Agent \u534f\u4f5c&#034;\u964d\u683c\u4e3a\u4e00\u4e2a\u53ef\u5f00\u5173\u7684 seam&#xff0c;\u800c\u4e0d\u662f\u5185\u6838\u80fd\u529b\u2014\u2014\u8fd9\u662f&#034;\u65e0\u7279\u6743\u5185\u6838&#034;\u7406\u5ff5\u8d2f\u5f7b\u5230\u5e95\u7684\u8868\u73b0\u3002<\/p>\n<hr \/>\n<h2>\u5341\u4e00\u3001\u95ea\u5149\u70b9\u516d&#xff1a;Profile \/ Bundle \u2014\u2014 \u7ec4\u88c5\u5373&#034;\u6709\u5e8f patch \u5c42&#034;<\/h2>\n<p>\u524d\u9762\u8bb2\u7684\u90fd\u662f&#034;\u96f6\u4ef6\u600e\u4e48\u8bbe\u8ba1&#034;\u3002\u4f46\u96f6\u4ef6\u518d\u591a&#xff0c;\u4e5f\u5f97\u6709\u4eba\u628a\u5b83\u4eec\u62fc\u8d77\u6765\u3002<\/p>\n<p>dsh \u7684\u7ec4\u88c5\u6a21\u578b\u662f&#xff1a;\u8fd0\u884c\u4e2d\u7684 dsh \u662f\u4e00\u68f5\u63d2\u4ef6\u6811&#xff0c;\u7531\u542f\u52a8\u65f6\u6309\u5e8f\u53e0\u52a0\u7684\u5404\u5c42\u7ec4\u5408\u800c\u6210\u3002<\/p>\n<p>\u4e24\u4e2a\u6982\u5ff5&#xff1a;<\/p>\n<p>Profile&#xff1a;\u5177\u540d\u7ec4\u88c5&#xff0c;\u5b58\u653e\u5728 Harness home\u3002\u5b83\u5217\u51fa\u81ea\u5df1\u53e0\u653e\u7684\u7ec4\u5408\u5305&#xff0c;\u5b58\u653e\u6811\u5916\u63d2\u4ef6&#xff0c;\u5e76\u4fdd\u5b58\u7528\u6237\u7684 cordis.patch.yml\u3002\u968f\u53d1\u884c\u7248\u4ea4\u4ed8\u7684\u6709 web\u3001headless\u3001sdk\u3001sdk-minimal\u3001acp \u4e94\u5957\u6a21\u677f\u3002<\/p>\n<p>\u7ec4\u5408\u5305&#xff08;Bundle&#xff09;&#xff1a;Cordis \u914d\u7f6e\u9879\u53ca\u5176\u6302\u8f7d\u4ee3\u7801\u7684\u5206\u53d1\u683c\u5f0f\u3002<\/p>\n<p>\u4e24\u8005\u90fd\u5728\u81ea\u5df1\u7684 package.json \u91cc\u58f0\u660e\u3002\u8fd9\u662f\u771f\u5b9e\u7684\u9a8c\u8bc1\u7ed3\u679c&#xff1a;<\/p>\n<p>\/\/ packages\/bundle\/base\/package.json<br \/>\n{<br \/>\n  &#034;name&#034;: &#034;&#064;deepseek-ai\/dsh-base&#034;,<br \/>\n  &#034;dsh&#034;: {<br \/>\n    &#034;bundle&#034;: { &#034;patch&#034;: &#034;.\/cordis.patch.yml&#034; }<br \/>\n  }<br \/>\n}<\/p>\n<p>\u800c cordis.patch.yml \u957f\u8fd9\u6837&#xff08;packages\/bundle\/base\/cordis.patch.yml&#xff09;&#xff1a;<\/p>\n<p># The dsh-base bundle patch: the shared core of each base-backed profile, applied as<br \/>\n# ONE insert over the empty profile root. Later bundle patches and the user&#039;s<br \/>\n# profile cordis.patch.yml address these rows by id, with the last write<br \/>\n# winning per row.<br \/>\n#<br \/>\n# A patch replaces the targeted row&#039;s whole &#096;config&#096; rather than merging into<br \/>\n# it, so a row whose value differs by mode does NOT live here&#8230;<br \/>\n#<br \/>\n# Row order carries no load semantics (activation is service-availability<br \/>\n# driven); the grouping is for readers.<\/p>\n<p>&#8211; insert:<br \/>\n    &#8211; id: tool-plugin-manager<br \/>\n      name: &#039;&#064;deepseek-ai\/dsh-plugin-manager\/tools&#039;<br \/>\n      disabled: true<\/p>\n<p>    &#8211; id: plugin-manager<br \/>\n      name: &#039;&#064;deepseek-ai\/dsh-plugin-manager&#039;<br \/>\n      disabled: !!js &#034;!ctx.get(&#039;profileContext&#039;)&#034;<\/p>\n<p>    &#8211; id: llm<br \/>\n      name: &#039;&#064;deepseek-ai\/dsh-llm&#039;<\/p>\n<p>    &#8211; id: session<br \/>\n      name: &#039;&#064;deepseek-ai\/dsh-session&#039;<br \/>\n    &#8230;<\/p>\n<p>\u8fd9\u6bb5 YAML \u7684\u6ce8\u91ca\u91cc\u85cf\u7740\u4e09\u4e2a\u8bbe\u8ba1\u51b3\u5b9a&#xff0c;\u6bcf\u4e00\u4e2a\u90fd\u503c\u5f97\u5b66&#xff1a;<\/p>\n<p>\u2460 \u4e00\u6761 patch \u66ff\u6362\u6574\u5757 config&#xff0c;\u800c\u4e0d\u662f\u5408\u5e76\u8fdb\u53bb<\/p>\n<p>A patch replaces the targeted row&#039;s whole config rather than merging into it.<\/p>\n<p>\u4e3a\u4ec0\u4e48&#xff1f;\u56e0\u4e3a\u90e8\u5206\u5408\u5e76\u4f1a\u4ea7\u751f&#034;\u6ca1\u4eba\u80fd\u63a8\u7406\u51fa\u6700\u7ec8\u503c&#034;\u7684\u98ce\u9669\u3002\u5982\u679c\u4e09\u5c42 patch \u5404\u6539\u4e86 config \u7684\u4e00\u4e2a\u5b57\u6bb5&#xff0c;\u6700\u7ec8\u503c\u8981\u4eba\u8111\u62fc\u3002\u66ff\u6362\u6574\u5757\u867d\u7136\u5570\u55e6&#xff08;mode bundle \u8981\u91cd\u8ff0\u5b8c\u6574\u914d\u7f6e&#xff09;&#xff0c;\u4f46\u7ed3\u679c\u6c38\u8fdc\u662f\u786e\u5b9a\u7684\u3002<\/p>\n<p>\u8fd9\u662f\u4e2a\u5f88\u6210\u719f\u7684\u53d6\u820d&#xff1a;\u7528&#034;\u5199\u8d77\u6765\u5570\u55e6&#034;\u6362&#034;\u8bfb\u8d77\u6765\u786e\u5b9a&#034;\u3002<\/p>\n<p>\u2461 \u884c\u7684\u987a\u5e8f\u4e0d\u627f\u8f7d\u52a0\u8f7d\u8bed\u4e49<\/p>\n<p>Row order carries no load semantics (activation is service-availability driven); the grouping is for readers.<\/p>\n<p>\u63d2\u4ef6\u4e0d\u662f\u6309\u4f60\u5728 YAML \u91cc\u7684\u987a\u5e8f\u542f\u52a8\u7684&#xff0c;\u800c\u662f\u7531&#034;\u670d\u52a1\u53ef\u7528\u6027&#034;\u9a71\u52a8\u2014\u2014\u4e5f\u5c31\u662f inject \u58f0\u660e\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u4f60\u5728\u6587\u4ef6\u91cc\u628a session \u5199\u5728 llm \u524d\u9762\u6216\u540e\u9762&#xff0c;\u7ed3\u679c\u4e00\u6837\u3002<\/p>\n<p>\u8fd9\u6b63\u662f\u4f9d\u8d56\u6ce8\u5165\u76f8\u5bf9&#034;\u624b\u5de5\u7f16\u6392\u542f\u52a8\u987a\u5e8f&#034;\u7684\u6700\u5927\u4f18\u52bf\u3002 \u800c\u4e14\u5b83\u89e3\u51b3\u4e86\u4e00\u4e2a\u5b9e\u9645\u75db\u70b9&#xff1a;\u52a0\u4e00\u4e2a\u65b0\u63d2\u4ef6&#xff0c;\u4f60\u4e0d\u9700\u8981\u77e5\u9053\u8be5\u63d2\u5728\u7b2c\u51e0\u4f4d\u3002<\/p>\n<p>\u2462 \u5206\u5c42\u987a\u5e8f\u662f\u56fa\u5b9a\u7684<\/p>\n<p>\u6700\u7ec8\u751f\u6548\u987a\u5e8f\u662f&#xff1a;<\/p>\n<p>\u7a7a\u6761\u76ee\u5217\u8868<br \/>\n \u2193 \u6309 profile \u5217\u51fa\u7684\u987a\u5e8f&#xff0c;\u9010\u4e2a\u5e94\u7528\u7ec4\u5408\u5305 patch<br \/>\n \u2193 profile \u7684 cordis.patch.yml<br \/>\n \u2193 home \u7ea7\u7684\u90a3\u4efd cordis.patch.yml<br \/>\n \u2193 \u4efb\u610f &#8211;patch overlay<\/p>\n<p>&#034;\u6700\u540e\u5199\u5165\u8005\u80dc\u51fa&#xff0c;\u9010\u884c\u751f\u6548&#034;\u3002\u7528\u6237\u6c38\u8fdc\u7ad9\u5728\u6700\u4e0a\u5c42&#xff0c;\u80fd\u8986\u76d6\u4efb\u4f55\u4e1c\u897f\u2014\u2014\u5305\u62ec\u7981\u7528\u4e00\u4e2a\u5b98\u65b9\u63d2\u4ef6\u3002<\/p>\n<p>\u5b98\u65b9\u8fd8\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5f88\u597d\u7528\u7684\u81ea\u68c0\u547d\u4ee4&#xff1a;<\/p>\n<p>dsh &#8211;profile web &#8211;dump-config<\/p>\n<p>\u5b83\u6253\u5370\u51fa\u7684\u4efb\u4f55\u6761\u76ee&#xff0c;\u90fd\u53ef\u4ee5\u7531\u4f60\u81ea\u5df1\u7684 patch \u66ff\u6362\u3002<\/p>\n<p>&#034;\u4efb\u4f55\u6761\u76ee\u90fd\u80fd\u88ab\u66ff\u6362&#034;\u8fd9\u53e5\u8bdd&#xff0c;\u662f&#034;\u65e0\u7279\u6743\u5185\u6838&#034;\u6700\u76f4\u767d\u7684\u8868\u8fbe\u3002<\/p>\n<hr \/>\n<h2>\u5341\u4e8c\u3001\u95ea\u5149\u70b9\u4e03&#xff1a;\u5de5\u5177\u6267\u884c\u6d41\u6c34\u7ebf<\/h2>\n<p>ctx.tools.execute() \u7684\u6d41\u7a0b&#xff08;docs\/subsystems\/tools.zh.md&#xff09;&#xff1a;<\/p>\n<p>tools\/pre-execute    &#xff08;\u53ef\u91cd\u6392\u7684 allow\/deny\/ask waterfall&#xff09;<br \/>\n  \u2193<br \/>\n\u5df2\u6ce8\u518c\u7684\u5355\u8c03 guard<br \/>\n  \u2193<br \/>\ntools\/execute        &#xff08;\u73af\u7ed5\u5206\u6d3e\u5305\u88c5\u5c42&#xff09;<br \/>\n  \u2193<br \/>\ntools\/post-execute   &#xff08;\u68c0\u67e5\/\u66ff\u6362\u7ed3\u679c&#xff09;<br \/>\n  \u2193<br \/>\n\u6700\u7ec8\u4ea7\u51fa ToolExecutionResult<\/p>\n<p>\u8fd9\u4e2a\u8bbe\u8ba1\u91cc\u6709\u4e24\u4e2a\u8bcd\u7279\u522b\u5173\u952e&#xff1a;<\/p>\n<p>&#034;\u53ef\u91cd\u6392\u7684 waterfall&#034; \u2014\u2014 \u591a\u4e2a\u7b56\u7565\u63d2\u4ef6&#xff08;\u6743\u9650\u3001\u5ba1\u8ba1\u3001\u914d\u989d&#xff09;\u53ef\u4ee5\u901a\u8fc7 waterfall \u7ec4\u5408&#xff0c;\u800c\u4e14\u987a\u5e8f\u53ef\u4ee5\u88ab\u91cd\u6392\u3002\u8fd9\u89e3\u51b3\u4e86\u4e00\u4e2a\u73b0\u5b9e\u95ee\u9898&#xff1a;\u6743\u9650\u68c0\u67e5\u5e94\u8be5\u5728\u6700\u5916\u5c42\u8fd8\u662f\u6700\u5185\u5c42&#xff1f;<\/p>\n<p>&#034;\u5355\u8c03 guard&#034; \u2014\u2014 \u6ce8\u610f\u662f&#034;\u5355\u8c03&#034;&#xff08;monotonic&#xff09;\u3002\u8fd9\u4e2a\u8bcd\u610f\u5473\u7740\u7b56\u7565\u53ea\u80fd\u8d8a\u6765\u8d8a\u4e25\u683c&#xff0c;\u4e0d\u80fd\u653e\u677e\u3002\u8fd9\u662f\u4e00\u4e2a\u5f88\u806a\u660e\u7684\u7ea6\u675f&#xff1a;<\/p>\n<p>\u63d2\u4ef6 A&#xff1a;\u8fd9\u4e2a\u5de5\u5177\u5141\u8bb8<br \/>\n\u63d2\u4ef6 B&#xff1a;\u4e0d&#xff0c;\u8fd9\u4e2a\u5de5\u5177\u7981\u6b62  \u2190 \u5355\u8c03&#xff1a;\u7981\u5c31\u662f\u7981&#xff0c;\u540e\u7eed\u63d2\u4ef6\u4e0d\u80fd\u7ffb\u56de\u6765<\/p>\n<p>\u5982\u679c guard \u662f\u53ef\u653e\u677e\u7684&#xff0c;\u90a3\u4e48&#034;\u5b89\u5168\u7b56\u7565&#034;\u5c31\u53d8\u6210\u4e86&#034;\u6700\u540e\u6ce8\u518c\u7684\u90a3\u4e2a\u63d2\u4ef6\u8bf4\u4e86\u7b97&#034;\u2014\u2014\u8fd9\u662f\u4e2a\u5b89\u5168\u6f0f\u6d1e\u3002\u7528&#034;\u5355\u8c03&#034;\u628a\u8bed\u4e49\u9489\u6b7b&#xff0c;\u8bf4\u660e\u8bbe\u8ba1\u8005\u771f\u7684\u60f3\u8fc7\u8fd9\u4e2a\u95ee\u9898\u3002<\/p>\n<h3>\u8c03\u5ea6&#xff1a;\u5c4f\u969c &#043; \u6eda\u52a8\u6c60<\/h3>\n<p>\u5de5\u5177\u8c03\u7528\u7684\u8c03\u5ea6\u65b9\u5f0f\u4e5f\u503c\u5f97\u4e00\u63d0&#xff1a;<\/p>\n<p>\/**<br \/>\n * Scheduling mode for one pending call. &#096;parallel&#096; may overlap with siblings;<br \/>\n * &#096;exclusive&#096; runs alone and forms an ordering barrier.<br \/>\n *\/<br \/>\ntype ToolExecutionMode &#061;<br \/>\n  | { kind: &#039;parallel&#039; }<br \/>\n  | { kind: &#039;exclusive&#039; }<\/p>\n<p>\u5bf9\u5e94\u6587\u6863\u91cc\u7684&#xff1a;<\/p>\n<p>agent loop \u5411\u6ce8\u518c\u8868\u67e5\u8be2\u6bcf\u4e2a\u5f85\u5904\u7406\u8c03\u7528\u7684\u6267\u884c\u6a21\u5f0f&#xff0c;\u5e76\u636e\u6b64\u5f62\u6210\u72ec\u5360\u5c4f\u969c\u548c\u6eda\u52a8\u6c60\u5e76\u884c\u6267\u884c\u3002<\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4&#xff1a;\u5e76\u884c\u662f\u6709\u8fb9\u754c\u7684\u3002<\/p>\n<p>\u5de5\u5177 A&#xff08;parallel&#xff09;  \u2510<br \/>\n\u5de5\u5177 B&#xff08;parallel&#xff09;  \u251c\u2500 \u6eda\u52a8\u6c60&#xff1a;\u5e76\u884c\u6267\u884c<br \/>\n\u5de5\u5177 C&#xff08;exclusive&#xff09; \u2518\u2500 \u5c4f\u969c&#xff1a;\u7b49\u524d\u9762\u5168\u5b8c&#xff0c;\u72ec\u5360\u6267\u884c&#xff0c;\u540e\u9762\u518d\u7b49\u5b83<\/p>\n<p>\u4e3a\u4ec0\u4e48\u9700\u8981 exclusive&#xff1f;\u56e0\u4e3a\u6709\u4e9b\u64cd\u4f5c\u5929\u7136\u4e0d\u80fd\u5e76\u884c\u2014\u2014\u6bd4\u5982\u6539\u540c\u4e00\u4e2a\u6587\u4ef6\u3001\u63d0\u4ea4 git\u3001\u5199\u6570\u636e\u5e93\u3002<\/p>\n<p>\u5927\u591a\u6570\u6846\u67b6\u8981\u4e48\u5168\u4e32\u884c&#xff08;\u6162&#xff09;&#xff0c;\u8981\u4e48\u5168\u5e76\u884c&#xff08;\u5371\u9669&#xff09;\u3002 dsh \u8ba9\u5de5\u5177\u81ea\u5df1\u58f0\u660e\u81ea\u5df1\u7684\u6267\u884c\u6a21\u5f0f&#xff0c;\u7531 loop \u6309\u58f0\u660e\u8c03\u5ea6\u3002\u8fd9\u662f\u4e2a&#034;\u628a\u5e76\u53d1\u8bed\u4e49\u4ea4\u8fd8\u7ed9\u80fd\u529b\u63d0\u4f9b\u65b9&#034;\u7684\u8bbe\u8ba1\u3002<\/p>\n<hr \/>\n<h2>\u5341\u4e09\u3001\u95ea\u5149\u70b9\u516b&#xff1a;\u4e0d\u53d8\u91cf\u673a\u5236 \u2014\u2014 \u6bcf\u4e2a\u5305\u4e3a\u81ea\u5df1\u7684\u5951\u7ea6\u8d1f\u8d23<\/h2>\n<p>\u8fd9\u662f\u6211\u5728\u8fd9\u516b\u4e2a\u9879\u76ee\u91cc\u7b2c\u4e00\u6b21\u89c1\u5230\u7684\u8bbe\u8ba1\u3002<\/p>\n<p>packages\/runtime-diagnostics\/invariants\/ \u63d0\u4f9b ctx.invariants\u2014\u2014\u4e00\u4e2a\u53ef\u914d\u7f6e\u7684\u8fd0\u884c\u65f6\u4e0d\u53d8\u5f0f\u68c0\u67e5\u6ce8\u518c\u8868&#xff1a;<\/p>\n<p>\u6bcf\u4e2a\u5de5\u4f5c\u533a\u5305\u53d1\u5e03\u4e00\u4e2a .\/invariant \u914d\u5957\u63d2\u4ef6&#xff0c;\u4ee5\u81ea\u5df1\u786e\u5207\u7684 npm \u5305\u540d\u6ce8\u518c\u68c0\u67e5\u3002<\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4&#xff1a;<\/p>\n<p>dsh-session       \u2192 \u53d1\u5e03 session\/src\/invariant.ts<br \/>\ndsh-agent-loop    \u2192 \u53d1\u5e03 agent-loop\/src\/invariant.ts<br \/>\ndsh-tools         \u2192 \u53d1\u5e03 tools\/src\/invariant.ts<\/p>\n<p>&#xff08;\u6211\u9a8c\u8bc1\u8fc7&#xff0c;\u8fd9\u4e09\u4e2a\u6587\u4ef6\u90fd\u771f\u5b9e\u5b58\u5728\u3002&#xff09;<\/p>\n<p>\u4e3a\u4ec0\u4e48\u8fd9\u4e2a\u8bbe\u8ba1\u597d&#xff1f;<\/p>\n<p>\u56e0\u4e3a\u5b83\u628a&#034;\u8c01\u6700\u61c2\u81ea\u5df1\u7684\u4e0d\u53d8\u91cf&#034;\u8fd9\u4e2a\u95ee\u9898\u56de\u7b54\u5bf9\u4e86&#xff1a;<\/p>\n<table>\n<tr>\u505a\u6cd5\u95ee\u9898<\/tr>\n<tbody>\n<tr>\n<td>\u6838\u5fc3\u5199\u4e00\u5806\u5168\u5c40\u68c0\u67e5<\/td>\n<td>\u6838\u5fc3\u8981\u77e5\u9053\u6240\u6709\u5305\u7684\u5185\u90e8\u7ea6\u5b9a \u2192 \u5fc5\u7136\u8026\u5408<\/td>\n<\/tr>\n<tr>\n<td>\u6bcf\u4e2a\u5305\u81ea\u5df1\u68c0\u67e5<\/td>\n<td>\u2705 \u5305\u6700\u61c2\u81ea\u5df1\u7684\u5951\u7ea6&#xff0c;\u6838\u5fc3\u53ea\u7ba1\u8c03\u5ea6\u548c\u5f52\u56e0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6587\u6863\u8fd8\u7279\u522b\u5f3a\u8c03\u4e86\u4e24\u4ef6\u4e8b&#xff1a;<\/p>\n<p>\u2460 \u68c0\u67e5\u7684\u8fb9\u754c<\/p>\n<p>\u68c0\u67e5\u53ef\u4ee5\u65ad\u8a00\u4ec0\u4e48&#xff08;\u6743\u5a01\u4e8b\u4ef6\u6d41\u6216\u53ef\u53d8\u6570\u636e&#xff0c;\u7edd\u4e0d\u662f\u670d\u52a1\u6216\u65b9\u6cd5\u662f\u5426\u5b58\u5728&#xff09;<\/p>\n<p>&#034;\u7edd\u4e0d\u662f\u670d\u52a1\u6216\u65b9\u6cd5\u662f\u5426\u5b58\u5728&#034;\u2014\u2014\u8fd9\u6761\u7981\u4ee4\u5f88\u7cbe\u786e\u3002\u56e0\u4e3a&#034;\u67d0\u4e2a\u670d\u52a1\u5b58\u5728\u5417&#034;\u662f\u4f9d\u8d56\u6ce8\u5165\u8be5\u7ba1\u7684\u4e8b&#xff08;inject \u673a\u5236\u5df2\u7ecf\u4fdd\u8bc1\u4e86&#xff09;&#xff0c;\u8ba9\u4e0d\u53d8\u91cf\u53bb\u67e5\u8fd9\u4e2a&#xff0c;\u7b49\u4e8e\u91cd\u590d\u5b9e\u73b0\u4e00\u5957\u673a\u5236\u3002<\/p>\n<p>\u4e0d\u53d8\u91cf\u8be5\u7ba1\u7684\u662f\u8bed\u4e49&#xff1a;\u6bd4\u5982&#034;\u540c\u4e00\u4e2a\u6b65\u9aa4\u91cc\u7684 tool\/call \u548c tool\/result \u5fc5\u987b\u914d\u5bf9&#034;&#xff08;assertToolResultRewrite&#xff09;\u3001&#034;\u8f6e\u6b21\u4e0e\u6b65\u9aa4\u7f16\u53f7\u5fc5\u987b\u5355\u8c03&#034;&#xff08;seq-ranges.ts&#xff09;\u3002<\/p>\n<p>\u2461 \u53ef\u4ee5\u4e3a\u7279\u5b9a\u5305\u5f00\u5173<\/p>\n<p>interface Config {<br \/>\n  \/** Global switch; defaults to &#096;true&#096;. *\/<br \/>\n  readonly enabled?: boolean<br \/>\n  \/** Case-sensitive JavaScript regex sources that admit package names; empty admits all. *\/<br \/>\n  readonly package_allowlist?: string[]<br \/>\n  \/** Case-sensitive JavaScript regex sources that exclude package names after allowlist matching. *\/<br \/>\n  readonly package_blocklist?: string[]<br \/>\n}<\/p>\n<p>\u7528\u6b63\u5219 allowlist\/blocklist \u9009\u62e9\u8981\u8dd1\u54ea\u4e9b\u5305\u7684\u68c0\u67e5\u3002\u800c\u4e14\u6709\u4e2a\u7ec6\u8282\u2014\u2014<\/p>\n<p>\u6821\u9a8c\u5728\u670d\u52a1\u542f\u52a8\u65f6\u660e\u786e\u62a5\u9519&#xff1a;\u7a7a\u767d\u3001\u9996\u5c3e\u5e26\u7a7a\u767d\u3001\u91cd\u590d\u6216\u65e0\u6548\u7684\u6761\u76ee\u4f1a\u629b\u51fa\u5f02\u5e38&#xff0c;\u800c\u4e0d\u662f\u88ab\u8df3\u8fc7\u3002<\/p>\n<p>\u914d\u7f6e\u5199\u9519\u4e86\u8981\u70b8&#xff0c;\u4e0d\u80fd\u9759\u9ed8\u8df3\u8fc7\u3002 \u8fd9\u6761\u89c4\u5219\u548c\u540e\u9762\u8981\u8bb2\u7684\u90a3\u6b21\u6545\u969c&#xff08;!!js \u9759\u9ed8\u6ca1\u751f\u6548&#xff09;\u6070\u597d\u662f\u540c\u4e00\u4e2a\u6559\u8bad\u7684\u4e24\u9762\u2014\u2014\u80fd\u62a5\u9519\u7684\u5c31\u4e00\u5b9a\u8981\u62a5\u9519&#xff0c;\u56e0\u4e3a\u9759\u9ed8\u5931\u6548\u662f\u6700\u8d35\u7684 bug\u3002<\/p>\n<hr \/>\n<h2>\u5341\u56db\u3001\u4ee3\u4ef7&#xff1a;\u4e00\u6b21\u771f\u5b9e\u6545\u969c&#xff0c;\u6bd4\u4efb\u4f55\u67b6\u6784\u56fe\u90fd\u6709\u8bf4\u670d\u529b<\/h2>\n<p>\u524d\u9762\u8bb2\u7684\u90fd\u662f\u6536\u76ca\u3002\u73b0\u5728\u8bb2\u4ee3\u4ef7\u2014\u2014\u800c\u8fd9\u4e00\u6b21&#xff0c;\u6211\u4e0d\u6253\u7b97\u81ea\u5df1\u63a8\u6d4b&#xff0c;\u56e0\u4e3a\u5b98\u65b9\u81ea\u5df1\u5199\u4e86\u590d\u76d8\u3002<\/p>\n<p>docs\/postmortem\/0002-js-expression-disabled-filesystem-tools.zh.md&#xff0c;\u6807\u9898\u662f&#xff1a;<\/p>\n<p>\u4e8b\u6545\u590d\u76d8 0002&#xff1a;\u6587\u4ef6\u7cfb\u7edf\u5feb\u7167\u5de5\u5177\u88ab\u6c38\u4e45\u7981\u7528<\/p>\n<p>\u6458\u8981&#xff1a;<\/p>\n<p>ACP \u793a\u4f8b\u8bd5\u56fe\u901a\u8fc7 disabled: !!js &#8230; \u6709\u6761\u4ef6\u5730\u542f\u7528\u6587\u4ef6\u7cfb\u7edf\u63d2\u4ef6&#xff0c;\u4f46 Cordis \u4ec5\u5728\u63d2\u4ef6 config \u5185\u90e8\u5bf9 JavaScript \u8868\u8fbe\u5f0f\u6c42\u503c\u3002\u539f\u59cb\u7684\u8868\u8fbe\u5f0f\u5bf9\u8c61\u4e3a truthy&#xff0c;\u56e0\u6b64\u6587\u4ef6\u7cfb\u7edf\u6808\u59cb\u7ec8\u5904\u4e8e\u7981\u7528\u72b6\u6001\u3002<\/p>\n<p>\u6839\u56e0\u5199\u5f97\u66f4\u6e05\u695a&#xff1a;<\/p>\n<p>\u5b9e\u73b0\u65f6\u5047\u8bbe !!js \u9002\u7528\u4e8e\u6574\u4e2a Loader \u914d\u7f6e\u9879\u3002\u5b9e\u9645\u53ea\u6709 entry.options.config \u4f7f\u7528\u5b83&#xff1a;Entry._resolveConfig() \u5bf9\u8be5\u5b57\u6bb5\u8fdb\u884c\u63d2\u503c&#xff0c;\u800c Entry.disabled \u76f4\u63a5\u6d4b\u8bd5 entry.options.disabled&#xff0c;\u4e0d\u7ecf\u8fc7\u63d2\u503c\u3002<\/p>\n<p>YAML \u6807\u7b7e\u5728\u8bed\u6cd5\u4e0a\u5408\u6cd5&#xff0c;\u56e0\u6b64\u52a0\u8f7d\u8fc7\u7a0b\u4e0d\u4ea7\u751f\u4efb\u4f55\u8bca\u65ad\u4fe1\u606f\u3002<\/p>\n<p>\u8bf7\u4ed4\u7ec6\u770b\u8fd9\u6bb5\u3002\u8fd9\u662f&#034;\u58f0\u660e\u5f0f\u63d2\u4ef6\u914d\u7f6e&#034;\u6700\u5178\u578b\u7684\u5931\u8d25\u6a21\u5f0f&#xff1a;<\/p>\n<p>\u914d\u7f6e\u5199\u6cd5&#xff1a;disabled: !!js &#034;someExpression()&#034;<br \/>\n           \u2193<br \/>\nYAML \u8bed\u6cd5&#xff1a;\u2705 \u5408\u6cd5<br \/>\n\u52a0\u8f7d\u8fc7\u7a0b&#xff1a;\u2705 \u65e0\u62a5\u9519<br \/>\n\u8fd0\u884c\u7ed3\u679c&#xff1a;\u274c \u8868\u8fbe\u5f0f\u5bf9\u8c61\u6052\u4e3a truthy \u2192 \u63d2\u4ef6\u6c38\u4e45\u7981\u7528<\/p>\n<p>\u8bed\u6cd5\u5408\u6cd5 &#043; \u9759\u9ed8\u5931\u6548 &#061; \u6700\u96be\u67e5\u7684 bug\u3002<\/p>\n<h3>\u66f4\u53ef\u6015\u7684\u662f\u7b2c\u4e8c\u90e8\u5206&#xff1a;\u6d4b\u8bd5\u8fd8\u901a\u8fc7\u4e86<\/h3>\n<p>\u590d\u76d8\u91cc\u5199\u4e86\u5bf9\u5f71\u54cd\u8303\u56f4\u7684\u8bf4\u660e&#xff1a;<\/p>\n<p>\u4e03\u4e2a\u6587\u4ef6\u7cfb\u7edf\u573a\u666f\u548c\u4e00\u4e2a\u6df7\u5408\u5de5\u4f5c\u533a\u7f16\u8f91\u573a\u666f\u8c03\u7528\u4e86\u6ce8\u518c\u8868\u4e2d\u4e0d\u5b58\u5728\u7684\u5de5\u5177\u3002\u5176\u7ed3\u6784\u5316\u4f1a\u8bdd\u65e5\u5fd7\u643a\u5e26 ToolNotFoundError&#xff08;code \u4e3a UNKNOWN_TOOL&#xff09;&#xff0c;stdout \u6e32\u67d3\u51fa\u901a\u7528\u7684\u5931\u8d25\u5de5\u5177\u5361\u7247\u3002<\/p>\n<p>\u5feb\u7167\u5957\u4ef6\u901a\u8fc7\u4e86&#xff0c;\u56e0\u4e3a\u7ed3\u6784\u5316\u4f1a\u8bdd\u65e5\u5fd7\u548c stdout \u6e32\u67d3\u51fa\u7684\u901a\u7528\u5931\u8d25\u5de5\u5177\u5361\u7247\u5747\u4e0e\u5237\u65b0\u540e\u7684 fixture&#xff08;\u6d4b\u8bd5\u524d\u7f6e\u6570\u636e&#xff09;\u5339\u914d&#xff1b;\u5b83\u8bc1\u660e\u7684\u662f\u56de\u5f52\u7684\u786e\u5b9a\u6027\u56de\u653e&#xff0c;\u800c\u975e\u6587\u4ef6\u7cfb\u7edf\u884c\u4e3a\u7684\u6b63\u786e\u6027\u3002<\/p>\n<p>\u8fd9\u662f\u6211\u770b\u8fc7\u6700\u503c\u5f97\u5f15\u7528\u7684\u6d4b\u8bd5\u6559\u8bad&#xff1a;<\/p>\n<p>\u5feb\u7167\u6d4b\u8bd5\u901a\u8fc7 \u2260 \u529f\u80fd\u6b63\u786e\u3002<\/p>\n<p>\u5f53&#034;\u9884\u671f\u8f93\u51fa&#034;\u662f\u4ece&#034;\u5b9e\u9645\u8f93\u51fa&#034;\u5237\u65b0\u51fa\u6765\u7684&#xff0c;\u6d4b\u8bd5\u5c31\u4ece&#034;\u9a8c\u8bc1\u884c\u4e3a&#034;\u9000\u5316\u6210&#034;\u8bb0\u5f55\u884c\u4e3a&#034;\u3002<\/p>\n<p>\u4e00\u4e2a\u5de5\u5177\u88ab\u7981\u7528\u5230&#034;\u5b8c\u5168\u4e0d\u5b58\u5728&#034;&#xff0c;\u6d4b\u8bd5\u5957\u4ef6\u4f9d\u7136\u5168\u7eff\u2014\u2014\u56e0\u4e3a\u6d4b\u8bd5\u8bb0\u5f55\u7684\u662f&#034;\u5931\u8d25\u957f\u4ec0\u4e48\u6837&#034;&#xff0c;\u800c\u4e0d\u662f&#034;\u5e94\u8be5\u6210\u529f&#034;\u3002<\/p>\n<h3>\u590d\u76d8\u7ed9\u51fa\u7684\u56db\u6761\u6559\u8bad<\/h3>\n<p>\u5b98\u65b9\u5217\u51fa\u4e86\u6559\u8bad&#xff0c;\u6211\u539f\u6837\u5f15\u7528&#xff0c;\u56e0\u4e3a\u5b83\u4eec\u6bd4\u4efb\u4f55&#034;\u6700\u4f73\u5b9e\u8df5\u6e05\u5355&#034;\u90fd\u771f\u5b9e&#xff1a;<\/p>\n<ul>\n<li>\u8bed\u6cd5\u4e0a\u88ab\u63a5\u53d7\u7684\u914d\u7f6e\u503c\u4e0d\u4e00\u5b9a\u5728\u8be5\u4f4d\u7f6e\u88ab\u6c42\u503c&#xff1b;\u5e94\u8bb0\u5f55\u5e76\u9a8c\u8bc1\u5177\u4f53\u5bf9\u54ea\u4e9b\u5b57\u6bb5\u8fdb\u884c\u63d2\u503c\u3002<\/li>\n<li>\u5feb\u7167\u5237\u65b0\u662f fixture \u7684\u751f\u4ea7\u8fc7\u7a0b&#xff0c;\u4e0d\u662f\u6b63\u786e\u6027\u5ba1\u67e5\u3002 \u8bf8\u5982\u5df2\u6ce8\u518c\u5de5\u5177\u7f3a\u5931\u8fd9\u7c7b\u8bed\u4e49\u4e0a\u4e0d\u53ef\u80fd\u7684\u7ed3\u679c&#xff0c;\u9700\u8981\u72ec\u7acb\u4e8e\u9884\u671f\u8f93\u51fa\u7684\u65ad\u8a00\u3002<\/li>\n<li>\u6743\u9650\u63a7\u5236\u53ea\u5e94\u63cf\u8ff0\u5176\u5b9e\u9645\u7ba1\u8f96\u7684\u80fd\u529b\u3002<\/li>\n<li>&#xff08;\u9632\u62a4\u63aa\u65bd&#xff09;verify-cordis-config \u89e3\u6790\u4ed3\u5e93\u4e2d\u7684 Cordis YAML&#xff0c;\u62d2\u7edd Loader \u914d\u7f6e\u9879\u5143\u6570\u636e\u4e2d\u7684\u8868\u8fbe\u5f0f\u8282\u70b9\u3002<\/li>\n<\/ul>\n<p>\u6ce8\u610f\u6700\u540e\u4e00\u6761\u2014\u2014\u4ed6\u4eec\u7684\u4fee\u590d\u65b9\u5f0f\u4e0d\u662f&#034;\u6539\u5b8c\u4e4b\u540e\u66f4\u5c0f\u5fc3&#034;&#xff0c;\u800c\u662f\u52a0\u4e86\u4e00\u4e2a\u9759\u6001\u68c0\u67e5&#xff1a;\u89e3\u6790\u6240\u6709 Cordis YAML&#xff0c;\u53ea\u8981\u53d1\u73b0 disabled \u8fd9\u7c7b\u5143\u6570\u636e\u91cc\u51fa\u73b0\u8868\u8fbe\u5f0f\u8282\u70b9&#xff0c;\u5c31\u62a5\u9519\u3002<\/p>\n<p>\u8fd9\u662f&#034;\u628a\u8e29\u8fc7\u7684\u5751\u53d8\u6210\u5de5\u5177&#034;\u7684\u6b63\u786e\u59ff\u52bf\u3002<\/p>\n<h3>\u8fd9\u4e00\u8282\u60f3\u8bf4\u4ec0\u4e48<\/h3>\n<p>\u6211\u60f3\u8bf4\u7684\u662f&#xff1a;&#034;Everything is a Plugin&#034; \u7684\u4ee3\u4ef7&#xff0c;\u4e0d\u662f&#034;\u62bd\u8c61\u5c42\u592a\u591a&#034;&#xff0c;\u800c\u662f&#034;\u5931\u8d25\u6a21\u5f0f\u53d8\u9690\u853d\u4e86&#034;\u3002<\/p>\n<p>\u5728\u4f20\u7edf\u7684\u5199\u6b7b\u67b6\u6784\u91cc&#xff1a;<\/p>\n<p>\u6587\u4ef6\u7cfb\u7edf\u5de5\u5177\u6ca1\u6ce8\u518c \u2192 \u4ee3\u7801\u91cc grep \u4e00\u4e0b\u5c31\u77e5\u9053\u4e3a\u4ec0\u4e48<\/p>\n<p>\u5728\u63d2\u4ef6\u5316\u67b6\u6784\u91cc&#xff1a;<\/p>\n<p>\u6587\u4ef6\u7cfb\u7edf\u5de5\u5177\u6ca1\u6ce8\u518c<br \/>\n  \u2192 \u914d\u7f6e\u8bed\u6cd5\u6ca1\u9519<br \/>\n  \u2192 \u52a0\u8f7d\u65e5\u5fd7\u6ca1\u62a5\u9519<br \/>\n  \u2192 \u4f46\u67d0\u4e2a\u5b57\u6bb5\u6ca1\u88ab\u6c42\u503c<br \/>\n  \u2192 \u800c\u5b83\u957f\u5f97\u5f88\u50cf\u4f1a\u88ab\u6c42\u503c<\/p>\n<p>\u63d2\u4ef6\u5316\u7684\u6536\u76ca\u662f&#034;\u6539\u914d\u7f6e\u5c31\u80fd\u6539\u884c\u4e3a&#034;&#xff1b;\u4ee3\u4ef7\u662f&#034;\u6539\u9519\u4e86\u4e0d\u4e00\u5b9a\u62a5\u9519&#034;\u3002<\/p>\n<p>\u800c dsh \u7684\u5e94\u5bf9&#xff08;verify-cordis-config \u9759\u6001\u5b88\u536b &#043; \u542f\u52a8\u65f6\u629b\u5f02\u5e38\u800c\u4e0d\u662f\u9759\u9ed8\u8df3\u8fc7 &#043; \u5feb\u7167\u62d2\u7edd\u7ed3\u6784\u5316\u9519\u8bef\u7ed3\u679c&#xff09;\u6070\u597d\u7ed9\u51fa\u4e86\u901a\u7528\u7b54\u6848&#xff1a;<\/p>\n<p>\u63d2\u4ef6\u5316\u67b6\u6784\u7684\u6210\u719f\u5ea6&#xff0c;\u4e0d\u4f53\u73b0\u5728&#034;\u6709\u591a\u5c11\u6269\u5c55\u70b9&#034;&#xff0c;\u800c\u4f53\u73b0\u5728&#034;\u6709\u591a\u5c11\u9053\u9632\u7ebf&#034;\u3002<\/p>\n<hr \/>\n<h2>\u5341\u4e94\u3001\u4ee3\u4ef7&#xff1a;\u62bd\u8c61\u5c42\u6570\u4e0e\u5b66\u4e60\u6210\u672c<\/h2>\n<p>\u9664\u4e86\u5931\u8d25\u6a21\u5f0f&#xff0c;\u8fd8\u6709\u66f4\u6734\u7d20\u7684\u6210\u672c\u2014\u2014\u8981\u7406\u89e3\u5b83&#xff0c;\u4f60\u5f97\u5148\u5b66\u591a\u5c11\u4e1c\u897f\u3002<\/p>\n<p>\u6211\u5b9e\u9645\u8d70\u4e86\u4e00\u904d&#xff0c;\u95e8\u69db\u5927\u6982\u662f\u8fd9\u6837\u7684&#xff1a;<\/p>\n<p>\u7b2c 1 \u5c42&#xff1a;Cordis \u7684\u4e94\u4e2a\u6982\u5ff5<br \/>\n        &#xff08;\u63d2\u4ef6 \/ Context \/ inject \/ \u7c7b\u578b\u5316\u4e8b\u4ef6 \/ \u53ef\u9006\u526f\u4f5c\u7528&#xff09;<\/p>\n<p>\u7b2c 2 \u5c42&#xff1a;\u4e94\u79cd\u4e8b\u4ef6\u5206\u53d1\u6a21\u5f0f<br \/>\n        &#xff08;emit \/ waterfall \/ parallel \/ serial \/ bail&#xff09;<br \/>\n        &#043; waterfall \u7684&#034;\u73af\u7ed5\u4e2d\u95f4\u4ef6&#034;\u8bed\u4e49<\/p>\n<p>\u7b2c 3 \u5c42&#xff1a;\u4e09\u7c7b\u4e8b\u4ef6\u57df\u5982\u4f55\u9009<br \/>\n        &#xff08;\u4f1a\u8bdd\u4e8b\u4ef6 \/ Agent \u4e8b\u4ef6 \/ \u80fd\u529b\u4e8b\u4ef6&#xff09;<\/p>\n<p>\u7b2c 4 \u5c42&#xff1a;\u4e3b\u5e72\u516d\u4e2a\u5305 &#043; 54 \u4e2a\u5305\u7684\u5206\u5e03<\/p>\n<p>\u7b2c 5 \u5c42&#xff1a;Profile \/ Bundle \/ patch \u53e0\u52a0\u987a\u5e8f<\/p>\n<p>\u7b2c 6 \u5c42&#xff1a;Scope \u7684\u4f5c\u7528\u57df\u7ee7\u627f\u4e0e\u8fc7\u6ee4<\/p>\n<p>\u7b2c 7 \u5c42&#xff1a;seam \u4e09\u89d2\u8272&#xff08;Definition \/ Provider \/ Consumer&#xff09;<\/p>\n<p>\u5b98\u65b9\u5f88\u5766\u8bda\u5730\u627f\u8ba4\u4e86\u8fd9\u4e2a\u95e8\u69db\u2014\u2014docs\/architecture.zh.md \u7b2c\u4e00\u53e5\u5c31\u662f&#xff1a;<\/p>\n<p>\u6539\u52a8 packages\/ \u4e0b\u7684\u4efb\u4f55\u5185\u5bb9\u4e4b\u524d&#xff0c;\u8bf7\u5148\u9605\u8bfb\u672c\u6587\u3002\u672c\u6587\u5047\u5b9a\u4f60\u5df2\u4e86\u89e3 Cordis&#xff1b;\u5982\u679c\u5c1a\u672a\u4e86\u89e3&#xff0c;\u8bf7\u5148\u9605\u8bfb\u5165\u95e8\u6216\u6559\u7a0b\u3002<\/p>\n<p>\u5efa\u8bae\u4f7f\u7528 agent \u63a2\u7d22\u4ee3\u7801\u5e93\u5e76\u7406\u89e3\u5176\u67b6\u6784\u3002<\/p>\n<p>\u6700\u540e\u4e00\u53e5\u5f88\u6709\u610f\u601d&#xff1a;\u9879\u76ee\u81ea\u5df1\u5efa\u8bae\u4f60\u7528 AI Agent \u6765\u7406\u89e3\u5b83\u3002 \u8fd9\u65e2\u662f\u5766\u8bda&#xff08;\u627f\u8ba4\u590d\u6742\u5ea6\u9ad8&#xff09;&#xff0c;\u4e5f\u4fa7\u9762\u8bf4\u660e\u4e86\u89c4\u6a21\u2014\u20142206 \u7bc7\u51b3\u7b56\u8bb0\u5f55\u30013198 \u4e2a TS \u6587\u4ef6&#xff0c;\u4eba\u529b\u901a\u8bfb\u4e0d\u73b0\u5b9e\u3002<\/p>\n<h3>\u5bf9\u7b80\u5355\u573a\u666f&#xff0c;\u5b83\u786e\u5b9e\u662f\u8fc7\u5ea6\u8bbe\u8ba1<\/h3>\n<p>\u4e00\u4e2a\u8bda\u5b9e\u7684\u5224\u65ad&#xff1a;<\/p>\n<table>\n<tr>\u4f60\u7684\u573a\u666f\u8be5\u7528\u4ec0\u4e48<\/tr>\n<tbody>\n<tr>\n<td>\u4e00\u4e2a Agent &#043; 3 \u4e2a\u5de5\u5177 &#043; 1 \u4e2a\u6a21\u578b<\/td>\n<td>\u522b\u7528 dsh&#xff0c;100 \u884c\u624b\u5199 loop \u66f4\u5feb<\/td>\n<\/tr>\n<tr>\n<td>\u9700\u8981\u591a\u6a21\u578b &#043; \u591a\u4f1a\u8bdd &#043; \u53ef\u6062\u590d<\/td>\n<td>\u7528 LangGraph \/ DeerFlow \u7ea7\u522b\u5c31\u591f<\/td>\n<\/tr>\n<tr>\n<td>\u8981\u505a\u4e00\u4e2a\u4f1a\u88ab\u53cd\u590d\u91cd\u7ec4\u7684\u4ea7\u54c1&#xff08;\u591a\u7aef &#043; \u591a profile &#043; \u53ef\u6362 loop &#043; \u591a\u79df\u6237\u4f5c\u7528\u57df&#xff09;<\/td>\n<td>dsh \u8fd9\u7c7b\u67b6\u6784\u5f00\u59cb\u6709\u610f\u4e49<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>docs\/architecture.zh.md \u91cc\u6709\u4e00\u53e5\u8bdd\u8bf4\u660e\u4e86\u5b83\u7684\u76ee\u6807\u573a\u666f&#xff1a;<\/p>\n<p>\u53d7\u652f\u6301\u7684 Node \u5e94\u7528\u901a\u8fc7\u5177\u540d dsh profile \u542f\u52a8\u3002\u968f\u9644 profile \u4e3a web\u3001headless\u3001sdk\u3001sdk-minimal \u548c acp\u3002<\/p>\n<p>\u4e94\u4e2a profile\u3001\u56db\u79cd\u7aef&#xff08;Web\/Desktop\/CLI\/SDK&#xff09;\u3001\u4e24\u79cd\u8bed\u8a00 SDK&#xff08;TypeScript &#043; Python&#xff09;\u2014\u2014\u8fd9\u624d\u662f\u5b83\u8981\u652f\u6491\u7684\u4e1c\u897f\u3002<\/p>\n<p>\u6240\u4ee5\u5bf9\u5b83\u7684\u67b6\u6784\u8bc4\u4ef7&#xff0c;\u6807\u51c6\u5e94\u8be5\u662f&#xff1a;<\/p>\n<p>\u4e0d\u662f&#034;\u5b83\u7b80\u5355\u4e0d\u7b80\u5355&#034;&#xff0c;\u800c\u662f&#034;\u5b83\u7528\u8fd9\u4efd\u590d\u6742\u5ea6&#xff0c;\u6362\u5230\u4e86\u591a\u5c11\u7ec4\u88c5\u81ea\u7531\u5ea6&#034;\u3002<\/p>\n<p>\u6211\u7684\u5224\u65ad\u662f&#xff1a;\u6362\u5230\u4e86\u3002 \u4f46\u524d\u63d0\u662f\u4f60\u771f\u7684\u662f\u5728\u505a\u4ea7\u54c1&#xff0c;\u4e0d\u662f\u4e00\u4e2a\u9879\u76ee\u3002<\/p>\n<hr \/>\n<h2>\u5341\u516d\u3001\u4ee3\u4ef7&#xff1a;\u5f00\u53d1\u8005\u9884\u89c8\u9636\u6bb5\u7684\u4e0d\u7a33\u5b9a<\/h2>\n<p>\u6700\u540e\u4e00\u4e2a\u4ee3\u4ef7&#xff0c;\u5199\u5728 README \u91cc&#xff1a;<\/p>\n<h3>\u5f00\u53d1\u8005\u9884\u89c8<\/h3>\n<p>DeepSeek Harness \u5904\u4e8e \u5f00\u53d1\u8005\u9884\u89c8 \u9636\u6bb5&#xff0c;\u6b63\u5728\u5feb\u901f\u8fed\u4ee3\u3002\u672a\u6765\u5c06\u51fa\u73b0\u7834\u574f\u517c\u5bb9\u6027\u7684\u53d8\u66f4\u3002<\/p>\n<p>\u7248\u672c\u53f7 0.1.6-alpha.2 \u4e5f\u5370\u8bc1\u4e86\u8fd9\u4e00\u70b9\u3002<\/p>\n<p>\u8fd9\u610f\u5473\u7740\u4e24\u4ef6\u4e8b&#xff1a;<\/p>\n<p>\u2460 \u73b0\u5728\u5b66\u5b83&#xff0c;\u5b66\u5230\u7684\u662f&#034;\u601d\u8def&#034;&#xff0c;\u4e0d\u662f&#034;API&#034;\u3002<\/p>\n<p>\u5177\u4f53\u4ee3\u7801\u4f1a\u53d8&#xff0c;\u4f46&#034;\u4e09\u7c7b\u4e8b\u4ef6\u57df&#034;\u3001&#034;\u65e0\u7279\u6743\u5185\u6838&#034;\u3001&#034;\u53ef\u9006\u526f\u4f5c\u7528&#034;\u8fd9\u4e9b\u8bbe\u8ba1\u5224\u65ad&#xff0c;\u662f\u80fd\u5e26\u8d70\u7684\u3002<\/p>\n<p>\u2461 \u5b83\u81ea\u5df1\u7684\u6587\u6863\u5c31\u5728\u5904\u7406\u8fd9\u79cd\u4e0d\u7a33\u5b9a\u3002<\/p>\n<p>Session \u683c\u5f0f\u6709\u7248\u672c\u5316\u8fc1\u79fb\u673a\u5236&#xff1a;<\/p>\n<p>JSONL v0 \u4f7f\u7528 session.jsonl[.zstd]&#xff0c;v1 \u53ca\u540e\u7eed\u7248\u672c\u4f7f\u7528\u5c0f\u5199 session.vN.jsonl[.zstd]&#xff1b;\u5df2\u63d0\u4ea4 generation \u8def\u5f84\u7edd\u4e0d\u91cd\u547d\u540d\u3001\u66ff\u6362\u6216\u5220\u9664\u3002<\/p>\n<p>\u6ce8\u610f&#034;\u7edd\u4e0d\u91cd\u547d\u540d\u3001\u66ff\u6362\u6216\u5220\u9664&#034;\u2014\u2014\u5df2\u53d1\u5e03\u7684\u6570\u636e\u683c\u5f0f\u5f53\u6210\u4e0d\u53ef\u53d8\u5951\u7ea6\u3002\u800c\u4e14\u8fc1\u79fb\u662f\u9010\u7ea7\u7684&#xff1a;<\/p>\n<p>\u6bcf\u4e2a\u76f8\u90bb\u8fc1\u79fb\u5305\u53ea\u8d1f\u8d23\u4e00\u4e2a vN -&gt; vN&#043;1 \u6b65\u9aa4\u3002<\/p>\n<p>\u800c\u4e0d\u662f v0 \u2192 v5 \u4e00\u4e2a\u5927\u8fc1\u79fb\u3002 \u8fd9\u6837 N \u4e2a\u7248\u672c\u53ea\u9700\u8981 N-1 \u4e2a\u8fc1\u79fb&#xff0c;\u800c\u4e0d\u662f N\u00b2 \u4e2a\u3002\u8fd9\u662f\u4e2a\u80fd\u76f4\u63a5\u7528\u5728\u4f60\u9879\u76ee\u91cc\u7684\u6a21\u5f0f\u3002<\/p>\n<hr \/>\n<h2>\u5341\u4e03\u3001\u548c\u524d\u9762\u516b\u4e2a\u9879\u76ee\u653e\u5728\u4e00\u8d77\u770b<\/h2>\n<p>\u73b0\u5728\u505a\u4e00\u6b21\u6a2a\u5411\u5bf9\u7167\u3002\u8fd9\u662f\u6211\u8ba4\u4e3a\u8fd9\u6b21\u8d4f\u6790\u6700\u6709\u4ef7\u503c\u7684\u90e8\u5206\u2014\u2014\u4e5d\u4e2a\u9879\u76ee&#xff0c;\u4e5d\u79cd\u5bf9\u540c\u4e00\u4e2a\u95ee\u9898\u7684\u4e0d\u540c\u56de\u7b54\u3002<\/p>\n<table>\n<tr>Agent Loop\u72b6\u6001\/\u5386\u53f2\u5de5\u5177\u6269\u5c55\u673a\u5236\u6838\u5fc3\u53d6\u820d<\/tr>\n<tbody>\n<tr>\n<td>LangGraph<\/td>\n<td>\u81ea\u5efa StateGraph<\/td>\n<td>\u56fe\u72b6\u6001 &#043; checkpoint<\/td>\n<td>Node &#043; Tool<\/td>\n<td>\u52a0\u8282\u70b9\/\u8fb9<\/td>\n<td>\u7f16\u6392\u80fd\u529b \u2194 \u56fe\u590d\u6742\u5ea6<\/td>\n<\/tr>\n<tr>\n<td>OpenHands<\/td>\n<td>\u81ea\u5efa reasoning-action loop<\/td>\n<td>Event Stream<\/td>\n<td>Runtime \u5185\u5efa<\/td>\n<td>\u52a0 Runtime\/\u5de5\u5177<\/td>\n<td>\u6267\u884c\u80fd\u529b \u2194 \u5b89\u5168\u8fb9\u754c<\/td>\n<\/tr>\n<tr>\n<td>browser-use<\/td>\n<td>\u81ea\u5efa step \u5faa\u73af<\/td>\n<td>\u5355\u72b6\u6001\u6d88\u606f\u8986\u76d6<\/td>\n<td>\u8fdb\u7a0b\u5185 Tool<\/td>\n<td>\u6ce8\u518c\u5de5\u5177<\/td>\n<td>\u611f\u77e5\u7cbe\u5ea6 \u2194 \u4e0a\u4e0b\u6587\u6210\u672c<\/td>\n<\/tr>\n<tr>\n<td>DeerFlow 2.0<\/td>\n<td>create_agent &#043; middleware<\/td>\n<td>Checkpoint &#043; RunStore<\/td>\n<td>\u53ef\u63d2\u62d4 provider<\/td>\n<td>\u52a0 middleware\/subagent<\/td>\n<td>\u957f\u4efb\u52a1\u5065\u58ee \u2194 \u534f\u8c03\u590d\u6742\u5ea6<\/td>\n<\/tr>\n<tr>\n<td>Hermes<\/td>\n<td>\u624b\u6413 _LoopState<\/td>\n<td>Memory Provider<\/td>\n<td>\u63d2\u4ef6\u5316<\/td>\n<td>Memory\/Skill Provider<\/td>\n<td>\u81ea\u6211\u8fdb\u5316 \u2194 \u8bb0\u5fc6\u6c61\u67d3<\/td>\n<\/tr>\n<tr>\n<td>OpenCode<\/td>\n<td>\u6d41\u5f0f processor &#043; \u4e09\u6001\u8fd4\u56de<\/td>\n<td>Session &#043; compaction<\/td>\n<td>\u60f0\u6027\u6ce8\u518c Tool<\/td>\n<td>\u52a0 Tool\/Provider<\/td>\n<td>\u4ea4\u4e92\u4f53\u9a8c \u2194 \u62bd\u8c61\u5c42&#xff08;Effect-TS&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>Goose<\/td>\n<td>\u72b6\u6001\u673a reply_with_state_machine<\/td>\n<td>Session<\/td>\n<td>MCP Extension<\/td>\n<td>\u52a0 MCP server<\/td>\n<td>\u65e0\u9650\u6269\u5c55 \u2194 \u914d\u7f6e\u590d\u6742\u5ea6<\/td>\n<\/tr>\n<tr>\n<td>dsh<\/td>\n<td>\u63d2\u4ef6&#xff08;\u53ef\u5b9e\u73b0\u53ef\u66ff\u6362&#xff09;<\/td>\n<td>append-only \u65e5\u5fd7&#xff08;\u6d3e\u751f\u5386\u53f2&#xff09;<\/td>\n<td>seam &#043; \u6d41\u6c34\u7ebf<\/td>\n<td>\u6302\u63d2\u4ef6\u5230\u63d2\u4ef6\u65c1<\/td>\n<td>\u7ec4\u88c5\u81ea\u7531\u5ea6 \u2194 \u5931\u8d25\u9690\u853d\u6027<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u770b\u8fd9\u5f20\u8868\u80fd\u53d1\u73b0\u4e00\u6761\u6e05\u6670\u7684\u6f14\u8fdb&#xff1a;<\/p>\n<p>LangGraph     \u2192 \u7f16\u6392\u5c42\u7684\u53ef\u7ec4\u5408<br \/>\nOpenHands     \u2192 \u6267\u884c\u5c42\u7684\u53ef\u66ff\u6362&#xff08;Runtime&#xff09;<br \/>\nbrowser-use   \u2192 \u611f\u77e5\u5c42\u7684\u53ef\u7ec4\u5408<br \/>\nDeerFlow      \u2192 \u4efb\u52a1\u5c42\u7684\u53ef\u66ff\u6362&#xff08;middleware\/subagent&#xff09;<br \/>\nHermes        \u2192 \u8bb0\u5fc6\u5c42\u7684\u53ef\u66ff\u6362&#xff08;Memory Provider&#xff09;<br \/>\nOpenCode      \u2192 \u80fd\u529b\u5c42\u7684\u53ef\u7ec4\u5408&#xff08;Tool\/Provider&#xff09;<br \/>\nGoose         \u2192 \u5de5\u5177\u5c42\u7684\u53ef\u66ff\u6362&#xff08;MCP \u534f\u8bae\u8fb9\u754c&#xff09;<br \/>\ndsh           \u2192 \u628a\u4e0a\u9762\u8fd9\u4e9b&#034;\u5c42&#034;\u5168\u90e8\u7edf\u4e00\u6210\u540c\u4e00\u79cd\u4e1c\u897f&#xff1a;\u63d2\u4ef6<\/p>\n<p>\u524d\u516b\u4e2a\u9879\u76ee&#xff0c;\u5404\u81ea\u5728\u67d0\u4e00\u5c42\u505a\u53ef\u66ff\u6362&#xff1b;dsh \u628a&#034;\u53ef\u66ff\u6362&#034;\u53d8\u6210\u4e86\u67b6\u6784\u7684\u9ed8\u8ba4\u5f62\u6001\u3002<\/p>\n<p>\u800c dsh \u548c\u524d\u516b\u4e2a\u6700\u672c\u8d28\u7684\u4e00\u4e2a\u5dee\u522b\u662f&#xff1a;<\/p>\n<p>\u5176\u4ed6\u9879\u76ee\u7684\u4f5c\u8005\u77e5\u9053\u81ea\u5df1\u662f&#034;\u6846\u67b6\/\u4ea7\u54c1&#034;&#xff1b;dsh \u7684\u8bbe\u8ba1\u8005\u77e5\u9053\u81ea\u5df1\u662f\u5728\u5b9a\u4e49&#034;\u4e00\u79cd\u7ec4\u88c5\u65b9\u5f0f&#034;\u3002<\/p>\n<p>\u8bc1\u636e\u5c31\u662f\u90a3\u7bc7\u8bba\u6587\u2014\u2014\u5b83\u4e0d\u53ea\u662f\u5199\u4e86\u4e2a Agent \u6846\u67b6&#xff0c;\u5b83\u628a\u8fd9\u4ef6\u4e8b\u62bd\u8c61\u6210\u4e86&#034;\u65f6\u7a7a\u53ef\u7ec4\u5408\u6027\u7f16\u7a0b\u8303\u5f0f&#034;\u3002<\/p>\n<hr \/>\n<h2>\u5341\u516b\u3001\u5982\u679c\u4f60\u60f3\u8bfb\u5b83&#xff0c;\u5efa\u8bae\u7684\u8def\u7ebf<\/h2>\n<p>\u57fa\u4e8e\u6211\u7684\u5b9e\u9645\u9605\u8bfb\u7ecf\u9a8c&#xff0c;\u7ed9\u4f60\u4e00\u6761\u6548\u7387\u6700\u9ad8\u7684\u8def\u7ebf&#xff1a;<\/p>\n<p>\u7b2c 1 \u6b65  README.zh.md&#xff08;10 \u5206\u949f&#xff09;<br \/>\n         \u77e5\u9053\u5b83\u662f\u4ec0\u4e48\u3001\u4ec0\u4e48\u9636\u6bb5\u3001\u600e\u4e48\u8dd1<\/p>\n<p>\u7b2c 2 \u6b65  docs\/cordis-primer.zh.md&#xff08;15 \u5206\u949f&#xff09;<br \/>\n         \u2605 \u6700\u5173\u952e\u7684\u4e00\u6b65\u3002\u4e0d\u61c2 Cordis \u7684\u4e94\u4e2a\u6982\u5ff5&#xff0c;\u540e\u9762\u5168\u662f\u5929\u4e66<\/p>\n<p>\u7b2c 3 \u6b65  docs\/architecture.zh.md&#xff08;40 \u5206\u949f&#xff09;<br \/>\n         \u4e09\u4e2a anchor \u8981\u8bfb\u900f&#xff1a;turn-flow \/ events \/ \u80fd\u529b seam<br \/>\n         \u7279\u522b\u662f\u300c\u65b0\u884c\u4e3a\u7684\u5f52\u5c5e\u4f4d\u7f6e\u300d\u90a3\u5f20\u8868\u2014\u2014\u5b83\u628a&#034;\u60f3\u505a\u4ec0\u4e48 \u2192 \u8be5\u52a8\u54ea\u91cc&#034;\u5b8c\u5168\u5bf9\u4e0a\u4e86<\/p>\n<p>\u7b2c 4 \u6b65  docs\/agent-lifecycle.zh.md&#xff08;20 \u5206\u949f&#xff09;<br \/>\n         \u90a3\u4efd Mermaid \u65f6\u5e8f\u56fe&#xff0c;\u4e00\u6b21\u8f6e\u6b21\u7684\u5b8c\u6574\u751f\u547d\u5468\u671f<\/p>\n<p>\u7b2c 5 \u6b65  docs\/subsystems\/session.zh.md&#xff08;60 \u5206\u949f&#xff09;<br \/>\n         \u4e8b\u4ef6\u8bcd\u6c47 &#043; \u6d3e\u751f\u5386\u53f2 &#043; fork API<br \/>\n         \u2605 \u5982\u679c\u53ea\u8bfb\u4e00\u4e2a\u5b50\u7cfb\u7edf&#xff0c;\u8bfb\u8fd9\u4e2a<\/p>\n<p>\u7b2c 6 \u6b65  docs\/subsystems\/core.zh.md&#xff08;60 \u5206\u949f&#xff09;<br \/>\n         Agent \u53e5\u67c4\u3001\u521b\u5efa\u4e0e\u6240\u6709\u6743\u3001agent\/* \u4e8b\u4ef6<br \/>\n         \u91cd\u70b9\u770b\u300cAgent \u53e5\u67c4\u300d\u4e00\u8282\u2014\u2014\u90a3\u4e2a cancel \u7684\u8bed\u4e49\u6587\u6863\u5199\u5f97\u6781\u7ec6<\/p>\n<p>\u7b2c 7 \u6b65  docs\/postmortem\/0002-*.zh.md&#xff08;10 \u5206\u949f&#xff09;<br \/>\n         \u2605 \u5168\u9879\u76ee\u6027\u4ef7\u6bd4\u6700\u9ad8\u7684\u4e00\u7bc7\u300210 \u5206\u949f\u8bfb\u5230\u4e00\u4e2a\u771f\u5b9e\u6545\u969c\u7684\u5b8c\u6574\u56e0\u679c\u94fe<\/p>\n<p>\u7b2c 8 \u6b65  \u6309\u9700\u8bfb\u5b50\u7cfb\u7edf&#xff08;tools \/ persistence \/ scope \/ invariants \/ capability-seams&#xff09;<\/p>\n<p>\u4e0d\u8981\u4ece frontend \u5f00\u59cb<br \/>\n\u4e0d\u8981\u4ece packages\/ \u9010\u4e2a\u8bfb\u6e90\u7801&#xff08;3198 \u4e2a\u6587\u4ef6&#xff09;<br \/>\n\u4e0d\u8981\u8df3\u8fc7 cordis-primer \u2014\u2014 \u8df3\u8fc7\u5b83&#xff0c;\u540e\u9762\u6bcf\u4e00\u6b65\u90fd\u8981\u56de\u5934<\/p>\n<p>\u7136\u540e\u8bfb\u6e90\u7801&#xff0c;\u5efa\u8bae\u53ea\u770b\u8fd9\u4e09\u5904&#xff08;\u6bcf\u5904\u90fd\u5f88\u77ed\u3001\u5f88\u503c&#xff09;&#xff1a;<\/p>\n<p>packages\/core\/session\/src\/surface.ts:119      deriveEventMessage  \u2190 \u6d3e\u751f\u5386\u53f2\u7684\u5fc3\u810f<br \/>\npackages\/core\/session\/src\/types.ts             SessionEventMap     \u2190 \u4e8b\u4ef6\u8bcd\u6c47\u7684\u5b9a\u4e49<br \/>\npackages\/core\/agent-loop\/src\/agent.ts:72      ReactLoopAgent      \u2190 &#034;loop \u662f\u63d2\u4ef6&#034;\u7684\u843d\u70b9<\/p>\n<hr \/>\n<h2>\u5341\u4e5d\u3001\u6211\u8ba4\u4e3a\u6700\u503c\u5f97\u5e26\u8d70\u7684\u4e09\u4e2a\u5de5\u7a0b\u539f\u5219<\/h2>\n<p>\u5982\u679c\u8fd9\u7bc7\u8d4f\u6790\u53ea\u7559\u4e0b\u4e09\u53e5\u8bdd&#xff0c;\u6211\u4f1a\u7559\u8fd9\u4e09\u53e5\u3002<\/p>\n<h3>\u7b2c\u4e00&#xff1a;\u72b6\u6001\u4e0d\u8be5\u4f4f\u5728&#034;\u90a3\u4e2a\u53ef\u80fd\u88ab\u66ff\u6362\u7684\u4e1c\u897f&#034;\u91cc<\/h3>\n<p>\u274c  Agent<br \/>\n     \u251c\u2500\u2500 self.messages       \u2190 \u6362\u4e86 Agent \u5c31\u65ad\u4e86<br \/>\n     \u2514\u2500\u2500 self.state<\/p>\n<p>\u2705  EventLog&#xff08;\u552f\u4e00\u771f\u6e90&#xff09;<br \/>\n        \u2193 derive<br \/>\n    Message[]&#xff08;\u6d3e\u751f&#xff0c;\u968f\u65f6\u53ef\u91cd\u5efa&#xff09;<\/p>\n<p>\u552f\u4e00\u771f\u6e90 &#061; \u4e00\u4e2a append-only \u65e5\u5fd7 &#043; \u4e00\u4e2a\u7eaf\u6d3e\u751f\u51fd\u6570\u3002<\/p>\n<p>\u8fd9\u6761\u539f\u5219\u7684\u901a\u7528\u4ef7\u503c\u8fdc\u8d85 Agent&#xff1a;<\/p>\n<p>\u6570\u636e\u5e93      \u2192 WAL &#043; \u7269\u5316\u89c6\u56fe<br \/>\n\u524d\u7aef        \u2192 \u5355\u5411\u6570\u636e\u6d41&#xff08;state \u2192 view&#xff09;<br \/>\n\u534f\u4f5c\u7f16\u8f91    \u2192 CRDT \u64cd\u4f5c\u65e5\u5fd7<br \/>\nAgent       \u2192 SessionEvent[] &#043; deriveMessages()<\/p>\n<p>\u5b83\u4eec\u90fd\u5728\u505a\u540c\u4e00\u4ef6\u4e8b&#xff1a;\u628a&#034;\u5f53\u524d\u72b6\u6001&#034;\u964d\u7ea7\u4e3a&#034;\u5386\u53f2\u7684\u6295\u5f71&#034;\u3002<\/p>\n<h3>\u7b2c\u4e8c&#xff1a;\u6ce8\u518c\u5fc5\u987b\u53ef\u9006&#xff0c;\u5426\u5219\u8c08\u4e0d\u4e0a\u53ef\u7ec4\u5408<\/h3>\n<p>ctx.effect()   \u2192 \u8fd4\u56de disposer<br \/>\nctx.on()       \u2192 \u5378\u8f7d\u65f6\u81ea\u52a8\u64a4\u9500<\/p>\n<p>&#034;\u53ef\u7ec4\u5408&#034;\u7684\u524d\u63d0\u4e0d\u662f&#034;\u80fd\u52a0&#034;&#xff0c;\u800c\u662f&#034;\u80fd\u5e72\u51c0\u5730\u53bb\u6389&#034;\u3002<\/p>\n<p>\u8fd9\u4e00\u6761\u76f4\u63a5\u63a8\u7ffb\u4e86\u5f88\u591a\u9879\u76ee\u91cc\u90a3\u53e5&#034;\u6211\u4eec\u652f\u6301\u63d2\u4ef6&#034;\u2014\u2014\u5982\u679c\u4e0d\u80fd\u5378\u8f7d&#xff0c;\u90a3\u4e0d\u53eb\u63d2\u4ef6&#xff0c;\u90a3\u53eb\u5728\u542f\u52a8\u65f6\u8c03\u7528\u4f60\u4e00\u6b21\u3002<\/p>\n<p>\u800c dsh \u628a\u8fd9\u6761\u505a\u5230\u6781\u81f4\u7684\u8868\u73b0\u662f&#xff1a;\u8fde Agent Loop \u90fd\u80fd\u5378\u4e0b\u6765\u3002<\/p>\n<h3>\u7b2c\u4e09&#xff1a;\u63d2\u4ef6\u5316\u67b6\u6784\u7684\u6210\u719f\u5ea6&#xff0c;\u4f53\u73b0\u5728&#034;\u9632\u7ebf&#034;\u4e0a&#xff0c;\u4e0d\u5728&#034;\u6269\u5c55\u70b9&#034;\u4e0a<\/h3>\n<p>\u56de\u770b\u90a3\u6b21\u6545\u969c&#xff1a;<\/p>\n<p>\u914d\u7f6e\u8bed\u6cd5\u5408\u6cd5 \u2705<br \/>\n\u52a0\u8f7d\u65e0\u62a5\u9519 \u2705<br \/>\n\u63d2\u4ef6\u6c38\u4e45\u7981\u7528 \u274c<br \/>\n\u6d4b\u8bd5\u5168\u7eff \u2705  \u2190 \u6700\u53ef\u6015\u7684\u5728\u8fd9\u91cc<\/p>\n<p>\u4fee\u5b8c\u4e4b\u540e&#xff0c;\u4ed6\u4eec\u52a0\u4e86\u56db\u9053\u9632\u7ebf&#xff1a;<\/p>\n<p>\u9759\u6001\u5b88\u536b  verify-cordis-config \u89e3\u6790\u6240\u6709 YAML&#xff0c;\u62d2\u7edd\u5143\u6570\u636e\u91cc\u7684\u8868\u8fbe\u5f0f<br \/>\n\u542f\u52a8\u6821\u9a8c  \u914d\u7f6e\u975e\u6cd5\u76f4\u63a5\u629b\u5f02\u5e38&#xff0c;\u4e0d\u9759\u9ed8\u8df3\u8fc7<br \/>\n\u4e0d\u53d8\u91cf    \u6bcf\u4e2a\u5305\u4e3a\u81ea\u5df1\u7684\u5951\u7ea6\u53d1\u5e03 invariant \u68c0\u67e5<br \/>\n\u6d4b\u8bd5\u5b88\u536b  \u5feb\u7167\u62d2\u7edd\u7ed3\u6784\u5316 UNKNOWN_TOOL \u7ed3\u679c<\/p>\n<p>\u6269\u5c55\u70b9\u8d8a\u591a&#xff0c;\u9759\u9ed8\u5931\u6548\u7684\u8def\u5f84\u5c31\u8d8a\u591a\u3002\u6240\u4ee5\u67b6\u6784\u8d8a\u7075\u6d3b&#xff0c;\u8d8a\u9700\u8981\u81ea\u52a8\u5316\u9632\u7ebf\u3002<\/p>\n<p>\u8fd9\u53e5\u8bdd\u53ef\u4ee5\u53cd\u8fc7\u6765\u68c0\u9a8c\u4efb\u4f55\u4e00\u4e2a\u81ea\u79f0&#034;\u9ad8\u5ea6\u53ef\u6269\u5c55&#034;\u7684\u9879\u76ee&#xff1a;<\/p>\n<p>\u4f60\u7684\u9632\u7ebf\u5728\u54ea&#xff1f;<\/p>\n<hr \/>\n<h2>\u4e8c\u5341\u3001\u5de5\u7a0b\u8bc4\u4ef7<\/h2>\n<p>\u6211\u4e0d\u4f1a\u7b80\u5355\u5730\u8bf4&#034;dsh \u67b6\u6784\u5f88\u5148\u8fdb&#034;\u3002\u6309\u7ef4\u5ea6\u62c6\u5f00&#xff1a;<\/p>\n<table>\n<tr>\u7ef4\u5ea6\u8bc4\u4ef7\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>\u67b6\u6784\u4e00\u81f4\u6027<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<td>&#034;\u65e0\u7279\u6743\u5185\u6838&#034;\u4ece README \u8d2f\u5f7b\u5230\u6bcf\u4e00\u4e2a\u5305&#xff0c;\u6ca1\u6709\u4f8b\u5916<\/td>\n<\/tr>\n<tr>\n<td>\u4f9d\u8d56\u6ce8\u5165\u7684\u5e94\u7528<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<td>vendor \u6210\u719f\u6846\u67b6 &#043; \u7528 key \u67e5\u627e\u670d\u52a1 &#043; \u7edd\u4e0d\u5bfc\u5165\u5177\u4f53\u5b9e\u73b0<\/td>\n<\/tr>\n<tr>\n<td>\u72b6\u6001\u7ba1\u7406\u8bbe\u8ba1<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<td>append-only \u65e5\u5fd7 &#043; \u6d3e\u751f\u5386\u53f2 &#043; &#034;\u6a21\u578b\u53ef\u89c1\u5373\u5df2\u8bb0\u5f55&#034;\u4e0d\u53d8\u91cf<\/td>\n<\/tr>\n<tr>\n<td>\u53ef\u7ec4\u5408\u6027<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<td>\u7a7a\u95f4&#xff08;Scope&#xff09;&#043; \u65f6\u95f4&#xff08;\u53ef\u9006\u526f\u4f5c\u7528&#xff09;\u4e24\u4e2a\u7ef4\u5ea6\u90fd\u505a\u4e86<\/td>\n<\/tr>\n<tr>\n<td>\u53ef\u89c2\u6d4b\/\u53ef\u56de\u653e<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<td>\u4e8b\u4ef6\u6eaf\u6e90\u5929\u7136\u652f\u6301 replay \/ fork \/ resume<\/td>\n<\/tr>\n<tr>\n<td>\u81ea\u6211\u53cd\u601d\u900f\u660e\u5ea6<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<td>2206 \u7bc7\u51b3\u7b56\u8bb0\u5f55 &#043; 4 \u7bc7\u516c\u5f00\u6545\u969c\u590d\u76d8&#xff08;\u7f55\u89c1&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u6587\u6863\u8d28\u91cf<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<td>\u4e2d\u6587\u53cc\u8bed &#043; \u751f\u6210\u5f0f\u76ee\u5f55 &#043; \u4e0e\u6e90\u7801\u4ea4\u53c9\u6821\u9a8c<\/td>\n<\/tr>\n<tr>\n<td>\u521d\u5b66\u8005\u53cb\u597d\u5ea6<\/td>\n<td>\u2605\u2605\u2606\u2606\u2606<\/td>\n<td>\u5fc5\u987b\u5148\u5b66 Cordis&#xff1b;\u5b98\u65b9\u81ea\u5df1\u5efa\u8bae&#034;\u7528 agent \u5e2e\u4f60\u8bfb&#034;<\/td>\n<\/tr>\n<tr>\n<td>\u6392\u67e5\u96be\u5ea6<\/td>\n<td>\u2605\u2605\u2606\u2606\u2606<\/td>\n<td>\u4e8b\u4ef6\u6d41\u89e3\u8026\u4e86\u6267\u884c\u987a\u5e8f&#xff1b;\u4e00\u6b21\u6545\u969c\u53ef\u80fd\u9759\u9ed8\u65e0\u58f0<\/td>\n<\/tr>\n<tr>\n<td>\u7a33\u5b9a\u6027<\/td>\n<td>\u2605\u2605\u2606\u2606\u2606<\/td>\n<td>developer preview&#xff0c;\u660e\u786e\u4f1a\u6709\u7834\u574f\u6027\u53d8\u66f4<\/td>\n<\/tr>\n<tr>\n<td>\u5c0f\u9879\u76ee\u9002\u7528\u6027<\/td>\n<td>\u2605\u2606\u2606\u2606\u2606<\/td>\n<td>54 \u4e2a\u5305\u5bf9&#034;1 Agent &#043; 3 \u5de5\u5177&#034;\u662f\u5f7b\u5e95\u7684\u8fc7\u5ea6\u8bbe\u8ba1<\/td>\n<\/tr>\n<tr>\n<td>\u5de5\u7a0b\u53c2\u8003\u4ef7\u503c<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<td>\u8fd9\u662f\u76ee\u524d\u6211\u89c1\u8fc7\u628a&#034;\u53ef\u7ec4\u5408\u6027&#034;\u505a\u5f97\u6700\u5f7b\u5e95\u7684\u5f00\u6e90 Agent \u9879\u76ee<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b83\u6700\u5927\u7684\u4f18\u70b9&#xff1a;<\/p>\n<p>\u628a&#034;\u53ef\u66ff\u6362&#034;\u4ece\u4e00\u53e5\u53e3\u53f7\u53d8\u6210\u4e86\u4e00\u6574\u5957\u53ef\u6267\u884c\u7684\u673a\u5236\u2014\u2014\u5305\u62ec\u8ba9\u6700\u6838\u5fc3\u7684 Agent Loop \u4e5f\u6210\u4e3a\u53ef\u5378\u8f7d\u3001\u53ef\u62e6\u622a\u3001\u53ef\u66ff\u6362\u7684\u4e00\u5c42\u3002<\/p>\n<p>\u5b83\u6700\u5927\u7684\u7f3a\u70b9&#xff1a;<\/p>\n<p>\u5b83\u628a&#034;\u7406\u89e3\u6210\u672c&#034;\u53d8\u6210\u4e86\u4f7f\u7528\u95e8\u69db&#xff0c;\u800c\u628a&#034;\u9759\u9ed8\u5931\u6548&#034;\u53d8\u6210\u4e86\u4e3b\u8981\u5931\u8d25\u6a21\u5f0f\u3002 \u524d\u8005\u9760\u6587\u6863&#xff08;\u4ed6\u4eec\u505a\u5f97\u5f88\u597d&#xff09;\u7f13\u89e3&#xff0c;\u540e\u8005\u53ea\u80fd\u9760\u9632\u7ebf&#xff08;\u4ed6\u4eec\u5728\u8865&#xff09;\u3002<\/p>\n<p>\u6700\u503c\u5f97\u4f60\u7acb\u523b\u62ff\u8d70\u7684\u4e24\u70b9&#xff1a;<\/p>\n<p>\u2460 &#034;\u6a21\u578b\u53ef\u89c1\u5373\u5df2\u8bb0\u5f55&#034; &#043; deriveMessages()<br \/>\n   \u2192 \u72b6\u6001\u79bb\u5f00\u4e3b\u4f53&#xff0c;\u4e3b\u4f53\u624d\u53ef\u80fd\u88ab\u66ff\u6362<\/p>\n<p>\u2461 postmortem 0002 \u90a3\u6761\u6559\u8bad<br \/>\n   \u2192 &#034;\u8bed\u6cd5\u4e0a\u88ab\u63a5\u53d7\u7684\u503c\u4e0d\u4e00\u5b9a\u5728\u8be5\u4f4d\u7f6e\u88ab\u6c42\u503c&#034;<br \/>\n   \u2192 \u7ed9\u6240\u6709&#034;\u58f0\u660e\u5f0f\u914d\u7f6e&#034;\u4f9d\u8d56\u52a0\u9759\u6001\u68c0\u67e5<\/p>\n<hr \/>\n<h2>\u4e8c\u5341\u4e00\u3001\u4e0d\u8981\u6284 dsh&#xff0c;\u8981\u5b66 dsh<\/h2>\n<p>\u548c\u524d\u9762\u516b\u7bc7\u4e00\u6837&#xff0c;\u6700\u540e\u90fd\u8981\u8bf4\u8fd9\u4e00\u53e5&#xff1a;\u522b\u7167\u642c\u3002<\/p>\n<p>\u5982\u679c\u770b\u5b8c\u8fd9\u7bc7\u4f60\u5c31\u628a\u81ea\u5df1\u7684\u9879\u76ee\u6539\u6210&#034;\u4e00\u5207\u7686\u63d2\u4ef6&#034;&#xff0c;\u90a3\u5927\u6982\u662f\u8fd9\u6b21\u8d4f\u6790\u6700\u574f\u7684\u7ed3\u679c\u3002\u56e0\u4e3a&#xff1a;<\/p>\n<p>\u4f60\u7684\u9879\u76ee&#xff1a;1 \u4e2a Agent &#043; 5 \u4e2a\u5de5\u5177 &#043; 1 \u4e2a\u6a21\u578b<br \/>\ndsh \u7684\u7b54\u6848&#xff1a;54 \u4e2a\u5305 &#043; 6 \u4e2a\u4e3b\u5e72 &#043; \u4e09\u7c7b\u4e8b\u4ef6\u57df &#043; \u4e94\u5c42 patch<\/p>\n<p>\u5b83\u7684\u6bcf\u4e2a\u8bbe\u8ba1\u51b3\u5b9a&#xff0c;\u90fd\u5bf9\u5e94\u5b83\u8981\u89e3\u51b3\u7684\u5177\u4f53\u95ee\u9898&#xff1a;<\/p>\n<table>\n<tr>dsh \u7684\u8bbe\u8ba1\u5b83\u8981\u89e3\u51b3\u7684\u95ee\u9898\u4f60\u4ec0\u4e48\u65f6\u5019\u624d\u9700\u8981<\/tr>\n<tbody>\n<tr>\n<td>\u4e00\u5207\u7686\u63d2\u4ef6<\/td>\n<td>\u4ea7\u54c1\u8981\u652f\u6301 5 \u4e2a profile \u00d7 4 \u79cd\u7aef \u00d7 2 \u79cd SDK<\/td>\n<td>\u4f60\u6709\u591a\u4e2a\u4ea4\u4ed8\u5f62\u6001<\/td>\n<\/tr>\n<tr>\n<td>Agent Loop \u53ef\u66ff\u6362<\/td>\n<td>\u522b\u4eba&#xff08;\u6216\u672a\u6765\u7684\u4f60&#xff09;\u8981\u6362\u63a8\u7406\u8303\u5f0f<\/td>\n<td>\u4f60\u786e\u5b9e\u8981\u5b9e\u9a8c\u4e0d\u540c loop<\/td>\n<\/tr>\n<tr>\n<td>Session \u4e8b\u4ef6\u6eaf\u6e90<\/td>\n<td>loop \u53ef\u6362\u540e&#xff0c;\u5386\u53f2\u4e0d\u80fd\u65ad<\/td>\n<td>\u4f60\u8981\u652f\u6301 replay\/fork\/\u5ba1\u8ba1<\/td>\n<\/tr>\n<tr>\n<td>Scope \u4f5c\u7528\u57df<\/td>\n<td>\u591a Agent \u5171\u4eab\u4ee3\u7801\u3001\u9694\u79bb\u53ef\u89c1\u6027<\/td>\n<td>\u4f60\u6709\u771f\u6b63\u7684\u591a\u79df\u6237\/\u591a Agent<\/td>\n<\/tr>\n<tr>\n<td>\u4e09\u7c7b\u4e8b\u4ef6\u57df<\/td>\n<td>\u6301\u4e45\/\u5b9e\u65f6\/\u51b3\u7b56\u4e09\u79cd\u751f\u547d\u5468\u671f\u6df7\u5728\u4e00\u8d77\u4f1a\u4e71<\/td>\n<td>\u4f60\u7684\u4e8b\u4ef6\u5f00\u59cb\u6253\u67b6<\/td>\n<\/tr>\n<tr>\n<td>seam \u4e09\u89d2\u8272<\/td>\n<td>\u6362\u4e00\u4e2a provider \u8981\u80fd\u642c\u8d70\u6574\u4e2a\u6267\u884c\u4e16\u754c<\/td>\n<td>\u4f60\u6709\u591a\u79cd\u6267\u884c\u73af\u5883<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u800c\u5982\u679c\u4f60\u7684\u7b54\u6848\u662f&#034;\u90fd\u4e0d\u9700\u8981&#034;&#xff0c;\u90a3\u5c31\u8001\u8001\u5b9e\u5b9e\u5199\u4e00\u4e2a 300 \u884c\u7684 loop\u3002<\/p>\n<p>\u8fd9\u624d\u662f dsh \u81ea\u5df1\u6559\u7ed9\u6211\u4eec\u7684\u4e1c\u897f\u2014\u2014\u5b83\u7684 architecture.zh.md \u91cc\u6709\u4e00\u53e5\u8bdd&#xff0c;\u6211\u8ba4\u4e3a\u662f\u6574\u4e2a\u9879\u76ee\u6700\u503c\u5f97\u8bb0\u4f4f\u7684\u4e00\u53e5&#xff1a;<\/p>\n<p>\u4e0d\u5b58\u5728\u9700\u8981\u6253\u8865\u4e01\u7684\u7279\u6743\u5185\u6838&#xff1a;\u6269\u5c55 dsh \u7684\u65b9\u5f0f\u662f\u628a\u63d2\u4ef6\u6302\u8f7d\u5230\u5176\u4ed6\u63d2\u4ef6\u65c1\u8fb9\u3002<\/p>\n<p>\u8fd9\u53e5\u8bdd\u7684\u53e6\u4e00\u9762\u662f&#xff1a;<\/p>\n<p>\u5728\u4f60\u6709\u80fd\u529b\u628a\u6bcf\u4e00\u5c42\u90fd\u505a\u6210\u63d2\u4ef6\u4e4b\u524d&#xff0c;\u5148\u60f3\u6e05\u695a\u54ea\u4e00\u5c42\u771f\u7684\u9700\u8981\u88ab\u66ff\u6362\u3002<\/p>\n<hr \/>\n<h2>\u4e8c\u5341\u4e8c\u3001\u7ed3\u8bed<\/h2>\n<p>\u56de\u5230\u6807\u9898\u90a3\u4e2a\u95ee\u9898\u3002<\/p>\n<p>\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin&#xff1f;<\/p>\n<p>\u6211\u7684\u7b54\u6848\u5206\u4e09\u5c42&#xff1a;<\/p>\n<p>\u7b2c\u4e00\u5c42&#xff08;\u8868\u9762&#xff09;&#xff1a;\u4e3a\u4e86\u53ef\u6269\u5c55\u3002\u52a0\u6a21\u578b\u3001\u52a0\u5de5\u5177\u3001\u52a0\u6c99\u7bb1\u4e0d\u7528\u6539\u5185\u6838\u3002<\/p>\n<p>\u7b2c\u4e8c\u5c42&#xff08;\u8f83\u6df1&#xff09;&#xff1a;\u4e3a\u4e86\u53ef\u66ff\u6362\u3002\u5b83\u8fde\u81ea\u5df1\u90fd\u53ef\u80fd\u88ab\u6362\u6389\u2014\u2014\u5305\u62ec Agent Loop \u8fd9\u4e2a&#034;\u7a0b\u5e8f\u9aa8\u67b6&#034;\u3002<\/p>\n<p>\u7b2c\u4e09\u5c42&#xff08;\u6700\u6df1\u5904&#xff09;&#xff1a;\u56e0\u4e3a\u5b83\u8981\u505a\u7684\u4e0d\u662f&#034;\u4e00\u4e2a Agent \u4ea7\u54c1&#034;&#xff0c;\u800c\u662f&#034;\u4e00\u79cd\u7ec4\u88c5\u4ea7\u54c1\u7684\u65b9\u5f0f&#034;\u3002README \u5f15\u7528\u7684\u90a3\u7bc7\u8bba\u6587\u6807\u9898\u8bf4\u5f97\u5f88\u660e\u767d\u2014\u2014\u65f6\u7a7a\u53ef\u7ec4\u5408\u6027&#xff1a;<\/p>\n<p>\u7a7a\u95f4\u7ef4\u5ea6&#xff1a;Scope    \u2014\u2014 \u540c\u6837\u7684\u4ee3\u7801&#xff0c;\u80fd\u6309\u4f5c\u7528\u57df\u4ea7\u751f\u4e0d\u540c\u53ef\u89c1\u6027<br \/>\n\u65f6\u95f4\u7ef4\u5ea6&#xff1a;\u53ef\u9006\u526f\u4f5c\u7528 \u2014\u2014 \u4efb\u4f55\u6ce8\u518c\u90fd\u80fd\u5e72\u51c0\u5730\u64a4\u9500<\/p>\n<p>\u5f53&#034;\u53ef\u7ec4\u5408&#034;\u6210\u4e3a\u7b2c\u4e00\u76ee\u6807\u65f6&#xff0c;\u6240\u6709\u7684\u5177\u4f53\u8bbe\u8ba1&#xff08;append-only \u65e5\u5fd7\u3001\u4e8b\u4ef6\u4e09\u57df\u3001seam\u3001profile\u3001bundle\u3001scope&#xff09;\u5c31\u90fd\u6210\u4e86\u540c\u4e00\u4e2a\u547d\u9898\u7684\u4e0d\u540c\u6295\u5f71&#xff1a;<\/p>\n<p>\u4fdd\u6301\u552f\u4e00\u771f\u6e90&#xff0c;\u5176\u4f59\u90fd\u662f\u6295\u5f71\u3002 \u522b\u8ba9\u4efb\u4f55\u4e1c\u897f\u6210\u4e3a\u4e0d\u53ef\u66ff\u6362\u7684\u9aa8\u67b6\u3002<\/p>\n<p>\u800c\u5b83\u4ed8\u51fa\u7684\u4ee3\u4ef7\u4e5f\u540c\u6837\u6e05\u6670&#xff1a;<\/p>\n<p>\u4f60\u6362\u6765\u7684\u662f&#034;\u4e00\u5207\u90fd\u80fd\u6362&#034;&#xff0c;\u4f60\u4ed8\u51fa\u7684\u662f&#034;\u6362\u9519\u4e86\u4e0d\u4e00\u5b9a\u62a5\u9519&#034;\u3002<\/p>\n<p>\u6240\u4ee5\u771f\u6b63\u503c\u5f97\u4ece dsh \u8eab\u4e0a\u5b66\u7684&#xff0c;\u4e0d\u662f\u5b83\u7684 54 \u4e2a\u5305&#xff0c;\u800c\u662f\u5b83\u628a\u8fd9\u4e24\u4ef6\u4e8b\u540c\u65f6\u6446\u51fa\u6765\u7684\u8bda\u5b9e\u2014\u2014README \u91cc\u5199&#034;\u5f00\u53d1\u8005\u9884\u89c8\u3001\u4f1a\u6709\u7834\u574f\u6027\u53d8\u66f4&#034;&#xff0c;\u6587\u6863\u91cc\u5199&#034;\u5efa\u8bae\u7528 agent \u5e2e\u4f60\u8bfb\u4ee3\u7801&#034;&#xff0c;postmortem \u91cc\u5199&#034;\u6211\u4eec\u7684\u5feb\u7167\u6d4b\u8bd5\u8bc1\u660e\u7684\u662f\u56de\u653e&#xff0c;\u4e0d\u662f\u6b63\u786e\u6027&#034;\u3002<\/p>\n<p>\u4e00\u4e2a\u628a\u6210\u672c\u548c\u6536\u76ca\u90fd\u644a\u5f00\u8bb2\u7684\u9879\u76ee&#xff0c;\u6bd4\u4e00\u4e2a\u53ea\u8bb2&#034;\u6211\u4eec\u67b6\u6784\u5148\u8fdb&#034;\u7684\u9879\u76ee&#xff0c;\u503c\u5f97\u5b66\u5f97\u591a\u3002<\/p>\n<hr \/>\n<h3>\u9644\u5f55 \u00b7 \u672c\u6587\u5f15\u7528\u5230\u7684\u771f\u5b9e\u4f4d\u7f6e<\/h3>\n<table>\n<tr>\u5185\u5bb9\u4f4d\u7f6e<\/tr>\n<tbody>\n<tr>\n<td>&#034;\u4e00\u5207\u7686\u63d2\u4ef6&#034;\u4e3b\u5f20<\/td>\n<td>README.zh.md<\/td>\n<\/tr>\n<tr>\n<td>Cordis \u4e94\u4e2a\u6982\u5ff5 \/ \u4e94\u79cd\u5206\u53d1\u6a21\u5f0f<\/td>\n<td>docs\/cordis-primer.zh.md<\/td>\n<\/tr>\n<tr>\n<td>\u65e0\u7279\u6743\u5185\u6838 \/ Profile \u4e0e\u7ec4\u5408\u5305 \/ \u8f6e\u6b21\u6d41\u7a0b \/ \u65b0\u884c\u4e3a\u5f52\u5c5e\u8868<\/td>\n<td>docs\/architecture.zh.md<\/td>\n<\/tr>\n<tr>\n<td>\u8f6e\u6b21\u4e0e\u6b65\u9aa4\u65f6\u5e8f\u56fe<\/td>\n<td>docs\/agent-lifecycle.zh.md<\/td>\n<\/tr>\n<tr>\n<td>SessionEventMap \/ \u6d3e\u751f\u5386\u53f2 \/ fork API \/ TurnEndReason<\/td>\n<td>docs\/subsystems\/session.zh.md<\/td>\n<\/tr>\n<tr>\n<td>\u4e3b\u5e72\u9010\u5305\u901f\u89c8 \/ Agent \u53e5\u67c4 \/ AgentHandle<\/td>\n<td>docs\/subsystems\/core.zh.md<\/td>\n<\/tr>\n<tr>\n<td>\u5de5\u5177\u6267\u884c\u6d41\u6c34\u7ebf \/ \u5355\u8c03 guard \/ \u6267\u884c\u6a21\u5f0f<\/td>\n<td>docs\/subsystems\/tools.zh.md<\/td>\n<\/tr>\n<tr>\n<td>\u8fd0\u884c\u65f6\u4e0d\u53d8\u5f0f\u6ce8\u518c\u8868<\/td>\n<td>docs\/subsystems\/invariants.zh.md<\/td>\n<\/tr>\n<tr>\n<td>Scope \u539f\u8bed<\/td>\n<td>docs\/subsystems\/scope.zh.md<\/td>\n<\/tr>\n<tr>\n<td>seam \u4e09\u89d2\u8272<\/td>\n<td>docs\/capability-seams.zh.md<\/td>\n<\/tr>\n<tr>\n<td>vendored \u6846\u67b6\u6539\u540d\u8868<\/td>\n<td>docs\/rescope.zh.md<\/td>\n<\/tr>\n<tr>\n<td>\u6545\u969c\u590d\u76d8 0002<\/td>\n<td>docs\/postmortem\/0002-js-expression-disabled-filesystem-tools.zh.md<\/td>\n<\/tr>\n<tr>\n<td>deriveEventMessage()<\/td>\n<td>packages\/core\/session\/src\/surface.ts:119<\/td>\n<\/tr>\n<tr>\n<td>ReactLoopAgent implements Agent<\/td>\n<td>packages\/core\/agent-loop\/src\/agent.ts:72<\/td>\n<\/tr>\n<tr>\n<td>ScopeKey &#061; object<\/td>\n<td>packages\/core\/scope\/src\/index.ts:15<\/td>\n<\/tr>\n<tr>\n<td>AgentHandle<\/td>\n<td>packages\/core\/agent\/src\/index.ts<\/td>\n<\/tr>\n<tr>\n<td>Agent \u63a5\u53e3<\/td>\n<td>packages\/core\/agent\/src\/types.ts<\/td>\n<\/tr>\n<tr>\n<td>Bundle \u58f0\u660e<\/td>\n<td>packages\/bundle\/base\/package.json \u2192 dsh.bundle.patch<\/td>\n<\/tr>\n<tr>\n<td>\u7ec4\u5408\u5305 patch \u5b9e\u7269<\/td>\n<td>packages\/bundle\/base\/cordis.patch.yml<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u7cfb\u5217\u5bfc\u8bfb&#xff1a;\u672c\u6587\u662f\u300cAI Agent \u9879\u76ee\u8d4f\u6790\u300d\u7cfb\u5217\u7b2c 9 \u7bc7\u3002<\/p>\n<p>1. LangGraph         \u2192 Workflow Agent&#xff08;\u4efb\u52a1\u600e\u4e48\u7f16\u6392&#xff09;<br \/>\n2. LangGraph&#xff08;\u8fdb\u9636&#xff09;  \u2192 Agent Orchestration<br \/>\n3. OpenHands         \u2192 Coding Agent&#xff08;\u600e\u4e48\u6267\u884c\u771f\u5b9e\u52a8\u4f5c&#xff09;<br \/>\n4. browser-use       \u2192 \u6d4f\u89c8\u5668 Agent&#xff08;\u600e\u4e48\u611f\u77e5\u771f\u5b9e\u754c\u9762&#xff09;<br \/>\n5. DeerFlow 2.0      \u2192 SuperAgent&#xff08;\u957f\u4efb\u52a1\u600e\u4e48\u8dd1\u4e0d\u6b7b&#xff09;<br \/>\n6. Hermes Agent      \u2192 Persistent Agent&#xff08;\u600e\u4e48\u81ea\u6211\u8fdb\u5316&#xff09;<br \/>\n7. OpenCode          \u2192 Terminal Agent&#xff08;\u4ea7\u54c1\u600e\u4e48\u7ec4\u7ec7&#xff09;<br \/>\n8. Goose             \u2192 MCP-native Agent&#xff08;\u5de5\u5177\u600e\u4e48\u53d8\u6210\u670d\u52a1&#xff09;<br \/>\n9. DeepSeek Harness  \u2192 Plugin-native Runtime&#xff08;\u8fde Loop \u90fd\u662f\u63d2\u4ef6&#xff09;\u2190 \u672c\u7bc7<\/p>\n<p>\u4e0b\u4e00\u7bc7\u8ba1\u5212&#xff1a;OpenMAIC \u2014\u2014 \u770b\u4e00\u4e2a Agent \u5982\u4f55\u81ea\u4e3b\u6784\u5efa\u5b8c\u6574\u7684\u4ea4\u4e92\u5f0f\u8bfe\u7a0b&#xff0c;\u91cd\u70b9\u843d\u5728\u300cDurable Agent Runtime\u300d\u4e0e\u300cAgent \u5982\u4f55\u751f\u4ea7\u771f\u6b63\u53ef\u4ea4\u4ed8\u7684\u4ea7\u54c1\u300d\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9879\u76ee\u7c7b\u578b&#xff1a;Agent Runtime \/ Plugin-native Agent Harness \u8d4f\u6790\u76ee\u6807&#xff1a;\u5b66\u4e60\u4e00\u4e2a\u771f\u5b9e Agent \u9879\u76ee\u5982\u4f55\u628a Agent\u3001Session\u3001Event\u3001Plugin\u3001Runtime\u3001Extension \u7ec4\u7ec7\u6210\u4e00\u5957\u53ef\u7ec4\u5408\u7cfb\u7edf \u6838\u5fc3\u95ee\u9898&#xff1a;\u4e3a\u4ec0\u4e48\u5b83\u6562\u628a\u300cAgent Loop \u672c\u8eab\u300d\u4e5f\u53d8\u6210\u63d2\u4ef6&#xff1f; \u6e90\u7801\u7248\u672c&#xff1a;deepseek-ai\/deepseek-harness&#xff0c;ma<\/p>\n","protected":false},"author":2,"featured_media":107760,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[11653,74,92],"topic":[],"class_list":["post-107761","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-11653","tag-agent","tag-github"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/107761.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u9879\u76ee\u7c7b\u578b&#xff1a;Agent Runtime \/ Plugin-native Agent Harness \u8d4f\u6790\u76ee\u6807&#xff1a;\u5b66\u4e60\u4e00\u4e2a\u771f\u5b9e Agent \u9879\u76ee\u5982\u4f55\u628a Agent\u3001Session\u3001Event\u3001Plugin\u3001Runtime\u3001Extension \u7ec4\u7ec7\u6210\u4e00\u5957\u53ef\u7ec4\u5408\u7cfb\u7edf \u6838\u5fc3\u95ee\u9898&#xff1a;\u4e3a\u4ec0\u4e48\u5b83\u6562\u628a\u300cAgent Loop \u672c\u8eab\u300d\u4e5f\u53d8\u6210\u63d2\u4ef6&#xff1f; \u6e90\u7801\u7248\u672c&#xff1a;deepseek-ai\/deepseek-harness&#xff0c;ma\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/107761.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-20T00:57:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260920005714-6aaf2f6a49c23.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/107761.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/107761.html\",\"name\":\"DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-20T00:57:15+00:00\",\"dateModified\":\"2026-09-20T00:57:15+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/107761.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/107761.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/107761.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/107761.html","og_locale":"zh_CN","og_type":"article","og_title":"DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u9879\u76ee\u7c7b\u578b&#xff1a;Agent Runtime \/ Plugin-native Agent Harness \u8d4f\u6790\u76ee\u6807&#xff1a;\u5b66\u4e60\u4e00\u4e2a\u771f\u5b9e Agent \u9879\u76ee\u5982\u4f55\u628a Agent\u3001Session\u3001Event\u3001Plugin\u3001Runtime\u3001Extension \u7ec4\u7ec7\u6210\u4e00\u5957\u53ef\u7ec4\u5408\u7cfb\u7edf \u6838\u5fc3\u95ee\u9898&#xff1a;\u4e3a\u4ec0\u4e48\u5b83\u6562\u628a\u300cAgent Loop \u672c\u8eab\u300d\u4e5f\u53d8\u6210\u63d2\u4ef6&#xff1f; \u6e90\u7801\u7248\u672c&#xff1a;deepseek-ai\/deepseek-harness&#xff0c;ma","og_url":"https:\/\/www.wsisp.com\/helps\/107761.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-20T00:57:15+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260920005714-6aaf2f6a49c23.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"17 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/107761.html","url":"https:\/\/www.wsisp.com\/helps\/107761.html","name":"DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-20T00:57:15+00:00","dateModified":"2026-09-20T00:57:15+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/107761.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/107761.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/107761.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"DeepSeek Harness\u2014\u2014\u4e3a\u4ec0\u4e48 DeepSeek \u628a\u6574\u4e2a Agent \u90fd\u505a\u6210\u4e86 Plugin\uff1f"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/107761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=107761"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/107761\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/107760"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=107761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=107761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=107761"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=107761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}