nolo-cli 0.83.0-alpha.2 → 0.83.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 (161) hide show
  1. package/README.md +2 -2
  2. package/{_executeModel-TRYFRXDJ.js → _executeModel-LUNEV235.js} +48 -48
  3. package/{action-D22U6CTH.js → action-YVYQEAAV.js} +11 -11
  4. package/{addContentAction-XAPUTGL4.js → addContentAction-O7R66HEX.js} +9 -9
  5. package/{addDialogAgentAction-M7VLLBZM.js → addDialogAgentAction-74OA7KYP.js} +8 -8
  6. package/{agentDeleteCommand-YZ74ZWP5.js → agentDeleteCommand-2YAHAZFJ.js} +31 -30
  7. package/{agentEmailCommands-RMTYKFBY.js → agentEmailCommands-G6A7IRPQ.js} +67 -64
  8. package/{agentGrantCommands-R3VQEZJR.js → agentGrantCommands-M3XFO6EN.js} +2 -2
  9. package/{agentListCommands-5WZ7MGH4.js → agentListCommands-KMS675GZ.js} +40 -33
  10. package/{agentMachineCommands-U7QFPT5D.js → agentMachineCommands-W2SMNSQ3.js} +31 -30
  11. package/{agentProviderCommands-65ZC2WB4.js → agentProviderCommands-GNPTL5XR.js} +87 -0
  12. package/{agentPullCommand-N7L2CT7L.js → agentPullCommand-O5MPVJ5E.js} +3 -3
  13. package/agentRecordCommands-D7BRMFNI.js +128 -0
  14. package/{agentRunCommand-ZXEAWYLV.js → agentRunCommand-VL6MMEUB.js} +65 -62
  15. package/{agentRunControl-T44MESII.js → agentRunControl-AVJR4JW4.js} +2 -2
  16. package/{agentRuntimeLocal-PQEIUOJU.js → agentRuntimeLocal-VXZSDIGT.js} +27 -26
  17. package/{agentSlice-Q5XOM2PN.js → agentSlice-5YJHUO47.js} +10 -10
  18. package/{appDeleteCommands-UVLHOLVH.js → appDeleteCommands-32MHLR4L.js} +31 -30
  19. package/{appDeployCommands-NTKUPWIJ.js → appDeployCommands-WCQOUSOB.js} +31 -30
  20. package/{appDeployStatusCommands-SXJHAM6D.js → appDeployStatusCommands-6QKB7DYN.js} +31 -30
  21. package/{appGetCommands-MAV3RF4X.js → appGetCommands-SFAPP5PB.js} +31 -30
  22. package/{appListCommands-7HWANPQU.js → appListCommands-EKUBDRUO.js} +31 -30
  23. package/{authCommand-7N2G6MXP.js → authCommand-F4EFRRX6.js} +89 -24
  24. package/{authCommands-ILTBI6JV.js → authCommands-RGOGCPP6.js} +4 -5
  25. package/builtinSkillRegistry-FUAVTRVZ.js +33 -0
  26. package/{chatQueueReduxAdapter-WICMMQZT.js → chatQueueReduxAdapter-PQMRR2PK.js} +24 -24
  27. package/{chromeCommands-VOIRNJBL.js → chromeCommands-FZYAU75D.js} +1 -1
  28. package/{chromeOpsCommands-M7DPCX2T.js → chromeOpsCommands-62P2Q2YB.js} +31 -1
  29. package/{chunk-C3FZR5EC.js → chunk-2F7RJC6L.js} +1 -1
  30. package/{chunk-HQUORJTM.js → chunk-3BMYXEUW.js} +1 -1
  31. package/{chunk-3QPYFHAH.js → chunk-3DII57IT.js} +1 -1
  32. package/{chunk-NTW5GWDM.js → chunk-3VNWWVKB.js} +2 -0
  33. package/{chunk-DWUCB2A3.js → chunk-42V6BK2E.js} +1 -1
  34. package/{chunk-5G3IP3R6.js → chunk-45C5ER5U.js} +10 -10
  35. package/{chunk-DSRXPQWA.js → chunk-4OEFYTWL.js} +43 -43
  36. package/{chunk-6RUOYAPM.js → chunk-4S5QUMJP.js} +7 -7
  37. package/{chunk-GBPZKFYK.js → chunk-53HEEOTT.js} +4 -4
  38. package/{chunk-5Q5LYRJH.js → chunk-5FBTLSFG.js} +155 -795
  39. package/{chunk-KIS76A2P.js → chunk-5H7KJX7J.js} +38 -4
  40. package/{chunk-5XTOKQLW.js → chunk-5UTFL4QJ.js} +6 -2
  41. package/chunk-5ZUL4CUO.js +10 -0
  42. package/{chunk-E6RGHPDR.js → chunk-6D6VBVEW.js} +4 -6
  43. package/{chunk-KVDUCO4Q.js → chunk-6IG4XSS6.js} +16 -12
  44. package/{chunk-CMH2SYHX.js → chunk-6OZ36FXI.js} +2 -2
  45. package/{chunk-5BVAAVIF.js → chunk-6Q33GUCC.js} +1 -1
  46. package/{chunk-2OVE3GVB.js → chunk-6VFARHZW.js} +581 -298
  47. package/{chunk-BYEJ7K2Z.js → chunk-7S4YWN7P.js} +1 -1
  48. package/{chunk-SREASRV5.js → chunk-ABQYVJBJ.js} +1 -1
  49. package/chunk-ACTMNVHM.js +93 -0
  50. package/{chunk-NRALD3CC.js → chunk-AEOE4Z6Q.js} +54 -10
  51. package/{chunk-XWNRAIUL.js → chunk-AFUORTY4.js} +6 -16
  52. package/chunk-BNGW5ASC.js +344 -0
  53. package/{chunk-SZLVDREM.js → chunk-BP4XNZRM.js} +3 -3
  54. package/{chunk-JZYXSXMZ.js → chunk-BTI7PJDX.js} +15 -15
  55. package/{chunk-2KDR4CWE.js → chunk-BYMV6QZG.js} +24 -1
  56. package/{chunk-GCJ3IS5M.js → chunk-DHDMC6FO.js} +175 -6
  57. package/{chunk-E36HZARC.js → chunk-DNCEALKX.js} +93 -17
  58. package/{chunk-N5KGQ5AD.js → chunk-DRGSDQBL.js} +3 -3
  59. package/{chunk-D6XYLSOS.js → chunk-ETI2NYVF.js} +1 -1
  60. package/{chunk-EXMHJN7C.js → chunk-EYAQT56M.js} +4 -3
  61. package/{chunk-CJCJF5XB.js → chunk-FDTR4QJ6.js} +4 -2
  62. package/{chunk-JPVNC5B2.js → chunk-G2O6V3HJ.js} +3 -3
  63. package/{chunk-WL2RKIBF.js → chunk-GEPUP7OO.js} +1 -1
  64. package/{chunk-PYXL2CJL.js → chunk-GPCZ7UXG.js} +1 -1
  65. package/{chunk-K7AG465Q.js → chunk-GQBOR3G6.js} +4 -2
  66. package/{chunk-YFADVSZE.js → chunk-H62HCIUP.js} +6 -6
  67. package/{chunk-PZM3EENV.js → chunk-HJUYAD4A.js} +1 -1
  68. package/{chunk-3JQ2NRYU.js → chunk-HVURBGF3.js} +4 -4
  69. package/{chunk-HH65VA5U.js → chunk-I3TQJXQ7.js} +109 -6
  70. package/{chunk-ZVN6I33J.js → chunk-IIVGDG4I.js} +6 -5
  71. package/{chunk-UDQWGU7F.js → chunk-J4MOO56S.js} +1 -1
  72. package/{chunk-KC5FAHVS.js → chunk-JEDZAO7L.js} +1 -1
  73. package/{chunk-6XIE5ZGI.js → chunk-JPGCXHNM.js} +1 -1
  74. package/chunk-JRQFUXY7.js +1625 -0
  75. package/chunk-KQ4ONNQD.js +677 -0
  76. package/{chunk-CPSZJBLK.js → chunk-L5UXH3B2.js} +105 -26
  77. package/{chunk-RXX4GDIH.js → chunk-LS2ZANRJ.js} +1 -1
  78. package/{chunk-BJIRLHJR.js → chunk-M2EJHDJP.js} +4 -0
  79. package/{chunk-EVBFYPDC.js → chunk-MC4XLIJ7.js} +6 -2
  80. package/{chunk-DUJWWUGV.js → chunk-NA35QHCF.js} +1 -1
  81. package/{chunk-FNGAF7C4.js → chunk-OEVAY4J6.js} +137 -12
  82. package/{chunk-UJ63UXGE.js → chunk-OIVSQH2O.js} +1006 -801
  83. package/{chunk-LZIMZZYT.js → chunk-ORYWEJO4.js} +13 -15
  84. package/{chunk-LKSDMMY2.js → chunk-Q2XN3EOZ.js} +40 -30
  85. package/{chunk-AETZ7AD6.js → chunk-Q554LLSI.js} +1 -1
  86. package/{chunk-FMODTASJ.js → chunk-Q5FJJ6XI.js} +1 -7
  87. package/{chunk-AJHEFRGJ.js → chunk-Q67DOFOO.js} +214 -5
  88. package/{chunk-UZ6XXCVR.js → chunk-QDSINZM3.js} +15 -2
  89. package/{chunk-BHXK3KPV.js → chunk-QVKRR2SS.js} +2314 -66
  90. package/{chunk-BNQK6UPC.js → chunk-RFCKMYDK.js} +11 -173
  91. package/{chunk-YWG6EMH3.js → chunk-RG6JBBX5.js} +10 -6
  92. package/{chunk-QCZX4FTW.js → chunk-SH43IESU.js} +173 -15
  93. package/{chunk-LLJM5TW2.js → chunk-SSDAAEC2.js} +1235 -59
  94. package/{chunk-SPAQ4PVV.js → chunk-SV5IJK6K.js} +1 -1
  95. package/{chunk-BJCWNHVU.js → chunk-TOP2VXOR.js} +2 -2
  96. package/{chunk-4EJ5QYB5.js → chunk-UKZDAFYT.js} +1 -1
  97. package/{chunk-PGSKWZCB.js → chunk-UZGQNTVW.js} +1 -1
  98. package/{chunk-ZZCJUXUI.js → chunk-V4MJDUSR.js} +2 -2
  99. package/{chunk-JYYZCK2Z.js → chunk-V7E4PXQD.js} +1 -1
  100. package/{chunk-OZX2IPKM.js → chunk-VLTIYV3X.js} +1 -1
  101. package/{chunk-NHRQCXIQ.js → chunk-VMFTFOWF.js} +13 -3
  102. package/{chunk-5J7W2VWW.js → chunk-WV42OMV7.js} +6 -265
  103. package/{chunk-EH7BNTCR.js → chunk-X6DN5HBD.js} +6 -6
  104. package/{chunk-3447FUKM.js → chunk-YFE4A4O7.js} +731 -90
  105. package/{chunk-BOYUESO7.js → chunk-Z77CRGTW.js} +1 -1
  106. package/{chunk-QC5LGHYP.js → chunk-ZCYXJSTU.js} +10 -5
  107. package/{contentThunks-A2ZG3SW6.js → contentThunks-GJV22WVZ.js} +25 -25
  108. package/{cooldownCommands-BSCH2W7P.js → cooldownCommands-REAWYVTY.js} +2 -2
  109. package/{createAgentAutomationAction-QFQQPG35.js → createAgentAutomationAction-6V25TZEO.js} +25 -25
  110. package/{createDialogAction-WI73R5EQ.js → createDialogAction-SX36BGSX.js} +28 -28
  111. package/{createPageAction-XN237WPJ.js → createPageAction-IR4BGJSI.js} +26 -26
  112. package/{dbSlice-GKGGFNOB.js → dbSlice-XVWBAGYN.js} +8 -8
  113. package/{deleteFile-LWSR674W.js → deleteFile-YG6QMJLU.js} +3 -3
  114. package/{dialogCommands-LWKIIWKC.js → dialogCommands-5J56DFWN.js} +35 -32
  115. package/{dialogSlice-56G4Q4RU.js → dialogSlice-UNX2FAPZ.js} +24 -24
  116. package/{docCreateCommands-FC5IRW2I.js → docCreateCommands-KYI2DC2U.js} +32 -31
  117. package/{docDeleteCommands-GUGLMPIP.js → docDeleteCommands-67REUSRY.js} +33 -32
  118. package/{docReadCommands-JVMVMNQZ.js → docReadCommands-HOSVSBDJ.js} +32 -31
  119. package/{docStore-PZSZWXX3.js → docStore-JWVG5NDO.js} +9 -9
  120. package/{docUpdateCommands-XZRIQPK4.js → docUpdateCommands-EMGCSMXY.js} +32 -31
  121. package/{fetchMessages-DRABNDPZ.js → fetchMessages-EIU7UFFK.js} +3 -4
  122. package/{getPricing-HRMSOF3E.js → getPricing-LUSEABA6.js} +4 -4
  123. package/{handleSendMessageAction-MHKC4R3Q.js → handleSendMessageAction-B75UOJKF.js} +24 -24
  124. package/index.js +99 -86
  125. package/{localDialogRead-PUQKFI73.js → localDialogRead-BTFJ4V2I.js} +2 -2
  126. package/{localRuntimeDb-P37ZTX55.js → localRuntimeDb-SYQGUF4U.js} +1 -1
  127. package/{machineCommands-KSTY7PYK.js → machineCommands-GFPTOY6L.js} +64 -61
  128. package/{machineWsRunDispatch-MG6KR26V.js → machineWsRunDispatch-46PSZ3DJ.js} +62 -59
  129. package/{memberThunks-KATHH3F4.js → memberThunks-QGFLFVCI.js} +9 -9
  130. package/{models-GS72DVJS.js → models-T3SG6MJ5.js} +2 -2
  131. package/{offlineMarxistsAgentCommand-GEH6SNNA.js → offlineMarxistsAgentCommand-HGXZV4XJ.js} +1 -1
  132. package/package.json +1 -1
  133. package/providerPresetApply-FG6NZ57W.js +214 -0
  134. package/providerRegistry-757OWH3O.js +31 -0
  135. package/{read-LC6HVYBN.js → read-COE3ZYR6.js} +5 -4
  136. package/{readDocTool-N3ERJHHF.js → readDocTool-5USN4A6V.js} +1 -1
  137. package/{readlineWorkspace-FG4NFANI.js → readlineWorkspace-UFSWHFKD.js} +144 -109
  138. package/{removeDialogAgentAction-F5GPTALR.js → removeDialogAgentAction-IX3MN2ZO.js} +11 -11
  139. package/{runAgentClientLoop-U3GEPCQI.js → runAgentClientLoop-25LJ4XGV.js} +47 -47
  140. package/{runtimeDoctorCommands-CROTMULY.js → runtimeDoctorCommands-X6WDBEQX.js} +2 -2
  141. package/{setDialogExtraReferencesAction-AY4ZCF3A.js → setDialogExtraReferencesAction-X4HCPNZL.js} +9 -9
  142. package/{setPrimaryDialogAgentAction-HPMG7V3R.js → setPrimaryDialogAgentAction-4GMIQLOD.js} +11 -11
  143. package/{settingSlice-OEJA4NQO.js → settingSlice-ZQZVUPKK.js} +10 -10
  144. package/{spaceCommands-CB6SU7KK.js → spaceCommands-NKJVJCQQ.js} +30 -29
  145. package/{streamAgentChatTurn-DAGDJH3L.js → streamAgentChatTurn-A46QFV4O.js} +59 -58
  146. package/{switchDialogAgentAction-HMDZTZ4I.js → switchDialogAgentAction-N52LRPA3.js} +8 -8
  147. package/{tableCommands-SUNTHAYX.js → tableCommands-O6NWHFKV.js} +1 -1
  148. package/{toolApiClient-VGYUB4P5.js → toolApiClient-QVJ6HDNN.js} +2 -2
  149. package/{tools-73VPBNX3.js → tools-TTDGRNY6.js} +43 -43
  150. package/tuiSummaryLlmCaller-WFRWERGK.js +127 -0
  151. package/{updateCommands-Y363MC3L.js → updateCommands-2M74UL7P.js} +2 -2
  152. package/{updateDialogTitleAction-RFQONESQ.js → updateDialogTitleAction-QJPZGF52.js} +45 -28
  153. package/agentRecordCommands-RJRU2YVT.js +0 -125
  154. package/chunk-I42VC5KR.js +0 -15
  155. package/chunk-NB5SIWC4.js +0 -611
  156. package/chunk-NG4UT4K4.js +0 -79
  157. package/codingSkills-7S6523WH.js +0 -48
  158. package/tuiSummaryLlmCaller-3Z24VUWM.js +0 -116
  159. package/{chunk-3RAG2NAD.js → chunk-UKWGR5SS.js} +3 -3
  160. package/{db-VQSAOWAO.js → db-WK5MDZVN.js} +1 -1
  161. package/{localRuntimeAuthority-R5UBODT3.js → localRuntimeAuthority-6IR6BBXE.js} +3 -3
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  selectCurrentServer,
3
3
  selectRemoteServers
4
- } from "./chunk-XWNRAIUL.js";
4
+ } from "./chunk-AFUORTY4.js";
5
5
  import {
6
6
  createUserKey,
7
7
  extractAgentInfo,
@@ -10,11 +10,11 @@ import {
10
10
  sanitizeShareData,
11
11
  shareKey,
12
12
  toNonEmptyString
13
- } from "./chunk-NHRQCXIQ.js";
13
+ } from "./chunk-VMFTFOWF.js";
14
14
  import {
15
15
  noloDeleteRequest,
16
16
  noloWriteRequest
17
- } from "./chunk-3RAG2NAD.js";
17
+ } from "./chunk-UKWGR5SS.js";
18
18
  import {
19
19
  normalizeTimeFields
20
20
  } from "./chunk-QOKAKDPE.js";
@@ -5,14 +5,14 @@ import {
5
5
  inlineImageUrlsForCustomProvider,
6
6
  prepareTools,
7
7
  shouldInlineImageUrlsForAgent
8
- } from "./chunk-N5KGQ5AD.js";
8
+ } from "./chunk-DRGSDQBL.js";
9
9
  import {
10
10
  INVALID_TOOL_ARGS_REPLACEMENT,
11
11
  buildInvalidToolCallSelfHealResult,
12
12
  parseToolCallArguments,
13
13
  performFetchRequest,
14
14
  sanitizeOutboundMessages
15
- } from "./chunk-LKSDMMY2.js";
15
+ } from "./chunk-Q2XN3EOZ.js";
16
16
  import {
17
17
  createSSEParser,
18
18
  createToolRunId,
@@ -23,7 +23,7 @@ import {
23
23
  toolRunSetPending,
24
24
  toolRunStarted,
25
25
  toolRunSucceeded
26
- } from "./chunk-5Q5LYRJH.js";
26
+ } from "./chunk-5FBTLSFG.js";
27
27
  import {
28
28
  getPublicImageAgentMode
29
29
  } from "./chunk-VIDPVFP3.js";
@@ -35,10 +35,10 @@ import {
35
35
  messageStreamEnd,
36
36
  messageStreaming,
37
37
  updateToolMessage
38
- } from "./chunk-BHXK3KPV.js";
38
+ } from "./chunk-QVKRR2SS.js";
39
39
  import {
40
40
  streamAgentChatTurn
41
- } from "./chunk-6RUOYAPM.js";
41
+ } from "./chunk-4S5QUMJP.js";
42
42
  import {
43
43
  addActiveController,
44
44
  removeActiveController,
@@ -56,42 +56,42 @@ import {
56
56
  import {
57
57
  EMPTY_ASSISTANT_REPAIR_PROMPT,
58
58
  getModelInfo
59
- } from "./chunk-DSRXPQWA.js";
59
+ } from "./chunk-4OEFYTWL.js";
60
60
  import {
61
61
  getApiEndpoint
62
- } from "./chunk-UJ63UXGE.js";
62
+ } from "./chunk-OIVSQH2O.js";
63
63
  import {
64
64
  toErrorMessage
65
65
  } from "./chunk-HNMXYYJR.js";
66
66
  import {
67
67
  selectCurrentServer
68
- } from "./chunk-XWNRAIUL.js";
68
+ } from "./chunk-AFUORTY4.js";
69
69
  import {
70
70
  write
71
- } from "./chunk-YFADVSZE.js";
71
+ } from "./chunk-H62HCIUP.js";
72
72
  import {
73
73
  createDialogMessageKeyAndId,
74
74
  dialogMessageKey,
75
75
  toTrimmedString
76
- } from "./chunk-NHRQCXIQ.js";
76
+ } from "./chunk-VMFTFOWF.js";
77
77
  import {
78
78
  extractCustomId
79
- } from "./chunk-BJIRLHJR.js";
79
+ } from "./chunk-M2EJHDJP.js";
80
80
  import {
81
81
  createAsyncThunk
82
- } from "./chunk-3RAG2NAD.js";
82
+ } from "./chunk-UKWGR5SS.js";
83
83
  import {
84
84
  isAbortError
85
85
  } from "./chunk-QOKAKDPE.js";
86
86
  import {
87
87
  selectIdentityToken
88
88
  } from "./chunk-SEJ5OS6F.js";
89
- import {
90
- asTrimmedString
91
- } from "./chunk-3EUW3WEO.js";
92
89
  import {
93
90
  isRecord
94
91
  } from "./chunk-KUG52IAP.js";
92
+ import {
93
+ asTrimmedString
94
+ } from "./chunk-3EUW3WEO.js";
95
95
  import {
96
96
  asOptionalTrimmedString
97
97
  } from "./chunk-G3SUCT4W.js";
@@ -285,6 +285,27 @@ function saveProfileAgentSelection(selection, path = getDefaultProfileConfigPath
285
285
  `, "utf8");
286
286
  return config;
287
287
  }
288
+ function getProfileOAuthSync(provider, path = getDefaultProfileConfigPath()) {
289
+ const config = loadProfileConfig(path);
290
+ if (!config) return void 0;
291
+ const profile = config.profiles[config.currentProfile];
292
+ return profile?.oauthSync?.[provider];
293
+ }
294
+ function saveProfileOAuthSync(provider, sync, path = getDefaultProfileConfigPath()) {
295
+ if (isProtectedHomeProfileWrite(path)) return null;
296
+ const config = loadProfileConfig(path);
297
+ if (!config) return null;
298
+ const profile = config.profiles[config.currentProfile];
299
+ if (!profile) return null;
300
+ profile.oauthSync = {
301
+ ...profile.oauthSync ?? {},
302
+ [provider]: sync
303
+ };
304
+ mkdirSync(dirname(path), { recursive: true });
305
+ writeFileSync(path, `${JSON.stringify(config, null, 2)}
306
+ `, "utf8");
307
+ return config;
308
+ }
288
309
 
289
310
  export {
290
311
  getDefaultProfileConfigPath,
@@ -299,5 +320,7 @@ export {
299
320
  saveProfileLocale,
300
321
  getAgentSelectionAuditPath,
301
322
  readLastAgentSelectionAudit,
302
- saveProfileAgentSelection
323
+ saveProfileAgentSelection,
324
+ getProfileOAuthSync,
325
+ saveProfileOAuthSync
303
326
  };
@@ -1,7 +1,13 @@
1
+ import {
2
+ buildSkillDocMarkdown
3
+ } from "./chunk-Q554LLSI.js";
1
4
  import {
2
5
  SYSTEM_AGENT_CAPABILITIES,
3
6
  SYSTEM_AGENT_CAPABILITY_IDS
4
- } from "./chunk-UZ6XXCVR.js";
7
+ } from "./chunk-QDSINZM3.js";
8
+ import {
9
+ createKey
10
+ } from "./chunk-VMFTFOWF.js";
5
11
 
6
12
  // packages/ai/tools/codeWorkDiscipline.ts
7
13
  var CODE_WORK_DISCIPLINE_BODY = `## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\uFF09
@@ -44,6 +50,9 @@ var TOOL_PACKS = {
44
50
  // queryModelUsage / queryUserGrowthReport:server-only 工具(web/CLI executor
45
51
  // 直接返回 serverOnlyResult),不随 CORE 常驻——server 端由 agent 显式
46
52
  // tools 配置按需挂载(utilityServerTools 执行器),web 端不再挂死 schema。
53
+ // setTodoList 已移至「conversation-todo」系统能力包(defaultEnabled:true)
54
+ // 作为唯一 owner——single source of truth:普通 agent 默认仍有 setTodoList,
55
+ // 但关闭「对话 Todo」开关即可真正摘掉它(CORE 常驻时该开关形同虚设)。
47
56
  CORE: [
48
57
  "read",
49
58
  "createDoc",
@@ -52,8 +61,7 @@ var TOOL_PACKS = {
52
61
  "updateSelf",
53
62
  "ask_user",
54
63
  "createAgentAutomation",
55
- "notifyUser",
56
- "setTodoList"
64
+ "notifyUser"
57
65
  ],
58
66
  // L2 - 联网搜索:与 CAPABILITY_PACKS「web-search」对齐。
59
67
  // 社交读工具属于「social-reader」包,不得因 exa_search 被旁路注入。
@@ -73,7 +81,6 @@ var TOOL_PACKS = {
73
81
  "launchProcess",
74
82
  "listProcesses",
75
83
  "taskWait",
76
- "taskLogs",
77
84
  "taskStop",
78
85
  // watchCompletion:push 后登记「业务终态订阅」,部署结束时服务端唤醒父对话
79
86
  // (等待期间 0 轮询 0 token)。与代码工作流同链路(push → CI → 通知),随
@@ -273,7 +280,10 @@ function resolveEffectiveEnabledPacks(args) {
273
280
  ];
274
281
  }
275
282
  var SYSTEM_BUILTIN_SKILL_PACK_IDS = SYSTEM_AGENT_CAPABILITY_IDS;
276
- var DEFAULT_MOUNT_SYSTEM_CAPABILITY_IDS = ["agent-orchestration"];
283
+ var DEFAULT_MOUNT_SYSTEM_CAPABILITY_IDS = [
284
+ "agent-orchestration",
285
+ "conversation-todo"
286
+ ];
277
287
  function getDefaultSystemCapabilityTools() {
278
288
  const ids = DEFAULT_MOUNT_SYSTEM_CAPABILITY_IDS;
279
289
  return SYSTEM_AGENT_CAPABILITY_PACKS.filter((pack) => ids.includes(pack.id)).flatMap((pack) => [...pack.tools]);
@@ -366,6 +376,160 @@ function applyDefaultWebToolPacks(args) {
366
376
  return [...enhanced];
367
377
  }
368
378
 
379
+ // packages/ai/skills/builtinObjectSkills.ts
380
+ var BUILTIN_OBJECT_SKILL_IDS = {
381
+ table: "builtin-table-skill-v1",
382
+ doc: "builtin-doc-skill-v1",
383
+ // key 改名为 code-style(它本来就叫「编码风格技能」,"code" 这个名字是它抢的,
384
+ // 与「代码执行」能力包撞车)。**id 值保持不变**——skillId 与页面 key 都从它派生,
385
+ // 改了会让存量 agent.references 失配。
386
+ "code-style": "builtin-code-skill-v1",
387
+ image: "builtin-image-skill-v1",
388
+ file: "builtin-file-skill-v1",
389
+ pagebuilder: "builtin-pagebuilder-skill-v1"
390
+ };
391
+ var SKILL_DEFS = {
392
+ doc: {
393
+ id: BUILTIN_OBJECT_SKILL_IDS.doc,
394
+ name: "\u6587\u6863\u7F16\u8F91\u6280\u80FD",
395
+ description: "\u63D0\u4F9B\u6587\u6863\u8BFB\u53D6\u4E0E\u66F4\u65B0\u80FD\u529B\uFF0C\u4F9B\u6587\u6863\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u6587\u6863\u3001\u6DA6\u8272\u3001\u6539\u5199\u3001\u7EED\u5199\u3001\u6392\u7248\u3001\u6587\u7AE0\u3001document\u3001polish\u3002",
396
+ toolNames: ["readDoc", "updateDoc"],
397
+ promptPatch: [
398
+ "\u6587\u6863\u7F16\u8F91\u6307\u5357\uFF1A",
399
+ "1. \u4FEE\u6539\u524D\u5148 readDoc \u8BFB\u53D6\u5F53\u524D\u6587\u6863\u771F\u503C\uFF0C\u518D\u57FA\u4E8E\u73B0\u6709\u5185\u5BB9\u7528 updateDoc \u505A\u5B9A\u70B9\u589E\u91CF\u7F16\u8F91\u3002",
400
+ "2. \u4E0D\u8981\u8131\u79BB\u73B0\u6709\u5185\u5BB9\u7A7A\u60F3\u91CD\u5199\uFF1B\u6DA6\u8272/\u6539\u5199/\u7EED\u5199\u90FD\u5E94\u4FDD\u7559\u7528\u6237\u539F\u6709\u7684\u7ED3\u6784\u4E0E\u4E8B\u5B9E\u3002"
401
+ ].join("\n")
402
+ },
403
+ table: {
404
+ id: BUILTIN_OBJECT_SKILL_IDS.table,
405
+ name: "\u8868\u683C\u7F16\u8F91\u6280\u80FD",
406
+ description: "\u63D0\u4F9B\u8868\u683C\u521B\u5EFA\u3001\u67E5\u8BE2\u3001\u65B0\u589E\u3001\u66F4\u65B0\u4E0E\u5220\u9664\u80FD\u529B\uFF0C\u4F9B\u8868\u683C\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u8868\u683C\u3001\u5EFA\u8868\u3001\u65B0\u589E\u4E00\u884C\u3001\u8BB0\u5F55\u3001\u5B57\u6BB5\u3001table\u3001spreadsheet\u3001csv\u3002",
407
+ // 与 app-builder 能力包共用同一份清单(TOOL_PACKS.TABLE)。
408
+ // 以前两边各抄一份,改一个忘另一个就会静默不同步。
409
+ toolNames: [...TOOL_PACKS.TABLE],
410
+ promptPatch: [
411
+ "\u8868\u683C\u64CD\u4F5C\u6307\u5357\uFF1A",
412
+ "1. \u7528\u6237\u8981\u65B0\u5EFA\u8868\u683C\u65F6\uFF0C\u8C03\u7528 createTable\uFF0C\u5E76\u4ECE\u9700\u6C42\u63A8\u65AD\u5408\u7406\u7684\u5B57\u6BB5\u8BBE\u8BA1\uFF08\u5B57\u6BB5\u540D\u3001\u7C7B\u578B\u3001\u5FC5\u586B\u3001\u53EF\u9009\u503C\uFF09\u3002",
413
+ "2. \u65B0\u589E\u8BB0\u5F55\u5FC5\u987B\u8C03\u7528 addTableRow / addTableRows\uFF0C\u4E0D\u8981\u53EA\u5728\u56DE\u7B54\u91CC\u53E3\u5934\u63CF\u8FF0\u3002",
414
+ "3. addTableRow \u7684 values \u662F\u5BF9\u8C61\uFF0Ckey \u5FC5\u987B\u7528\u5B57\u6BB5\u540D\uFF08name\uFF0C\u4E0D\u662F\u663E\u793A\u540D label\uFF09\uFF1B\u5C3D\u91CF\u4ECE\u7528\u6237\u81EA\u7136\u8BED\u8A00\u63A8\u65AD\u5E76\u586B\u6EE1\u76F8\u5173\u5B57\u6BB5\uFF0C\u5FC5\u586B\u5B57\u6BB5\u5C24\u5176\u6CE8\u610F\uFF1B\u7528\u6237\u6CA1\u63D0\u5230\u7684\u5B57\u6BB5\u53EF\u7528\u7A7A\u5B57\u7B26\u4E32\u6216 null \u5360\u4F4D\uFF1B\u7EDD\u4E0D\u8981\u4F20\u7A7A\u5BF9\u8C61 {}\u3002",
415
+ "4. \u66F4\u65B0\u6216\u5220\u9664\u524D\uFF0C\u5148\u7528 queryTableRows \u786E\u8BA4\u76EE\u6807\u884C\uFF0C\u5FC5\u8981\u65F6\u5411\u7528\u6237\u786E\u8BA4\u76EE\u6807\u884C/\u5B57\u6BB5\u3002"
416
+ ].join("\n")
417
+ },
418
+ "code-style": {
419
+ id: BUILTIN_OBJECT_SKILL_IDS["code-style"],
420
+ name: "\u7F16\u7801\u98CE\u683C\u6280\u80FD",
421
+ description: "\u63D0\u4F9B\u7F16\u7801\u89C4\u8303\u4E0E\u98CE\u683C\u7EA6\u675F\uFF0C\u4F9B\u4EE3\u7801\u4EFB\u52A1\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u4EE3\u7801\u3001\u7F16\u7801\u3001\u91CD\u6784\u3001\u4FEEbug\u3001code\u3001refactor\u3001bugfix\u3001coding-style\u3002",
422
+ toolNames: [],
423
+ promptPatch: [
424
+ "\u7F16\u7801\u98CE\u683C\u4E0E\u89C4\u8303\u6307\u5357\uFF1A",
425
+ "1. \u6587\u4EF6\u62C6\u5206\uFF1A\u4F18\u5148\u62C6\u5206\u4E3A\u591A\u6587\u4EF6\uFF08MANY SMALL FILES\uFF09\uFF0C\u5178\u578B\u957F\u5EA6 200-400 \u884C\uFF0C\u5355\u6587\u4EF6\u6700\u591A 800 \u884C\uFF08800 max\uFF09\u3002",
426
+ "2. \u51FD\u6570\u4E0E\u5D4C\u5957\uFF1A\u51FD\u6570\u4FDD\u6301\u77ED\u5C0F\uFF08<50 lines\uFF09\uFF0C\u4F18\u5148\u4F7F\u7528 early returns \u63D0\u524D\u8FD4\u56DE\uFF0C\u5D4C\u5957\u5C42\u7EA7\u4E0D\u8D85\u8FC7 4 \u5C42\uFF08nesting \u22644\uFF09\u3002",
427
+ "3. \u4E0D\u53EF\u53D8\u6027\uFF08immutability\uFF09\uFF1A\u4FDD\u6301\u6570\u636E\u4E0D\u53EF\u53D8\uFF0C\u4E0D\u8981\u539F\u5730 mutate \u73B0\u6709\u5BF9\u8C61\u6216\u6570\u7EC4\uFF0C\u5FC5\u987B\u8FD4\u56DE\u65B0\u5BF9\u8C61/\u6570\u7EC4\u3002",
428
+ "4. \u9519\u8BEF\u5904\u7406\u4E0E\u6821\u9A8C\uFF1A\u663E\u5F0F\u5904\u7406\u6240\u6709\u9519\u8BEF\uFF08explicit error handling\uFF09\uFF0C\u5728\u7CFB\u7EDF\u8FB9\u754C\u5B8C\u6210\u6821\u9A8C\uFF08validate at boundaries\uFF09\uFF0C\u4E0D\u9690\u5F0F\u541E\u9519\u3002",
429
+ "5. \u5B8C\u6210\u524D Checklist\uFF1A\u5B8C\u6210\u524D\u81EA\u67E5\u51FD\u6570/\u6587\u4EF6\u5C3A\u5BF8\u3001\u5D4C\u5957\u6DF1\u5EA6\u3001\u4E0D\u53EF\u53D8\u6027\u4E0E\u8FB9\u754C\u9519\u8BEF\u5904\u7406\u3002"
430
+ ].join("\n")
431
+ },
432
+ image: {
433
+ id: BUILTIN_OBJECT_SKILL_IDS.image,
434
+ name: "\u56FE\u7247\u5206\u6790\u6280\u80FD",
435
+ description: "\u63D0\u4F9B\u56FE\u7247\u7406\u89E3\u3001\u63CF\u8FF0\u4E0E\u6574\u7406\u5EFA\u8BAE\u80FD\u529B\uFF0C\u4F9B\u56FE\u7247\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u56FE\u7247\u3001\u56FE\u50CF\u3001\u5206\u6790\u3001\u63CF\u8FF0\u3001\u547D\u540D\u3001\u6574\u7406\u3001image\u3001photo\u3001picture\u3002",
436
+ toolNames: [],
437
+ promptPatch: [
438
+ "\u56FE\u7247\u5206\u6790\u6307\u5357\uFF1A",
439
+ "1. \u5F53\u524D\u9636\u6BB5\u91CD\u70B9\u56F4\u7ED5\u5F53\u524D\u56FE\u7247\u505A\u7406\u89E3\u3001\u63CF\u8FF0\u3001\u63D0\u70BC\u91CD\u70B9\u3001\u7ED9\u51FA\u547D\u540D/\u6574\u7406\u5EFA\u8BAE\u548C\u540E\u7EED\u5904\u7406\u5EFA\u8BAE\u3002",
440
+ "2. \u4E0D\u8981\u5047\u88C5\u5DF2\u7ECF\u5177\u5907\u590D\u6742\u56FE\u7247\u7F16\u8F91\u80FD\u529B\uFF1B\u5982\u679C\u7528\u6237\u8981\u66F4\u5F3A\u64CD\u4F5C\uFF0C\u660E\u786E\u8BF4\u660E\u5F53\u524D\u53EF\u505A\u7684\u662F\u5206\u6790\u4E0E\u7EC4\u7EC7\u3002"
441
+ ].join("\n")
442
+ },
443
+ file: {
444
+ id: BUILTIN_OBJECT_SKILL_IDS.file,
445
+ name: "\u6587\u4EF6\u5904\u7406\u6280\u80FD",
446
+ description: "\u63D0\u4F9B\u6587\u4EF6\u7406\u89E3\u3001\u6574\u7406\u4E0E\u5904\u7406\u5EFA\u8BAE\u80FD\u529B\uFF0C\u4F9B\u6587\u4EF6\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u6587\u4EF6\u3001\u89E3\u6790\u3001\u63D0\u53D6\u3001\u6574\u7406\u3001\u5904\u7406\u3001file\u3001document\u3001pdf\u3002",
447
+ toolNames: [],
448
+ promptPatch: [
449
+ "\u6587\u4EF6\u5904\u7406\u6307\u5357\uFF1A",
450
+ "1. \u5F53\u524D\u9636\u6BB5\u91CD\u70B9\u56F4\u7ED5\u5F53\u524D\u6587\u4EF6\u63D0\u4F9B\u7406\u89E3\u3001\u6574\u7406\u3001\u63D0\u53D6\u4E0E\u540E\u7EED\u5904\u7406\u5EFA\u8BAE\u3002",
451
+ "2. \u4E0D\u8981\u5047\u88C5\u5DF2\u7ECF\u5B8C\u6210\u6587\u4EF6\u5185\u5BB9\u89E3\u6790\uFF1B\u5FC5\u8981\u65F6\u660E\u786E\u544A\u8BC9\u7528\u6237\u5F53\u524D\u66F4\u591A\u662F\u5360\u4F4D\u578B\u5DE5\u4F5C\u6D41\u5165\u53E3\uFF0C\u7B49\u5F85\u540E\u7EED\u63A5\u5165\u66F4\u5B8C\u6574\u7684\u6587\u4EF6\u5904\u7406\u80FD\u529B\u3002"
452
+ ].join("\n")
453
+ },
454
+ pagebuilder: {
455
+ id: BUILTIN_OBJECT_SKILL_IDS.pagebuilder,
456
+ name: "\u52A8\u6001\u4EA4\u4E92\u7EC4\u4EF6\u751F\u6210\u6280\u80FD",
457
+ description: "\u628A\u4E00\u53E5\u8BDD\u9700\u6C42\u53D8\u6210\u53EF\u770B\u7684\u4EA4\u4E92\u9875\u9762\u3001\u62A5\u544A\u3001\u770B\u677F\u3001\u4E3B\u9875\u3001\u6559\u7A0B\u3001\u5BF9\u6BD4\u9875\u6216\u8BA1\u5212\u9875\u3002\u4EFB\u4F55 agent \u5728\u9700\u8981\u8F93\u51FA\u53EF\u4EA4\u4E92\u53EF\u89C6\u5316\u6D88\u606F\u65F6\u6309\u9700\u52A0\u8F7D\u3002\u89E6\u53D1\u8BCD\uFF1A\u9875\u9762\u3001\u62A5\u8868\u3001\u770B\u677F\u3001\u65E5\u62A5\u3001\u5468\u62A5\u3001\u4E3B\u9875\u3001\u6559\u7A0B\u3001\u5BF9\u6BD4\u9875\u3001\u8BA1\u5212\u9875\u3001\u53EF\u89C6\u5316\u3001\u4EA4\u4E92\u9875\u9762\u3001\u4EEA\u8868\u76D8\u3001dashboard\u3001report\u3001page\u3001landing\u3002",
458
+ toolNames: [],
459
+ promptPatch: [
460
+ "\u52A8\u6001\u4EA4\u4E92\u7EC4\u4EF6\u751F\u6210\u89C4\u5219\uFF1A",
461
+ "\u4F60\u73B0\u5728\u7684\u4EFB\u52A1\u662F\u628A\u7528\u6237\u9700\u6C42\u53D8\u6210\u4E00\u4E2A\u53EF\u770B\u7684\u4EA4\u4E92\u9875\u9762/\u62A5\u544A/\u770B\u677F/\u4E3B\u9875/\u6559\u7A0B/\u5BF9\u6BD4\u9875/\u8BA1\u5212\u9875\u3002\u7528\u6237\u770B\u4E0D\u5230\u6E90\u7801\uFF0C\u53EA\u4F1A\u770B\u5230\u9875\u9762\u7ED3\u679C\u3002",
462
+ "",
463
+ "\u7EDD\u5BF9\u89C4\u5219\uFF1A",
464
+ "1. \u53EA\u8F93\u51FA\u4E00\u4E2A Markdown \u4EE3\u7801\u5757\uFF0C\u4EE3\u7801\u5757\u8BED\u8A00\u5FC5\u987B\u662F tsx preview\u3002",
465
+ "2. \u4EE3\u7801\u5757\u5916\u4E0D\u8981\u8F93\u51FA\u89E3\u91CA\u3001\u524D\u8A00\u3001\u7ED3\u5C3E\u3001\u6E05\u5355\u6216\u601D\u8003\u8FC7\u7A0B\u3002",
466
+ "3. \u4EE3\u7801\u5FC5\u987B\u5B9A\u4E49\u9876\u5C42 function Example()\uFF0C\u4E0D\u8981\u8C03\u7528 render()\uFF0C\u4E0D\u8981 export default\u3002",
467
+ "4. \u4E0D\u8981\u5199 import\u3002\u8FD0\u884C\u73AF\u5883\u5DF2\u7ECF\u63D0\u4F9B React\u3001useState\u3001useEffect\u3001useMemo\u3001useCallback\u3001useRef\u3001ReactECharts\u3001react-icons/lu \u7684\u56FE\u6807\u7EC4\u4EF6\u3002",
468
+ "5. \u6240\u6709\u4EA4\u4E92\u5FC5\u987B\u5728 Example \u5185\u7528 React state \u5B9E\u73B0\uFF0C\u6309\u94AE\u3001Tab\u3001FAQ\u3001\u6B65\u9AA4\u5207\u6362\u3001\u7B5B\u9009\u90FD\u8981\u771F\u7684\u53EF\u70B9\u51FB\u3002",
469
+ "6. \u4E3A\u4E3B\u8981\u533A\u5757\u52A0 data-artifact-section \u5C5E\u6027\u3002",
470
+ "7. \u751F\u6210\u7ED3\u679C\u4F18\u5148\u662F\u4E00\u9875\u5B8C\u6574\u53EF\u7528\u7684\u9875\u9762\uFF0C\u4E0D\u8981\u53EA\u505A\u5B64\u7ACB\u5361\u7247\u6216\u4E00\u4E2A\u56FE\u3002",
471
+ "8. \u5982\u679C\u7528\u6237\u6CA1\u6709\u7ED9\u5177\u4F53\u6570\u636E\uFF0C\u53EF\u4EE5\u751F\u6210\u5408\u7406\u7684\u793A\u4F8B\u6570\u636E\uFF0C\u4F46\u8981\u4FDD\u6301\u4E1A\u52A1\u53EF\u4FE1\u3002",
472
+ "",
473
+ "\u5404\u7C7B\u9875\u9762\u9ED8\u8BA4\u7ED3\u6784\uFF1A",
474
+ "- \u4FE1\u606F\u5C55\u793A\u7C7B\uFF08\u4E3B\u9875\u3001\u4EA7\u54C1\u4ECB\u7ECD\u3001\u670D\u52A1\u9875\u3001\u4F5C\u54C1\u96C6\u3001\u6D3B\u52A8\u9875\uFF09\uFF1A\u9996\u5C4F\u5B9A\u4F4D\u3001\u670D\u52A1/\u80FD\u529B\u5361\u7247\u3001\u4EE3\u8868\u6210\u679C\u5361\u7247\u3001\u53EF\u4FE1\u80CC\u4E66\u3001\u8054\u7CFB\u6216\u884C\u52A8\u6309\u94AE\u3002",
475
+ "- \u6570\u636E\u5206\u6790\u7C7B\uFF08\u65E5\u62A5\u3001\u5468\u62A5\u3001\u770B\u677F\u3001\u8D28\u68C0\u3001\u9500\u552E\u6F0F\u6597\u3001\u53CD\u9988\u5206\u6790\uFF09\uFF1A\u9876\u90E8\u6458\u8981\u3001\u6838\u5FC3\u6307\u6807\u3001\u8D8B\u52BF\u56FE\u3001\u660E\u7EC6\u8868\u683C\u6216\u5F02\u5E38\u5217\u8868\u3001\u4E0B\u4E00\u6B65\u5EFA\u8BAE\u3002",
476
+ "- \u6D41\u7A0B\u8BF4\u660E\u7C7B\uFF08\u6559\u7A0B\u3001SOP\u3001onboarding\u3001\u64CD\u4F5C\u6307\u5357\u3001\u8BFE\u7A0B\u6B65\u9AA4\uFF09\uFF1A\u5B66\u4E60\u76EE\u6807\u3001\u6B65\u9AA4\u5361\u7247\u3001\u793A\u4F8B/\u7EC3\u4E60\u3001\u68C0\u67E5\u6E05\u5355\u6216\u4E0B\u4E00\u6B65\u6309\u94AE\u3002",
477
+ "- \u51B3\u7B56\u6BD4\u8F83\u7C7B\uFF08\u65B9\u6848\u5BF9\u6BD4\u3001\u4EA7\u54C1\u9009\u578B\u3001\u7ADE\u54C1\u5206\u6790\u3001\u91C7\u8D2D\u5EFA\u8BAE\uFF09\uFF1A\u5BF9\u6BD4\u7EF4\u5EA6\u8868\u683C\u3001\u4F18\u7F3A\u70B9\u5361\u7247\u3001\u8BC4\u5206\u6216\u9002\u914D\u5EA6\u3001\u63A8\u8350\u7ED3\u8BBA\u3002",
478
+ "- \u8BA1\u5212\u6392\u5E03\u7C7B\uFF08\u9879\u76EE\u8BA1\u5212\u3001\u5B66\u4E60\u8BA1\u5212\u3001\u5185\u5BB9\u65E5\u5386\u3001\u53D1\u5E03\u8282\u594F\uFF09\uFF1A\u9636\u6BB5\u76EE\u6807\u3001\u4EFB\u52A1\u5217\u8868\u3001\u4F18\u5148\u7EA7\u3001\u91CC\u7A0B\u7891\u5361\u7247\u3001\u98CE\u9669\u63D0\u9192\u3002",
479
+ "- \u6DF7\u5408\u6C47\u62A5\u7C7B\uFF08\u878D\u8D44\u9875\u3001\u9879\u76EE\u6982\u89C8\u3001\u590D\u6742\u6C47\u62A5\uFF09\uFF1A\u81F3\u5C11\u5305\u542B MetricCard\u3001Chart\u3001Table \u548C Section\uFF0C\u4E0D\u8981\u53EA\u505A\u5355\u4E00\u5217\u8868\u3002",
480
+ "- \u6559\u7A0B/\u6B65\u9AA4/FAQ/Tab/\u7B5B\u9009/\u9875\u9762\u5185\u8DF3\u8F6C\u5FC5\u987B\u505A\u6210\u771F\u5B9E\u53EF\u70B9\u51FB\u4EA4\u4E92\u3002",
481
+ "",
482
+ "\u4EE3\u7801\u98CE\u683C\uFF1A",
483
+ "1. \u4F7F\u7528\u5185\u8054 style \u6216\u7EC4\u4EF6\u5185 <style>\uFF0C\u4E0D\u8981\u4F9D\u8D56 Tailwind \u6216\u5916\u90E8 CSS\u3002",
484
+ "2. \u9875\u9762\u5BBD\u5EA6\u3001\u95F4\u8DDD\u3001\u5B57\u53F7\u8981\u9002\u5408\u6D88\u606F\u5185\u9884\u89C8\uFF1B\u4E0D\u8981\u7528\u8FC7\u5927\u7684\u843D\u5730\u9875 hero\u3002",
485
+ "3. \u989C\u8272\u8981\u514B\u5236\uFF0C\u6709\u5C42\u6B21\uFF1B\u907F\u514D\u6574\u9875\u5355\u4E00\u84DD\u7D2B\u6E10\u53D8\u3002",
486
+ "4. \u8868\u683C\u3001\u56FE\u8868\u3001\u5361\u7247\u3001\u6309\u94AE\u90FD\u8981\u6709 hover/active/focus \u7684\u7EC6\u8282\u3002",
487
+ "5. \u5FC5\u8981\u65F6\u4F7F\u7528 ReactECharts \u753B\u56FE\uFF1B\u7B80\u5355\u67F1\u72B6\u56FE\u4E5F\u53EF\u4EE5\u7528 div \u5B9E\u73B0\uFF0C\u4FDD\u8BC1\u7A33\u5B9A\u3002",
488
+ "6. \u4EE3\u7801\u5C3D\u91CF\u77ED\u800C\u5B8C\u6574\uFF0C\u9ED8\u8BA4 150-260 \u884C\u4EE5\u5185\u3002",
489
+ "",
490
+ "\u8F93\u51FA\u683C\u5F0F\u793A\u4F8B\uFF1A",
491
+ "```tsx preview",
492
+ "function Example() {",
493
+ " const [tab, setTab] = useState('overview');",
494
+ " return <main><section data-artifact-section>...</section></main>;",
495
+ "}",
496
+ "```"
497
+ ].join("\n")
498
+ }
499
+ };
500
+ function buildBuiltinObjectSkillConfig(kind) {
501
+ const def = SKILL_DEFS[kind];
502
+ return {
503
+ version: "0.1",
504
+ kind: "skill",
505
+ id: def.id,
506
+ name: def.name,
507
+ description: def.description,
508
+ triggerMode: "explicit",
509
+ toolNames: def.toolNames,
510
+ promptPatch: def.promptPatch
511
+ };
512
+ }
513
+ function buildBuiltinObjectSkillDbKey(kind, userId) {
514
+ return createKey("page" /* DOC */, userId, BUILTIN_OBJECT_SKILL_IDS[kind]);
515
+ }
516
+ function buildBuiltinObjectSkillReference(kind, userId) {
517
+ return {
518
+ dbKey: buildBuiltinObjectSkillDbKey(kind, userId),
519
+ title: SKILL_DEFS[kind].name,
520
+ type: "instruction"
521
+ };
522
+ }
523
+ function buildBuiltinObjectSkillPageContent(kind) {
524
+ const def = SKILL_DEFS[kind];
525
+ return buildSkillDocMarkdown({
526
+ body: `# ${def.name}
527
+
528
+ ${def.description}`,
529
+ skillConfig: buildBuiltinObjectSkillConfig(kind)
530
+ });
531
+ }
532
+
369
533
  export {
370
534
  buildCodeWorkDiscipline,
371
535
  TOOL_PACKS,
@@ -379,5 +543,10 @@ export {
379
543
  FORCED_TOOLS,
380
544
  applyDisabledTools,
381
545
  addDefaultLightWebToolsForConfiguredAgents,
382
- applyDefaultWebToolPacks
546
+ applyDefaultWebToolPacks,
547
+ BUILTIN_OBJECT_SKILL_IDS,
548
+ buildBuiltinObjectSkillConfig,
549
+ buildBuiltinObjectSkillDbKey,
550
+ buildBuiltinObjectSkillReference,
551
+ buildBuiltinObjectSkillPageContent
383
552
  };
@@ -6,13 +6,13 @@ import {
6
6
  } from "./chunk-DWLEOOGR.js";
7
7
  import {
8
8
  addContentAction
9
- } from "./chunk-ZZCJUXUI.js";
9
+ } from "./chunk-V4MJDUSR.js";
10
10
  import {
11
11
  upload
12
- } from "./chunk-YFADVSZE.js";
12
+ } from "./chunk-H62HCIUP.js";
13
13
  import {
14
14
  getRuntimeServerContext
15
- } from "./chunk-3RAG2NAD.js";
15
+ } from "./chunk-UKWGR5SS.js";
16
16
  import {
17
17
  API_ENDPOINTS
18
18
  } from "./chunk-LCBAMY2M.js";
@@ -367,6 +367,7 @@ var truncateToolOutputForContext = (text, contextWindow) => {
367
367
  // packages/ai/context/planCompression.ts
368
368
  var MIN_COMPRESS_COUNT = 5;
369
369
  var ACTIVE_SUMMARY_TAIL_KEEP_COUNT = 2;
370
+ var COMPACTION_RETENTION_CUSHION_RATIO = 0.18;
370
371
  var MIN_TRIGGER_PENDING_COUNT = MIN_COMPRESS_COUNT + ACTIVE_SUMMARY_TAIL_KEEP_COUNT;
371
372
  var getMessageTokenCount = (msg) => {
372
373
  const content = serializeMessageContent(msg.content) || "";
@@ -409,13 +410,14 @@ var normalizeContextUsageRatio = (value) => {
409
410
  const ratio = value > 1 ? value / 100 : value;
410
411
  return ratio >= 0 && ratio <= 1 ? ratio : void 0;
411
412
  };
412
- var emptyPlan = (startIndex) => ({
413
+ var emptyPlan = (startIndex, diagnostics) => ({
413
414
  shouldCompress: false,
414
415
  compressCount: 0,
415
416
  msgsToCompress: [],
416
417
  msgsToKeep: [],
417
418
  newSummarizedBeforeId: void 0,
418
- startIndex
419
+ startIndex,
420
+ ...diagnostics ? { diagnostics } : {}
419
421
  });
420
422
  function findPendingMessages(allMsgs, summarizedBeforeId) {
421
423
  let startIndex = 0;
@@ -464,15 +466,42 @@ function calculateCompressCount(pendingMsgs, rawMessageBudget, opts) {
464
466
  }
465
467
  return pendingMsgs.length - keepCount;
466
468
  }
469
+ function resolveEffectiveCompactionBudgets(args) {
470
+ const {
471
+ contextWindow,
472
+ triggerRatio,
473
+ historyBudget,
474
+ rawMessageBudget,
475
+ summaryTokens,
476
+ cushionRatio = COMPACTION_RETENTION_CUSHION_RATIO
477
+ } = args;
478
+ const maxRetainedRatio = Math.max(
479
+ 0.2,
480
+ Number((triggerRatio - cushionRatio).toFixed(4))
481
+ );
482
+ const maxRetainedHistoryBudget = Math.floor(contextWindow * maxRetainedRatio);
483
+ const effectiveHistoryBudget = Math.min(historyBudget, maxRetainedHistoryBudget);
484
+ const effectiveRawMessageBudget = Math.min(
485
+ rawMessageBudget,
486
+ Math.max(0, effectiveHistoryBudget - summaryTokens)
487
+ );
488
+ return {
489
+ effectiveHistoryBudget,
490
+ effectiveRawMessageBudget,
491
+ maxRetainedRatio
492
+ };
493
+ }
467
494
  function guardToolChainBoundary(pendingMsgs, compressCount) {
468
495
  let count = compressCount;
469
- while (count > 0 && count < pendingMsgs.length && pendingMsgs[count].role === "tool") {
470
- count--;
496
+ while (count < pendingMsgs.length && pendingMsgs[count].role === "tool") {
497
+ count++;
471
498
  }
472
- if (count > 0) {
473
- const lastCompressed = pendingMsgs[count - 1];
474
- if (hasOpenEndedToolCall(lastCompressed)) {
499
+ while (count > 0 && hasOpenEndedToolCall(pendingMsgs[count - 1])) {
500
+ if (count < pendingMsgs.length && pendingMsgs[count].role === "tool") {
501
+ count++;
502
+ } else {
475
503
  count--;
504
+ break;
476
505
  }
477
506
  }
478
507
  return count;
@@ -489,7 +518,20 @@ function planCompression(input) {
489
518
  coldResume
490
519
  } = input;
491
520
  const { pendingMsgs, startIndex } = findPendingMessages(allMsgs, summarizedBeforeId);
492
- if (pendingMsgs.length === 0) return emptyPlan(startIndex);
521
+ if (pendingMsgs.length === 0) {
522
+ return emptyPlan(startIndex, {
523
+ pendingMsgCount: 0,
524
+ totalUsed: estimateTokenCount(summary || ""),
525
+ historyBudget: 0,
526
+ triggerRatio: resolveCompressionTriggerRatio(contextWindow),
527
+ realUsageRatio: normalizeContextUsageRatio(realContextUsagePercent),
528
+ triggeredByRealUsage: false,
529
+ triggeredByEstimate: false,
530
+ triggeredByColdResume: false,
531
+ shouldRunActiveSummary: false,
532
+ emptyReason: "no-pending"
533
+ });
534
+ }
493
535
  const summaryTokens = estimateTokenCount(summary || "");
494
536
  const pendingTokens = pendingMsgs.reduce((sum, msg) => sum + getMessageTokenCount(msg), 0);
495
537
  const totalUsed = summaryTokens + pendingTokens;
@@ -517,14 +559,47 @@ function planCompression(input) {
517
559
  coldResume,
518
560
  lastMsg: pendingMsgs[pendingMsgs.length - 1]
519
561
  });
520
- if (!trigger) return emptyPlan(startIndex);
521
- let compressCount = calculateCompressCount(pendingMsgs, rawMessageBudget, {
522
- keepTailCount: shouldRunActiveSummary || triggeredByRealUsage || triggeredByColdResume,
562
+ const diagnostics = {
563
+ pendingMsgCount: pendingMsgs.length,
523
564
  totalUsed,
524
- historyBudget
565
+ historyBudget,
566
+ triggerRatio,
567
+ realUsageRatio: normalizeContextUsageRatio(realContextUsagePercent),
568
+ triggeredByRealUsage,
569
+ triggeredByEstimate: normalizeContextUsageRatio(realContextUsagePercent) === void 0 && totalUsed >= historyBudget,
570
+ triggeredByColdResume,
571
+ shouldRunActiveSummary
572
+ };
573
+ if (!trigger) {
574
+ return emptyPlan(startIndex, {
575
+ ...diagnostics,
576
+ emptyReason: "not-triggered"
577
+ });
578
+ }
579
+ const { effectiveHistoryBudget, effectiveRawMessageBudget } = resolveEffectiveCompactionBudgets({
580
+ contextWindow,
581
+ triggerRatio,
582
+ historyBudget,
583
+ rawMessageBudget,
584
+ summaryTokens
525
585
  });
586
+ let compressCount = calculateCompressCount(
587
+ pendingMsgs,
588
+ effectiveRawMessageBudget,
589
+ {
590
+ keepTailCount: shouldRunActiveSummary || triggeredByRealUsage || triggeredByColdResume,
591
+ totalUsed,
592
+ historyBudget: effectiveHistoryBudget
593
+ }
594
+ );
526
595
  compressCount = guardToolChainBoundary(pendingMsgs, compressCount);
527
- if (compressCount < MIN_COMPRESS_COUNT) return emptyPlan(startIndex);
596
+ if (compressCount < MIN_COMPRESS_COUNT) {
597
+ return emptyPlan(startIndex, {
598
+ ...diagnostics,
599
+ compressCount,
600
+ emptyReason: "below-min-compress-count"
601
+ });
602
+ }
528
603
  const msgsToCompress = pendingMsgs.slice(0, compressCount);
529
604
  const msgsToKeep = pendingMsgs.slice(compressCount);
530
605
  const newSummarizedBeforeId = msgsToCompress[msgsToCompress.length - 1].id;
@@ -534,7 +609,8 @@ function planCompression(input) {
534
609
  msgsToCompress,
535
610
  msgsToKeep,
536
611
  newSummarizedBeforeId,
537
- startIndex
612
+ startIndex,
613
+ diagnostics: { ...diagnostics, compressCount }
538
614
  };
539
615
  }
540
616
 
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  toolRegistry
3
- } from "./chunk-5Q5LYRJH.js";
3
+ } from "./chunk-5FBTLSFG.js";
4
4
  import {
5
5
  i18n_default
6
- } from "./chunk-BHXK3KPV.js";
6
+ } from "./chunk-QVKRR2SS.js";
7
7
  import {
8
8
  canonicalizeToolNames
9
9
  } from "./chunk-O6OSWFZQ.js";
10
10
  import {
11
11
  isNoloHostedProvider
12
- } from "./chunk-AJHEFRGJ.js";
12
+ } from "./chunk-Q67DOFOO.js";
13
13
  import {
14
14
  asTrimmedLowercaseString
15
15
  } from "./chunk-QSJ3HFEF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  readDbRecord,
3
3
  writeAgentRecord
4
- } from "./chunk-NRALD3CC.js";
4
+ } from "./chunk-AEOE4Z6Q.js";
5
5
  import {
6
6
  buildSkillSummaryMarker
7
7
  } from "./chunk-VF4K2QE6.js";
@@ -6,10 +6,10 @@ import {
6
6
  } from "./chunk-AGGIDPCZ.js";
7
7
  import {
8
8
  getModelConfig
9
- } from "./chunk-UJ63UXGE.js";
9
+ } from "./chunk-OIVSQH2O.js";
10
10
  import {
11
11
  isPlatformHostedImageModel
12
- } from "./chunk-AJHEFRGJ.js";
12
+ } from "./chunk-Q67DOFOO.js";
13
13
  import {
14
14
  asOptionalFiniteNumber
15
15
  } from "./chunk-WWC7I6TA.js";
@@ -31,9 +31,10 @@ var getModelPricing = (provider, modelName, _requestedServiceTier) => {
31
31
  };
32
32
  var getModelPricingForModel = (provider, modelName, model) => {
33
33
  if (!model.price) return null;
34
+ const rawCacheHit = typeof model.price.inputCacheHit === "number" ? model.price.inputCacheHit : model.price.cachingRead;
34
35
  return {
35
36
  inputPrice: model.price.input,
36
- inputCacheHitPrice: typeof model.price.inputCacheHit === "number" ? model.price.inputCacheHit : 0,
37
+ inputCacheHitPrice: typeof rawCacheHit === "number" ? rawCacheHit : 0,
37
38
  outputPrice: model.price.output
38
39
  };
39
40
  };
@@ -46,6 +46,7 @@ function extractMessage(error) {
46
46
  }
47
47
  function parseResetsInMs(text) {
48
48
  if (!text) return void 0;
49
+ const sanitized = text.replace(/\btrace[\s_-]?id\b[^)\n]*/gi, " ").replace(/\b[0-9a-f]{16,}\b/gi, " ");
49
50
  const unitMs = (n, unit) => {
50
51
  if (/^d/.test(unit)) return n * 24 * 3600 * 1e3;
51
52
  if (/^h/.test(unit)) return n * 3600 * 1e3;
@@ -54,12 +55,13 @@ function parseResetsInMs(text) {
54
55
  return NaN;
55
56
  };
56
57
  const re = /(\d+)\s*(d(?:ay|ays)?|h(?:r|rs|our|ours)?|m(?:in|ins|inute|inutes)?|s(?:ec|ecs|econd|econds)?)/gi;
58
+ const MAX_SINGLE_MATCH_MS = 7 * 24 * 3600 * 1e3;
57
59
  let totalMs = 0;
58
60
  let matched = false;
59
61
  let m;
60
- while ((m = re.exec(text)) !== null) {
62
+ while ((m = re.exec(sanitized)) !== null) {
61
63
  const ms = unitMs(Number(m[1]), m[2]);
62
- if (!Number.isFinite(ms)) continue;
64
+ if (!Number.isFinite(ms) || ms > MAX_SINGLE_MATCH_MS) continue;
63
65
  totalMs += ms;
64
66
  matched = true;
65
67
  }
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  patch,
12
12
  readAndWait
13
- } from "./chunk-YFADVSZE.js";
13
+ } from "./chunk-H62HCIUP.js";
14
14
  import {
15
15
  asOptionalTrimmedString
16
16
  } from "./chunk-G3SUCT4W.js";
@@ -326,7 +326,7 @@ async function saveDocState(arg, { dispatch, getState }) {
326
326
  ).unwrap();
327
327
  if (dbSpaceId) {
328
328
  try {
329
- const { updateContentTitle } = await import("./contentThunks-A2ZG3SW6.js");
329
+ const { updateContentTitle } = await import("./contentThunks-GJV22WVZ.js");
330
330
  await dispatch(
331
331
  updateContentTitle({
332
332
  spaceId: dbSpaceId,
@@ -365,7 +365,7 @@ async function saveDocState(arg, { dispatch, getState }) {
365
365
  }
366
366
  }
367
367
  async function createDocState(args, thunkApi) {
368
- const { createPageAction } = await import("./createPageAction-XN237WPJ.js");
368
+ const { createPageAction } = await import("./createPageAction-IR4BGJSI.js");
369
369
  return createPageAction(args, thunkApi);
370
370
  }
371
371
  function subscribe(listener) {