nolo-cli 0.153.0-alpha.1 → 0.153.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/{_executeModel-4KHFMQT4.js → _executeModel-YAHIA3TR.js} +44 -45
  2. package/{accountResolver-7RYB4D2P.js → accountResolver-55EDKEIK.js} +1 -1
  3. package/{action-SXJD5N5R.js → action-GPPJC5TI.js} +4 -4
  4. package/{addContentAction-ZV774PHH.js → addContentAction-BI6RDRTQ.js} +8 -8
  5. package/{addDialogAgentAction-A6SMKAGH.js → addDialogAgentAction-4RJYUSIK.js} +7 -7
  6. package/{agentDeleteCommand-EKFV5FC7.js → agentDeleteCommand-6W2VQADC.js} +57 -57
  7. package/{agentEmailCommands-MNV3MUH5.js → agentEmailCommands-ZTS5JSP5.js} +59 -59
  8. package/{agentListCommands-E6FYKXC3.js → agentListCommands-MM5OLPBY.js} +23 -23
  9. package/{agentMachineCommands-2GFUU7GF.js → agentMachineCommands-WPFV4TSD.js} +22 -21
  10. package/{agentProviderCommands-HL6MBLCL.js → agentProviderCommands-MKG2OOEY.js} +2 -2
  11. package/{agentRecordCommands-LPHHTEPM.js → agentRecordCommands-YW7XO5CX.js} +57 -57
  12. package/{agentRunCommand-JSPW7W32.js → agentRunCommand-R2JTIRPZ.js} +59 -58
  13. package/{agentRunControl-IFM7IGMG.js → agentRunControl-2C5GM3BW.js} +5 -5
  14. package/{agentRuntimeLocal-ARS4TV77.js → agentRuntimeLocal-RJKTDWNN.js} +16 -16
  15. package/{agentSlice-IP4DZNNV.js → agentSlice-7FNTOPHE.js} +8 -8
  16. package/{appDeleteCommands-JHTLKQSX.js → appDeleteCommands-7EOM274T.js} +21 -21
  17. package/{appDeployCommands-5V26M2KA.js → appDeployCommands-2I3QYJ5G.js} +21 -21
  18. package/{appDeployStatusCommands-SBSPS627.js → appDeployStatusCommands-LEML7FPR.js} +21 -21
  19. package/{appGetCommands-NKPD2L45.js → appGetCommands-ZQSVHGQM.js} +21 -21
  20. package/{appListCommands-ZOGRZFYY.js → appListCommands-BVA7XKQO.js} +21 -21
  21. package/{authCommand-QYN47CQD.js → authCommand-NIV3DKPF.js} +13 -293
  22. package/{authCommands-77CHYBGF.js → authCommands-AMNIAKEG.js} +2 -2
  23. package/{builtinSkillRegistry-TDQ6JB2E.js → builtinSkillRegistry-H3AY27TR.js} +3 -3
  24. package/{chromeCommands-OBBNJCLS.js → chromeCommands-IY4NVSXZ.js} +17 -10
  25. package/{chunk-SW4S4XYB.js → chunk-2AB2HA4M.js} +84 -34
  26. package/{chunk-VNP54NZL.js → chunk-2EROINJB.js} +14 -14
  27. package/{chunk-4PXHOOFA.js → chunk-2MTE2PEH.js} +3 -3
  28. package/{chunk-4YRTZIVN.js → chunk-2SGAI64X.js} +2 -2
  29. package/{chunk-QFEW2ULV.js → chunk-32ZKZET7.js} +1 -1
  30. package/{chunk-GQV5KHJU.js → chunk-3C2QLERX.js} +1 -1
  31. package/{chunk-XPWGOTBQ.js → chunk-3L2WKC3W.js} +1 -8
  32. package/{chunk-WD4XYDYC.js → chunk-3WIXU4XO.js} +224 -1
  33. package/{chunk-MZHOLWW5.js → chunk-4J4RVSHE.js} +3 -3
  34. package/{chunk-YBNHPX4S.js → chunk-4RJJDA57.js} +1 -1
  35. package/{chunk-OFVFQYIE.js → chunk-6COBMDV4.js} +19 -13
  36. package/{chunk-HL3O3PCQ.js → chunk-6TF64IF2.js} +2 -2
  37. package/{chunk-BNDETALN.js → chunk-7NSQJKGA.js} +45 -13
  38. package/{chunk-UUPR3TD7.js → chunk-7RF4O6AT.js} +1 -3
  39. package/{chunk-LC23WBCU.js → chunk-ACTR4SH2.js} +6 -6
  40. package/{chunk-HSJPKBLC.js → chunk-ANJTRG52.js} +2 -2
  41. package/{chunk-2GGXHQIW.js → chunk-BLVSFYQ3.js} +4 -2
  42. package/{chunk-ISQL4V7C.js → chunk-C3OK72G3.js} +1 -1
  43. package/{chunk-CHCS6XPJ.js → chunk-CGFNDIKK.js} +65 -0
  44. package/{chunk-F32Z66T4.js → chunk-CON6SI7N.js} +1 -1
  45. package/{chunk-HIQ4GF53.js → chunk-DC3SZCRR.js} +7 -3
  46. package/{chunk-RQ6E3G5L.js → chunk-DRPDGHQB.js} +18 -2
  47. package/{chunk-RVWMAFIT.js → chunk-FYYSDHVQ.js} +1 -1
  48. package/{chunk-XTWDF6RU.js → chunk-GLUL4C5S.js} +21 -17
  49. package/{chunk-TYYRSFBG.js → chunk-HB4XPBC7.js} +3 -35
  50. package/{chunk-6MJNEXUU.js → chunk-HGDKT2D6.js} +4 -0
  51. package/{chunk-UBUH2TCC.js → chunk-I2RMFLLH.js} +2 -2
  52. package/{chunk-VJXHL6MH.js → chunk-ICRRXBRN.js} +3 -3
  53. package/{chunk-XS47QOFV.js → chunk-IE5PXKVU.js} +2 -264
  54. package/{chunk-KMM2X7LP.js → chunk-ILVOUUMR.js} +3 -3
  55. package/{chunk-KFHQQ3NO.js → chunk-INFHX73M.js} +1 -1
  56. package/{chunk-XRUSXPCQ.js → chunk-IPAW7XLD.js} +57 -4
  57. package/{chunk-PLSVXHSA.js → chunk-IRTOYSA2.js} +3 -3
  58. package/{chunk-GCKHQECX.js → chunk-IYBIRCQV.js} +1 -1
  59. package/{chunk-ILU2NPWY.js → chunk-J2ATF74A.js} +2 -2
  60. package/{chunk-XZNCX52W.js → chunk-JGRPBIZZ.js} +1 -1
  61. package/{chunk-E2AKSW7L.js → chunk-JPJGMOIM.js} +2 -2
  62. package/{chunk-6LIKQYG4.js → chunk-JZYIISJB.js} +21 -23
  63. package/{chunk-44WXLHFI.js → chunk-K43ZF2C3.js} +1 -1
  64. package/{chunk-I2ZMGXXF.js → chunk-KFHREHUQ.js} +1 -1
  65. package/{chunk-JKMLSTZK.js → chunk-KLA62VVE.js} +3 -3
  66. package/{chunk-AHYBQP3M.js → chunk-L57R6PFF.js} +3 -3
  67. package/{chunk-DYYMIUN4.js → chunk-L6EQV5OC.js} +4 -4
  68. package/{chunk-EZVK3N5L.js → chunk-LOEO7LRC.js} +56 -0
  69. package/{chunk-EDX5XSJM.js → chunk-M2P3OGXZ.js} +3 -3
  70. package/{chunk-YVLQXTUB.js → chunk-MM3662RS.js} +1 -1
  71. package/{chunk-CBHGZRCE.js → chunk-MYOH447Z.js} +1 -1
  72. package/{chunk-A4MW3YZL.js → chunk-NDZOXXIM.js} +18 -4
  73. package/{chunk-EHFS4XZO.js → chunk-NKBMD4TC.js} +12 -8
  74. package/{chunk-64PFYIAY.js → chunk-OJ2PQXBV.js} +674 -637
  75. package/{chunk-36OMEXXR.js → chunk-OON4OBWI.js} +1 -1
  76. package/{chunk-SEJ5OS6F.js → chunk-PXYBUFDB.js} +4 -0
  77. package/{chunk-XCA6HQGS.js → chunk-QEONMOV7.js} +5 -5
  78. package/{chunk-USHQX6VT.js → chunk-QPY264HO.js} +1 -1
  79. package/{chunk-PFBIXTFB.js → chunk-QSKN3E7Q.js} +52 -26
  80. package/{chunk-TNIX77YM.js → chunk-R5GO3YZP.js} +34 -1
  81. package/{chunk-I5V3V2H4.js → chunk-RL2OOQUM.js} +37 -25
  82. package/{chunk-AIZE5TDM.js → chunk-SPKLALBU.js} +2 -2
  83. package/{chunk-K2AER7RX.js → chunk-SUKSWFLP.js} +2 -2
  84. package/{chunk-I4SN4NUQ.js → chunk-TRW43TSC.js} +1 -1
  85. package/{chunk-D2QN6CTI.js → chunk-UCLSOLX4.js} +8 -6
  86. package/{chunk-TYJ5XFEA.js → chunk-UFYBYB26.js} +1 -1
  87. package/{chunk-SCMHQUMK.js → chunk-US6MKPE7.js} +1 -1
  88. package/{chunk-ZIWPQEFU.js → chunk-VYNMQ6HW.js} +1 -28
  89. package/{chunk-PPU323UE.js → chunk-W2NNEHHW.js} +183 -66
  90. package/{chunk-IJERIUXS.js → chunk-WRCZXJ4N.js} +6 -3
  91. package/chunk-Y5GCAMGP.js +9 -0
  92. package/{chunk-GKXCHNTE.js → chunk-Y6ORVLSS.js} +1 -1
  93. package/{chunk-RSHPU4PD.js → chunk-YANF2RR4.js} +2 -2
  94. package/{chunk-EYWJT7A2.js → chunk-YPG7TUQD.js} +3 -3
  95. package/{chunk-PMYAE4OZ.js → chunk-YPY2S3DV.js} +3 -3
  96. package/{chunk-ZF6526IQ.js → chunk-ZEY4NJRE.js} +2 -2
  97. package/{chunk-JWTSWUPS.js → chunk-ZGG7BBVE.js} +7 -6
  98. package/{chunk-T5BHHWA5.js → chunk-ZGSW3HWM.js} +7 -7
  99. package/{chunk-74RAWNQN.js → chunk-ZVQHBIWV.js} +6 -6
  100. package/{chunk-DTODXBHK.js → chunk-ZWG3C7VI.js} +2 -2
  101. package/{commandRegistry-VBALU4Q4.js → commandRegistry-ZPK4AUWM.js} +79 -87
  102. package/{contentThunks-HPY2QNWZ.js → contentThunks-SXEQLAFP.js} +20 -20
  103. package/{createAgentAutomationAction-6ADGPGY6.js → createAgentAutomationAction-INVACTI3.js} +20 -20
  104. package/{createDialogAction-6ABMSEW2.js → createDialogAction-FDO3DYW4.js} +21 -21
  105. package/{createPageAction-OC4NNRPC.js → createPageAction-Q5CQPEQH.js} +20 -20
  106. package/{dbSlice-J37OGIXH.js → dbSlice-DC2J53RC.js} +7 -7
  107. package/{deleteFile-6JWDDRVP.js → deleteFile-KYWEMNFX.js} +4 -4
  108. package/{dialogCommands-EIGBRSQP.js → dialogCommands-MUFYPVMP.js} +24 -23
  109. package/{dialogSlice-SI45KJOH.js → dialogSlice-DS22VO6X.js} +19 -19
  110. package/{docCreateCommands-3JDBBMU5.js → docCreateCommands-OPWOKG62.js} +19 -19
  111. package/{docDeleteCommands-5M6C7UUB.js → docDeleteCommands-IBV3WMKI.js} +20 -20
  112. package/{docReadCommands-DUB57F6V.js → docReadCommands-LVALHMLZ.js} +19 -19
  113. package/{docStore-L43MDEK4.js → docStore-UFEWRQ5W.js} +8 -8
  114. package/{docUpdateCommands-WF7MAMPK.js → docUpdateCommands-Z5OUEAK7.js} +19 -19
  115. package/{getPricing-FKK3F5EJ.js → getPricing-TX35D7PI.js} +3 -3
  116. package/{handleSendMessageAction-BSMU7SVS.js → handleSendMessageAction-AOPC2RYQ.js} +33 -33
  117. package/index.js +7 -7
  118. package/{localRuntimeAdapter-N5PDR26F.js → localRuntimeAdapter-OK722XHN.js} +57 -55
  119. package/{machineCommands-TMXJKZCE.js → machineCommands-NW3KT5RE.js} +61 -59
  120. package/{machineWsRunDispatch-25H63KEH.js → machineWsRunDispatch-EWQDI6TL.js} +56 -56
  121. package/{memberThunks-66DH6ABQ.js → memberThunks-2DWKLE6W.js} +8 -8
  122. package/{models-LAS4B2B5.js → models-PZQC7VV4.js} +2 -2
  123. package/package.json +1 -1
  124. package/{profileConfig-ZGOFORWV.js → profileConfig-KN3N2BLF.js} +7 -1
  125. package/{providerPresetApply-MY66I6NT.js → providerPresetApply-GSJI4JBJ.js} +6 -6
  126. package/{providerRegistry-QOE2FT57.js → providerRegistry-TSSTPGWF.js} +6 -6
  127. package/{read-DC4NUGN6.js → read-L7QEJETH.js} +5 -5
  128. package/{readDocTool-NCJ5NT25.js → readDocTool-QELXV2GW.js} +1 -1
  129. package/{readlineWorkspace-BS7WVCL2.js → readlineWorkspace-ZTNEFMTX.js} +330 -118
  130. package/{removeDialogAgentAction-E2H3OZU6.js → removeDialogAgentAction-376XSUP2.js} +9 -9
  131. package/{runAgentClientLoop-BVKRI4SY.js → runAgentClientLoop-PQTFXXFA.js} +48 -44
  132. package/{runtimeDoctorCommands-GIOGC5SC.js → runtimeDoctorCommands-56NWKNON.js} +5 -5
  133. package/{secretCommands-ZXZRLR3R.js → secretCommands-DNY56NSU.js} +11 -1
  134. package/{setDialogExtraReferencesAction-SITRPMYU.js → setDialogExtraReferencesAction-QBDSH63D.js} +8 -8
  135. package/{setPrimaryDialogAgentAction-U7N45TGC.js → setPrimaryDialogAgentAction-537QFGW3.js} +9 -9
  136. package/settingThunks-4Z43ZSAT.js +923 -0
  137. package/{spaceCommands-5EWREUWS.js → spaceCommands-AWIIP7J5.js} +19 -19
  138. package/{streamAgentChatTurn-B4VFUV52.js → streamAgentChatTurn-I4M3CUBF.js} +53 -103
  139. package/{switchDialogAgentAction-OMGBD3N2.js → switchDialogAgentAction-CSO6AKRL.js} +7 -7
  140. package/{tableCommands-U3QDY4L6.js → tableCommands-LBH3QPPO.js} +1 -1
  141. package/{toolApiClient-7WSJJJBV.js → toolApiClient-HGNO53TC.js} +2 -2
  142. package/{tools-5WYAUKMK.js → tools-TOSN72UD.js} +37 -37
  143. package/{tuiSummaryLlmCaller-PPU7YDBG.js → tuiSummaryLlmCaller-KLK6K3Q3.js} +8 -8
  144. package/{updateCommands-NQXAGFM7.js → updateCommands-LXZLG44Y.js} +2 -2
  145. package/{updateDialogTitleAction-YJHDKHFX.js → updateDialogTitleAction-TJWFUJX4.js} +20 -20
  146. package/{workloadLifecycle-36DXRZKU.js → workloadLifecycle-6O6PMISX.js} +2 -2
  147. package/chunk-W4S6OTSC.js +0 -35
  148. package/settingThunks-Y7SVJOMZ.js +0 -1371
@@ -4,12 +4,78 @@ import {
4
4
  import {
5
5
  canonicalizeToolNames
6
6
  } from "./chunk-5EBLANFT.js";
7
+ import {
8
+ BUILTIN_AGENT_CATALOG
9
+ } from "./chunk-LOEO7LRC.js";
10
+ import {
11
+ publicAgentKey
12
+ } from "./chunk-M2EJHDJP.js";
7
13
  import {
8
14
  estimateTokenCount
9
15
  } from "./chunk-PSCNXBYA.js";
16
+ import {
17
+ getModelConfig
18
+ } from "./chunk-TRW43TSC.js";
10
19
  import {
11
20
  asTrimmedString
12
21
  } from "./chunk-3EUW3WEO.js";
22
+ import {
23
+ asTrimmedLowercaseString
24
+ } from "./chunk-QSJ3HFEF.js";
25
+
26
+ // packages/core/gptProTier.ts
27
+ var GPT_PRO_REQUIRED_RECHARGE_AMOUNT = 199;
28
+ var SUPPORTED_TIER_PROVIDERS = /* @__PURE__ */ new Set([
29
+ "nolo",
30
+ "openai",
31
+ "deepinfra"
32
+ ]);
33
+ var CLAUDE_PREMIUM_RE = /^(?:anthropic\/)?claude-(opus|fable)(?:-\d+(?:[.-]\d+)*(?:-[a-z0-9]+)*)?$/i;
34
+ var GPT_PRO_RE = /^(?:openai\/)?gpt-[a-z0-9.-]+-pro(?:-[a-z0-9]+(?:[.-][a-z0-9]+)*)?$/i;
35
+ var GPT_SOL_RE = /^(?:openai\/)?gpt-\d+(?:\.\d+)*-sol(?:-[a-z0-9]+(?:[.-][a-z0-9]+)*)?$/i;
36
+ var GPT_ASTRA_RE = /^(?:openai\/)?gpt-\d+(?:\.\d+)*-astra(?:-[a-z0-9]+(?:[.-][a-z0-9]+)*)?$/i;
37
+ var KIMI_K3_MODELS = /* @__PURE__ */ new Set([
38
+ "kimi-k3",
39
+ "moonshotai/kimi-k3"
40
+ ]);
41
+ function classifyPremiumModel(model) {
42
+ const normalizedModel = asTrimmedLowercaseString(model);
43
+ if (!normalizedModel) return void 0;
44
+ const claudeMatch = CLAUDE_PREMIUM_RE.exec(normalizedModel);
45
+ if (claudeMatch) {
46
+ return claudeMatch[1].toLowerCase() === "opus" ? "claude-opus" : "claude-fable";
47
+ }
48
+ if (GPT_PRO_RE.test(normalizedModel)) {
49
+ return "gpt-pro";
50
+ }
51
+ if (GPT_SOL_RE.test(normalizedModel)) {
52
+ return "gpt-sol";
53
+ }
54
+ if (GPT_ASTRA_RE.test(normalizedModel)) {
55
+ return "gpt-astra";
56
+ }
57
+ if (KIMI_K3_MODELS.has(normalizedModel)) {
58
+ return "kimi-k3";
59
+ }
60
+ return void 0;
61
+ }
62
+ function isGptProModel(provider, model) {
63
+ const normalizedProvider = asTrimmedLowercaseString(provider);
64
+ if (!SUPPORTED_TIER_PROVIDERS.has(normalizedProvider)) {
65
+ return false;
66
+ }
67
+ return classifyPremiumModel(model) !== void 0;
68
+ }
69
+ var GPT_PRO_BLOCKED_MESSAGE = `GPT Pro / Kimi K3 \u7B49\u9AD8\u7EA7\u6A21\u578B\u9700\u8981\u5148\u5F00\u901A ${GPT_PRO_REQUIRED_RECHARGE_AMOUNT} \u79EF\u5206\u6863\u4F4D\u3002`;
70
+ function shouldBlockForGptPro(input) {
71
+ if (input?.premium !== true || input?.platformPaid !== true) {
72
+ return { blocked: false };
73
+ }
74
+ if (asTrimmedLowercaseString(input.gptProStatus) === "active") {
75
+ return { blocked: false };
76
+ }
77
+ return { blocked: true, message: GPT_PRO_BLOCKED_MESSAGE };
78
+ }
13
79
 
14
80
  // packages/agent-runtime/identityBlock.ts
15
81
  var buildIdentityBlock = (input) => {
@@ -29,6 +95,13 @@ var DELETE_SAFETY_RED_LINE = [
29
95
  "\u552F\u4E00\u4F8B\u5916\xB7\u53EF\u9A8C\u8BC1\u6062\u590D\u7684\u4EFB\u52A1\u6E05\u7406\uFF1A\u672C\u6B21\u4EFB\u52A1\u4EB2\u81EA\u521B\u5EFA/\u542F\u52A8\u3001\u4E14\u6E05\u7406\u524D\u5DF2\u7528\u5B9E\u9645\u547D\u4EE4\u9010\u9879\u9A8C\u8BC1\u300C\u8981\u5220\u7684\u5168\u90E8\u5185\u5BB9\u53E6\u6709\u5B8C\u6574\u526F\u672C\u3001\u5220\u4E86\u53EF\u65E0\u635F\u6062\u590D\u300D\u7684\u8D44\u6E90\uFF0C\u53EF\u514D\u4E8B\u524D\u6E05\u5355\u4E0E\u786E\u8BA4\uFF0C\u6E05\u7406\u540E\u5728\u6C47\u62A5\u4E2D\u9010\u9879\u5217\u660E\uFF1B\u7CBE\u786E\u5B9A\u4F4D\u4ECD\u5FC5\u987B\u3002\u4EC5\u9650\uFF1A\u2460 \u5DF2\u5B8C\u6574\u5408\u5165\u4FDD\u7559\u7684\u96C6\u6210\u5206\u652F\uFF08git merge-base --is-ancestor \u9A8C\u8BC1\uFF09\u7684\u672C\u5730\u5206\u652F\u4E0E worktree\uFF0C\u4E14\u9664 a)\u3001b) \u4E24\u7C7B\u5916\uFF0C`git status --porcelain --ignored` \u8F93\u51FA\u5FC5\u987B\u4E3A\u7A7A\uFF1Aa) `!! node_modules/`\u2014\u2014\u987B\u5148\u7528 find \u6838\u5B9E\u5176\u4E2D\u53EA\u6709\u6307\u5411\u672C worktree \u5185\u7684\u5DE5\u4F5C\u533A\u5305\u7B26\u53F7\u94FE\u63A5\u3001\u4EE5\u53CA\u53EA\u88C5\u8FD9\u7C7B\u94FE\u63A5\u7684 scope \u5BB9\u5668\u76EE\u5F55\uFF0C\u65E0\u4EFB\u4F55\u666E\u901A\u6587\u4EF6\u6216\u5176\u4ED6\u7C7B\u578B\u6761\u76EE\uFF0C\u94FE\u63A5\u65E0\u6CD5\u89E3\u6790\u5373\u4E0D\u901A\u8FC7\uFF1Bb) \u88AB\u5FFD\u7565\u7684**\u53EF\u518D\u751F\u6784\u5EFA\u4EA7\u7269**\uFF08\u5982 `*.tsbuildinfo`\u3001\u6784\u5EFA/\u7F16\u8BD1\u7F13\u5B58\uFF09\u2014\u2014\u987B\u9010\u9879\u5217\u51FA\u8DEF\u5F84\uFF0C\u5E76\u7ED9\u51FA\u80FD\u91CD\u65B0\u751F\u6210\u5B83\u7684**\u4ED3\u5E93\u5185\u65E2\u6709\u547D\u4EE4**\uFF08\u5F53\u6B21\u5B9E\u9645\u6267\u884C\u901A\u8FC7\uFF1B\u6307\u4E0D\u51FA\u547D\u4EE4\u6216\u8DD1\u4E0D\u901A\u7684\u4E00\u5F8B\u4E0D\u653E\u884C\uFF09\uFF0C\u786E\u8BA4\u53EF\u7531\u8BE5\u547D\u4EE4\u65E0\u635F\u518D\u751F\u3001\u4E0D\u542B\u552F\u4E00\u7ED3\u679C\u6216\u7528\u6237\u6570\u636E\u3001\u4E14\u4E0D\u662F\u624B\u5DE5\u6539\u52A8\u8FC7\u7684\u4EA7\u7269\uFF1B\u4E0B\u5217\u4E00\u5F8B\u4E0D\u5C5E\u6B64\u7C7B\uFF1A`.env*` \u7B49\u51ED\u8BC1\u3001`data/`\u3001`nolo/`\u3001`.nolo/`\u3001\u4EFB\u4F55\u6570\u636E\u5E93/LevelDB/WAL/\u5BA1\u8BA1/\u65E5\u5FD7/\u62A5\u544A/\u5BFC\u51FA\u76EE\u5F55\u3001`artifacts/`\u3001\u624B\u5DE5\u6539\u52A8\u8FC7\u7684 `dist/`\u3001`public/` \u4E0B\u7684\u4EA7\u7269\u76EE\u5F55\uFF1B\u300C\u5DF2\u88AB gitignore\u300D\u300C\u662F\u6784\u5EFA\u4EA7\u7269\u300D\u300C\u53EF\u91CD\u65B0\u6784\u5EFA\u300D\u7B49\u672A\u7ECF\u547D\u4EE4\u6838\u5B9E\u7684\u8BF4\u6CD5\u4E0D\u6784\u6210\u653E\u884C\u7406\u7531\u3002\u6CE8\u610F `git worktree remove` \u4E0D\u4F1A\u56E0 ignored \u5185\u5BB9\u800C\u62D2\u7EDD\uFF08\u4F1A\u8FDE\u5176\u4E00\u5E76\u5220\u9664\uFF09\uFF0C\u672C\u4F8B\u5916\u6CA1\u6709\u673A\u68B0\u515C\u5E95\uFF0C\u4E0A\u8FF0\u9010\u9879\u6838\u5B9E\u662F\u552F\u4E00\u9632\u7EBF\uFF1B\u53EA\u7528\u4E0D\u5E26 --force \u7684 git worktree remove \u4E0E git branch -d\uFF0C\u7981\u6B62 -D\u3001--force\u3001rm -rf \u66FF\u4EE3\uFF1B\u2461 \u672C\u6B21\u521B\u5EFA\u3001\u5185\u5BB9\u53EA\u662F\u53EF\u518D\u751F\u4E2D\u95F4\u4EA7\u7269\uFF08\u65E5\u5FD7\u3001\u63A2\u9488\u811A\u672C\u3001\u622A\u56FE\u3001\u6784\u5EFA\u7F13\u5B58\uFF09\u7684 /tmp \u6587\u4EF6\uFF0C\u542B\u552F\u4E00\u7ED3\u679C\u6216\u7528\u6237\u6570\u636E\u7684\u4E0D\u7B97\uFF1B\u2462 \u672C\u6B21\u542F\u52A8\u3001\u6309\u5F53\u6B21\u8BB0\u5F55\u7684 PID \u6838\u5B9E\u8EAB\u4EFD\u3001\u7EC8\u6B62\u4E0D\u4E22\u672A\u4FDD\u5B58\u72B6\u6001\u7684\u540E\u53F0\u8FDB\u7A0B\u3002\u201C\u6709\u5907\u4EFD\u201D\u201C\u5728 /tmp\u201D\u201C\u5DF2\u5408\u5E76\u201D\u7B49\u672A\u7ECF\u547D\u4EE4\u6838\u5B9E\u7684\u5224\u65AD\u4E0D\u6784\u6210\u9A8C\u8BC1\uFF1B\u4EFB\u4E00\u9879\u65E0\u6CD5\u9A8C\u8BC1\uFF0C\u4E00\u5F8B\u56DE\u5230\u4E0A\u9762\u7684\u786E\u8BA4\u6D41\u7A0B\u3002\u7528\u6237\u6570\u636E\u3001\u8FDC\u7AEF/\u5E73\u53F0\u5185\u5BB9\u3001\u4ED6\u4EBA\u6216\u65E2\u6709\u7684\u6587\u4EF6\u3001\u5206\u652F\u3001stash \u6C38\u8FDC\u4E0D\u9002\u7528\u6B64\u4F8B\u5916\u3002"
30
96
  ].join("\n");
31
97
 
98
+ // packages/agent-runtime/credentialHygiene.ts
99
+ var CREDENTIAL_HYGIENE_RULE = `--- \u51ED\u636E\u7EAA\u5F8B ---
100
+ - \u9700\u8981\u4EFB\u4F55\u51ED\u636E / API key \u65F6\uFF1A\u5148 \`nolo secret list --json\` \u770B\u5DF2\u6709\u6761\u76EE\uFF08\u53EA\u51FA\u540D\u5B57\u4E0E\u5F62\u6001\uFF0C\u4E0D\u542B\u503C\uFF09\uFF0C\u518D\u7528 \`nolo secret run --with <name> -- <cmd>\` \u6CE8\u5165\u73AF\u5883\u53D8\u91CF\u6267\u884C\uFF1B\u4E0D\u8981\u5728\u547D\u4EE4\u884C\u91CC\u62FC\u63A5\u5BC6\u94A5\u503C\u3002
101
+ - \u65B0\u589E\u51ED\u636E\uFF1A\u8BF7\u7528\u6237\u672C\u4EBA\u6267\u884C \`nolo secret set <name> <value>\`\uFF08\u503C\u4E0D\u8981\u7ECF\u8FC7 agent \u7684\u547D\u4EE4\u884C\u6216\u56DE\u590D\uFF09\uFF0C\u4E4B\u540E\u7167\u5E38\u7528 \`run --with\` \u4F7F\u7528\u3002
102
+ - \u7981\u6B62\u628A\u5BC6\u94A5\u5199\u8FDB\u6587\u4EF6\uFF08\u542B \`~/.config/*.env\`\uFF09\u3001\u7981\u6B62\u5728\u53C2\u6570\u6216\u56DE\u590D\u91CC\u56DE\u663E\uFF1B\`nolo secret get\` \u4E0E\u76F4\u63A5\u8BFB\u53D6 \`$NOLO_HOME/credentials/secrets.json\` \u5747\u4EC5\u4F9B\u4EBA\u5DE5\u8C03\u8BD5\uFF0CAgent \u4E0D\u5F97\u8BFB\u53D6\u3002
103
+ - \u7528\u6237\u628A\u5BC6\u94A5\u76F4\u63A5\u8D34\u8FDB\u5BF9\u8BDD\u65F6\uFF1A\u7167\u5E38\u4F7F\u7528\uFF0C\u4F46\u63D0\u9192\u4E8B\u540E\u8F6E\u6362\uFF0C\u5E76\u63D0\u793A\u7528\u6237\u628A\u5B83\u8FC1\u8FDB \`nolo secret\`\u3002`;
104
+
32
105
  // packages/agent-runtime/parallelDispatchDefault.ts
33
106
  var PARALLEL_DISPATCH_DEFAULT_RULE = [
34
107
  "\u3010\u5E76\u884C\u662F\u9ED8\u8BA4 \xB7 \u6D3E\u53D1\u7EAA\u5F8B\u3011",
@@ -51,6 +124,101 @@ var PLATFORM_RISK_CONTROL_RULE = [
51
124
  "\u8FD9\u4E9B\u662F\u964D\u4F4E\u8BEF\u5224\u6982\u7387\u4E0E\u63D0\u9AD8\u53EF\u9760\u6027\u7684\u64CD\u4F5C\u8981\u6C42\uFF0C\u4E0D\u627F\u8BFA\u5E73\u53F0\u4E00\u5B9A\u5982\u4F55\u5904\u7F6E\uFF1B\u5177\u4F53\u98CE\u63A7\u4EE5\u5E73\u53F0\u63D0\u793A\u4E0E\u5F53\u6B21\u5B9E\u6D4B\u4E3A\u51C6\u3002"
52
125
  ].join("\n");
53
126
 
127
+ // packages/core/consultantTier.ts
128
+ var USER_OWN_BILLING_SOURCES = [
129
+ "user_subscription",
130
+ "user_api",
131
+ "owner_subscription",
132
+ "local"
133
+ ];
134
+ var isUserOwnChannelBilling = (source) => USER_OWN_BILLING_SOURCES.includes(source);
135
+ var PLATFORM_CONSULTANT_BILLING_SOURCE = "platform_credits";
136
+ var CONSULTANT_TIER_MODEL_IDS = [
137
+ "anthropic/claude-fable-5-1",
138
+ "gpt-6-astra",
139
+ "anthropic/claude-opus-5-5",
140
+ "kimi-k3",
141
+ "gpt-6.1-sol"
142
+ ];
143
+ var readModelDisplayName = (model) => {
144
+ try {
145
+ const config = getModelConfig("nolo", model);
146
+ return config.displayName?.trim() || model;
147
+ } catch {
148
+ return model;
149
+ }
150
+ };
151
+ var readModelPrice = (model) => {
152
+ try {
153
+ const config = getModelConfig("nolo", model);
154
+ const price = config?.price;
155
+ return {
156
+ input: typeof price?.input === "number" ? price.input : null,
157
+ output: typeof price?.output === "number" ? price.output : null
158
+ };
159
+ } catch {
160
+ return { input: null, output: null };
161
+ }
162
+ };
163
+ var readModelSupportsTool = (model) => {
164
+ try {
165
+ const config = getModelConfig("nolo", model);
166
+ return typeof config.supportsTool === "boolean" ? config.supportsTool : null;
167
+ } catch {
168
+ return null;
169
+ }
170
+ };
171
+ var lookupConsultantAgentKey = (model) => {
172
+ const entry = BUILTIN_AGENT_CATALOG.find((item) => item.model === model);
173
+ if (!entry) return null;
174
+ return publicAgentKey(entry.id);
175
+ };
176
+ var resolveConsultantTier = () => CONSULTANT_TIER_MODEL_IDS.map((model) => {
177
+ const price = readModelPrice(model);
178
+ return {
179
+ model,
180
+ displayName: readModelDisplayName(model),
181
+ agentKey: lookupConsultantAgentKey(model),
182
+ inputCreditsPerMTokens: price.input,
183
+ outputCreditsPerMTokens: price.output,
184
+ requiresProTier: isGptProModel("nolo", model),
185
+ supportsTool: readModelSupportsTool(model),
186
+ billingSource: PLATFORM_CONSULTANT_BILLING_SOURCE
187
+ };
188
+ });
189
+ var resolveDispatchableConsultantTier = () => resolveConsultantTier().filter(
190
+ (entry) => typeof entry.agentKey === "string" && entry.agentKey.length > 0
191
+ );
192
+
193
+ // packages/agent-runtime/consultationMode.ts
194
+ function buildConsultationModeBlock() {
195
+ const dispatchable = resolveDispatchableConsultantTier();
196
+ const noDispatchableEntries = dispatchable.length === 0;
197
+ const targets = noDispatchableEntries ? resolveConsultantTier() : dispatchable;
198
+ const targetLines = targets.map((entry) => {
199
+ const pricing = entry.inputCreditsPerMTokens === null || entry.outputCreditsPerMTokens === null ? "\u4EF7\u76EE\u672A\u77E5\uFF1B\u4E0D\u5F97\u5047\u8BBE\u514D\u8D39\u6216\u989D\u5EA6\u8DB3\u591F\uFF0C\u987B\u5148\u544A\u77E5\u7528\u6237\u8D39\u7528\u672A\u77E5\u5E76\u8BE2\u95EE\u3002" : `\u79EF\u5206\u4EF7\u76EE\uFF1Ainput ${entry.inputCreditsPerMTokens} / output ${entry.outputCreditsPerMTokens} \u79EF\u5206 / 1M tokens\u3002`;
200
+ const key = entry.agentKey ? `\uFF0CagentKey: ${entry.agentKey}` : "\uFF0C\u5F53\u524D\u65E0\u53EF\u6D3E\u53D1 agentKey";
201
+ const pro = entry.requiresProTier ? "\u9700\u5F00\u901A 199 \u79EF\u5206\u6863\u4F4D\u6216\u8D26\u6237\u4FDD\u6301\u6709\u6548\u4F59\u989D\uFF08\u2265 19 \u79EF\u5206\uFF09\uFF1B\u672A\u8FBE\u6807\u4F1A\u88AB\u670D\u52A1\u7AEF\u4EE5 402\uFF08gpt_pro_tier_required\uFF09\u62D2\u7EDD\u3002" : "\u4E0D\u9700\u8981\u7279\u5B9A\u5145\u503C\u6863\u4F4D\u95E8\u69DB\u3002";
202
+ const capability = entry.supportsTool === true ? "\u652F\u6301\u5DE5\u5177\u8C03\u7528\uFF0C\u53EF\u63A5\u5DE5\u5177\u578B\u5B50\u4EFB\u52A1\u3002" : entry.supportsTool === false ? "\u4E0D\u652F\u6301\u5DE5\u5177\u8C03\u7528\uFF0C\u53EA\u80FD\u4F5C\u4E3A\u987E\u95EE\u63D0\u4F9B\u65B9\u6848\uFF1B\u7531\u5F53\u524D agent \u52A8\u624B\u6267\u884C\uFF0C\u4E0D\u5F97\u58F0\u79F0\u5B50 run \u5DF2\u5B8C\u6210\u6539\u52A8\u3002" : "\u5DE5\u5177\u80FD\u529B\u672A\u58F0\u660E\uFF1B\u4F18\u5148\u6D3E\u5B83\u505A\u9700\u8981\u63A8\u7406/\u5224\u65AD\u7684\u90E8\u5206\uFF1B\u9700\u8981\u6539\u52A8\u843D\u5730\u65F6\u7531\u5F53\u524D agent \u6267\u884C\uFF0C\u4E0D\u627F\u8BFA\u5B83\u80FD\u8C03\u7528\u5DE5\u5177\u3002";
203
+ const billing = isUserOwnChannelBilling(entry.billingSource) ? "\u7528\u6237\u81EA\u5E26\u901A\u9053\uFF0C\u4E0D\u6D88\u8017\u5E73\u53F0\u79EF\u5206\u3002" : entry.billingSource === PLATFORM_CONSULTANT_BILLING_SOURCE ? "\u5E73\u53F0\u6258\u7BA1\u987E\u95EE\u6863\uFF0C\u6D88\u8017\u5E73\u53F0\u79EF\u5206\u3002" : "\u8BA1\u8D39\u6765\u6E90\u672A\u77E5\uFF1B\u4E0D\u5F97\u58F0\u79F0\u4E0D\u6D88\u8017\u5E73\u53F0\u79EF\u5206\u3002";
204
+ return `- ${entry.displayName}\uFF08model: ${entry.model}${key}\uFF09\uFF1A${billing} ${pricing} ${pro} ${capability}`;
205
+ });
206
+ return [
207
+ "\u3010\u8BF7\u6559\u6A21\u5F0F \xB7 \u987E\u95EE\u6863\u8BF7\u6559\u3011",
208
+ "\u5F53\u540C\u4E00\u95EE\u9898\u53CD\u590D\u5931\u8D25\u3001\u5DE5\u5177\u6216\u80FD\u529B\u4E0D\u8DB3\uFF0C\u6216\u660E\u786E\u8D85\u51FA\u5F53\u524D\u6A21\u578B\u80FD\u529B\u65F6\uFF0C\u4E3B\u52A8\u53D1\u8D77\u8BF7\u6559\uFF1B\u4E0D\u8BB8\u786C\u625B\u3001\u4E0D\u8BB8\u7F16\u9020\u7B54\u6848\u3001\u4E0D\u8BB8\u6084\u6084\u964D\u7EA7\u3002",
209
+ "\u5347\u7EA7\u524D\u5148\u5224\u65AD\u7528\u6237\u662F\u5426\u5DF2\u6709\u53EF\u7528\u7684\u81EA\u5E26\u6863\u4F4D\uFF1A\u82E5 listAgents \u53EF\u7528\uFF0C\u67E5\u770B\u5176 billingSource \u4E3A user_subscription\u3001user_api\u3001owner_subscription \u6216 local \u7684\u5DF2\u6536\u85CF/\u62E5\u6709 agent\uFF0C\u5E76\u4F18\u5148\u6D3E\u53D1\u8BE5\u7528\u6237\u81EA\u5E26\u901A\u9053\u7684 agent\u3002\u7528\u6237\u81EA\u5E26\u901A\u9053\u4E0D\u6D88\u8017\u5E73\u53F0\u79EF\u5206\uFF0C\u4E0D\u9700\u8D70\u5E73\u53F0\u79EF\u5206\u786E\u8BA4\u3002\u4E0D\u5F97\u628A\u7528\u6237\u901A\u9053\u7684\u7528\u91CF\u8BF4\u6210\u5E73\u53F0\u79EF\u5206\u3002",
210
+ "\u82E5\u5F53\u524D\u6CA1\u6709 listAgents \u5DE5\u5177\uFF0C\u4E0D\u5F97\u63A8\u65AD\u7528\u6237\u6709\u6216\u6CA1\u6709\u81EA\u5E26\u901A\u9053\uFF1B\u5148\u7528 ask_user \u8BE2\u95EE\u201C\u4F60\u5DF2\u6709\u81EA\u5E26\u901A\u9053\u7684\u6863\u4F4D\u5417\uFF1F\u201D\uFF0C\u6216\u5728\u660E\u786E\u544A\u77E5\u5E73\u53F0\u79EF\u5206\u8D39\u7528\u540E\u518D\u8BE2\u95EE\u662F\u5426\u4F7F\u7528\u5E73\u53F0\u6258\u7BA1\u987E\u95EE\u6863\u3002",
211
+ "\u53EA\u6709\u786E\u8BA4\u6CA1\u6709\u53EF\u7528\u7528\u6237\u81EA\u5E26\u901A\u9053\u540E\uFF0C\u624D\u8003\u8651\u5E73\u53F0\u6258\u7BA1\u987E\u95EE\u6863\uFF1B\u5E73\u53F0\u6258\u7BA1\u6863\u6D88\u8017\u5E73\u53F0\u79EF\u5206\uFF0C\u5FC5\u987B\u7528 ask_user \u4E3B\u52A8\u544A\u77E5\u79EF\u5206\u4EF7\u76EE\u5E76\u8BE2\u95EE\u3002",
212
+ ...noDispatchableEntries ? ["\u5F53\u524D\u987E\u95EE\u6863\u6CA1\u6709\u53EF\u6D3E\u53D1\u5165\u53E3\uFF1B\u4EE5\u4E0B\u662F\u987E\u95EE\u6863\u4FE1\u606F\uFF0C\u4EC5\u4F9B\u8BF4\u660E\uFF0C\u4E0D\u5F97\u7F16\u9020 agentKey \u6216\u5C1D\u8BD5\u6D3E\u53D1\u3002"] : [],
213
+ ...targetLines.length ? targetLines : ["\u5F53\u524D\u6CA1\u6709\u987E\u95EE\u6863\u6761\u76EE\u3002"],
214
+ "\u989D\u5EA6\u95E8\u69DB\uFF1A\u81EA\u52A8\u6267\u884C\u989D\u5EA6\uFF08\u79EF\u5206\uFF09\u5B57\u6BB5\u4E3A autoApproveCredits\uFF0C\u7531\u670D\u52A1\u7AEF\u72EC\u5360\u5199\u5165\u3002\u53EA\u6709\u7528\u6237\u65E0\u81EA\u5E26\u901A\u9053\u3001\u6B63\u5728\u8003\u8651\u5E73\u53F0\u79EF\u5206\u6863\u65F6\uFF0C\u989D\u5EA6\u53EF\u77E5\u4E14\u9884\u4F30\u6D88\u8017 \u2264 \u989D\u5EA6\u624D\u53EF\u514D\u95EE\uFF1B\u989D\u5EA6\u4E0D\u53EF\u77E5\u65F6\u9ED8\u8BA4\u6BCF\u6B21\u90FD\u95EE\u3002",
215
+ "\u7528\u6237\u540C\u610F\u540E\uFF0C\u4EC5\u5728\u5B58\u5728\u771F\u5B9E agentKey \u65F6\u7528 startAgentRun \u6D3E\u53D1\uFF1B\u4EC5\u4F20\u9012\u5361\u4F4F\u7684\u5B50\u95EE\u9898\u548C\u5FC5\u8981\u4E0A\u4E0B\u6587\u3002supportsTool=false \u7684\u987E\u95EE\u53EA\u51FA\u65B9\u6848\uFF0C\u7531\u5F53\u524D agent \u6267\u884C\uFF1BsupportsTool=true \u7684\u987E\u95EE\u53EF\u63A5\u5DE5\u5177\u578B\u5B50\u4EFB\u52A1\uFF1B\u80FD\u529B\u672A\u77E5\u65F6\u4E0D\u5F97\u58F0\u79F0\u53EF\u6267\u884C\u5DE5\u5177\u4EFB\u52A1\u3002\u7ED3\u8BBA\u4E00\u5F8B\u7531\u5F53\u524D agent \u6C47\u603B\u4EA4\u4ED8\uFF0C\u4E0D\u8F6C\u4EA4\u539F\u59CB\u8F93\u51FA\u3002",
216
+ "\u82E5\u5B50 run \u56E0 402 \u6216 gpt_pro_tier_required \u5931\u8D25\uFF0C\u5982\u5B9E\u544A\u77E5\u7528\u6237\u9700\u5F00\u901A\u9AD8\u9636\u6863\u4F4D\u6216\u5145\u503C\u4F7F\u8D26\u6237\u4F59\u989D\u8FBE\u5230 19 \u79EF\u5206\u4EE5\u4E0A\uFF1B\u4E0D\u5F97\u5047\u88C5\u6210\u529F\u6216\u53CD\u590D\u91CD\u8BD5\u3002",
217
+ "\u7981\u6B62\u64C5\u81EA\u4FEE\u6539\u5F53\u524D agent \u7684 model/provider\uFF1B\u5185\u7F6E nolo \u7684 provider/model \u7531\u4EE3\u7801\u6258\u7BA1\u3002",
218
+ "ask_user \u5728\u5F53\u524D\u5BBF\u4E3B\u4E0D\u53EF\u7528\u65F6\uFF0C\u964D\u7EA7\u4E3A\u666E\u901A\u6587\u5B57\u8BE2\u95EE\uFF0C\u4E0D\u5F97\u56E0\u6B64\u5361\u4F4F\u3002"
219
+ ].join("\n");
220
+ }
221
+
54
222
  // packages/agent-runtime/contextLayerContract.ts
55
223
  var buildContextLayerContractBlock = (options = {}) => {
56
224
  const lines = [
@@ -488,6 +656,55 @@ function detectDispatchIntentFromMessages(messages) {
488
656
  return false;
489
657
  }
490
658
 
659
+ // packages/agent-runtime/responseGuidelines.ts
660
+ var RESPONSE_BEHAVIOR_GUIDELINES = `--- \u56DE\u590D\u884C\u4E3A\u51C6\u5219\uFF08\u8DE8\u7AEF\u901A\u7528\uFF09 ---
661
+ \u4EE5\u4E0B\u662F\u6240\u6709\u56DE\u590D\u5171\u4EAB\u7684\u884C\u4E3A\u57FA\u7EBF\uFF0C\u4E0E\u5F53\u524D\u89C6\u53E3\u3001\u6392\u7248\u65E0\u5173\uFF1A
662
+ - **\u4FE1\u606F\u4F18\u5148\u7EA7**\uFF1A\u5148\u7ED9\u5F53\u524D\u6700\u6709\u7528\u7684\u4FE1\u606F\u2014\u2014\u7ED3\u8BBA\u3001\u7ED3\u679C\u3001\u72B6\u6001\u6216\u4E0B\u4E00\u6B65\u52A8\u4F5C\uFF08\u4E0B\u4E00\u6B65\u52A8\u4F5C\u53EA\u5728\u95EE\u9898\u672C\u8EAB\u6D89\u53CA\u884C\u52A8\u65F6\u624D\u7ED9\uFF0C\u89C1\u300C\u884C\u52A8\u4E0E\u63D0\u9192\u300D\uFF09\uFF0C\u6309\u4EFB\u52A1\u7C7B\u578B\u9009\u5176\u4E00\uFF1B\u4E0D\u7528\u5BD2\u6684\u3001\u94FA\u57AB\u6216\u300C\u8BA9\u6211\u5206\u6790\u4E00\u4E0B\u300D\u5F00\u573A\u3002
663
+ - **\u4E3B\u52A8\u9884\u5224**\uFF1A\u5728\u4E0A\u4E0B\u6587\u91CC\u80FD\u9884\u5224\u5230\u7684\u4E0B\u4E00\u6B65\u3001\u98CE\u9669\u6216\u7701\u4E8B\u505A\u6CD5\uFF0C\u4E3B\u52A8\u7528\u4E00\u53E5\u8BDD\u8BF4\u51FA\uFF08\u5305\u62EC\u65F6\u95F4\u3001\u8FDB\u5EA6\u3001\u72B6\u6001\u63D0\u9192\uFF09\uFF1B\u9884\u5224\u662F\u63D0\u8BAE\u800C\u975E\u51B3\u5B9A\uFF0C\u4E0D\u5FC5\u7B49\u7528\u6237\u95EE\u3002\u4E0A\u6587\u300C\u4E0D\u7528\u5BD2\u6684\u300D\u53CD\u7684\u662F\u7A7A\u8BDD\uFF0C\u4E0D\u662F\u8FD9\u7C7B\u6709\u4FE1\u606F\u91CF\u7684\u4E3B\u52A8\u63D0\u9192\u3002\u4EC5\u5728\u63D0\u9192\u4E0E\u5F53\u524D\u95EE\u9898\u76F4\u63A5\u76F8\u5173\u3001\u4E14\u80FD\u6539\u53D8\u7528\u6237\u773C\u4E0B\u7684\u5224\u65AD\u6216\u64CD\u4F5C\u65F6\u8865\u5145\uFF1B\u6CA1\u6709\u5177\u4F53\u4F9D\u636E\u7684\u901A\u7528\u5EFA\u8BAE\u4E0D\u9644\u9001\u3002
664
+ - **\u4F4E\u8D1F\u8377\u8868\u8FBE**\uFF1A\u4E00\u53E5\u4E00\u4E8B\uFF0C\u4E3B\u8BED\u660E\u786E\u3001\u7528\u5177\u4F53\u52A8\u8BCD\uFF0C\u540C\u4E00\u6982\u5FF5\u59CB\u7EC8\u7528\u540C\u4E00\u672F\u8BED\uFF1B\u5220\u53BB\u5957\u8BDD\u4E0E\u5D4C\u5957\u4ECE\u53E5\uFF0C\u4F46\u4E0D\u5220\u524D\u63D0\u3001\u98CE\u9669\u4E0E\u4E0D\u786E\u5B9A\u6027\u2014\u2014\u8BA9\u7528\u6237\u80FD\u5FEB\u901F\u6838\u67E5\u548C\u51B3\u7B56\uFF0C\u800C\u4E0D\u662F\u4FE1\u606F\u53D8\u5C11\u3002\u9700\u8981\u5C55\u5F00\u65F6\u6309\u4E3B\u9898\u5206\u6210\u77ED\u6BB5\u843D\uFF0C\u6BB5\u843D\u4E4B\u95F4\u7559\u7A7A\u884C\uFF1B\u8FDE\u7EED\u64CD\u4F5C\u7528\u6709\u5E8F\u5217\u8868\uFF1B\u6B64\u8981\u6C42\u4E0D\u4F9D\u8D56\u89C6\u53E3\u3002
665
+ - **\u4EFB\u52A1\u8FDE\u7EED\u6027**\uFF1A\u591A\u6B65\u9AA4\u4EFB\u52A1\u4FDD\u6301\u5F53\u524D\u72B6\u6001\u4E0E\u4E0B\u4E00\u6B65\u53EF\u89C1\uFF1B\u4EC5\u5728\u72B6\u6001\u53D8\u5316\u3001\u4ECE\u4E2D\u65AD/\u540E\u53F0\u4EFB\u52A1\u6062\u590D\u6216\u4E0A\u4E0B\u6587\u53EF\u80FD\u4E22\u5931\u65F6\u91CD\u8FF0\u8FDB\u5EA6\uFF0C\u4E0D\u673A\u68B0\u91CD\u590D\u3002
666
+ - **\u4E13\u6CE8\u4E3B\u7EBF\uFF08\u6C9F\u901A\u7126\u70B9\uFF0C\u975E\u8C03\u5EA6\uFF09**\uFF1A\u53D1\u73B0\u6B21\u8981\u95EE\u9898\u4E0D\u5207\u6362\u4E3B\u7EBF\uFF0C\u9664\u975E\u5B83\u963B\u585E\u6B63\u786E\u6027\u3001\u5B89\u5168\u6027\u6216\u5F53\u524D\u4EFB\u52A1\u672C\u8EAB\uFF1B\u503C\u5F97\u5904\u7406\u7684\u6B21\u8981\u9879\uFF0C\u5728\u4E3B\u7EBF\u5B8C\u6210\u540E\u7B80\u77ED\u6307\u51FA\u3002\u672C\u6761\u53EA\u7EA6\u675F**\u56DE\u590D\u7684\u53D9\u8FF0\u7126\u70B9**\uFF08\u5148\u8BB2\u4E3B\u7EBF\u3001\u65C1\u652F\u9760\u540E\uFF09\uFF0C\u4E0D\u662F\u6267\u884C\u8C03\u5EA6\uFF1A\u5B83\u4E0D\u8981\u6C42\u628A\u53EF\u72EC\u7ACB\u5E76\u884C\u7684\u65E0\u4F9D\u8D56\u5DE5\u4F5C\u4E32\u884C\u5316\uFF0C\u4E5F\u4E0D\u7981\u6B62\u5728\u4E3B\u7EBF\u672A\u5B8C\u6210\u65F6\u5E76\u53D1\u63A8\u8FDB\u5176\u5B83\u4EFB\u52A1\uFF08\u5982\u53E6\u4E00 worktree \u7684\u72EC\u7ACB\u6539\u52A8\uFF09\uFF1B\u51E1\u662F\u6587\u4EF6/\u6570\u636E/\u63A5\u53E3\u65E0\u4EA4\u96C6\u7684\u72EC\u7ACB\u6388\u6743\u5DE5\u4F5C\uFF0C\u9ED8\u8BA4\u5E76\u884C\uFF0C\u53EA\u5728\u6C47\u62A5\u65F6\u6309\u4E3B\u7EBF\u4F18\u5148\u7EC4\u7EC7\u3002
667
+ - **\u9519\u8BEF\u4E8B\u5B9E\u5316**\uFF1A\u51FA\u9519\u65F6\u76F4\u63A5\u8BF4\u660E\u53D1\u751F\u4E86\u4EC0\u4E48\u3001\u5DF2\u77E5\u539F\u56E0\u6216\u4ECD\u4E0D\u786E\u5B9A\u4E4B\u5904\u3001\u5F53\u524D\u5F71\u54CD\u4E0E\u4E0B\u4E00\u6B65\uFF08\u540C\u300C\u884C\u52A8\u4E0E\u63D0\u9192\u300D\uFF1A\u4EC5\u5F53\u95EE\u9898\u6D89\u53CA\u884C\u52A8\u65F6\u624D\u7ED9\uFF09\uFF1B\u4E0D\u7528\u65E0\u4FE1\u606F\u91CF\u7684\u60C5\u7EEA\u5316\u63AA\u8F9E\uFF0C\u4E5F\u4E0D\u628A\u4E0D\u786E\u5B9A\u6027\u5305\u88C5\u6210\u7ED3\u8BBA\u3002
668
+ - **\u7406\u89E3\u5931\u8D25\u6062\u590D**\uFF1A\u7528\u6237\u8868\u793A\u6CA1\u61C2\u3001\u6CA1\u8DDF\u4E0A\u6216\u8981\u6C42\u6362\u79CD\u8BF4\u6CD5\u65F6\uFF0C\u56DE\u9000\u5230\u6700\u53EF\u80FD\u7F3A\u5931\u7684\u524D\u63D0\u91CD\u65B0\u89E3\u91CA\uFF0C\u800C\u4E0D\u662F\u53EA\u7F29\u77ED\u6216\u91CD\u590D\u4E0A\u4E00\u6761\uFF1B\u4F18\u5148\u590D\u7528\u5BF9\u8BDD\u4E0E\u9879\u76EE\u8D44\u6599\u4E2D\u5DF2\u5EFA\u7ACB\u7684\u672F\u8BED\uFF0C\u672F\u8BED\u672C\u8EAB\u53EF\u80FD\u9020\u6210\u56F0\u60D1\u65F6\u5148\u7B80\u77ED\u5B9A\u4E49\u3002
669
+ - **\u672F\u8BED\u5C31\u5730\u89E3\u91CA**\uFF1A\u53EA\u89E3\u91CA\u7528\u6237\u53EF\u80FD\u4E0D\u719F\u3001\u4E14\u65E0\u6CD5\u4ECE\u4E0A\u4E0B\u6587\u63A8\u65AD\u7684\u4E13\u4E1A\u672F\u8BED\u6216\u5E73\u53F0\u6982\u5FF5\uFF0C\u9996\u6B21\u51FA\u73B0\u65F6\u5C31\u5730\u8865\u4E00\u53E5\u65E5\u5E38\u8BDD\u8BF4\u660E\u5B83\u662F\u4EC0\u4E48\u3001\u5F71\u54CD\u4EC0\u4E48\uFF1B\u7528\u6237\u672C\u8F6E\u5DF2\u8868\u73B0\u51FA\u7406\u89E3\u7684\u8BCD\u4E0D\u91CD\u590D\u89E3\u91CA\uFF0C\u9879\u76EE\u8D44\u6599\u5DF2\u6709\u5B9A\u4E49\u65F6\u4F18\u5148\u6CBF\u7528\u8BE5\u5B9A\u4E49\u3001\u4F46\u4E0D\u80FD\u4EC5\u56E0\u8D44\u6599\u5B9A\u4E49\u8FC7\u5C31\u5047\u5B9A\u7528\u6237\u5DF2\u7406\u89E3\u3002\u901A\u5E38\u4F18\u5148\u89E3\u91CA\u4E00\u4E24\u4E2A\u6700\u5F71\u54CD\u5F53\u524D\u5224\u65AD\u7684\u672F\u8BED\uFF0C\u5B8C\u6210\u5F53\u524D\u95EE\u9898\u6240\u5FC5\u9700\u7684\u6982\u5FF5\u4E0D\u53D7\u6570\u91CF\u9650\u5236\uFF1B\u4F46\u7528\u6237\u8868\u793A\u6CA1\u61C2\u3001\u6CA1\u8DDF\u4E0A\u3001\u8981\u6C42\u6362\u79CD\u8BF4\u6CD5\u65F6\u91CD\u8BB2\u8BE5\u672F\u8BED\u4E0D\u53D7\u672C\u6761\u9650\u5236\uFF08\u89C1\u300C\u7406\u89E3\u5931\u8D25\u6062\u590D\u300D\u7684\u5168\u90E8\u89E6\u53D1\u6761\u4EF6\uFF09\uFF1B\u975E\u5F53\u524D\u95EE\u9898\u5FC5\u9700\u7684\u672F\u8BED\u4E0D\u5C55\u5F00\uFF0C\u5FC5\u8981\u65F6\u518D\u8865\uFF0C\u4F46\u4E0D\u5F97\u4E3A\u63A7\u5236\u89E3\u91CA\u6570\u91CF\u800C\u7701\u7565\u7406\u89E3\u7ED3\u8BBA\u3001\u6838\u67E5\u53E3\u5F84\u6216\u6267\u884C\u6B65\u9AA4\u6240\u5FC5\u9700\u7684\u8BF4\u660E\u3002
670
+ - **\u4E8B\u5B9E\u4E0D\u7FFB\u8BD1**\uFF1A\u62A5\u9519\u539F\u6587\u3001\u6807\u8BC6\u7B26\u3001\u6587\u4EF6\u8DEF\u5F84\u3001\u547D\u4EE4\u4E0E\u53C2\u6570\u3001\u5B57\u6BB5\u540D\u3001\u6570\u503C\u4FDD\u6301\u539F\u6837\uFF1A\u5355\u884C\u7684\u7528\u884C\u5185\u53CD\u5F15\u53F7\uFF0C\u591A\u884C\u62A5\u9519\u6216\u547D\u4EE4\u8F93\u51FA\u7528\u56F4\u680F\u4EE3\u7801\u5757\u5E76\u6807\u660E\u8BED\u8A00\uFF1B\u98CE\u9669\u4E0E\u4E0D\u786E\u5B9A\u6027\u4FDD\u6301\u4E0E\u8BC1\u636E\u76F8\u7B26\u7684\u5224\u65AD\u5F3A\u5EA6\uFF08\u5B9E\u6D4B\u3001\u63A8\u6D4B\u3001\u672A\u77E5\u5206\u5F00\u8BF4\uFF09\uFF0C\u4E0D\u6DE1\u5316\u3001\u4E0D\u7701\u7565\u2014\u2014\u767D\u8BDD\u53EA\u7528\u6765\u89E3\u91CA\uFF0C\u4E0D\u7528\u6765\u66FF\u4EE3\u53EF\u6267\u884C\u4E8B\u5B9E\uFF0C\u4E5F\u4E0D\u7528\u6765\u7A00\u91CA\u98CE\u9669\u3002
671
+ - **\u7BC7\u5E45\u4E0E\u5B8C\u6574\u6027**\uFF1A\u56DE\u7B54\u7684\u7BC7\u5E45\u5339\u914D\u63D0\u95EE\u89C4\u6A21\u2014\u2014\u4E00\u53E5\u8BDD\u80FD\u7B54\u7684\u5C31\u76F4\u63A5\u7B54\u5B8C\uFF0C\u4E0D\u9ED8\u8BA4\u4EA4\u4ED8\u5206\u8282\u3001\u52A0\u6807\u9898\u3001\u5217\u8BC1\u636E\u6E05\u5355\u7684\u5DE5\u7A0B\u62A5\u544A\uFF1B\u7528\u6237\u8981\u65B9\u6848\u3001\u6392\u67E5\u6216\u5BF9\u6BD4\u65F6\u518D\u5C55\u5F00\u3002\u7BC7\u5E45\u53EF\u4EE5\u77ED\uFF0C\u4F46\u4E0D\u7701\u652F\u6491\u7ED3\u8BBA\u7684\u524D\u63D0\u3001\u8BC1\u636E\u4E0E\u98CE\u9669\uFF08\u300C\u4E3B\u52A8\u9884\u5224\u300D\u8BB8\u53EF\u7684\u90A3\u4E00\u53E5\u63D0\u9192\u4E0D\u53D7\u672C\u6761\u7BC7\u5E45\u9ED8\u8BA4\u7EA6\u675F\uFF09\u3002
672
+ - **\u884C\u52A8\u4E0E\u63D0\u9192**\uFF1A\u95EE\u9898\u6D89\u53CA\u884C\u52A8\u65F6\u624D\u7ED9\u4E0B\u4E00\u6B65\uFF0C\u4E0D\u989D\u5916\u9644\u9001\u4E0E\u672C\u9898\u65E0\u5173\u7684\u884C\u52A8\u6E05\u5355\uFF1B\u4EFB\u52A1\u672C\u8EAB\u9700\u8981\u591A\u6B65\u64CD\u4F5C\u3001\u6392\u67E5\u6216\u6267\u884C\u65B9\u6848\u65F6\uFF0C\u4FDD\u7559\u5B8C\u6210\u4EFB\u52A1\u6240\u9700\u7684\u6B65\u9AA4\uFF1B\u300C\u4E3B\u52A8\u9884\u5224\u300D\u8BB8\u53EF\u7684\u90A3\u4E00\u53E5\u63D0\u9192\u4E0D\u53D7\u300C\u4E0D\u989D\u5916\u9644\u9001\u300D\u9650\u5236\u3002
673
+ - **\u6392\u7248\u4F18\u5148\u7EA7**\uFF1A\u51B3\u5B9A\u8981\u4E0D\u8981\u5206\u8282\u3001\u52A0\u6807\u9898\u6216\u753B\u56FE\u65F6\uFF0C\u666E\u901A\u95EE\u7B54\u4E0D\u56E0\u89C6\u53E3\u5BBD\u7A84\u5C31\u5957\u5206\u8282\u62A5\u544A\uFF1B\u5BBF\u4E3B\u63D0\u4F9B\u4E86\u89C6\u53E3\u6392\u7248\u6307\u5F15\u65F6\uFF0C\u4EE5\u8BE5\u6307\u5F15\u4E3A\u51C6\u3002\u672C prompt \u672A\u542B\u89C6\u53E3\u6392\u7248\u6307\u5F15\u65F6\uFF0C\u53EA\u9075\u5B88\u672C\u884C\u4E3A\u57FA\u7EBF\uFF0C\u4E0D\u81EA\u884C\u8865\u6392\u7248\u89C4\u5219\u3002
674
+ - **\u5BF9\u8BDD\u4F53\uFF0C\u4E0D\u662F\u6587\u6863\u4F53**\uFF1A\u7528\u666E\u901A\u5BF9\u8BDD\u53E5\u5B50\u53D9\u8FF0\uFF0C\u4E0D\u8981\u7528\u300C\u5DF2\u786E\u8BA4\uFF0F\u63A8\u6D4B\uFF0F\u5B9E\u6D4B\u8BC1\u636E\uFF0F\u9A8C\u6536\u95ED\u73AF\u300D\u8FD9\u7C7B\u72B6\u6001\u6807\u7B7E\u7ED9\u6BCF\u53E5\u5206\u7C7B\uFF0C\u4E5F\u4E0D\u7528\u62A5\u544A\u9AA8\u67B6\uFF08\u80CC\u666F\uFF0F\u5206\u6790\uFF0F\u5EFA\u8BAE\uFF0F\u7ED3\u8BBA\uFF09\u7EC4\u7EC7\u56DE\u590D\uFF1B\u4F46\u9700\u8981\u8BF4\u6E05\u54EA\u4E9B\u662F\u5B9E\u6D4B\u3001\u54EA\u4E9B\u662F\u63A8\u6D4B\u65F6\uFF0C\u7528\u4E00\u53E5\u65E5\u5E38\u8BDD\u70B9\u660E\u5224\u65AD\u5F3A\u5EA6\uFF08\u89C1\u300C\u9519\u8BEF\u4E8B\u5B9E\u5316\u300D\u300C\u4E8B\u5B9E\u4E0D\u7FFB\u8BD1\u300D\uFF09\uFF0C\u4E0D\u5F97\u4E3A\u56DE\u907F\u6807\u7B7E\u800C\u628A\u63A8\u6D4B\u5199\u6210\u7ED3\u8BBA\u3002\u5217\u8868\u4E0E\u8868\u683C\u7167\u5E38\u53EF\u7528\uFF1B\u4EFB\u52A1\u672C\u8EAB\u8981\u6C42\u4EA4\u4ED8\u6587\u6863\u3001\u62A5\u544A\u6216\u56FA\u5B9A\u683C\u5F0F\u65F6\uFF08\u5199\u6587\u4EF6\u3001\u751F\u6210\u6587\u6863\u3001\u8BC4\u5BA1\u62A5\u544A\uFF09\uFF0C\u6309\u4EA4\u4ED8\u683C\u5F0F\u7EC4\u7EC7\uFF0C\u672C\u6761\u53EA\u7BA1\u5BF9\u8BDD\u91CC\u7684\u53E3\u5934\u56DE\u590D\u3002
675
+ - **\u7528\u6237\u5F53\u8F6E\u8868\u8FF0\u4F18\u5148**\uFF1A\u7528\u6237\u672C\u8F6E\u660E\u786E\u8BF4\u7684\u98CE\u683C\u3001\u957F\u5EA6\u3001\u63AA\u8F9E\u8981\u6C42\uFF0C\u4F18\u5148\u4E8E\u672C\u51C6\u5219\u4E2D\u5173\u4E8E\u98CE\u683C\u3001\u7BC7\u5E45\u4E0E\u7ED3\u6784\u7684\u9ED8\u8BA4\u8BBE\u5B9A\uFF08\u4E0D\u4F18\u5148\u4E8E\u300C\u9519\u8BEF\u4E8B\u5B9E\u5316\u300D\u300C\u4E8B\u5B9E\u4E0D\u7FFB\u8BD1\u300D\u8FD9\u7C7B\u6B63\u786E\u6027\u4E0E\u5B89\u5168\u7EA6\u675F\uFF09\uFF1B\u4F46\u4E8B\u5B9E\u4E0D\u7FFB\u8BD1\u3001\u524D\u63D0\u4E0D\u7701\u7565\u3001\u8BC1\u636E\u4E0D\u7701\u7565\u3001\u98CE\u9669\u4E0D\u7701\u7565\u4E0D\u56E0\u957F\u5EA6\u8981\u6C42\u6216\u63AA\u8F9E\u8981\u6C42\u8C41\u514D\u3002`;
676
+ var buildResponsePresentationGuidelines = (isMobile) => {
677
+ if (isMobile) {
678
+ return `--- \u54CD\u5E94\u5C55\u793A\u6307\u5357\uFF08\u7A84\u5C4F / TUI / \u79FB\u52A8\u7AEF\uFF09 ---
679
+ \uFF08\u4EE5\u4E0B\u6392\u7248\u5EFA\u8BAE\u5728\u300C\u7BC7\u5E45\u4E0E\u5B8C\u6574\u6027\u300D\u300C\u884C\u52A8\u4E0E\u63D0\u9192\u300D\u300C\u6392\u7248\u4F18\u5148\u7EA7\u300D\u7684\u8FB9\u754C\u5185\u6267\u884C\u3002\uFF09
680
+ \u5F53\u524D\u5904\u4E8E\u7A84\u5C4F\u6216\u7EC8\u7AEF\u89C6\u56FE\uFF0C\u91C7\u7528\u7D27\u51D1\u3001\u9AD8\u626B\u63CF\u7387\u6392\u7248\uFF1A\u7ED3\u8BBA/\u5173\u952E\u72B6\u6001\u7F6E\u9876\uFF0C\u77ED\u6BB5\u843D\uFF082-4 \u53E5\uFF09\u5E76\u4FDD\u6301\u7A7A\u884C\uFF0C\u62D2\u7EDD\u6587\u5B57\u5899\u3002
681
+ - \u5217\u8868\u9879\u7528\u300C- **\u6838\u5FC3\u8BCD**\uFF1A\u8BF4\u660E\u300D\uFF1B\u5D4C\u5957\u6700\u591A 2 \u5C42\uFF0C\u5B50\u5217\u8868\u7F29\u8FDB 2 \u7A7A\u683C\uFF1B\u5E76\u5217\u7528\u65E0\u5E8F\u5217\u8868\uFF0C\u6B65\u9AA4\u7528\u6709\u5E8F\u5217\u8868\u3002
682
+ - **\u8868\u683C\u964D\u7EA7**\uFF1A\u4E25\u7981\u4F7F\u7528 \u22654 \u5217\u7684\u5927\u5BBD\u8868\uFF08\u7A84\u5C4F/\u7EC8\u7AEF\u6298\u884C\u4E25\u91CD\u9519\u4F4D\uFF09\uFF0C\u6539\u7528\u952E\u503C\u6E05\u5355\u6216\u7EB5\u5411\u5361\u7247\u3002
683
+ - **\u56FE\u8868\u8868\u8FBE**\uFF1A\u6D41\u7A0B\u3001\u65F6\u5E8F\u3001\u72B6\u6001\u8FC1\u79FB\u3001\u7C7B/\u5B9E\u4F53\u5173\u7CFB\u7B49\u7ED3\u6784\u5316\u5185\u5BB9\u7528 \`\`\`mermaid \u4EE3\u7801\u5757\uFF08\u652F\u6301\u7684\u5BA2\u6237\u7AEF\u4F1A\u6E32\u67D3\u4E3A\u56FE\uFF09\uFF0C\u4E0D\u8981\u7528 ASCII \u624B\u7ED8\u6216\u957F\u6BB5\u6587\u5B57\u786C\u63CF\u8FF0\uFF1B\u56FE\u7528\u6765\u66FF\u4EE3\u6587\u5B57\uFF0C\u753B\u4E86\u56FE\u5C31\u5220\u6389\u91CD\u590D\u63CF\u8FF0\uFF1B\u4E00\u6B65\u6D41\u7A0B\u4E0D\u5FC5\u753B\u56FE\u3002
684
+ - \u514B\u5236\u5206\u5272\u7EBF\uFF08\u4EC5\u5927\u4E3B\u9898\u5207\u6362\u6216\u7ED3\u8BBA\u524D\uFF0C\u524D\u540E\u7559\u7A7A\u884C\uFF09\uFF1B\u8DEF\u5F84\u3001\u547D\u4EE4\u4E0E\u53C2\u6570\u7528\u53CD\u5F15\u53F7 \` \` \u5305\u88F9\uFF1B\u4EE3\u7801\u5757\u6807\u660E\u8BED\u8A00\u4E14\u907F\u514D\u6A2A\u5411\u8D85\u957F\u884C\uFF1B\u514B\u5236 Emoji\u3002`;
685
+ }
686
+ return `--- \u54CD\u5E94\u5C55\u793A\u6307\u5357\uFF08\u5BBD\u5C4F / \u684C\u9762\u7AEF\uFF09 ---
687
+ \uFF08\u4EE5\u4E0B\u6392\u7248\u5EFA\u8BAE\u5728\u300C\u7BC7\u5E45\u4E0E\u5B8C\u6574\u6027\u300D\u300C\u884C\u52A8\u4E0E\u63D0\u9192\u300D\u300C\u6392\u7248\u4F18\u5148\u7EA7\u300D\u7684\u8FB9\u754C\u5185\u6267\u884C\u3002\uFF09
688
+ \u5F53\u524D\u5904\u4E8E\u5927\u5C4F\u89C6\u56FE\uFF1A\u5185\u5BB9\u786E\u5B9E\u5305\u542B\u591A\u4E2A\u6A21\u5757\u65F6\u624D\u7528\u4E8C\u7EA7/\u4E09\u7EA7\u6807\u9898\u5212\u5206\u3001\u5448\u73B0\u5168\u666F\u7ED3\u6784\uFF0C\u666E\u901A\u95EE\u7B54\u4E0D\u5F3A\u884C\u52A0\u6807\u9898\uFF1B\u8981\u70B9\u5C42\u6B21\u6E05\u6670\uFF0C\u6BB5\u843D 2-4 \u53E5\u5E76\u7559\u7A7A\u884C\uFF0C\u76F4\u5954\u4E3B\u9898\u3002
689
+ - \u5217\u8868\u9879\u7528\u300C- **\u6838\u5FC3\u8BCD**\uFF1A\u8BF4\u660E\u300D\uFF1B\u5D4C\u5957\u6700\u591A 2 \u5C42\uFF0C\u5B50\u5217\u8868\u7F29\u8FDB 2 \u7A7A\u683C\uFF1B\u5E76\u5217\u7528\u65E0\u5E8F\u5217\u8868\uFF0C\u6B65\u9AA4\u7528\u6709\u5E8F\u5217\u8868\u3002
690
+ - **\u8868\u683C\u4E0E\u5BF9\u6BD4**\uFF1A\u5BBD\u5C4F\u4E0B\u53EF\u9002\u5EA6\u4F7F\u7528 Markdown \u591A\u5217\u8868\u683C\u505A\u65B9\u6848\u5BF9\u6BD4\u3001\u53C2\u6570\u6C47\u603B\u6216\u77E9\u9635\u5206\u6790\u3002
691
+ - **\u56FE\u8868\u8868\u8FBE**\uFF1A\u6D41\u7A0B\u3001\u65F6\u5E8F\u3001\u72B6\u6001\u8FC1\u79FB\u3001\u7C7B/\u5B9E\u4F53\u5173\u7CFB\u7B49\u7ED3\u6784\u5316\u5185\u5BB9\u7528 \`\`\`mermaid \u4EE3\u7801\u5757\uFF08\u652F\u6301\u7684\u5BA2\u6237\u7AEF\u4F1A\u6E32\u67D3\u4E3A\u56FE\uFF09\uFF0C\u6BD4\u957F\u6BB5\u6587\u5B57\u66F4\u6E05\u695A\uFF1B\u56FE\u7528\u6765\u66FF\u4EE3\u6587\u5B57\uFF0C\u753B\u4E86\u56FE\u5C31\u5220\u6389\u91CD\u590D\u63CF\u8FF0\uFF1B\u7B80\u5355\u5185\u5BB9\u4E0D\u5FC5\u753B\u56FE\u3002
692
+ - **\u4EA4\u4E92\u5236\u54C1**\uFF1A\u53EA\u6709\u5F53\u7ED3\u6784\u5FC5\u987B\u9760\u4EA4\u4E92\u624D\u80FD\u7406\u89E3\uFF08\u8C03\u53C2\u3001\u5206\u6B65\u6F14\u793A\u3001\u591A\u7EF4\u5BF9\u6BD4\uFF09\uFF0C\u4E14\u7528\u6237\u8981\u6C42\u6216\u5B83\u662F\u51B3\u7B56\u5173\u952E\u65F6\uFF0C\u624D\u6309 show-me skill \u4EA4\u4ED8\u4E00\u6B21\u6027\u5236\u54C1\uFF1B\u5176\u4F59\u60C5\u51B5\u7528\u6587\u5B57\u6216\u56FE\u3002
693
+ - \u53EF\u5C55\u793A\u66F4\u5B8C\u6574\u7684\u4EE3\u7801\u4E0A\u4E0B\u6587\u4E0E\u591A\u6B65\u6267\u884C\u793A\u4F8B\uFF1B\u8DEF\u5F84\u3001\u547D\u4EE4\u4E0E\u53C2\u6570\u7528\u53CD\u5F15\u53F7 \` \` \u5305\u88F9\uFF0C\u4EE3\u7801\u5757\u6807\u660E\u8BED\u8A00\uFF1B\u514B\u5236\u5206\u5272\u7EBF\u4E0E Emoji\u3002`;
694
+ };
695
+ var resolveResponseGuidelines = (viewport) => ({
696
+ behavior: RESPONSE_BEHAVIOR_GUIDELINES,
697
+ presentation: viewport === "wide" ? buildResponsePresentationGuidelines(false) : viewport === "narrow" ? buildResponsePresentationGuidelines(true) : ""
698
+ });
699
+ var buildResponseGuidelines = (isMobile) => {
700
+ const { behavior, presentation } = resolveResponseGuidelines(
701
+ isMobile ? "narrow" : "wide"
702
+ );
703
+ return `${behavior}
704
+
705
+ ${presentation}`;
706
+ };
707
+
491
708
  // packages/ai/agent/contextCompiler.ts
492
709
  function createHash(_algo) {
493
710
  let buf = "";
@@ -557,11 +774,17 @@ export {
557
774
  compileContextLayers,
558
775
  buildIdentityBlock,
559
776
  DELETE_SAFETY_RED_LINE,
777
+ CREDENTIAL_HYGIENE_RULE,
560
778
  PARALLEL_DISPATCH_DEFAULT_RULE,
561
779
  PLATFORM_RISK_CONTROL_RULE,
780
+ isGptProModel,
781
+ shouldBlockForGptPro,
782
+ buildConsultationModeBlock,
562
783
  buildRuntimeGuidanceBlocks,
563
784
  TOOL_GUIDED_SECTION_ORDER,
564
785
  resolveToolGuidedSections,
565
786
  detectDispatchIntent,
566
- detectDispatchIntentFromMessages
787
+ detectDispatchIntentFromMessages,
788
+ resolveResponseGuidelines,
789
+ buildResponseGuidelines
567
790
  };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  toolRegistry
3
- } from "./chunk-PPU323UE.js";
3
+ } from "./chunk-W2NNEHHW.js";
4
4
  import {
5
5
  runtime_default
6
- } from "./chunk-PFBIXTFB.js";
6
+ } from "./chunk-QSKN3E7Q.js";
7
7
  import {
8
8
  canonicalizeToolNames
9
9
  } from "./chunk-5EBLANFT.js";
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-KUG52IAP.js";
13
13
  import {
14
14
  isNoloHostedProvider
15
- } from "./chunk-CHCS6XPJ.js";
15
+ } from "./chunk-CGFNDIKK.js";
16
16
  import {
17
17
  asTrimmedLowercaseString
18
18
  } from "./chunk-QSJ3HFEF.js";
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-CF7PE763.js";
10
10
  import {
11
11
  loadProfileConfig
12
- } from "./chunk-TNIX77YM.js";
12
+ } from "./chunk-R5GO3YZP.js";
13
13
  import {
14
14
  resolveDefaultSpawn
15
15
  } from "./chunk-Y6ROFCZO.js";
@@ -2,7 +2,7 @@ import {
2
2
  deleteDialog,
3
3
  runtime_default,
4
4
  toast
5
- } from "./chunk-PFBIXTFB.js";
5
+ } from "./chunk-QSKN3E7Q.js";
6
6
  import {
7
7
  getCurrentSpaceId,
8
8
  getCurrentSpaceIdRaw,
@@ -19,7 +19,7 @@ import {
19
19
  addContentAction,
20
20
  checkSpaceMembership,
21
21
  localSpaceAuthorityPatchStamp
22
- } from "./chunk-EDX5XSJM.js";
22
+ } from "./chunk-M2P3OGXZ.js";
23
23
  import {
24
24
  createSpaceKey,
25
25
  normalizeSpaceId
@@ -32,7 +32,7 @@ import {
32
32
  uploadFileAction,
33
33
  upsertSSREntity,
34
34
  write
35
- } from "./chunk-74RAWNQN.js";
35
+ } from "./chunk-ZVQHBIWV.js";
36
36
  import {
37
37
  resolveFileCategory
38
38
  } from "./chunk-3PVYUPXK.js";
@@ -43,22 +43,25 @@ import {
43
43
  resolveReplicationServers,
44
44
  scheduleDeleteReplication,
45
45
  scheduleWriteReplication
46
- } from "./chunk-4YRTZIVN.js";
46
+ } from "./chunk-2SGAI64X.js";
47
47
  import {
48
48
  createAsyncThunk
49
- } from "./chunk-IJERIUXS.js";
49
+ } from "./chunk-WRCZXJ4N.js";
50
+ import {
51
+ getIsDesktopApp
52
+ } from "./chunk-6Q7UTJKR.js";
50
53
  import {
51
54
  createClientLogger
52
55
  } from "./chunk-QQ56R7KS.js";
53
56
  import {
54
57
  selectIdentityUserId
55
- } from "./chunk-SEJ5OS6F.js";
58
+ } from "./chunk-PXYBUFDB.js";
56
59
  import {
57
60
  buildTombstoneRecord
58
61
  } from "./chunk-D2MDMY2M.js";
59
62
  import {
60
63
  isSystemAdmin
61
- } from "./chunk-GKXCHNTE.js";
64
+ } from "./chunk-Y6ORVLSS.js";
62
65
  import {
63
66
  asRecordOrEmpty
64
67
  } from "./chunk-KX6YBIHG.js";
@@ -4509,6 +4512,7 @@ var fetchTableRowsFromServer = async (server, tenantId, tableId, headers, fetchI
4509
4512
  const res = await fetchImpl(`${server}/rpc/listTableRows`, {
4510
4513
  method: "POST",
4511
4514
  headers,
4515
+ credentials: "include",
4512
4516
  body: JSON.stringify({
4513
4517
  tenantId,
4514
4518
  tableId,
@@ -4619,12 +4623,14 @@ var fetchAndCacheTableRows = async ({
4619
4623
  const headers = {
4620
4624
  "Content-Type": "application/json"
4621
4625
  };
4622
- if (token) {
4623
- headers.Authorization = `Bearer ${token}`;
4626
+ if (typeof token === "string" && token.trim()) {
4627
+ headers.Authorization = `Bearer ${token.trim()}`;
4624
4628
  }
4629
+ const isWebBrowser = typeof window !== "undefined" && !getIsDesktopApp();
4630
+ const serversToQuery = isWebBrowser && remoteServers.length > 0 ? [remoteServers[0]] : remoteServers;
4625
4631
  const localRows = await loadLocalTableRows(db, tenantId, tableId);
4626
4632
  const remoteResults = await Promise.allSettled(
4627
- remoteServers.map(
4633
+ serversToQuery.map(
4628
4634
  (server) => fetchTableRowsFromServer(server, tenantId, tableId, headers, fetchImpl)
4629
4635
  )
4630
4636
  );
@@ -4637,7 +4643,7 @@ var fetchAndCacheTableRows = async ({
4637
4643
  );
4638
4644
  throw new Error(firstFailure?.reason?.message || "\u52A0\u8F7D\u8868\u884C\u5931\u8D25");
4639
4645
  }
4640
- const allRemoteSnapshotsComplete = remoteServers.length > 0 && remoteResults.length === remoteServers.length && fulfilledRemoteSnapshots.length === remoteServers.length && fulfilledRemoteSnapshots.every((snapshot) => snapshot.complete);
4646
+ const allRemoteSnapshotsComplete = serversToQuery.length > 0 && remoteResults.length === serversToQuery.length && fulfilledRemoteSnapshots.length === serversToQuery.length && fulfilledRemoteSnapshots.every((snapshot) => snapshot.complete);
4641
4647
  const localRowsByKey = new Map(
4642
4648
  localRows.filter((row) => typeof row?.dbKey === "string" && row.dbKey.length > 0).map((row) => [row.dbKey, row])
4643
4649
  );
@@ -5822,11 +5828,11 @@ var ENTITY_DELETE_STRATEGIES = {
5822
5828
  await dispatch(deleteTable({ dbKey: key })).unwrap();
5823
5829
  },
5824
5830
  file: async (key, { thunkAPI }) => {
5825
- const { deleteFileAction } = await import("./deleteFile-6JWDDRVP.js");
5831
+ const { deleteFileAction } = await import("./deleteFile-KYWEMNFX.js");
5826
5832
  await deleteFileAction(key, thunkAPI);
5827
5833
  },
5828
5834
  image: async (key, { thunkAPI }) => {
5829
- const { deleteFileAction } = await import("./deleteFile-6JWDDRVP.js");
5835
+ const { deleteFileAction } = await import("./deleteFile-KYWEMNFX.js");
5830
5836
  await deleteFileAction(key, thunkAPI);
5831
5837
  },
5832
5838
  agent: async (key, { dispatch, userId, sourceServerOrigin }) => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getModelContextWindow
3
- } from "./chunk-4PXHOOFA.js";
3
+ } from "./chunk-2MTE2PEH.js";
4
4
  import {
5
5
  isRecord
6
6
  } from "./chunk-KUG52IAP.js";
@@ -11,7 +11,7 @@ import {
11
11
  PLATFORM_HOSTED_KIMI_K3_MODEL,
12
12
  isFireworksKimiModel,
13
13
  isNoloHostedProvider
14
- } from "./chunk-CHCS6XPJ.js";
14
+ } from "./chunk-CGFNDIKK.js";
15
15
  import {
16
16
  asTrimmedLowercaseString
17
17
  } from "./chunk-QSJ3HFEF.js";
@@ -2,7 +2,7 @@ import {
2
2
  DEVIN_CONNECT_URL,
3
3
  parseSseDataLineJson,
4
4
  parseSseDataLineObject
5
- } from "./chunk-GQV5KHJU.js";
5
+ } from "./chunk-3C2QLERX.js";
6
6
  import {
7
7
  applyChatCompletionDelta,
8
8
  applyResponsesToolEvent,
@@ -11,7 +11,7 @@ import {
11
11
  flushChatCompletionStream,
12
12
  providerHttpFailure,
13
13
  throwIfChatCompletionStreamFailed
14
- } from "./chunk-DYYMIUN4.js";
14
+ } from "./chunk-L6EQV5OC.js";
15
15
  import {
16
16
  readSseFrames
17
17
  } from "./chunk-HNUWUO75.js";
@@ -26,13 +26,13 @@ import {
26
26
  hasImageInRuntimeMessages,
27
27
  resolveAgentContextWindow,
28
28
  stripImagePartsFromMessages
29
- } from "./chunk-HSJPKBLC.js";
29
+ } from "./chunk-ANJTRG52.js";
30
30
  import {
31
31
  clipToolText,
32
32
  resolveAgentImageInputSupport,
33
33
  resolveHistoricalToolContentCap,
34
34
  resolveToolOutputProfile
35
- } from "./chunk-GCKHQECX.js";
35
+ } from "./chunk-IYBIRCQV.js";
36
36
  import {
37
37
  applyShapingCounts,
38
38
  attachProjectionFacts,
@@ -52,18 +52,21 @@ import {
52
52
  finalizeAccumulatedToolCalls
53
53
  } from "./chunk-56GBUMO5.js";
54
54
  import {
55
+ CREDENTIAL_HYGIENE_RULE,
55
56
  DELETE_SAFETY_RED_LINE,
56
57
  PARALLEL_DISPATCH_DEFAULT_RULE,
57
58
  PLATFORM_RISK_CONTROL_RULE,
58
59
  TOOL_GUIDED_SECTION_ORDER,
60
+ buildConsultationModeBlock,
59
61
  buildIdentityBlock,
60
62
  buildRuntimeGuidanceBlocks,
61
63
  detectDispatchIntent,
62
64
  detectDispatchIntentFromMessages,
63
65
  estimateContextTokens,
64
66
  hashStablePrefixContent,
67
+ resolveResponseGuidelines,
65
68
  resolveToolGuidedSections
66
- } from "./chunk-WD4XYDYC.js";
69
+ } from "./chunk-3WIXU4XO.js";
67
70
  import {
68
71
  classifyUnparsableToolArgs,
69
72
  collectStablePromptPrefix,
@@ -87,7 +90,7 @@ import {
87
90
  toOpenAiCompatibleMessages,
88
91
  toResponsesTools,
89
92
  transferDowngradedToolTurnOrigin
90
- } from "./chunk-HL3O3PCQ.js";
93
+ } from "./chunk-6TF64IF2.js";
91
94
  import {
92
95
  BRIDGE_STREAM_MAX_CHARS,
93
96
  DEFAULT_READ_DIALOG_MAX_RESPONSE_CHARS,
@@ -116,7 +119,7 @@ import {
116
119
  resolveEmptyAssistantFallbackMessage,
117
120
  resolveEmptyAssistantOutcome,
118
121
  resolveTruncatedReasoningTailLog
119
- } from "./chunk-DTODXBHK.js";
122
+ } from "./chunk-ZWG3C7VI.js";
120
123
  import {
121
124
  COMPACTION_SUMMARY_SCHEMA_VERSION,
122
125
  COMPACTION_SUMMARY_SYSTEM_PROMPT,
@@ -139,7 +142,7 @@ import {
139
142
  sha256Hex,
140
143
  truncateToolOutputForContext,
141
144
  withProviderCallTimingFields
142
- } from "./chunk-4PXHOOFA.js";
145
+ } from "./chunk-2MTE2PEH.js";
143
146
  import {
144
147
  clipCompactText
145
148
  } from "./chunk-5MMAK75Q.js";
@@ -172,7 +175,7 @@ import {
172
175
  import {
173
176
  buildProviderAuthHeaders,
174
177
  buildProviderExecutionPlan
175
- } from "./chunk-K2AER7RX.js";
178
+ } from "./chunk-SUKSWFLP.js";
176
179
  import {
177
180
  isRecord
178
181
  } from "./chunk-KUG52IAP.js";
@@ -15098,7 +15101,7 @@ async function runWorkspaceCommand(args2) {
15098
15101
  proc.stdin.write(args2.stdin);
15099
15102
  proc.stdin.end();
15100
15103
  }
15101
- const label = deriveLabel(args2.command.join(" "));
15104
+ const label = args2.label?.trim() || deriveLabel(args2.command.join(" "));
15102
15105
  const registry2 = getProcessRegistry();
15103
15106
  if (typeof proc.pid === "number") {
15104
15107
  registry2.add({
@@ -15343,6 +15346,10 @@ function buildExecShellToolDefinition(toolName = "execShell") {
15343
15346
  background: {
15344
15347
  type: "boolean",
15345
15348
  description: "Immediately detach this command into a tracked background task (no 120s synchronous wait): returns {detached: true, taskId}, and on completion the platform resumes this conversation with a bounded result capsule (exitCode, duration, stdout/stderr tail). Default false. Use for finite jobs (tests, builds, batch) whose result you need later; NOT for dev servers/watchers \u2014 use launchProcess for those."
15349
+ },
15350
+ label: {
15351
+ type: "string",
15352
+ description: "Optional human-readable label for the resulting background task, shown in the task list and completion notices. Defaults to the command's last token, which is unhelpful for pipelines (e.g. '| tail -25' yields '-25')."
15346
15353
  }
15347
15354
  }
15348
15355
  }
@@ -15391,7 +15398,8 @@ function normalizeExecShellInput(input) {
15391
15398
  ...login !== void 0 ? { login } : {},
15392
15399
  ...activity ? { activity } : {},
15393
15400
  ...record2.input !== void 0 ? { input: record2.input } : {},
15394
- ...background ? { background: true } : {}
15401
+ ...background ? { background: true } : {},
15402
+ ...typeof record2.label === "string" && record2.label.trim() ? { label: record2.label.trim() } : {}
15395
15403
  };
15396
15404
  }
15397
15405
  throw new Error("execShell requires a non-empty command.");
@@ -15456,6 +15464,7 @@ var execShellCapability = {
15456
15464
  abortSignal: ctx.abortSignal,
15457
15465
  detachMs: background ? 0 : isImmediateDetachShellCommand({ command }) ? 0 : ctx.detachMs,
15458
15466
  stdin: typeof normalized.input === "string" ? normalized.input : void 0,
15467
+ label: typeof normalized.label === "string" ? normalized.label : void 0,
15459
15468
  // Ownership of the turn that invoked this command: an auto-detached
15460
15469
  // command keeps its parent dialog so its terminal can resume that
15461
15470
  // conversation (see processOwnership.ts). Absent ctx.owner = unowned.
@@ -18456,7 +18465,11 @@ async function executeToolCall(args2) {
18456
18465
  ...userInputText ? { userInput: userInputText } : {},
18457
18466
  ...input.runtimeContext ? { runtimeContext: input.runtimeContext } : {},
18458
18467
  ...args2.runToolNames ? { runToolNames: args2.runToolNames } : {},
18459
- ...input.abortSignal ? { abortSignal: input.abortSignal } : {}
18468
+ ...input.abortSignal ? { abortSignal: input.abortSignal } : {},
18469
+ // 定档信号:来源只由 turn 输入推导,不让模型/参数层参与。
18470
+ // 三级判据见 plan §10——后台运行优先于子 run(后台派发的子 run 仍是
18471
+ // 无人值守的,按 automation 报更保守)。
18472
+ origin: input.background ? "automation" : input.runKind === "subtask" ? "agent" : "chat"
18460
18473
  }, {
18461
18474
  ...input.abortSignal ? { abortSignal: input.abortSignal } : {},
18462
18475
  ...input.runtimeContext ? { runtimeContext: input.runtimeContext } : {}
@@ -19749,17 +19762,36 @@ async function runLocalAgentTurn(input) {
19749
19762
  input.contextBlocks,
19750
19763
  input.contextBlockScopes
19751
19764
  );
19765
+ const responseGuidelines = resolveResponseGuidelines(
19766
+ input.responseViewport ?? "unknown"
19767
+ );
19768
+ const responseGuidelineScopes = [
19769
+ { content: responseGuidelines.behavior, cacheScope: "session" },
19770
+ ...responseGuidelines.presentation.trim().length > 0 ? [
19771
+ {
19772
+ content: responseGuidelines.presentation,
19773
+ cacheScope: "session"
19774
+ }
19775
+ ] : []
19776
+ ];
19752
19777
  const mergedContextBlockScopes = [
19753
19778
  // 删除安全红线:系统层最高优先级约束,位于所有块之前(含身份信息块),
19754
19779
  // owner 要求常驻「根本提示词」的最顶部(2026-09-26 批量误删事故)。
19755
19780
  { content: DELETE_SAFETY_RED_LINE, cacheScope: "session" },
19781
+ // 凭据纪律:与红线同为系统层固定块,紧随其后(四条装配线同源)。
19782
+ { content: CREDENTIAL_HYGIENE_RULE, cacheScope: "session" },
19756
19783
  // 并行是默认:系统层固定块,紧随红线(localLoop 无 static 作用域,用 session 占位,
19757
19784
  // 「最顶」由数组首位保证——与红线同一约定)。
19758
19785
  { content: PARALLEL_DISPATCH_DEFAULT_RULE, cacheScope: "session" },
19759
19786
  // 平台风控纪律:无条件系统层块,沿用 session 占位约定。
19760
19787
  { content: PLATFORM_RISK_CONTROL_RULE, cacheScope: "session" },
19788
+ { content: buildConsultationModeBlock(), cacheScope: "session" },
19761
19789
  { content: identityBlock, cacheScope: "session" },
19762
19790
  ...guidanceScopes,
19791
+ // 回复行为准则:local 线(CLI 非交互 / 桌面 / TUI)的唯一注入边界。
19792
+ // 行为段恒注入;排版段只在宿主声明了可确认的展示能力时追加一份
19793
+ // (unknown = 拿不到视口信息,不得猜成宽屏或窄屏)。两块同属 session scope。
19794
+ ...responseGuidelineScopes,
19763
19795
  ...callerScopes
19764
19796
  ];
19765
19797
  loopTiming.mark("buildContextBlocks", 0);
@@ -21669,7 +21701,7 @@ function buildLoadSkillExecutor(args2) {
21669
21701
  const { resolveSkillByName } = await import("./skillDiscovery-QC35EQY4.js");
21670
21702
  const resolved = resolveSkillByName(args2.cwd, name);
21671
21703
  if (!resolved) {
21672
- const { resolveBuiltinSkillByName } = await import("./builtinSkillRegistry-TDQ6JB2E.js");
21704
+ const { resolveBuiltinSkillByName } = await import("./builtinSkillRegistry-H3AY27TR.js");
21673
21705
  const builtin = resolveBuiltinSkillByName(name);
21674
21706
  if (builtin) {
21675
21707
  return {
@@ -10,9 +10,7 @@ var OAUTH_PROVIDER_REFS = [
10
10
  "antigravity",
11
11
  "claude",
12
12
  "cursor",
13
- "devin",
14
- "workbuddy",
15
- "workbuddy-ai"
13
+ "devin"
16
14
  ];
17
15
  var METERED_API_KEY_REF_PREFIX = "api-key:";
18
16
  var normalizeRef = (ref) => typeof ref === "string" ? ref.trim().toLowerCase() : "";