nolo-cli 0.38.0-alpha.2 → 0.47.0-alpha.1

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 (143) hide show
  1. package/{_executeModel-2S6HNTBF.js → _executeModel-JWAASOOT.js} +43 -45
  2. package/{action-KMBZ3LCZ.js → action-FLLC2SIX.js} +7 -7
  3. package/{addContentAction-KQ44UT2U.js → addContentAction-SVSPUUK4.js} +6 -6
  4. package/{addDialogAgentAction-ILSDCMYL.js → addDialogAgentAction-W3JGU4F7.js} +5 -5
  5. package/{agentDeleteCommand-6XYC7JVL.js → agentDeleteCommand-QL7TF5F2.js} +26 -27
  6. package/{agentEmailCommands-NGL5B3UC.js → agentEmailCommands-AC3XQM53.js} +57 -59
  7. package/{agentListCommands-R7TKN3DL.js → agentListCommands-4YMFHDU6.js} +33 -31
  8. package/{agentMachineCommands-AXOO4OKN.js → agentMachineCommands-MFQKYUV4.js} +25 -26
  9. package/{agentPullCommand-TSWAJPS2.js → agentPullCommand-M552CYSI.js} +2 -2
  10. package/{agentRecordCommands-GJHH5GYI.js → agentRecordCommands-QG3YBSTQ.js} +53 -55
  11. package/{agentRunCommand-4MEMHFT5.js → agentRunCommand-B4PGT36L.js} +56 -58
  12. package/{agentRunControl-7MUPSYDQ.js → agentRunControl-LHXOP4IU.js} +43 -1
  13. package/{agentRuntimeLocal-CPEWDR3Z.js → agentRuntimeLocal-V2UKJPNE.js} +21 -22
  14. package/{agentSlice-LAILHBMM.js → agentSlice-B5O3RTRP.js} +6 -6
  15. package/{agentSuperviseCommands-MKWW3ICX.js → agentSuperviseCommands-IMRZ56RC.js} +2 -2
  16. package/{appDeleteCommands-6SYOAMTR.js → appDeleteCommands-BQCRRHOM.js} +25 -26
  17. package/{appDeployCommands-ZNMFUV2K.js → appDeployCommands-UMJ67TUR.js} +25 -26
  18. package/{appDeployStatusCommands-G5FIZT64.js → appDeployStatusCommands-KASPUR4V.js} +25 -26
  19. package/{appGetCommands-4RIFLLZZ.js → appGetCommands-FFT2LTGF.js} +25 -26
  20. package/{appListCommands-DK2JJ65T.js → appListCommands-TAVWFRZZ.js} +25 -26
  21. package/{authCommand-B2XRHNJH.js → authCommand-OY2E2VQK.js} +12 -12
  22. package/{authCommands-GWABTFMR.js → authCommands-SBQVTD6V.js} +5 -5
  23. package/{chatQueueReduxAdapter-DQWFZYNL.js → chatQueueReduxAdapter-OVDKLHLD.js} +20 -20
  24. package/chunk-25J3BB35.js +6041 -0
  25. package/chunk-2BWU4ORW.js +2574 -0
  26. package/{chunk-U6QQLXWI.js → chunk-2X5S4IBZ.js} +1 -1
  27. package/{chunk-MJWX4JQO.js → chunk-3EEK7T3D.js} +1 -1
  28. package/{chunk-UNHKVD2N.js → chunk-43CXXVJD.js} +1 -1
  29. package/{chunk-WRP5TTM6.js → chunk-4MXGXSYN.js} +83 -3
  30. package/{chunk-2KO5QQFV.js → chunk-5IQX2XPA.js} +2 -2
  31. package/{chunk-ARFXKWJH.js → chunk-5PFBRLJN.js} +157 -51
  32. package/{chunk-W445DPVT.js → chunk-5QRCPERU.js} +1 -1
  33. package/{chunk-GKHV4UH5.js → chunk-5UOBIU5G.js} +31 -3
  34. package/{chunk-BMB563Y6.js → chunk-6BYAXNH5.js} +3 -3
  35. package/{chunk-SMPAUSX5.js → chunk-6FGXGFAH.js} +2 -2
  36. package/{chunk-6XIE5ZGI.js → chunk-6HIGYUBQ.js} +1 -1
  37. package/{chunk-NT3QRCVS.js → chunk-7US2USK7.js} +7 -7
  38. package/{chunk-FTM4KUOZ.js → chunk-7XTC3KRG.js} +1 -1
  39. package/{chunk-IMHO5LC6.js → chunk-7XZ5GXSN.js} +1 -1
  40. package/{chunk-E2OQ5N2F.js → chunk-AEXP2UZT.js} +341 -16
  41. package/{chunk-MZZZYUZS.js → chunk-AV2CELZZ.js} +37 -12
  42. package/{chunk-JI2TIPLP.js → chunk-AYXSUBVC.js} +1 -1
  43. package/{chunk-KR74XLMV.js → chunk-BIMCW2CC.js} +3 -3
  44. package/{chunk-GEGSCLZZ.js → chunk-C5UWCCLI.js} +3 -3
  45. package/{chunk-J6WH4PYZ.js → chunk-CIF4X6ZM.js} +1 -1
  46. package/{chunk-LZZQTQPY.js → chunk-CTXR4SRT.js} +3 -3
  47. package/{chunk-GZRMWK5R.js → chunk-DQLYEGP7.js} +2 -2
  48. package/{chunk-45NBTCS2.js → chunk-DROE55W3.js} +216 -48
  49. package/{chunk-GUYMR3JL.js → chunk-E2QH2AYX.js} +69 -3
  50. package/{chunk-B6H5XCT2.js → chunk-EMEUU5IY.js} +3 -3
  51. package/{chunk-X6EN3KJX.js → chunk-ENYDQKOB.js} +319 -71
  52. package/{chunk-RCFIB45Q.js → chunk-EVBFYPDC.js} +2 -2
  53. package/{chunk-PV734VZX.js → chunk-EXLOROHG.js} +1 -1
  54. package/{chunk-KHCLMKZZ.js → chunk-EY7V7REW.js} +280 -6
  55. package/{chunk-WRN7L5CS.js → chunk-FA4SY4F5.js} +1 -1
  56. package/{chunk-IFS5CUEH.js → chunk-FJHLA6SX.js} +1 -1
  57. package/{chunk-D72M3G32.js → chunk-FM6ZGNMV.js} +12 -12
  58. package/{chunk-T2BZICLK.js → chunk-G46DB6KG.js} +49 -6
  59. package/{chunk-FGLKRJDI.js → chunk-GK74OOFT.js} +2 -2
  60. package/{chunk-LM6IYQ3F.js → chunk-GLKOYSRU.js} +8 -1
  61. package/{chunk-YNAGAUJT.js → chunk-GYSVYO35.js} +61 -49
  62. package/{chunk-JIADXJYU.js → chunk-H2G6JXTR.js} +1 -1
  63. package/{chunk-MGIHZ5CJ.js → chunk-HAPCUPEO.js} +2 -2
  64. package/{chunk-LD6Y6RJY.js → chunk-HGDOIDQ4.js} +2 -2
  65. package/{chunk-IZNJDUJ4.js → chunk-I4JISVWK.js} +1 -1
  66. package/{chunk-N4XRDM26.js → chunk-IA3A5373.js} +2 -2
  67. package/{chunk-X2K2JSO4.js → chunk-IWUMSAQF.js} +5 -1
  68. package/{chunk-GEPHJJW4.js → chunk-L7NG2M6H.js} +1 -1
  69. package/{chunk-XQES6LXQ.js → chunk-LFLWZX76.js} +2 -2
  70. package/{chunk-IIOHYLIG.js → chunk-LGUQHYAL.js} +1 -1
  71. package/{chunk-4AWH4LQA.js → chunk-LYGNQHUW.js} +3 -1
  72. package/{db-3H3JECGY.js → chunk-M5PVFLD4.js} +11 -158
  73. package/{chunk-WN5AJG5I.js → chunk-MKZRKDQM.js} +1 -1
  74. package/{chunk-V5GA74HI.js → chunk-MZXZJVVD.js} +20 -39
  75. package/{chunk-EJAL5LSG.js → chunk-NC3CSWVT.js} +2 -2
  76. package/{chunk-6XG52ZQ6.js → chunk-NI2BS6UD.js} +22 -3
  77. package/{chunk-FXZBSLFK.js → chunk-NSQNNYGW.js} +20 -51
  78. package/{chunk-VOXNBPLB.js → chunk-OFSVXPQS.js} +651 -43
  79. package/{chunk-ZBB3MZR3.js → chunk-OLNC7AWK.js} +7 -4
  80. package/{chunk-J5NMOM35.js → chunk-OYNDYVSE.js} +1 -1
  81. package/{chunk-C6ELZQ7H.js → chunk-OZVGA4SY.js} +1 -1
  82. package/{chunk-K4KIFRIN.js → chunk-Q24S4NDF.js} +1 -1
  83. package/{chunk-HRSIJO5A.js → chunk-RNNAJ34U.js} +1 -1
  84. package/{chunk-JK7UM3LT.js → chunk-SEIOEDBB.js} +110 -49
  85. package/{chunk-2WKUUY2E.js → chunk-SVEUG45B.js} +5 -3
  86. package/{chunk-IZCHPD7T.js → chunk-TNPCQNGQ.js} +11 -6
  87. package/{chunk-4DMPISV6.js → chunk-URBGEE42.js} +2 -2
  88. package/{chunk-23KKIMD5.js → chunk-WVGEBWA6.js} +4 -4
  89. package/{chunk-TH7ZZKPJ.js → chunk-XIRSTDYF.js} +275 -134
  90. package/{chunk-64KIQZA2.js → chunk-XO3G35OV.js} +1 -1
  91. package/{chunk-CVXDBLYH.js → chunk-XOFZEJGM.js} +5 -5
  92. package/{chunk-XT73C4VH.js → chunk-Z5NW3O7V.js} +1 -1
  93. package/{codingSkills-H6N5EKSX.js → codingSkills-QLDAXJRA.js} +3 -4
  94. package/{cooldownCommands-C2SZLEEO.js → cooldownCommands-GI5NNWGL.js} +5 -3
  95. package/{createAgentAutomationAction-767ZITQJ.js → createAgentAutomationAction-TQ7PYONU.js} +21 -21
  96. package/{createDialogAction-H75NDXYH.js → createDialogAction-EOQFCM3K.js} +24 -25
  97. package/{createPageAction-KYJYZPLC.js → createPageAction-ZG5PH6BI.js} +22 -23
  98. package/db-VQSAOWAO.js +162 -0
  99. package/{dbSlice-PIQGICNM.js → dbSlice-XWUM4QOF.js} +5 -5
  100. package/deleteFile-NPZ64DFN.js +1 -1
  101. package/{dialogCommands-SSQLOBRU.js → dialogCommands-DCGMVLBA.js} +29 -27
  102. package/{dialogSlice-YJV3AVFM.js → dialogSlice-YHGPDBAZ.js} +20 -20
  103. package/{docCreateCommands-WYP6MQ56.js → docCreateCommands-A2LVLROP.js} +26 -28
  104. package/{docDeleteCommands-6YNU4LZ7.js → docDeleteCommands-ENMROKH6.js} +27 -29
  105. package/{docReadCommands-PFJMIPYU.js → docReadCommands-XSRUV4EM.js} +26 -28
  106. package/{docStore-JOODSWDW.js → docStore-WIKRGVQJ.js} +22 -22
  107. package/{docUpdateCommands-KAP6JSGT.js → docUpdateCommands-5B5NBORA.js} +26 -28
  108. package/{fetchMessages-CUEFN4GQ.js → fetchMessages-KZQVBXKY.js} +3 -3
  109. package/{getPricing-P3E2WRIH.js → getPricing-X3HXP6VQ.js} +3 -3
  110. package/{handleSendMessageAction-DGL6H4E4.js → handleSendMessageAction-WT4FDMQS.js} +21 -21
  111. package/index.js +70 -70
  112. package/levelLazyShim-GZBKODGI.js +7 -0
  113. package/{localDialogRead-P7CHFMIC.js → localDialogRead-NQ33HBSI.js} +2 -2
  114. package/{localRuntimeAuthority-S77B5QVB.js → localRuntimeAuthority-KQDAE64E.js} +4 -4
  115. package/{localRuntimeDb-N3H3HQ7G.js → localRuntimeDb-PF7CFKDL.js} +2 -2
  116. package/{machineCommands-NAFWPMLI.js → machineCommands-BFLTBAK6.js} +51 -53
  117. package/{machineWsRunDispatch-EWA7J37I.js → machineWsRunDispatch-VCJB5LHO.js} +51 -53
  118. package/{models-L7S2EKPM.js → models-7LWATQFH.js} +2 -2
  119. package/package.json +1 -1
  120. package/{read-6C2XD3YZ.js → read-DQQ75VI3.js} +2 -2
  121. package/{readDocTool-Y7AB365O.js → readDocTool-HCQQFAZD.js} +1 -1
  122. package/{readlineWorkspace-BCQVDX4V.js → readlineWorkspace-VBJLMU6V.js} +5168 -5003
  123. package/{removeDialogAgentAction-KG5WMJRZ.js → removeDialogAgentAction-DNONRKST.js} +7 -7
  124. package/{runAgentClientLoop-B3TTKXIX.js → runAgentClientLoop-4QOEJOJP.js} +41 -42
  125. package/{runtimeDoctorCommands-HT4O2PXL.js → runtimeDoctorCommands-JKTTN723.js} +4 -4
  126. package/serverStoreFactory-YMXDF4NI.js +20 -0
  127. package/{setDialogExtraReferencesAction-O2NLXMSM.js → setDialogExtraReferencesAction-ERHUPT3F.js} +6 -6
  128. package/{setPrimaryDialogAgentAction-FYYUY7PB.js → setPrimaryDialogAgentAction-6C2HYNEC.js} +7 -7
  129. package/{settingSlice-GPLI6E3M.js → settingSlice-YVRJFKQX.js} +6 -6
  130. package/{skillDiscovery-COX56OBO.js → skillDiscovery-GPUDHDTZ.js} +1 -2
  131. package/{spaceCommands-VHOKUADK.js → spaceCommands-FBB7XSAW.js} +24 -25
  132. package/{spaceSlice-ZKUZSVYD.js → spaceSlice-YMDZ4G6H.js} +21 -21
  133. package/{streamAgentChatTurn-PLTB7RMV.js → streamAgentChatTurn-5NBWQHY6.js} +93 -52
  134. package/{switchDialogAgentAction-GH5P6Q3Z.js → switchDialogAgentAction-HP57XYFP.js} +5 -5
  135. package/{tools-KQXDW66A.js → tools-37H5A4OG.js} +34 -35
  136. package/{tuiSummaryLlmCaller-SHRB4RWM.js → tuiSummaryLlmCaller-NBTWT57U.js} +25 -14
  137. package/{updateDialogTitleAction-OTYEQJAK.js → updateDialogTitleAction-XAGMXHW5.js} +24 -23
  138. package/chunk-4APLX2RT.js +0 -1514
  139. package/chunk-AETZ7AD6.js +0 -274
  140. package/chunk-OFZPJ3NT.js +0 -114
  141. package/chunk-P66M7LSQ.js +0 -58
  142. package/{chunk-6WD3OOJS.js → chunk-UV6VISQJ.js} +0 -0
  143. package/{tableCommands-PQUJ55AS.js → tableCommands-P2TXJ3CF.js} +1 -1
@@ -1,4 +1,11 @@
1
- // node_modules/js-yaml/dist/js-yaml.mjs
1
+ import {
2
+ asTrimmedNonEmptyStringArray
3
+ } from "./chunk-I42VC5KR.js";
4
+ import {
5
+ asOptionalTrimmedString
6
+ } from "./chunk-G3SUCT4W.js";
7
+
8
+ // packages/ai/node_modules/js-yaml/dist/js-yaml.mjs
2
9
  function getDefaultExportFromCjs(x) {
3
10
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
4
11
  }
@@ -1276,16 +1283,21 @@ function requireLoader() {
1276
1283
  state.result += _result;
1277
1284
  }
1278
1285
  }
1286
+ function chargeMergeWork(state) {
1287
+ state.totalMergeKeys++;
1288
+ if (state.maxTotalMergeKeys !== -1 && state.totalMergeKeys > state.maxTotalMergeKeys) {
1289
+ throwError(state, "merge keys exceeded maxTotalMergeKeys (" + state.maxTotalMergeKeys + ")");
1290
+ }
1291
+ }
1279
1292
  function mergeMappings(state, destination, source, overridableKeys) {
1280
1293
  if (!common2.isObject(source)) {
1281
1294
  throwError(state, "cannot merge mappings; the provided source object is unacceptable");
1282
1295
  }
1296
+ chargeMergeWork(state);
1283
1297
  const sourceKeys = Object.keys(source);
1284
1298
  for (let index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
1285
1299
  const key = sourceKeys[index];
1286
- if (state.maxTotalMergeKeys !== -1 && ++state.totalMergeKeys > state.maxTotalMergeKeys) {
1287
- throwError(state, "merge keys exceeded maxTotalMergeKeys (" + state.maxTotalMergeKeys + ")");
1288
- }
1300
+ chargeMergeWork(state);
1289
1301
  if (!_hasOwnProperty.call(destination, key)) {
1290
1302
  setProperty(destination, key, source[key]);
1291
1303
  overridableKeys[key] = true;
@@ -1313,6 +1325,9 @@ function requireLoader() {
1313
1325
  }
1314
1326
  if (keyTag === "tag:yaml.org,2002:merge") {
1315
1327
  if (Array.isArray(valueNode)) {
1328
+ if (valueNode.length > 100) {
1329
+ throwError(state, "abnormal merge sequence size");
1330
+ }
1316
1331
  for (let index = 0, quantity = valueNode.length; index < quantity; index += 1) {
1317
1332
  mergeMappings(state, _result, valueNode[index], overridableKeys);
1318
1333
  }
@@ -3056,7 +3071,266 @@ var {
3056
3071
  safeDump
3057
3072
  } = yaml;
3058
3073
 
3074
+ // packages/ai/skills/skillDocProtocol.ts
3075
+ var SKILL_DOC_ENUMS = {
3076
+ triggerMode: ["explicit", "required", "recommended"],
3077
+ // budgetTier 只服务 WorkflowReferenceConfig;skill 侧已移除(零读点)。
3078
+ budgetTier: ["low", "medium", "high"],
3079
+ modality: ["text", "image", "video", "audio", "3d"],
3080
+ docKind: ["knowledge", "instruction", "skill"]
3081
+ };
3082
+ var SKILL_CONFIG_BLOCK = "skill-config";
3083
+ var EVAL_CONFIG_BLOCK = "eval-config";
3084
+ var WORKFLOW_CONFIG_BLOCK = "workflow-config";
3085
+ var normalizeStringArray = (value) => {
3086
+ if (!Array.isArray(value)) return void 0;
3087
+ const items = [...new Set(asTrimmedNonEmptyStringArray(value))];
3088
+ return items.length > 0 ? items : void 0;
3089
+ };
3090
+ var normalizeSkillEnumValue = (key, value) => typeof value === "string" && SKILL_DOC_ENUMS[key].includes(value) ? value : void 0;
3091
+ var normalizeSkillModalities = (value) => {
3092
+ const raw = normalizeStringArray(value);
3093
+ if (!raw) return void 0;
3094
+ const filtered = raw.flatMap((item) => {
3095
+ const modality = normalizeSkillEnumValue("modality", item);
3096
+ return modality ? [modality] : [];
3097
+ });
3098
+ return filtered.length > 0 ? Array.from(new Set(filtered)) : void 0;
3099
+ };
3100
+ var normalizeSkillConfig = (value, fallbackTools) => {
3101
+ if (!value || typeof value !== "object") return void 0;
3102
+ const record = value;
3103
+ const name = asOptionalTrimmedString(record.name) ?? "";
3104
+ const description = asOptionalTrimmedString(record.description) ?? "";
3105
+ if (!name || !description) return void 0;
3106
+ const triggerMode = normalizeSkillEnumValue("triggerMode", record.triggerMode);
3107
+ const modalities = normalizeSkillModalities(record.modalities);
3108
+ const toolNames = normalizeStringArray(record.toolNames) ?? normalizeStringArray(fallbackTools) ?? void 0;
3109
+ return {
3110
+ version: "0.1",
3111
+ kind: "skill",
3112
+ id: asOptionalTrimmedString(record.id),
3113
+ name,
3114
+ description,
3115
+ triggerMode,
3116
+ toolNames,
3117
+ modalities,
3118
+ requiredSkills: normalizeStringArray(record.requiredSkills),
3119
+ recommendedSkills: normalizeStringArray(record.recommendedSkills),
3120
+ promptPatch: asOptionalTrimmedString(record.promptPatch)
3121
+ };
3122
+ };
3123
+ var normalizeEvalConfig = (value) => {
3124
+ if (!value || typeof value !== "object") return void 0;
3125
+ const record = value;
3126
+ if (!Array.isArray(record.cases)) return void 0;
3127
+ const cases = [];
3128
+ for (const item of record.cases) {
3129
+ if (!item || typeof item !== "object") continue;
3130
+ const testCase = item;
3131
+ const input = asOptionalTrimmedString(testCase.input) ?? "";
3132
+ if (!input) continue;
3133
+ cases.push({
3134
+ input,
3135
+ expectedTools: normalizeStringArray(testCase.expectedTools),
3136
+ expectedSignals: normalizeStringArray(testCase.expectedSignals),
3137
+ forbiddenSignals: normalizeStringArray(testCase.forbiddenSignals)
3138
+ });
3139
+ }
3140
+ return cases.length > 0 ? {
3141
+ version: "0.1",
3142
+ cases
3143
+ } : void 0;
3144
+ };
3145
+ var normalizeWorkflowConfig = (value) => {
3146
+ if (!value || typeof value !== "object") return void 0;
3147
+ const record = value;
3148
+ const name = asOptionalTrimmedString(record.name) ?? "";
3149
+ const description = asOptionalTrimmedString(record.description) ?? "";
3150
+ if (!name || !description) return void 0;
3151
+ const budgetTier = normalizeSkillEnumValue("budgetTier", record.budgetTier);
3152
+ return {
3153
+ version: "0.1",
3154
+ kind: "workflow",
3155
+ id: asOptionalTrimmedString(record.id),
3156
+ name,
3157
+ description,
3158
+ defaultAgent: asOptionalTrimmedString(record.defaultAgent),
3159
+ inputs: normalizeStringArray(record.inputs),
3160
+ recommendedTools: normalizeStringArray(record.recommendedTools),
3161
+ requiredTools: normalizeStringArray(record.requiredTools),
3162
+ requiredOutputs: normalizeStringArray(record.requiredOutputs),
3163
+ gates: normalizeStringArray(record.gates),
3164
+ budgetTier,
3165
+ contextStrategy: asOptionalTrimmedString(record.contextStrategy),
3166
+ failureProtocol: asOptionalTrimmedString(record.failureProtocol)
3167
+ };
3168
+ };
3169
+ var normalizePageSkillMetadata = (value, fallbackTools) => {
3170
+ if (!value || typeof value !== "object") return void 0;
3171
+ const record = value;
3172
+ const kind = normalizeSkillEnumValue("docKind", record.kind);
3173
+ const meta = {
3174
+ kind,
3175
+ requiredSkills: normalizeStringArray(record.requiredSkills),
3176
+ recommendedSkills: normalizeStringArray(record.recommendedSkills),
3177
+ skillConfig: normalizeSkillConfig(record.skillConfig, fallbackTools),
3178
+ evalConfig: normalizeEvalConfig(record.evalConfig),
3179
+ workflowConfig: normalizeWorkflowConfig(record.workflowConfig)
3180
+ };
3181
+ if (meta.skillConfig && !meta.kind) {
3182
+ meta.kind = "skill";
3183
+ }
3184
+ if (meta.workflowConfig && !meta.kind) {
3185
+ meta.kind = "instruction";
3186
+ }
3187
+ return meta.kind || meta.requiredSkills || meta.recommendedSkills || meta.skillConfig || meta.evalConfig || meta.workflowConfig ? meta : void 0;
3188
+ };
3189
+ var extractCommentBlock = (markdown, blockName) => {
3190
+ if (!markdown) return void 0;
3191
+ const matcher = new RegExp(
3192
+ `<!--\\s*${blockName}\\s*\\n([\\s\\S]*?)-->`,
3193
+ "i"
3194
+ );
3195
+ const match = markdown.match(matcher);
3196
+ return asOptionalTrimmedString(match?.[1]);
3197
+ };
3198
+ var removeCommentBlock = (markdown, blockName) => markdown.replace(
3199
+ new RegExp(`\\n?<!--\\s*${blockName}\\s*\\n[\\s\\S]*?-->\\s*`, "gi"),
3200
+ "\n\n"
3201
+ );
3202
+ var parseYamlObject = (raw) => {
3203
+ if (!raw) return void 0;
3204
+ try {
3205
+ const parsed = load(raw);
3206
+ return parsed && typeof parsed === "object" ? parsed : void 0;
3207
+ } catch {
3208
+ return void 0;
3209
+ }
3210
+ };
3211
+ var parseSkillDocProtocol = (markdown, existingMeta, fallbackTools) => {
3212
+ const source = typeof markdown === "string" ? markdown : "";
3213
+ const skillBlock = parseYamlObject(extractCommentBlock(source, SKILL_CONFIG_BLOCK));
3214
+ const evalBlock = parseYamlObject(extractCommentBlock(source, EVAL_CONFIG_BLOCK));
3215
+ const workflowBlock = parseYamlObject(extractCommentBlock(source, WORKFLOW_CONFIG_BLOCK));
3216
+ const cleanedContent = removeCommentBlock(
3217
+ removeCommentBlock(
3218
+ removeCommentBlock(source, SKILL_CONFIG_BLOCK),
3219
+ EVAL_CONFIG_BLOCK
3220
+ ),
3221
+ WORKFLOW_CONFIG_BLOCK
3222
+ ).replace(/\n{3,}/g, "\n\n").trim();
3223
+ const parsedMeta = normalizePageSkillMetadata(
3224
+ {
3225
+ ...existingMeta ?? {},
3226
+ ...skillBlock ? {
3227
+ kind: existingMeta?.kind === "skill" || skillBlock.kind === "skill" ? "skill" : existingMeta?.kind,
3228
+ requiredSkills: skillBlock.requiredSkills ?? existingMeta?.requiredSkills,
3229
+ recommendedSkills: skillBlock.recommendedSkills ?? existingMeta?.recommendedSkills,
3230
+ skillConfig: skillBlock
3231
+ } : {},
3232
+ ...evalBlock ? { evalConfig: evalBlock } : {},
3233
+ ...workflowBlock ? { workflowConfig: workflowBlock } : {}
3234
+ },
3235
+ fallbackTools
3236
+ );
3237
+ return {
3238
+ content: cleanedContent,
3239
+ meta: parsedMeta
3240
+ };
3241
+ };
3242
+ var resolvePageSkillMetadata = (page) => {
3243
+ if (!page) return void 0;
3244
+ const existingMeta = normalizePageSkillMetadata(page.meta, page.tools);
3245
+ return parseSkillDocProtocol(page.content ?? "", existingMeta, page.tools).meta;
3246
+ };
3247
+ var yamlBlock = (value) => dump(value, { lineWidth: 120, noRefs: true }).trim();
3248
+ var buildSkillConfigComment = (config) => {
3249
+ const payload = {
3250
+ version: config.version,
3251
+ kind: config.kind,
3252
+ ...config.id ? { id: config.id } : {},
3253
+ name: config.name,
3254
+ description: config.description,
3255
+ ...config.triggerMode ? { triggerMode: config.triggerMode } : {},
3256
+ ...config.requiredSkills?.length ? { requiredSkills: config.requiredSkills } : {},
3257
+ ...config.recommendedSkills?.length ? { recommendedSkills: config.recommendedSkills } : {},
3258
+ ...config.toolNames?.length ? { toolNames: config.toolNames } : {},
3259
+ ...config.modalities?.length ? { modalities: config.modalities } : {},
3260
+ ...config.promptPatch ? { promptPatch: config.promptPatch } : {}
3261
+ };
3262
+ return `<!-- ${SKILL_CONFIG_BLOCK}
3263
+ ${yamlBlock(payload)}
3264
+ -->`;
3265
+ };
3266
+ var buildEvalConfigComment = (config) => `<!-- ${EVAL_CONFIG_BLOCK}
3267
+ ${yamlBlock({
3268
+ version: config.version,
3269
+ cases: config.cases
3270
+ })}
3271
+ -->`;
3272
+ var buildWorkflowConfigComment = (config) => `<!-- ${WORKFLOW_CONFIG_BLOCK}
3273
+ ${yamlBlock({
3274
+ version: config.version,
3275
+ kind: config.kind,
3276
+ ...config.id ? { id: config.id } : {},
3277
+ name: config.name,
3278
+ description: config.description,
3279
+ ...config.defaultAgent ? { defaultAgent: config.defaultAgent } : {},
3280
+ ...config.inputs?.length ? { inputs: config.inputs } : {},
3281
+ ...config.recommendedTools?.length ? { recommendedTools: config.recommendedTools } : {},
3282
+ ...config.requiredTools?.length ? { requiredTools: config.requiredTools } : {},
3283
+ ...config.requiredOutputs?.length ? { requiredOutputs: config.requiredOutputs } : {},
3284
+ ...config.gates?.length ? { gates: config.gates } : {},
3285
+ ...config.budgetTier ? { budgetTier: config.budgetTier } : {},
3286
+ ...config.contextStrategy ? { contextStrategy: config.contextStrategy } : {},
3287
+ ...config.failureProtocol ? { failureProtocol: config.failureProtocol } : {}
3288
+ })}
3289
+ -->`;
3290
+ var buildSkillDocMarkdown = (options) => {
3291
+ const sections = [
3292
+ asOptionalTrimmedString(options.body) ?? "",
3293
+ buildSkillConfigComment(options.skillConfig),
3294
+ options.evalConfig ? buildEvalConfigComment(options.evalConfig) : "",
3295
+ options.workflowConfig ? buildWorkflowConfigComment(options.workflowConfig) : ""
3296
+ ].filter(Boolean);
3297
+ return sections.join("\n\n").trim();
3298
+ };
3299
+ var extractFrontmatter = (markdown) => {
3300
+ const match = markdown.match(/^\s*---\s*\n([\s\S]*?)\n\s*---\s*\n?/);
3301
+ if (!match) return { body: markdown.trim() };
3302
+ const frontmatter = parseYamlObject(match[1]);
3303
+ const body = markdown.slice(match[0].length).trim();
3304
+ return { frontmatter, body };
3305
+ };
3306
+ var normalizeAllowedTools = (value) => {
3307
+ if (Array.isArray(value)) {
3308
+ return normalizeStringArray(value) ?? [];
3309
+ }
3310
+ if (typeof value === "string") {
3311
+ return value.split(/\s+/).map((item) => item.trim()).filter(Boolean);
3312
+ }
3313
+ return [];
3314
+ };
3315
+ var parseExternalSkillMarkdown = (markdown) => {
3316
+ const { frontmatter, body } = extractFrontmatter(markdown);
3317
+ return {
3318
+ name: asOptionalTrimmedString(frontmatter?.name),
3319
+ description: asOptionalTrimmedString(frontmatter?.description),
3320
+ compatibility: asOptionalTrimmedString(frontmatter?.compatibility),
3321
+ allowedTools: normalizeAllowedTools(frontmatter?.["allowed-tools"]),
3322
+ metadata: frontmatter?.metadata && typeof frontmatter.metadata === "object" ? Object.fromEntries(
3323
+ Object.entries(frontmatter.metadata).filter(([, value]) => typeof value === "string").map(([key, value]) => [key, String(value)])
3324
+ ) : void 0,
3325
+ body
3326
+ };
3327
+ };
3328
+
3059
3329
  export {
3060
- load,
3061
- dump
3330
+ normalizeStringArray,
3331
+ normalizeSkillModalities,
3332
+ parseSkillDocProtocol,
3333
+ resolvePageSkillMetadata,
3334
+ buildSkillDocMarkdown,
3335
+ parseExternalSkillMarkdown
3062
3336
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  dialogMessageRange
3
- } from "./chunk-2WKUUY2E.js";
3
+ } from "./chunk-SVEUG45B.js";
4
4
  import {
5
5
  isTombstoneRecord
6
6
  } from "./chunk-GBRG75BQ.js";
@@ -199,7 +199,7 @@ async function readDocFunc(args, thunkApi) {
199
199
  throw new Error(`\u65E0\u6548\u7684\u9875\u9762 ID: ${id}\u3002\u9875\u9762 ID \u901A\u5E38\u4EE5 "page-" \u5F00\u5934\u3002`);
200
200
  }
201
201
  try {
202
- const { readAction } = await import("./read-6C2XD3YZ.js");
202
+ const { readAction } = await import("./read-DQQ75VI3.js");
203
203
  const pageData = await readAction({ dbKey: id }, thunkApi);
204
204
  if (!pageData) {
205
205
  throw new Error(`\u672A\u627E\u5230 ID \u4E3A ${id} \u7684\u9875\u9762\u3002`);
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  deleteDialog,
3
3
  toast
4
- } from "./chunk-ARFXKWJH.js";
4
+ } from "./chunk-5PFBRLJN.js";
5
5
  import {
6
6
  deleteServerSyncedCredential
7
- } from "./chunk-CVXDBLYH.js";
7
+ } from "./chunk-XOFZEJGM.js";
8
8
  import {
9
9
  require_date_fns
10
10
  } from "./chunk-M76ECQRD.js";
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-HNMXYYJR.js";
20
20
  import {
21
21
  isSystemAdmin
22
- } from "./chunk-B6H5XCT2.js";
22
+ } from "./chunk-EMEUU5IY.js";
23
23
  import {
24
24
  asRecordOrEmpty
25
25
  } from "./chunk-KX6YBIHG.js";
@@ -30,7 +30,7 @@ import {
30
30
  createSpaceKey,
31
31
  localSpaceAuthorityPatchStamp,
32
32
  normalizeSpaceId
33
- } from "./chunk-MJWX4JQO.js";
33
+ } from "./chunk-3EEK7T3D.js";
34
34
  import {
35
35
  patch,
36
36
  read,
@@ -43,7 +43,7 @@ import {
43
43
  uploadFileAction,
44
44
  upsertSSREntity,
45
45
  write
46
- } from "./chunk-23KKIMD5.js";
46
+ } from "./chunk-WVGEBWA6.js";
47
47
  import {
48
48
  DB_PREFIX,
49
49
  SEPARATOR,
@@ -62,17 +62,17 @@ import {
62
62
  splitKey,
63
63
  toTrimmedString,
64
64
  ulid
65
- } from "./chunk-2WKUUY2E.js";
65
+ } from "./chunk-SVEUG45B.js";
66
+ import {
67
+ asOptionalFiniteNumber
68
+ } from "./chunk-WWC7I6TA.js";
66
69
  import {
67
70
  asNonEmptyStringArray,
68
71
  asTrimmedNonEmptyStringArray
69
72
  } from "./chunk-I42VC5KR.js";
70
- import {
71
- asOptionalFiniteNumber
72
- } from "./chunk-WWC7I6TA.js";
73
73
  import {
74
74
  readAction
75
- } from "./chunk-XT73C4VH.js";
75
+ } from "./chunk-Z5NW3O7V.js";
76
76
  import {
77
77
  extractUserId
78
78
  } from "./chunk-BJIRLHJR.js";
@@ -7053,7 +7053,7 @@ var fetchSpaceAction = async (input, thunkAPI) => {
7053
7053
  const spaceKey = createSpaceKey.space(spaceId);
7054
7054
  const readSpace = async (dbKey) => {
7055
7055
  try {
7056
- const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-PIQGICNM.js");
7056
+ const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-XWUM4QOF.js");
7057
7057
  if (fresh) {
7058
7058
  return await dispatch(readAndWait2(dbKey)).unwrap();
7059
7059
  }
@@ -7467,7 +7467,7 @@ var spaceSlice = createSliceWithThunks2({
7467
7467
  markDialogRead: create.asyncThunk(
7468
7468
  async (payload, thunkAPI) => {
7469
7469
  if (payload.dialogKey) {
7470
- const { patch: patch2 } = await import("./dbSlice-PIQGICNM.js");
7470
+ const { patch: patch2 } = await import("./dbSlice-XWUM4QOF.js");
7471
7471
  try {
7472
7472
  await thunkAPI.dispatch(
7473
7473
  patch2({ dbKey: payload.dialogKey, changes: { unreadAt: null } })
@@ -1,12 +1,17 @@
1
1
  import {
2
2
  isImageUrlPart
3
- } from "./chunk-BMB563Y6.js";
3
+ } from "./chunk-6BYAXNH5.js";
4
4
  import {
5
5
  AGENT_SELECTION_PRIORITY_INSTRUCTIONS
6
- } from "./chunk-IZCHPD7T.js";
6
+ } from "./chunk-TNPCQNGQ.js";
7
7
  import {
8
8
  canonicalizeToolNames
9
9
  } from "./chunk-O6OSWFZQ.js";
10
+ import {
11
+ PLATFORM_HOSTED_KIMI_K3_MODEL,
12
+ isFireworksKimiModel,
13
+ isNoloHostedProvider
14
+ } from "./chunk-ENYDQKOB.js";
10
15
  import {
11
16
  asTrimmedLowercaseString
12
17
  } from "./chunk-QSJ3HFEF.js";
@@ -166,7 +171,7 @@ var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\
166
171
  \u7528 startAgentRun \u542F\u52A8\u5B50 Agent\uFF08wait:false \u5F02\u6B65 fork+exec \u8FD4\u56DE runId\uFF1Bwait:true \u540C\u6B65\u7B49\u7ED3\u679C\uFF09\uFF0C\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF08wait/signal/proc \u8BED\u4E49\uFF09\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u600E\u4E48\u76EF\u3001\u600E\u4E48\u6392\u9519\u3002
167
172
 
168
173
  1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u8981\u7ACB\u5373\u62FF\u7ED3\u679C\u5C31\u522B\u7528\u5F02\u6B65\uFF1A<100s \u5B50\u4EFB\u52A1\u76F4\u63A5 startAgentRun({ wait: true })\uFF1B\u5DF2\u5F02\u6B65\u6D3E\u51FA\u7684\u7528 controlAgentRun(action:"wait", runId) \u963B\u585E\u5230\u7EC8\u6001\u3002\u652F\u6301\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u684C\u9762 TUI\uFF09run \u5230\u7EC8\u6001\u81EA\u52A8\u6458\u8981\u5524\u9192\u4F60\uFF0C\u65E0\u5E76\u884C\u5DE5\u4F5C\u5219\u4E00\u53E5\u8BDD\u6536\u5C3E\uFF1B\u6CA1\u6709\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u88F8 CLI\u3001\u670D\u52A1\u7AEF runtime\uFF09\u7528 wait \u963B\u585E\uFF0C\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF\u67E5\u3002
169
- 2. \u7B49\u5F85/\u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status \u7684\u8BED\u4E49\u4EE5 startAgentRun \u4E0E controlAgentRun \u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002controlAgentRun \u53EA\u5728\u300C\u7B54\u6848\u4F1A\u6539\u53D8\u4F60\u4E0B\u4E00\u6B65\u52A8\u4F5C\u300D\u65F6\u7528\uFF08\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u53EB\u505C/\u8865\u6D3E\uFF09\uFF1B\u4E00\u6B21\u6027\u6B7B\u6D3B\u68C0\u67E5\u7528 status(runId, tailLines:0)\u3002\u5E76\u884C\uFF1A\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u4E4B\u540E\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002
174
+ 2. \u7B49\u5F85/\u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status \u7684\u8BED\u4E49\u4EE5 startAgentRun \u4E0E controlAgentRun \u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002controlAgentRun \u53EA\u5728\u300C\u7B54\u6848\u4F1A\u6539\u53D8\u4F60\u4E0B\u4E00\u6B65\u52A8\u4F5C\u300D\u65F6\u7528\uFF08\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u53EB\u505C/\u8865\u6D3E\uFF09\uFF1B\u4E00\u6B21\u6027\u6B7B\u6D3B\u68C0\u67E5\u7528 status(runId, tailLines:0)\u3002\u5E76\u884C\uFF1A\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u4E4B\u540E\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\u2014\u2014\u4E0D\u8981\u56E0\u5B83\u4EEC\u6070\u597D\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u7684\u4FDD\u5B88\u5047\u8BBE\uFF08\u540C\u901A\u9053\u5141\u8BB8\u5E76\u53D1 fork \u591A\u5B9E\u4F8B\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF1B\u53EA\u6709\u4EFB\u52A1\u95F4\u5B58\u5728\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
170
175
  3. \u6392\u9519\uFF1A\u5148\u5206\u8BCA\u518D\u4E0B\u7ED3\u8BBA\u3002\u2460 \u590D\u6838 agentKey \u662F\u5426\u7167\u6284\u81EA listAgents\uFF08\u4E0D\u662F\u5C31\u5148\u4FEE key\uFF0C\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\u2461 \u62A5\u9519\u542B not found / invalid ref / Local agent config not found \u2192 \u5148 readAgent \u590D\u6838\uFF0C**\u7981\u6B62**\u636E\u6B64\u63A8\u65AD\u51ED\u8BC1\u7F3A\u5931\u6216\u901A\u9053\u5168\u6302\uFF1B\u2462 \u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4E0A\u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u2192 \u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002
171
176
  4. \u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u524D\uFF0C\u81F3\u5C11\u5BF9 2 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\uFF1B\u5019\u9009\u4E0D\u8DB3 2 \u4E2A\u5C31\u5982\u5B9E\u62A5\u544A\u300C\u4EC5\u6B64\u5019\u9009\u4E14\u901A\u9053\u5931\u8D25\u300D\uFF0C\u4E0D\u5F97\u5938\u5927\u6210\u5168\u5E93\u4E0D\u53EF\u7528\u3002\u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u6BEB\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\uFF1Bstop \u4E4B\u524D\u5148\u770B\u65E5\u5FD7\u786E\u8BA4\u662F\u771F\u5361\u6B7B\uFF0C\u5E76\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\u2014\u2014\u522B\u5047\u8BBE\u300C\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1\u300D\u3002`;
172
177
  var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C\uFF08\u591A Agent \u534F\u4F5C\uFF1A\u8BA1\u5212 \u2192 \u6309\u9700\u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
@@ -191,11 +196,12 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
191
196
  ${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
192
197
  - \u4E2D\u6587\u5199\u7A3F/\u957F\u6587\u521B\u4F5C/\u4F4E AI \u5473\u5185\u5BB9\uFF1A\u4F18\u5148\u9009 \`gemini-3.7-flash\`\uFF08\u884C\u6587\u81EA\u7136\u3001\u9AD8\u6027\u4EF7\u6BD4\uFF09\u6216 \`kimi-k3\`\u3002
193
198
  - \u9876\u6863\u6A21\u578B\uFF08Opus 5\u3001GPT-5.6 Sol \u53CA\u540C\u7EA7\uFF09\u81EA\u52A8\u59D4\u6258\u786C\u95E8\uFF1A\u4EC5\u7528\u4E8E\u590D\u6742\u67B6\u6784/\u8DE8\u57DF\u8BBE\u8BA1\u3001\u91CD\u5927\u4E8B\u6545\u3001\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027\u9AD8\u98CE\u9669\u5206\u6790\u3001\u8FBE\u6807\u7684\u6DF1 review\uFF0C\u6216\u4F4E\u4EF7\u5019\u9009\u5DF2\u6709\u5931\u8D25\u8BC1\u636E\u540E\u7684\u5347\u7EA7\u3002\u6DF1 review \u8FBE\u6807\u7EBF\uFF1D\u6539\u52A8\u6587\u4EF6\u6570 \u2265 30 \u4E14\u89E6\u53CA\u8BA1\u8D39/\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027/\u6838\u5FC3\u8DEF\u7531\uFF0C\u6216\u4F4E\u4EF7 reviewer \u5DF2 BLOCK/\u901A\u9053\u5931\u8D25\u3002\u666E\u901A review \u9ED8\u8BA4\u6D3E\u4F4E\u4EF7\u5019\u9009\u3002\u9009\u9876\u6863\u8981\u5728\u56DE\u590D\u91CC\u8BF4\u660E\u7406\u7531\uFF1B\u7528\u6237\u70B9\u540D\u4E0D\u53D7\u6B64\u9650\u3002
199
+ - \u901A\u9053\u6392\u9664\u5224\u636E\uFF1A\u53EA\u6392\u9664\u300C\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\u300D\u4E0E\u300C\u5F53\u65F6\u5B9E\u6D4B\u6B7B\u56E0\u7684\u574F\u901A\u9053\u300D\uFF08\u914D\u989D\u8017\u5C3D/\u4F59\u989D\u4E0D\u8DB3/\u9650\u6D41\uFF0C\u987B\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\uFF09\u3002\u7F16\u6392\u8005\u81EA\u8EAB\u7684 agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u65B0\u5B9E\u4F8B\u4E0D\u5E26\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF1A\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u662F\u5408\u6CD5 reviewer\uFF0C\u4E14 flash \u6863\u5E38\u662F\u6700\u4FBF\u5B9C\u7684 review \u901A\u9053\uFF1B\u300C\u4E0D\u70E7\u5E73\u53F0\u79EF\u5206\u300D\u4F18\u5148\u7EA7\u5BF9\u5927\u8DD1\u91CF\u6267\u884C\u8005\u6210\u7ACB\uFF0C\u5BF9 flash \u6863 review\uFF08\u6210\u672C\u53EF\u5FFD\u7565\uFF09\u4E0D\u9002\u7528\u3002
194
200
  - \u4E0D\u51ED\u540D\u5B57\u7F16\u9020\u80FD\u529B\uFF0C\u4E0D\u7D22\u53D6 prompt/\u5BC6\u94A5/\u6570\u636E\u5E93 key \u6765\u9009\u4EBA\uFF1B\u6D3E\u53D1\u524D\u8DF3\u8FC7\u5DF2\u77E5\u574F\u901A\u9053\uFF08\u914D\u7F6E\u7F3A\u5931/\u533A\u57DF\u9650\u5236/\u7F51\u5173 400\uFF09\u3002
195
201
 
196
- **\u62C6\u5206\u4E0E\u6D3E\u53D1\u8D28\u91CF**\uFF1A\u6309\u72EC\u7ACB\u9886\u57DF\u62C6\uFF0C\u4E0D\u6309\u6587\u4EF6\u6570\u91CF\u62C6\uFF1B\u5171\u4EAB\u63A5\u53E3/\u5F3A\u987A\u5E8F\u4F9D\u8D56\u7684\u5DE5\u4F5C\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u4E2A Agent \u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\uFF0C\u53EA\u4F20\u5B8C\u6210\u8BE5\u5B50\u4EFB\u52A1\u6240\u9700\u7684\u6700\u5C0F\u5DE5\u4F5C\u96C6\uFF08\u4E0A\u4E0B\u6587\u6700\u5C0F\u5316\uFF09\uFF0C\u4E25\u7981\u8F6C\u53D1\u65E0\u5173\u5386\u53F2\u4E0E\u65E5\u5FD7\uFF1B\u7236 Agent \u4FDD\u7559\u76EE\u6807\u3001\u5951\u7EA6\u3001\u96C6\u6210\u3001\u6700\u7EC8\u9A8C\u8BC1\u548C\u7528\u6237\u6C9F\u901A\u3002
202
+ **\u62C6\u5206\u4E0E\u6D3E\u53D1\u8D28\u91CF**\uFF1A\u6309\u72EC\u7ACB\u9886\u57DF\u62C6\uFF0C\u4E0D\u6309\u6587\u4EF6\u6570\u91CF\u62C6\uFF1B\u5171\u4EAB\u63A5\u53E3/\u5F3A\u987A\u5E8F\u4F9D\u8D56\u7684\u5DE5\u4F5C\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u4E2A Agent \u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\uFF0C\u53EA\u4F20\u5B8C\u6210\u8BE5\u5B50\u4EFB\u52A1\u6240\u9700\u7684\u6700\u5C0F\u5DE5\u4F5C\u96C6\uFF08\u4E0A\u4E0B\u6587\u6700\u5C0F\u5316\uFF09\uFF0C\u4E25\u7981\u8F6C\u53D1\u65E0\u5173\u5386\u53F2\u4E0E\u65E5\u5FD7\uFF1B\u7236 Agent \u4FDD\u7559\u76EE\u6807\u3001\u5951\u7EA6\u3001\u96C6\u6210\u3001\u6700\u7EC8\u9A8C\u8BC1\u548C\u7528\u6237\u6C9F\u901A\u3002brief \u5BF9\u6D4B\u8BD5\u7C7B DoD \u5FC5\u987B\u9489\u6B7B\u57FA\u7EBF\u7CBE\u786E\u6570\u5B57\uFF08\u6D3E\u53D1\u524D\u4EB2\u81EA\u8DD1 bun test <scope> \u8BB0\u4E0B pass/fail\uFF0C\u5199\u660E\u65E2\u6709\u5931\u8D25\u5F52\u5C5E\uFF09\uFF0C\u9A8C\u6536\u65F6\u4EB2\u81EA\u590D\u8DD1\u5BF9\u7167\u2014\u2014fail \u8D85\u57FA\u7EBF\u5373\u6267\u884C\u8005\u5F15\u5165\u56DE\u5F52\uFF08flaky \u53E6\u884C\u7504\u522B\uFF09\uFF1B\u65E0\u6570\u5B57\u7684\u300C\u6D4B\u8BD5\u901A\u8FC7\u300D\u81EA\u8FF0\u6309\u672A\u9A8C\u8BC1\u5904\u7406\u3002
197
203
 
198
- **\u72EC\u7ACB\u5BA1\u67E5\uFF08commit \u524D\u786C\u95E8\uFF09**\uFF1A\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review\uFF0Creviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\uFF1B\u65E0 review \u4E0D commit\u3002\u81EA\u52A8\u5FAA\u73AF\uFF1A\u6539\u5B8C \u2192 startAgentRun(ephemeral:true) \u6D3E reviewer \u5BA1 diff \u2192 \u6709 finding \u5219\u4FEE \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002review \u8BC1\u636E\u786C\u95E8\uFF1A\u4EC5\u5F53 reviewer \u8FD4\u56DE\u53EF\u8BFB\u7684\u6700\u7EC8\u6587\u672C\u4E14\u660E\u786E\u542B APPROVE\u3001\u65E0 CRITICAL/HIGH \u624D\u7B97\u901A\u8FC7\uFF1Bdone\u3001exit 0\u3001\u7A7A dialog\u3001messagesCount=0\u3001agentReply=null\u3001\u8D85\u65F6\u5747\u89C6\u4E3A\u672A\u5BA1\u67E5\uFF0C\u4E25\u7981\u63D0\u4EA4\u3002review context contract\uFF1A\u6D3E reviewer \u524D\u6309\u6539\u52A8\u8303\u56F4\u8BFB\u53D6 AGENTS.md\u3001docs/workflow.md\u3001\u5F53\u524D plan/progress\u3001\u547D\u4E2D\u7684 SKILL.md\u3001references\u3001\u6D89\u53CA\u4EA7\u54C1\u53D6\u820D\u65F6\u7684 docs/product-positioning.md\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\u3002\u5BA1\u67E5\u6E05\u5355\uFF1A\u53EF\u8BFB\u6027/\u53EF\u641C\u7D22\u6027\u3001\u53EF\u7EF4\u62A4\u6027/\u5220\u9664\u6210\u672C\u3001\u53EF\u7EC4\u5408\u6027/\u590D\u7528\u3001\u91CD\u590D\u5B9E\u73B0\u3001\u53EF\u5220\u9664\u4EE3\u7801\u3002\u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\u3002\u6D89\u53CA\u4ED3\u5E93\u6587\u4EF6\u5199\u5165\u5FC5\u987B\u7528\u72EC\u7ACB worktree\u3002\u4ED3\u5E93\u7EA7 plan / review / worktree \u7EAA\u5F8B\u4EE5 AGENTS.md \u4E3A\u51C6\u3002
204
+ **\u72EC\u7ACB\u5BA1\u67E5\uFF08commit \u524D\u786C\u95E8\uFF09**\uFF1A\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review\uFF0Creviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF08\u7F16\u6392\u8005\u4EE5\u81EA\u8EAB agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u5168\u65B0\u5B9E\u4F8B\u4E0D\u5171\u4EAB\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF0C\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u4E0D\u7B97\u300C\u81EA\u5DF1\u300D\uFF09\uFF1B\u5168\u90E8\u8DE8\u5BB6\u65CF\u901A\u9053\u4E0D\u53EF\u7528\u65F6\uFF0C\u540C\u6A21\u578B\u5BB6\u65CF\u7684\u6D3E\u53D1\u65B0\u5B9E\u4F8B\uFF08\u4E0A\u4E0B\u6587\u4ECD\u9694\u79BB\uFF09\u7ECF owner \u6388\u6743\u53EF\u4F5C\u964D\u7EA7 reviewer\uFF0Ctrailer \u6CE8\u660E\u5B9E\u9645\u5BA1\u67E5\u8005\u4E0E\u539F\u56E0\uFF1B\u65E0 review \u4E0D commit\u3002\u81EA\u52A8\u5FAA\u73AF\uFF1A\u6539\u5B8C \u2192 startAgentRun(ephemeral:true) \u6D3E reviewer \u5BA1 diff \u2192 \u6709 finding \u5219\u4FEE \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002review \u8BC1\u636E\u786C\u95E8\uFF1A\u4EC5\u5F53 reviewer \u8FD4\u56DE\u53EF\u8BFB\u7684\u6700\u7EC8\u6587\u672C\u4E14\u660E\u786E\u542B APPROVE\u3001\u65E0 CRITICAL/HIGH \u624D\u7B97\u901A\u8FC7\uFF1Bdone\u3001exit 0\u3001\u7A7A dialog\u3001messagesCount=0\u3001agentReply=null\u3001\u8D85\u65F6\u5747\u89C6\u4E3A\u672A\u5BA1\u67E5\uFF0C\u4E25\u7981\u63D0\u4EA4\u3002review context contract\uFF1A\u6D3E reviewer \u524D\u6309\u6539\u52A8\u8303\u56F4\u8BFB\u53D6 AGENTS.md\u3001docs/workflow.md\u3001\u5F53\u524D plan/progress\u3001\u547D\u4E2D\u7684 SKILL.md\u3001references\u3001\u6D89\u53CA\u4EA7\u54C1\u53D6\u820D\u65F6\u7684 docs/product-positioning.md\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\u3002\u5BA1\u67E5\u6E05\u5355\uFF1A\u53EF\u8BFB\u6027/\u53EF\u641C\u7D22\u6027\u3001\u53EF\u7EF4\u62A4\u6027/\u5220\u9664\u6210\u672C\u3001\u53EF\u7EC4\u5408\u6027/\u590D\u7528\u3001\u91CD\u590D\u5B9E\u73B0\u3001\u53EF\u5220\u9664\u4EE3\u7801\u3002\u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\u3002\u6D89\u53CA\u4ED3\u5E93\u6587\u4EF6\u5199\u5165\u5FC5\u987B\u7528\u72EC\u7ACB worktree\u3002\u4ED3\u5E93\u7EA7 plan / review / worktree \u7EAA\u5F8B\u4EE5 AGENTS.md \u4E3A\u51C6\u3002
199
205
 
200
206
  **\u5371\u9669 / \u4E0D\u53EF\u9006\u64CD\u4F5C**\uFF1A
201
207
  - \u6D89\u53CA\u4E0D\u53EF\u9006\u64CD\u4F5C\uFF08\u4FEE\u6539\u6587\u4EF6\u3001\u5220\u9664\u6570\u636E\u3001\u53D1\u9001\u6D88\u606F\u3001\u751F\u6210\u6B63\u5F0F\u6587\u4EF6\u3001\u6267\u884C\u4EA4\u6613\u7B49\uFF09\u65F6\uFF0C\u4F18\u5148\u9884\u89C8\u6216\u5411\u7528\u6237\u786E\u8BA4\u3002
@@ -379,11 +385,48 @@ function toBareImageUrlMessages(messages) {
379
385
  });
380
386
  }
381
387
 
388
+ // packages/integrations/openai/providerBodyCompatibility.ts
389
+ var MOONSHOT_KIMI_K3_MODEL = "kimi-k3";
390
+ var isKimiK3ProviderModel = (provider, model) => {
391
+ const normalizedModel = asTrimmedLowercaseString(model);
392
+ if (asTrimmedLowercaseString(provider) === "moonshot") {
393
+ return normalizedModel === MOONSHOT_KIMI_K3_MODEL;
394
+ }
395
+ return isNoloHostedProvider(provider) && normalizedModel === PLATFORM_HOSTED_KIMI_K3_MODEL;
396
+ };
397
+ var normalizeChatCompletionsBodyForProvider = ({
398
+ body,
399
+ provider,
400
+ model
401
+ }) => {
402
+ const nextBody = { ...body, model };
403
+ const normalizedProvider = asTrimmedLowercaseString(provider);
404
+ if (normalizedProvider === "fireworks" && isFireworksKimiModel(model)) {
405
+ delete nextBody.reasoning;
406
+ delete nextBody.reasoning_effort;
407
+ }
408
+ if (isKimiK3ProviderModel(provider, model)) {
409
+ delete nextBody.temperature;
410
+ delete nextBody.top_p;
411
+ delete nextBody.frequency_penalty;
412
+ delete nextBody.presence_penalty;
413
+ if (typeof nextBody.max_tokens === "number") {
414
+ nextBody.max_completion_tokens = nextBody.max_tokens;
415
+ delete nextBody.max_tokens;
416
+ }
417
+ }
418
+ if (Array.isArray(nextBody.messages) && requiresBareImageUrl({ provider, model })) {
419
+ nextBody.messages = toBareImageUrlMessages(nextBody.messages);
420
+ }
421
+ return nextBody;
422
+ };
423
+
382
424
  export {
383
425
  buildIdentityBlock,
384
426
  buildRuntimeGuidanceBlocks,
385
427
  resolveToolGuidedSections,
386
428
  buildCurrentTimeBlock,
387
429
  requiresBareImageUrl,
388
- toBareImageUrlMessages
430
+ toBareImageUrlMessages,
431
+ normalizeChatCompletionsBodyForProvider
389
432
  };
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-DWLEOOGR.js";
4
4
  import {
5
5
  addContentAction
6
- } from "./chunk-MJWX4JQO.js";
6
+ } from "./chunk-3EEK7T3D.js";
7
7
  import {
8
8
  upload
9
- } from "./chunk-23KKIMD5.js";
9
+ } from "./chunk-WVGEBWA6.js";
10
10
  import {
11
11
  getRuntimeServerContext
12
12
  } from "./chunk-HHBXCRJS.js";
@@ -9,8 +9,15 @@ function resolveNoloHome(options = {}) {
9
9
  const env = options.env ?? process.env;
10
10
  return env.NOLO_HOME?.trim() || path.join(options.homeDir ?? homedir(), ".nolo");
11
11
  }
12
+ function resolveLocalDialogDbCandidates(options = {}) {
13
+ const candidates = [resolveServerDbPath(options)];
14
+ const noloHomeDb = path.join(resolveNoloHome(options), "data", "leveldb");
15
+ if (!candidates.includes(noloHomeDb)) candidates.push(noloHomeDb);
16
+ return candidates;
17
+ }
12
18
 
13
19
  export {
14
20
  resolveServerDbPath,
15
- resolveNoloHome
21
+ resolveNoloHome,
22
+ resolveLocalDialogDbCandidates
16
23
  };