nolo-cli 0.80.0 → 0.81.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.
- package/{_executeModel-UXVEB3GO.js → _executeModel-JIG7MRXQ.js} +14 -14
- package/{agentDeleteCommand-OODHSL4K.js → agentDeleteCommand-THAZ5GQS.js} +3 -3
- package/{agentEmailCommands-3R73WSCD.js → agentEmailCommands-A7T7AJA4.js} +16 -16
- package/{agentListCommands-TBTEXV2E.js → agentListCommands-BRZFEJQM.js} +6 -6
- package/{agentMachineCommands-3GKE6ZHG.js → agentMachineCommands-DM4N5PK3.js} +4 -4
- package/{agentRecordCommands-3664GLRE.js → agentRecordCommands-TTAEMNHB.js} +16 -16
- package/{agentRunCommand-YNSEOBTR.js → agentRunCommand-JVSTGVG2.js} +16 -16
- package/{agentRunControl-XLGD3UZ5.js → agentRunControl-WCTKX5VL.js} +2 -2
- package/{agentRuntimeLocal-5BX6PI4X.js → agentRuntimeLocal-73CVIWBB.js} +3 -3
- package/{agentSlice-KTVOEUDX.js → agentSlice-6X4JL2E3.js} +1 -1
- package/{appDeleteCommands-UNTBD55Y.js → appDeleteCommands-S7CK4OYL.js} +3 -3
- package/{appDeployCommands-LOF4JNBZ.js → appDeployCommands-U6TMS5GO.js} +3 -3
- package/{appDeployStatusCommands-MMLE6BDW.js → appDeployStatusCommands-DTNQJ3LJ.js} +3 -3
- package/{appGetCommands-WFJAJK6B.js → appGetCommands-3SHZEQD5.js} +3 -3
- package/{appListCommands-NC265RGX.js → appListCommands-E2ZMIUB6.js} +3 -3
- package/{chatQueueReduxAdapter-4YQF4NHY.js → chatQueueReduxAdapter-LAQEZQKE.js} +2 -2
- package/{chunk-NTW5GWDM.js → chunk-3VNWWVKB.js} +2 -0
- package/{chunk-EFVDQUCT.js → chunk-3WD6RUUJ.js} +2 -2
- package/{chunk-DWUCB2A3.js → chunk-42V6BK2E.js} +1 -1
- package/{chunk-GFD4ALW3.js → chunk-54ADB4W7.js} +1 -1
- package/{chunk-D2P6UDPQ.js → chunk-6FVRQBRR.js} +14 -8
- package/{chunk-FLLFOP5L.js → chunk-7OLPQSMQ.js} +1 -1
- package/{chunk-35EWBHJO.js → chunk-ESWUWEFS.js} +3 -3
- package/{chunk-CJCJF5XB.js → chunk-FDTR4QJ6.js} +4 -2
- package/{chunk-SQZDZXP5.js → chunk-HWIZU4OL.js} +1 -1
- package/{chunk-LIIKM7DD.js → chunk-JCIHVIVG.js} +5 -5
- package/{chunk-LBEDNSMY.js → chunk-K4YGZD3P.js} +8 -8
- package/{chunk-TRCMIJA7.js → chunk-LXF6XQDT.js} +36 -22
- package/{chunk-OA6Q2A4I.js → chunk-LZIWMYX4.js} +78 -18
- package/{chunk-NKRYKK7T.js → chunk-R2B3MIZA.js} +2 -2
- package/{chunk-IAO6JBYW.js → chunk-RG6JBBX5.js} +5 -1
- package/{chunk-H3PIH2EO.js → chunk-SQQVLHMH.js} +3 -3
- package/{chunk-DEUUPHOO.js → chunk-TDRTS7QW.js} +1 -1
- package/{chunk-4OZYL5FG.js → chunk-TZJJ77KQ.js} +99 -13
- package/{chunk-CPH3W5A7.js → chunk-WGR3J4Q6.js} +86 -1
- package/{chunk-HMPEO3ZE.js → chunk-Y5HW6GM2.js} +2 -2
- package/{chunk-MPV6E6WR.js → chunk-YVIV7WT4.js} +156 -32
- package/{chunk-MWAO7TZZ.js → chunk-ZWUOR654.js} +37 -5
- package/{contentThunks-2USKJBI4.js → contentThunks-ATLWNC2D.js} +3 -3
- package/{cooldownCommands-BSCH2W7P.js → cooldownCommands-REAWYVTY.js} +2 -2
- package/{createAgentAutomationAction-NTLU42X2.js → createAgentAutomationAction-QYYWTVUR.js} +3 -3
- package/{createDialogAction-UCYF4BUN.js → createDialogAction-7I5VGWCR.js} +4 -4
- package/{createPageAction-QFGUGZ5M.js → createPageAction-WNURYCWU.js} +3 -3
- package/{dialogCommands-X4OB6SC6.js → dialogCommands-RILHDRQ5.js} +3 -3
- package/{dialogSlice-HQFQIQDZ.js → dialogSlice-W5BYELVR.js} +2 -2
- package/{docCreateCommands-DFST4PFR.js → docCreateCommands-GSTPU7SG.js} +3 -3
- package/{docDeleteCommands-V37JZOSP.js → docDeleteCommands-2FC3LSUT.js} +3 -3
- package/{docReadCommands-Z64VDPDQ.js → docReadCommands-27POBA34.js} +3 -3
- package/{docStore-GVWEDN5E.js → docStore-7LAHBFP2.js} +1 -1
- package/{docUpdateCommands-I6FB6ENK.js → docUpdateCommands-U4II6VCO.js} +3 -3
- package/{handleSendMessageAction-TLB2SAU4.js → handleSendMessageAction-SKMJMVRU.js} +2 -2
- package/index.js +47 -47
- package/{machineCommands-PV5XA7UF.js → machineCommands-S2RNYKVJ.js} +16 -16
- package/{machineWsRunDispatch-W2DPC7TZ.js → machineWsRunDispatch-JC44LBLP.js} +16 -16
- package/package.json +1 -1
- package/{readlineWorkspace-PHZXJKJM.js → readlineWorkspace-VZSBXUH4.js} +17 -17
- package/{runAgentClientLoop-26DG6ZEY.js → runAgentClientLoop-ZYENU7GH.js} +12 -12
- package/{spaceCommands-3QH2QFNW.js → spaceCommands-QB3NNEMN.js} +3 -3
- package/{streamAgentChatTurn-BY7IPY5C.js → streamAgentChatTurn-43GPPQSN.js} +13 -13
- package/{tools-4Y2EYH5D.js → tools-SX6Y4STZ.js} +9 -9
- package/{updateDialogTitleAction-2S4DCP35.js → updateDialogTitleAction-VAKA4ZNY.js} +3 -3
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
clipMultilineText,
|
|
9
9
|
fetchAndSerializeTable
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TZJJ77KQ.js";
|
|
11
11
|
import {
|
|
12
12
|
isGatewayHttpStatus
|
|
13
13
|
} from "./chunk-NF64D32W.js";
|
|
@@ -28,13 +28,13 @@ import {
|
|
|
28
28
|
} from "./chunk-MEYIRKDN.js";
|
|
29
29
|
import {
|
|
30
30
|
fetchAndCacheMessages
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-K4YGZD3P.js";
|
|
32
32
|
import {
|
|
33
33
|
shouldUseServerProxy
|
|
34
34
|
} from "./chunk-YYLHWIW6.js";
|
|
35
35
|
import {
|
|
36
36
|
fetchServerSyncedCredential
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-SQQVLHMH.js";
|
|
38
38
|
import {
|
|
39
39
|
buildSkillGuidancePromptBlock,
|
|
40
40
|
extractRuntimePageCapabilities,
|
|
@@ -45,9 +45,10 @@ import {
|
|
|
45
45
|
buildIdentityBlock,
|
|
46
46
|
buildRuntimeGuidanceBlocks,
|
|
47
47
|
compileContextLayers,
|
|
48
|
+
detectDispatchIntentFromMessages,
|
|
48
49
|
normalizeChatCompletionsBodyForProvider,
|
|
49
50
|
resolveToolGuidedSections
|
|
50
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-LZIWMYX4.js";
|
|
51
52
|
import {
|
|
52
53
|
convertMessagesToResponsesInput,
|
|
53
54
|
getUsageRequestOptions,
|
|
@@ -619,7 +620,9 @@ var buildSystemPromptContext = (options) => {
|
|
|
619
620
|
${mainPrompt}` : "";
|
|
620
621
|
const agentTools = canonicalizeToolNames(agentConfig.tools ?? []);
|
|
621
622
|
const hasAskTool = agentTools.includes("ask_user");
|
|
622
|
-
const toolSections = resolveToolGuidedSections(agentTools
|
|
623
|
+
const toolSections = resolveToolGuidedSections(agentTools, {
|
|
624
|
+
dispatchIntent: options.dispatchIntent === true
|
|
625
|
+
});
|
|
623
626
|
const {
|
|
624
627
|
startupProtocol,
|
|
625
628
|
contextLayerContract,
|
|
@@ -699,8 +702,9 @@ var applyClaudeCache = (stableContent, dynamicContent) => {
|
|
|
699
702
|
var prependPromptMessage = (messages, agentConfig, resolvedModel, language, contexts, prependSystemPrompt = true) => {
|
|
700
703
|
if (!prependSystemPrompt) return messages;
|
|
701
704
|
if (!contexts && !agentConfig.prompt) return messages;
|
|
705
|
+
const dispatchIntent = detectDispatchIntentFromMessages(messages);
|
|
702
706
|
if (isClaudeModel(resolvedModel)) {
|
|
703
|
-
const compiled = buildSystemPromptContext({ agentConfig, language, contexts });
|
|
707
|
+
const compiled = buildSystemPromptContext({ agentConfig, language, contexts, dispatchIntent });
|
|
704
708
|
if (!compiled.content.trim()) return messages;
|
|
705
709
|
const content = applyClaudeCache(
|
|
706
710
|
compiled.stablePrefixContent,
|
|
@@ -709,7 +713,7 @@ var prependPromptMessage = (messages, agentConfig, resolvedModel, language, cont
|
|
|
709
713
|
const systemMessage2 = { role: "system", content };
|
|
710
714
|
return [systemMessage2, ...messages];
|
|
711
715
|
}
|
|
712
|
-
const promptContent = buildSystemPrompt({ agentConfig, language, contexts });
|
|
716
|
+
const promptContent = buildSystemPrompt({ agentConfig, language, contexts, dispatchIntent });
|
|
713
717
|
if (!promptContent.trim()) return messages;
|
|
714
718
|
const systemMessage = { role: "system", content: promptContent };
|
|
715
719
|
return [systemMessage, ...messages];
|
|
@@ -892,7 +896,9 @@ function generateResponseRequestBody(agentConfig, msgs, contexts, prependSystemP
|
|
|
892
896
|
const promptContent = buildSystemPrompt({
|
|
893
897
|
agentConfig,
|
|
894
898
|
language,
|
|
895
|
-
contexts
|
|
899
|
+
contexts,
|
|
900
|
+
// 按当前用户输入检测派发意图:无意图只注入最小派发协议(安全硬门常在)。
|
|
901
|
+
dispatchIntent: detectDispatchIntentFromMessages(msgs)
|
|
896
902
|
});
|
|
897
903
|
body.instructions = promptContent;
|
|
898
904
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createCliLocalRuntimeAdapter,
|
|
3
3
|
summarizeEndpoint
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YVIV7WT4.js";
|
|
5
5
|
import {
|
|
6
6
|
clipMultilineText
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-TZJJ77KQ.js";
|
|
8
8
|
import {
|
|
9
9
|
runLocalAgentTurn
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-ZWUOR654.js";
|
|
11
11
|
import {
|
|
12
12
|
applyToolSurfaceConstraints
|
|
13
13
|
} from "./chunk-IIVGDG4I.js";
|
|
@@ -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(
|
|
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
|
}
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
inlineImageUrlsForCustomProvider,
|
|
6
6
|
prepareTools,
|
|
7
7
|
shouldInlineImageUrlsForAgent
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-Y5HW6GM2.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-
|
|
15
|
+
} from "./chunk-6FVRQBRR.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-
|
|
26
|
+
} from "./chunk-TZJJ77KQ.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-
|
|
38
|
+
} from "./chunk-K4YGZD3P.js";
|
|
39
39
|
import {
|
|
40
40
|
streamAgentChatTurn
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-SQQVLHMH.js";
|
|
42
42
|
import {
|
|
43
43
|
addActiveController,
|
|
44
44
|
removeActiveController,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-AGGIDPCZ.js";
|
|
15
15
|
import {
|
|
16
16
|
runLlm
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-SQQVLHMH.js";
|
|
18
18
|
import {
|
|
19
19
|
cleanupCliSessionForDialog
|
|
20
20
|
} from "./chunk-TOP2VXOR.js";
|
|
@@ -17470,7 +17470,7 @@ var messageSlice = createSliceWithThunks({
|
|
|
17470
17470
|
runtimeOptions: args.runtimeOptions
|
|
17471
17471
|
});
|
|
17472
17472
|
if (agentKeyToUse) {
|
|
17473
|
-
const { streamAgentChatTurn } = await import("./agentSlice-
|
|
17473
|
+
const { streamAgentChatTurn } = await import("./agentSlice-6X4JL2E3.js");
|
|
17474
17474
|
await dispatch(
|
|
17475
17475
|
streamAgentChatTurn({
|
|
17476
17476
|
agentKey: agentKeyToUse,
|
|
@@ -18606,7 +18606,7 @@ var deleteDialogThunk = async (payload, thunkApi) => {
|
|
|
18606
18606
|
}
|
|
18607
18607
|
if (isCurrentDialog) {
|
|
18608
18608
|
await thunkApi.dispatch(resetMsgs());
|
|
18609
|
-
const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-
|
|
18609
|
+
const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-W5BYELVR.js");
|
|
18610
18610
|
dispatch(clearPendingAttachments2());
|
|
18611
18611
|
}
|
|
18612
18612
|
return { dialogKey, isCurrentDialog, attachmentPlan };
|
|
@@ -18614,15 +18614,15 @@ var deleteDialogThunk = async (payload, thunkApi) => {
|
|
|
18614
18614
|
|
|
18615
18615
|
// packages/chat/dialog/dialogSlice.ts
|
|
18616
18616
|
var runCreateDialogAction = async (args, thunkApi) => {
|
|
18617
|
-
const { createDialogAction } = await import("./createDialogAction-
|
|
18617
|
+
const { createDialogAction } = await import("./createDialogAction-7I5VGWCR.js");
|
|
18618
18618
|
return createDialogAction(args, thunkApi);
|
|
18619
18619
|
};
|
|
18620
18620
|
var runCreateAgentAutomationAction = async (args, thunkApi) => {
|
|
18621
|
-
const { createAgentAutomationAction } = await import("./createAgentAutomationAction-
|
|
18621
|
+
const { createAgentAutomationAction } = await import("./createAgentAutomationAction-QYYWTVUR.js");
|
|
18622
18622
|
return createAgentAutomationAction(args, thunkApi);
|
|
18623
18623
|
};
|
|
18624
18624
|
var runUpdateDialogTitleAction = async (args, thunkApi) => {
|
|
18625
|
-
const { updateDialogTitleAction } = await import("./updateDialogTitleAction-
|
|
18625
|
+
const { updateDialogTitleAction } = await import("./updateDialogTitleAction-VAKA4ZNY.js");
|
|
18626
18626
|
return updateDialogTitleAction(args, thunkApi);
|
|
18627
18627
|
};
|
|
18628
18628
|
var runAddDialogAgentAction = async (args, thunkApi) => {
|
|
@@ -18646,7 +18646,7 @@ var runSetDialogExtraReferencesAction = async (args, thunkApi) => {
|
|
|
18646
18646
|
return setDialogExtraReferencesAction(args, thunkApi);
|
|
18647
18647
|
};
|
|
18648
18648
|
var runHandleSendMessageAction = async (args, thunkApi) => {
|
|
18649
|
-
const { handleSendMessageAction } = await import("./handleSendMessageAction-
|
|
18649
|
+
const { handleSendMessageAction } = await import("./handleSendMessageAction-SKMJMVRU.js");
|
|
18650
18650
|
return handleSendMessageAction(args, thunkApi);
|
|
18651
18651
|
};
|
|
18652
18652
|
function clearDialogState() {
|
|
@@ -18659,7 +18659,7 @@ var createPageAndAddReference = createAsyncThunk(
|
|
|
18659
18659
|
async (payload, { dispatch, getState, rejectWithValue }) => {
|
|
18660
18660
|
const { slateData, jsonData, title, type, fileId, groupId, dialogKey } = payload;
|
|
18661
18661
|
try {
|
|
18662
|
-
const { createDocState } = await import("./docStore-
|
|
18662
|
+
const { createDocState } = await import("./docStore-7LAHBFP2.js");
|
|
18663
18663
|
const pageKey = await createDocState(
|
|
18664
18664
|
{ slateData, title },
|
|
18665
18665
|
{ dispatch, getState }
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
resolveLocalUserId,
|
|
28
28
|
t,
|
|
29
29
|
toolLabel
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-YVIV7WT4.js";
|
|
31
31
|
import {
|
|
32
32
|
createRunActivityTracker,
|
|
33
33
|
popSingleQueueMessage,
|
|
@@ -35,12 +35,13 @@ import {
|
|
|
35
35
|
resolveRunQueuePath,
|
|
36
36
|
settleRunTerminalAuthoritatively,
|
|
37
37
|
spawnLocalBackgroundRun
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-WGR3J4Q6.js";
|
|
39
39
|
import {
|
|
40
|
+
clearCredentialAvailability,
|
|
40
41
|
readCredentialEntry,
|
|
41
42
|
recordCredentialProbe,
|
|
42
43
|
resolveCredentialKeyWithFallback
|
|
43
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-42V6BK2E.js";
|
|
44
45
|
import {
|
|
45
46
|
getReadableCliDb
|
|
46
47
|
} from "./chunk-LS2ZANRJ.js";
|
|
@@ -63,7 +64,7 @@ import {
|
|
|
63
64
|
} from "./chunk-LTRXGFMS.js";
|
|
64
65
|
import {
|
|
65
66
|
formatAgentListCard
|
|
66
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-TZJJ77KQ.js";
|
|
67
68
|
import {
|
|
68
69
|
isTransientFetchError
|
|
69
70
|
} from "./chunk-5UTFL4QJ.js";
|
|
@@ -78,17 +79,17 @@ import {
|
|
|
78
79
|
formatStatusRunCard,
|
|
79
80
|
formatStopRunCard,
|
|
80
81
|
isAgentRunTerminalStatus
|
|
81
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-3VNWWVKB.js";
|
|
82
83
|
import {
|
|
83
84
|
buildMemorySubjectsForAgent,
|
|
84
85
|
chooseMemoryOwners,
|
|
85
86
|
loadMemoryCandidatesFromDb,
|
|
86
87
|
resolveAgentMemoryPolicy
|
|
87
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-3WD6RUUJ.js";
|
|
88
89
|
import {
|
|
89
90
|
API_REPORTED_COST_MULTIPLIER,
|
|
90
91
|
parseUiAskChoiceContent
|
|
91
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-K4YGZD3P.js";
|
|
92
93
|
import {
|
|
93
94
|
isOAuthApiKeyRef
|
|
94
95
|
} from "./chunk-YYLHWIW6.js";
|
|
@@ -111,7 +112,7 @@ import {
|
|
|
111
112
|
LOCAL_AGENT_CONFIG_MISSING_CODE,
|
|
112
113
|
LOCAL_TURN_ABORTED_CODE,
|
|
113
114
|
readActionGate
|
|
114
|
-
} from "./chunk-
|
|
115
|
+
} from "./chunk-ZWUOR654.js";
|
|
115
116
|
import {
|
|
116
117
|
resolveAgentRuntimeConfigFromRecord
|
|
117
118
|
} from "./chunk-3IIEFNGY.js";
|
|
@@ -126,7 +127,7 @@ import {
|
|
|
126
127
|
isQuotaLimited403Body,
|
|
127
128
|
mergeAvailabilityDeadline,
|
|
128
129
|
resolveCooldownGate
|
|
129
|
-
} from "./chunk-
|
|
130
|
+
} from "./chunk-FDTR4QJ6.js";
|
|
130
131
|
import {
|
|
131
132
|
isAntigravityOAuthAgent
|
|
132
133
|
} from "./chunk-UZGQNTVW.js";
|
|
@@ -10418,7 +10419,7 @@ function findCollapsedPasteSpanAt(buffer, pos, opts = {}) {
|
|
|
10418
10419
|
// packages/cli/client/agentRun.ts
|
|
10419
10420
|
import { ulid as ulid2 } from "ulid";
|
|
10420
10421
|
async function loadRunLocalAgentTurn() {
|
|
10421
|
-
const { runLocalAgentTurn } = await import("./agentRuntimeLocal-
|
|
10422
|
+
const { runLocalAgentTurn } = await import("./agentRuntimeLocal-73CVIWBB.js");
|
|
10422
10423
|
return runLocalAgentTurn;
|
|
10423
10424
|
}
|
|
10424
10425
|
var stripDebugNoise = (s) => s.replace(/\s*raw="[\s\S]*"/g, "").replace(/\s*raw=\S+/g, "").replace(/\s*headers=\[[^\]]*\]/g, "").replace(/\s*headers=\S+/g, "").trim();
|
|
@@ -11290,22 +11291,24 @@ async function checkLocalAvailabilityBeforeHttpDispatch(options) {
|
|
|
11290
11291
|
}
|
|
11291
11292
|
const agentLevelAt = baseRecord.nextAvailableAt;
|
|
11292
11293
|
const agentLevelNextAvailableAt = typeof agentLevelAt === "number" && Number.isFinite(agentLevelAt) ? agentLevelAt : void 0;
|
|
11293
|
-
if (!credentialKey && agentLevelNextAvailableAt === void 0)
|
|
11294
|
+
if (!credentialKey && agentLevelNextAvailableAt === void 0) {
|
|
11295
|
+
return { credentialKey };
|
|
11296
|
+
}
|
|
11294
11297
|
const env = options.env;
|
|
11295
11298
|
const now = Date.now();
|
|
11296
11299
|
const entry = credentialKey ? await readCredentialEntry(credentialKey, env, now).catch(() => void 0) : void 0;
|
|
11297
11300
|
const entryAt = entry?.nextAvailableAt;
|
|
11298
11301
|
const effectiveNextAvailableAt = typeof entryAt === "number" ? mergeAvailabilityDeadline(agentLevelNextAvailableAt, entryAt) : agentLevelNextAvailableAt;
|
|
11299
|
-
if (typeof effectiveNextAvailableAt !== "number") return
|
|
11302
|
+
if (typeof effectiveNextAvailableAt !== "number") return { credentialKey };
|
|
11300
11303
|
const gateDecision = resolveCooldownGate(
|
|
11301
11304
|
{ nextAvailableAt: effectiveNextAvailableAt, lastProbeAt: entry?.lastProbeAt },
|
|
11302
11305
|
now
|
|
11303
11306
|
);
|
|
11304
11307
|
if (gateDecision === "probe" && credentialKey) {
|
|
11305
11308
|
await recordCredentialProbe(credentialKey, env, now).catch(() => void 0);
|
|
11306
|
-
return
|
|
11309
|
+
return { credentialKey };
|
|
11307
11310
|
}
|
|
11308
|
-
if (gateDecision !== "blocked") return
|
|
11311
|
+
if (gateDecision !== "blocked") return { credentialKey };
|
|
11309
11312
|
options.output.write(
|
|
11310
11313
|
`[nolo] Agent ${options.agentName || options.agentKey} is temporarily unavailable (429 cooldown) until ${new Date(Number(effectiveNextAvailableAt)).toISOString()}.
|
|
11311
11314
|
Dispatch aborted before reaching the server. Pick another agent via listAgents, or retry after the cooldown.
|
|
@@ -11388,11 +11391,18 @@ async function runAgentTurn(options) {
|
|
|
11388
11391
|
);
|
|
11389
11392
|
return { exitCode: 1 };
|
|
11390
11393
|
}
|
|
11391
|
-
const
|
|
11392
|
-
if (
|
|
11393
|
-
return { exitCode:
|
|
11394
|
+
const localAvailability = await checkLocalAvailabilityBeforeHttpDispatch(options);
|
|
11395
|
+
if (localAvailability?.exitCode) {
|
|
11396
|
+
return { exitCode: localAvailability.exitCode };
|
|
11397
|
+
}
|
|
11398
|
+
const httpResult = await runHttpAgentTurn(options, authToken);
|
|
11399
|
+
if (httpResult.exitCode === 0 && !httpResult.streamInterrupted && localAvailability?.credentialKey) {
|
|
11400
|
+
await clearCredentialAvailability(
|
|
11401
|
+
localAvailability.credentialKey,
|
|
11402
|
+
options.env
|
|
11403
|
+
).catch(() => void 0);
|
|
11394
11404
|
}
|
|
11395
|
-
return
|
|
11405
|
+
return httpResult;
|
|
11396
11406
|
}
|
|
11397
11407
|
|
|
11398
11408
|
// packages/cli/agentRunCommand.ts
|
|
@@ -12394,10 +12404,14 @@ var withTimeout = async (promise, timeoutMs, label) => {
|
|
|
12394
12404
|
};
|
|
12395
12405
|
var runMemoryVNextShadowRead = async (input) => {
|
|
12396
12406
|
const now = input.ctx.now ?? (() => performance.now());
|
|
12397
|
-
const
|
|
12398
|
-
|
|
12399
|
-
|
|
12400
|
-
|
|
12407
|
+
const defaultEmit = (observation2) => {
|
|
12408
|
+
const payload = {
|
|
12409
|
+
event: "memory_vnext_shadow_read",
|
|
12410
|
+
...observation2
|
|
12411
|
+
};
|
|
12412
|
+
console.info("[memory] vnext shadow read", payload);
|
|
12413
|
+
};
|
|
12414
|
+
const emit = input.emit ?? defaultEmit;
|
|
12401
12415
|
const legacyKeys = new Set(
|
|
12402
12416
|
input.legacyItems.flatMap((item) => legacyItemKeys(item))
|
|
12403
12417
|
);
|
|
@@ -204,7 +204,7 @@ var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\
|
|
|
204
204
|
2. \u7981\u6B62\u8F6E\u8BE2\u3001\u7981\u7A7A\u8F6C\u3001\u522B\u590D\u8FF0 status\uFF1B\u8BED\u4E49\u4EE5\u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002status \u4EC5\u7528\u4E8E\u5F02\u5E38\u8BCA\u65AD\u2014\u2014\u6000\u7591\u5361\u6B7B\u3001failed \u540E\u770B\u8BE6\u60C5/\u65E5\u5FD7\u3001\u7528\u6237\u660E\u786E\u8BE2\u95EE\u6267\u884C\u7EC6\u8282\uFF08tailLines:0 \u53EA\u770B\u6458\u8981\uFF09\uFF1B\u5B83\u4E0D\u662F stop \u524D\u7684 preflight\u3002\u5E76\u884C\uFF1A\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u72EC\u7ACB\u5B50\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\uFF1B\u4E0D\u8981\u56E0\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u4FDD\u5B88\u5047\u8BBE\uFF08\u540C\u901A\u9053\u5141\u8BB8\u5E76\u53D1 fork\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF0C\u53EA\u6709\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
|
|
205
205
|
3. \u6392\u9519\u5148\u5206\u8BCA\uFF1AagentKey \u6CA1\u7167\u6284 listAgents \u5C31\u5148\u4FEE key\uFF08\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\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\u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002\u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u9700 \u22652 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u81EA\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\u4E14\u5931\u8D25\uFF0C\u5019\u9009\u4E0D\u8DB3\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
|
|
206
206
|
4. \u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\u3002append \u53EF\u76F4\u63A5\u8C03\u7528\u2014\u2014not found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u5165\u961F\u7531 executor \u81EA\u8BC1\uFF1Bstop \u53EF\u76F4\u63A5\u8C03\u7528\uFF0Cnot found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u7531\u63A7\u5236\u5E73\u9762\u81EA\u884C\u5904\u7406\uFF08\u5DF2\u7EC8\u6001\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u4F1A\u88AB\u8986\u76D6\uFF09\u3002`;
|
|
207
|
-
var
|
|
207
|
+
var AGENT_COLLABORATION_VALUE_AND_METHOD = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C\uFF08\u591A Agent \u534F\u4F5C\uFF1A\u8BA1\u5212 \u2192 \u6309\u9700\u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
|
|
208
208
|
\u4EA7\u51FA\u4F18\u5148\uFF1A\u4E0D\u4E3A\u300C\u51D1\u6570\u91CF\u300D\u6D3E\u53D1\uFF0C\u4E5F\u4E0D\u5305\u529E\u53EF\u5E76\u884C\u7684\u72EC\u7ACB\u9886\u57DF\uFF1B\u6BCF\u8F6E\u63A8\u8FDB\u5F53\u524D\u6700\u6709\u4EF7\u503C\u7684\u52A8\u4F5C\uFF0C\u62FF\u8BC1\u636E\u518D\u5224\u65AD\u3002
|
|
209
209
|
|
|
210
210
|
**\u6D3E\u53D1\u4EF7\u503C\uFF08\u5148\u5224\u65AD\u503C\u4E0D\u503C\u5F97\u6D3E\uFF0C\u518D\u9009\u4EBA\uFF09**\uFF1A
|
|
@@ -214,19 +214,16 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
|
|
|
214
214
|
2. **\u5E76\u884C\u6760\u6746\uFF08Parallel leverage\uFF09**\uFF1A\u4E24\u4E2A\u6216\u66F4\u591A\u4E92\u4E0D\u4F9D\u8D56\u7684\u5DE5\u4F5C\u6D41\u53EF\u4EE5\u540C\u65F6\u63A8\u8FDB\uFF0C\u7F29\u77ED\u603B\u5B8C\u6210\u65F6\u95F4\u3002
|
|
215
215
|
3. **\u8BA4\u77E5\u6760\u6746\uFF08Cognitive leverage\uFF09**\uFF1A\u72EC\u7ACB\u89C6\u89D2\u3001\u53CD\u65B9\u5BA1\u67E5\u3001\u521B\u610F\u5206\u652F\u3001\u9886\u57DF\u4E13\u5BB6\u6216\u4E0D\u540C\u6A21\u578B\u80FD\u663E\u8457\u63D0\u9AD8\u65B9\u6848\u8D28\u91CF\u3001\u53D1\u73B0\u76F2\u533A\u6216\u964D\u4F4E\u5171\u4EAB\u9519\u8BEF\u98CE\u9669\u3002\u4EA7\u54C1\u3001\u8BBE\u8BA1\u3001\u7814\u7A76\u3001\u5199\u4F5C\u3001\u6218\u7565\u548C\u590D\u6742\u51B3\u7B56\u540C\u6837\u9002\u7528\uFF0C\u4E0D\u9650\u4E8E\u4EE3\u7801\u3002
|
|
216
216
|
- **\u53CD\u7EA6\u675F**\uFF1A\u5982\u679C\u5B50 Agent \u9884\u8BA1\u53EA\u4F1A\u590D\u8FF0\u7236 Agent \u5DF2\u77E5\u4FE1\u606F\u3001\u6CA1\u6709\u72EC\u7ACB\u8BC1\u636E/\u89C6\u89D2/\u5E76\u884C\u6536\u76CA\uFF0C\u5C31\u4E0D\u8981\u6D3E\u3002\u4E0D\u8981\u628A\u534F\u8C03\u5F00\u9500\u4F2A\u88C5\u6210\u201C\u66F4\u8BA4\u771F\u201D\u3002
|
|
217
|
-
- **\u4FDD\u62A4\u7528\u6237\u6CE8\u610F\u529B**\uFF1A\u7F16\u6392\u8005\u5E94\u5148\u5728\u5185\u90E8\u5B8C\u6210\u80FD\u53EF\u9760\u5B8C\u6210\u7684\u6BD4\u8F83\u3001\u7B5B\u9009\u4E0E\u9ED8\u8BA4\u5224\u65AD\uFF1B\u53EA\u6709\u76EE\u6807\u3001\u98CE\u9669\u3001\u5BA1\u7F8E\u3001\u8D39\u7528\u3001\u6743\u9650\u3001\u4E0D\u53EF\u9006\u540E\u679C\u7B49\u771F\u6B63\u9700\u8981\u7528\u6237\u51B3\u5B9A\u7684\u4E8B\u9879\u624D\u6253\u65AD\u7528\u6237\u3002\u4E0D\u8981\u628A\u201C\u8BF7\u9009\u62E9 A/B/C\u201D\u5F53\u4F5C\u5DF2\u7ECF\u5B8C\u6210\u89C4\u5212\uFF1B\u6709\u8DB3\u591F\u4F9D\u636E\u65F6\u5148\u7ED9\u63A8\u8350\u4E0E\u7406\u7531\uFF0C\u5E76\u8BF4\u660E\u4F55\u79CD\u6761\u4EF6\u4E0B\u5E94\u6539\u9009\u3002
|
|
218
|
-
|
|
219
|
-
**\u5E73\u53F0 Agent / \u5E73\u53F0\u79EF\u5206\u6263\u8D39\u786E\u8BA4\u786C\u95F8\u95E8\uFF08\u5FC5\u987B\u5148\u786E\u8BA4\uFF0C\u540E\u8C03\u7528\uFF09**\uFF1A
|
|
217
|
+
- **\u4FDD\u62A4\u7528\u6237\u6CE8\u610F\u529B**\uFF1A\u7F16\u6392\u8005\u5E94\u5148\u5728\u5185\u90E8\u5B8C\u6210\u80FD\u53EF\u9760\u5B8C\u6210\u7684\u6BD4\u8F83\u3001\u7B5B\u9009\u4E0E\u9ED8\u8BA4\u5224\u65AD\uFF1B\u53EA\u6709\u76EE\u6807\u3001\u98CE\u9669\u3001\u5BA1\u7F8E\u3001\u8D39\u7528\u3001\u6743\u9650\u3001\u4E0D\u53EF\u9006\u540E\u679C\u7B49\u771F\u6B63\u9700\u8981\u7528\u6237\u51B3\u5B9A\u7684\u4E8B\u9879\u624D\u6253\u65AD\u7528\u6237\u3002\u4E0D\u8981\u628A\u201C\u8BF7\u9009\u62E9 A/B/C\u201D\u5F53\u4F5C\u5DF2\u7ECF\u5B8C\u6210\u89C4\u5212\uFF1B\u6709\u8DB3\u591F\u4F9D\u636E\u65F6\u5148\u7ED9\u63A8\u8350\u4E0E\u7406\u7531\uFF0C\u5E76\u8BF4\u660E\u4F55\u79CD\u6761\u4EF6\u4E0B\u5E94\u6539\u9009\u3002`;
|
|
218
|
+
var AGENT_PLATFORM_CREDITS_GATE = `**\u5E73\u53F0 Agent / \u5E73\u53F0\u79EF\u5206\u6263\u8D39\u786E\u8BA4\u786C\u95F8\u95E8\uFF08\u5FC5\u987B\u5148\u786E\u8BA4\uFF0C\u540E\u8C03\u7528\uFF09**\uFF1A
|
|
220
219
|
- \u53EA\u8981\u5019\u9009 Agent \u7684 apiSource \u4E3A platform\uFF0C\u6216\u65E0\u6CD5\u786E\u8BA4\u8C03\u7528\u662F\u5426\u6D88\u8017\u5E73\u53F0\u79EF\u5206/\u989D\u5EA6\uFF0C\u5C31\u5FC5\u987B\u628A\u5B83\u89C6\u4E3A\u53EF\u80FD\u6263\u8D39\u7684\u9AD8\u6210\u672C\u8C03\u7528\u3002
|
|
221
220
|
- **\u4EC5\u544A\u77E5\u7528\u6237\u201C\u4F1A\u6D88\u8017\u5E73\u53F0\u79EF\u5206\u201D\u4E0D\u7B49\u4E8E\u83B7\u5F97\u6388\u6743\u3002** \u8C03\u7528 startAgentRun \u524D\uFF0C\u5FC5\u987B\u5148\u5411\u7528\u6237\u8BF4\u660E\uFF1A\u539F\u4F18\u5148\u901A\u9053\u4E3A\u4F55\u4E0D\u53EF\u7528\u3001\u5019\u9009\u5E73\u53F0 Agent\u3001\u9884\u8BA1\u6263\u8D39/\u79EF\u5206\u5F71\u54CD\uFF0C\u5E76\u505C\u4E0B\u6765\u7B49\u5F85\u7528\u6237\u5F53\u6B21\u660E\u786E\u80AF\u5B9A\u6388\u6743\u3002
|
|
222
221
|
- \u7528\u6237\u8BF4\u201C\u7EE7\u7EED\u201D\u201C\u6309\u8BA1\u5212\u201D\u201C\u4F60\u5904\u7406\u201D\u201C\u53EF\u4EE5\u201D\u7B49\uFF0C\u9ED8\u8BA4\u53EA\u8868\u793A\u7EE7\u7EED\u4EFB\u52A1\uFF0C\u4E0D\u8868\u793A\u540C\u610F\u65B0\u589E\u8D39\u7528\u6216\u5E73\u53F0\u79EF\u5206\u6263\u9664\uFF1B\u5FC5\u987B\u660E\u786E\u5305\u542B\u201C\u540C\u610F\u4F7F\u7528\u5E73\u53F0 Agent/\u63A5\u53D7\u6263\u5E73\u53F0\u79EF\u5206/\u540C\u610F\u8FD9\u6B21\u6263\u8D39\u201D\u7B49\u610F\u601D\uFF0C\u624D\u80FD\u89C6\u4E3A\u6388\u6743\u3002
|
|
223
222
|
- \u6CA1\u6709\u660E\u786E\u6388\u6743\u65F6\uFF0C\u7981\u6B62\u8C03\u7528\u5E73\u53F0 Agent\uFF0C\u7981\u6B62\u4EE5\u5F02\u6B65\u3001\u540C\u6B65\u3001\u5E76\u884C\u3001\u81EA\u52A8 fallback\u3001\u6362\u53E6\u4E00\u4E2A\u5E73\u53F0 Agent \u6216\u91CD\u8BD5\u7684\u65B9\u5F0F\u7ED5\u8FC7\u786E\u8BA4\u3002
|
|
224
223
|
- \u7528\u6237\u62D2\u7EDD\u5E73\u53F0\u6263\u8D39\u540E\uFF0C\u505C\u6B62\u6240\u6709\u5E73\u53F0 Agent \u5C1D\u8BD5\uFF1B\u53EA\u80FD\u7B49\u5F85\u79C1\u6709 Agent \u6062\u590D\u3001\u4F7F\u7528\u53EF\u7528\u7684\u975E\u5E73\u53F0 Agent\uFF0C\u6216\u518D\u6B21\u5411\u7528\u6237\u8BF4\u660E\u5E76\u91CD\u65B0\u8BF7\u6C42\u660E\u786E\u6388\u6743\u3002
|
|
225
|
-
- \u6388\u6743\u662F\u4E00\u6B21\u6027\u7684\uFF0C\u4EC5\u8986\u76D6\u7528\u6237\u660E\u786E\u6279\u51C6\u7684 Agent\u3001\u5B50\u4EFB\u52A1\u548C\u672C\u6B21\u8C03\u7528\uFF0C\u4E0D\u5F97\u6269\u5C55\u5230\u540E\u7EED review\u3001\u540E\u7EED\u7EC4\u4EF6\u6216\u5176\u4ED6 Agent\u3002
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
**\u5206\u6863\u6807\u51C6\uFF08\u4E24\u8D26\u5224\u636E\uFF1A\u4E0A\u4E0B\u6587\u8D26 / \u5E76\u884C\u8D26\uFF1B\u6A21\u578B\u6210\u672C\u4E0D\u6784\u6210\u6D3E\u53D1\u7406\u7531\uFF09**\uFF1A
|
|
224
|
+
- \u6388\u6743\u662F\u4E00\u6B21\u6027\u7684\uFF0C\u4EC5\u8986\u76D6\u7528\u6237\u660E\u786E\u6279\u51C6\u7684 Agent\u3001\u5B50\u4EFB\u52A1\u548C\u672C\u6B21\u8C03\u7528\uFF0C\u4E0D\u5F97\u6269\u5C55\u5230\u540E\u7EED review\u3001\u540E\u7EED\u7EC4\u4EF6\u6216\u5176\u4ED6 Agent\u3002`;
|
|
225
|
+
var AGENT_DISPATCH_PRECHECK = `**\u6D3E\u53D1\u524D\u81EA\u68C0**\uFF1A\u6BCF\u6B21\u8C03\u7528 startAgentRun \u524D\uFF0C\u5148\u6838\u5BF9 agentKey \u7684 apiSource\u3001\u6536\u85CF/\u79C1\u6709\u72B6\u6001\u3001\u5360\u7528\u72B6\u6001\uFF08\u4EC5\u5F53\u5DE5\u5177/\u901A\u9053\u660E\u786E\u8FD4\u56DE\u8BE5\u5019\u9009\u4E0D\u53EF\u7528\uFF0C\u6216\u9879\u76EE\u660E\u786E\u89C4\u5B9A\u5B58\u5728\u540C\u4E00 Agent \u7684\u8D44\u6E90\u9501\u65F6\u6210\u7ACB\uFF09\u548C\u5F53\u524D\u6388\u6743\uFF1B\u65E0\u6CD5\u786E\u8BA4\u6263\u8D39\u72B6\u6001\u65F6\u6309\u53EF\u80FD\u6263\u8D39\u5904\u7406\uFF0C\u5148\u8BE2\u95EE\uFF0C\u4E0D\u5F97\u731C\u6D4B\u3002`;
|
|
226
|
+
var AGENT_COLLABORATION_FULL_PROTOCOL = `**\u5206\u6863\u6807\u51C6\uFF08\u4E24\u8D26\u5224\u636E\uFF1A\u4E0A\u4E0B\u6587\u8D26 / \u5E76\u884C\u8D26\uFF1B\u6A21\u578B\u6210\u672C\u4E0D\u6784\u6210\u6D3E\u53D1\u7406\u7531\uFF09**\uFF1A
|
|
230
227
|
- **\u81EA\u5DF1\u505A**\uFF1A\u7EAF\u95EE\u7B54/\u54A8\u8BE2/\u95F2\u804A\u9ED8\u8BA4\u76F4\u63A5\u56DE\u7B54\u2014\u2014\u4F46\u82E5\u95EE\u9898\u672C\u8EAB\u662F\u5F00\u653E\u5F0F\u521B\u4F5C\u3001\u590D\u6742\u53D6\u820D\u3001\u957F\u671F\u4EA7\u54C1\u8BED\u4E49\u3001\u91CD\u5927\u51B3\u7B56\u6216\u660E\u786E\u5B58\u5728\u591A\u89C6\u89D2\u4EF7\u503C\uFF0C\u8BA4\u77E5\u6760\u6746\u547D\u4E2D\u5373\u6309\u53D1\u6563/\u4F1A\u5546\u6D3E\u53D1\uFF1B\u53EA\u6709\u786E\u5B9E\u6CA1\u6709\u65B0\u589E\u89C6\u89D2/\u8BC1\u636E/\u5E76\u884C\u6536\u76CA\u65F6\u624D\u76F4\u63A5\u56DE\u7B54\u3002\u4E24\u8D26\u5747\u4E0D\u547D\u4E2D\u7684\u4E2D\u5C0F\u5B9E\u73B0\uFF08\u5178\u578B \u22643 \u4E2A\u6587\u4EF6\u30011~2 \u6B21\u9A8C\u8BC1\u5F80\u8FD4\u3001\u65E0\u5927\u8F93\u51FA\u3001\u65E0 \u22652 \u4E2A\u72EC\u7ACB\u9886\u57DF\uFF09\u76F4\u63A5\u5B8C\u6210\uFF0C\u4E0D\u58F0\u660E\u3001\u4E0D\u6D3E\u53D1\u3002
|
|
231
228
|
- **\u4E0A\u4E0B\u6587\u8D26\u547D\u4E2D \u2192 \u6D3E\u53D1**\uFF1A\u9A8C\u8BC1\u5FAA\u73AF \u22653 \u6B21\u300C\u8DD1\u547D\u4EE4\u2192\u770B\u62A5\u9519\u2192\u6539\u300D\uFF0C\u6216\u5355\u6B65\u5927\u8F93\u51FA\uFF08\u5168\u91CF typecheck \u62A5\u9519\u3001\u957F\u6D4B\u8BD5\u6808\u3001\u5927 diff\u3001\u5927\u6587\u4EF6\u8BFB\u53D6\uFF09\u2014\u2014\u91CD\u590D\u9A8C\u8BC1\u5FAA\u73AF\u3001\u5927\u8F93\u51FA\u5904\u7406\u4E0E\u673A\u68B0 inventory/\u8BC1\u636E\u5B9A\u4F4D\u4EA4\u7ED9\u5B50 Agent\uFF1B\u7236 Agent \u63A5\u6536\u7ED3\u6784\u5316\u8BC1\u636E\uFF0C\u5E76\u4EB2\u81EA\u590D\u6838\u6240\u6709\u5F71\u54CD\u5173\u952E\u51B3\u7B56\u7684\u539F\u59CB\u8BC1\u636E\u3002
|
|
232
229
|
- **\u5173\u952E\u51B3\u7B56\u4E0A\u4E0B\u6587\u4E0D\u5916\u5305**\uFF1A\u4E0A\u4E0B\u6587\u8D26\u53EA\u51B3\u5B9A\u91CD\u590D\u9A8C\u8BC1\u5FAA\u73AF\u3001\u5927\u8F93\u51FA\u5904\u7406\u3001\u673A\u68B0 inventory/\u8BC1\u636E\u5B9A\u4F4D\u7684\u6D3E\u53D1\uFF1B\u6D89\u53CA\u67B6\u6784\u3001\u8BA1\u8D39\u3001\u5B89\u5168\u3001\u6743\u9650\u3001\u6570\u636E\u5B8C\u6574\u6027\u3001\u4E0D\u53EF\u9006\u8FC1\u79FB\u3001\u957F\u671F\u4EA7\u54C1\u8BED\u4E49\u65F6\uFF0C\u7F16\u6392\u8005\u5FC5\u987B\u4EB2\u81EA\u8BFB\u53D6\u8DB3\u4EE5\u51B3\u7B56\u7684\u4E00\u7EA7\u4EE3\u7801\u3001\u6B63\u5F0F\u771F\u503C\u3001\u539F\u59CB\u65E5\u5FD7\u548C\u771F\u5B9E\u6570\u636E\u8BC1\u636E\uFF1B\u5B50 Agent \u53EF\u505A\u5B9A\u4F4D\u3001\u673A\u68B0\u6536\u96C6\u3001\u72EC\u7ACB\u590D\u6838\u4E0E\u53CD\u65B9\u5BA1\u67E5\uFF0C\u4F46\u5176\u6458\u8981\u4E0D\u80FD\u66FF\u4EE3\u5173\u952E\u4E0A\u4E0B\u6587\u4EB2\u8BFB\u3002
|
|
@@ -257,16 +254,32 @@ ${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
|
|
|
257
254
|
|
|
258
255
|
**\u62C6\u5206\u4E0E brief**\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\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u65B9\u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\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\u4E0E\u7528\u6237\u6C9F\u901A\u3002\u6D4B\u8BD5\u7C7B DoD \u5FC5\u987B\u9489\u6B7B\u57FA\u7EBF\u7CBE\u786E\u6570\u5B57\uFF08\u6D3E\u53D1\u524D\u4EB2\u81EA\u8DD1\u6D4B\u8BD5\u8BB0\u4E0B pass/fail \u4E0E\u65E2\u6709\u5931\u8D25\u5F52\u5C5E\uFF09\uFF0C\u9A8C\u6536\u4EB2\u81EA\u590D\u8DD1\u5BF9\u7167\u2014\u2014\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\u6309\u672A\u9A8C\u8BC1\u5904\u7406\u3002
|
|
259
256
|
|
|
260
|
-
**Tool call \u53C2\u6570\u4F53\u91CF\u7EAA\u5F8B**\uFF1A\u4EFB\u4F55 tool_call\uFF08\u5C24\u5176 startAgentRun \u7684 task/brief \u4E0E input\uFF09\u7981\u6B62\u5185\u5D4C\u5927\u6BB5\u539F\u6587\u2014\u2014diff\u3001\u65E5\u5FD7\u3001\u957F\u6587\u6863\u3001\u6D4B\u8BD5\u8F93\u51FA\u4E00\u5F8B\u53EA\u4F20\u8DEF\u5F84\uFF08worktree + \u6587\u4EF6\u6E05\u5355\uFF09\uFF0C\u7531\u6267\u884C\u65B9\u81EA\u5DF1 git diff / \u8BFB\u6587\u4EF6\u83B7\u53D6\uFF08\u5185\u5BB9\u8FD8\u66F4\u65B0\u9C9C\uFF09\u3002\u5355\u6B21 arguments \u63A7\u5236\u5728 ~5k \u5B57\u7B26\u5185\uFF1A\u8FC7\u957F\u4F1A\u88AB\u4E0A\u6E38\u6D41\u5F0F\u622A\u65AD\u6210\u975E\u6CD5 JSON\uFF0C\u89E6\u53D1 tool-error \u540E\u6574\u8F6E\u91CD\u53D1\u3002
|
|
261
|
-
|
|
262
|
-
**commit \u524D\u786C\u95E8\uFF08\u9636\u6BB5\u5212\u5206\u4E0E\u72EC\u7ACB\u5BA1\u67E5\uFF09**\uFF1A
|
|
257
|
+
**Tool call \u53C2\u6570\u4F53\u91CF\u7EAA\u5F8B**\uFF1A\u4EFB\u4F55 tool_call\uFF08\u5C24\u5176 startAgentRun \u7684 task/brief \u4E0E input\uFF09\u7981\u6B62\u5185\u5D4C\u5927\u6BB5\u539F\u6587\u2014\u2014diff\u3001\u65E5\u5FD7\u3001\u957F\u6587\u6863\u3001\u6D4B\u8BD5\u8F93\u51FA\u4E00\u5F8B\u53EA\u4F20\u8DEF\u5F84\uFF08worktree + \u6587\u4EF6\u6E05\u5355\uFF09\uFF0C\u7531\u6267\u884C\u65B9\u81EA\u5DF1 git diff / \u8BFB\u6587\u4EF6\u83B7\u53D6\uFF08\u5185\u5BB9\u8FD8\u66F4\u65B0\u9C9C\uFF09\u3002\u5355\u6B21 arguments \u63A7\u5236\u5728 ~5k \u5B57\u7B26\u5185\uFF1A\u8FC7\u957F\u4F1A\u88AB\u4E0A\u6E38\u6D41\u5F0F\u622A\u65AD\u6210\u975E\u6CD5 JSON\uFF0C\u89E6\u53D1 tool-error \u540E\u6574\u8F6E\u91CD\u53D1\u3002`;
|
|
258
|
+
var AGENT_COMMIT_REVIEW_GATE = `**commit \u524D\u786C\u95E8\uFF08\u9636\u6BB5\u5212\u5206\u4E0E\u72EC\u7ACB\u5BA1\u67E5\uFF09**\uFF1A
|
|
263
259
|
- **\u9636\u6BB5\u533A\u5206**\uFF1A\u4E25\u683C\u533A\u5206\u300C\u5B9E\u73B0/\u6784\u5EFA/\u5B89\u88C5/\u7528\u6237\u6D4B\u8BD5/\u6839\u636E\u53CD\u9988\u8FED\u4EE3\u300D\u4E0E\u300C\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u300D\u9636\u6BB5\u3002UI/\u524D\u7AEF\u7B49\u9700\u7528\u6237\u9A8C\u6536\u7684\u529F\u80FD\u5728\u5B9E\u73B0\u9636\u6BB5**\u4E0D\u5F97\u89E6\u53D1\u6216\u7B49\u5F85\u6700\u7EC8\u72EC\u7ACB review**\uFF0C\u5148\u4EA4\u4ED8\u53EF\u6D4B\u8BD5\u4EA7\u7269\uFF0C\u7B49\u5F85\u7528\u6237\u6D4B\u8BD5\u4E0E\u53CD\u9988\uFF1B\u5B89\u5168\u5173\u952E\u53D8\u66F4\u7684\u5FC5\u8981\u5BA1\u67E5\u4E0D\u53D7\u5F71\u54CD\uFF1B\u72EC\u7ACB\u7684\u53EA\u8BFB\u5BA1\u8BA1\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u7684\u63D0\u524D review \u53EF\u63D0\u524D\u8FDB\u884C\uFF0C\u4F46\u4E0D\u5F97\u963B\u585E\u7528\u6237\u6D4B\u8BD5\u6216\u4F5C\u4E3A\u63D0\u524D\u7684\u63D0\u4EA4\u95E8\u3002
|
|
264
260
|
- **\u6700\u7EC8\u5BA1\u67E5\u65F6\u673A**\uFF1A\u53EA\u6709\u5F53\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u65F6\uFF0C\u624D\u6D3E\u53D1\u6700\u7EC8 review\u3002\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\u4E0E\u6267\u884C\u8005\u4E0D\u540C\u5B9E\u4F8B\uFF08\u4E0A\u4E0B\u6587\u9694\u79BB\u5373\u53EF\uFF09\u7684 reviewer \u5BA1\u5DE5\u4F5C\u533A diff\uFF0Creviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF1B\u65E0 review \u4E0D commit\u3002\u63D0\u4EA4\u524D review \u5FAA\u73AF\uFF1A\u7528\u6237\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4 \u2192 startAgentRun \u6D3E reviewer \u5BA1 diff \u2192 \u4FEE finding \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002
|
|
265
|
-
- **review \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\u52A0\u8F7D\u8BE5\u4ED3\u5E93\u7684\u9879\u76EE\u6307\u4EE4\uFF08AGENTS.md \u7C7B\uFF09\u3001\u5DE5\u4F5C\u6D41/\u8BA1\u5212\u6587\u6863\u3001\u547D\u4E2D\u7684 skill \u4E0E references\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\uFF1B\u5177\u4F53\u6E05\u5355\u4EE5\u8BE5\u4ED3\u5E93\u81EA\u5DF1\u7684 review \u89C4\u8303\u4E3A\u51C6\uFF08bun-nolo \u89C1 nolo-plan\u300C\u5408\u5E76\u95E8\u300D\u8282\uFF09\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
|
|
266
|
-
|
|
267
|
-
--- \u786E\u8BA4\u8FB9\u754C ---
|
|
261
|
+
- **review \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\u52A0\u8F7D\u8BE5\u4ED3\u5E93\u7684\u9879\u76EE\u6307\u4EE4\uFF08AGENTS.md \u7C7B\uFF09\u3001\u5DE5\u4F5C\u6D41/\u8BA1\u5212\u6587\u6863\u3001\u547D\u4E2D\u7684 skill \u4E0E references\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\uFF1B\u5177\u4F53\u6E05\u5355\u4EE5\u8BE5\u4ED3\u5E93\u81EA\u5DF1\u7684 review \u89C4\u8303\u4E3A\u51C6\uFF08bun-nolo \u89C1 nolo-plan\u300C\u5408\u5E76\u95E8\u300D\u8282\uFF09\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`;
|
|
262
|
+
var AGENT_CONFIRM_BOUNDARY = `--- \u786E\u8BA4\u8FB9\u754C ---
|
|
268
263
|
- \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\uFF09\u6216\u9AD8\u6210\u672C\u52A8\u4F5C\uFF08\u5927\u89C4\u6A21\u91CD\u6784/\u957F\u65F6\u8FD0\u884C/\u5927\u91CF token\uFF09\u65F6\uFF0C\u4F18\u5148\u9884\u89C8\u6216\u5411\u7528\u6237\u786E\u8BA4\uFF1B\u5DE5\u5177\u8FD4\u56DE"\u9884\u89C8/\u5F85\u786E\u8BA4"\u65F6\u6682\u505C\uFF0C\u7B49\u660E\u786E\u786E\u8BA4\u518D\u7EE7\u7EED\uFF0C\u672A\u786E\u8BA4\u524D\u4E0D\u8FDE\u7EED\u53D1\u591A\u6B21\u7834\u574F\u6027\u4FEE\u6539\u3002
|
|
269
264
|
- \u6536\u5230\u300C\u5B50\u5BF9\u8BDD\u7981\u6B62\u518D\u521B\u5EFA\u5B59\u5BF9\u8BDD\u300D\uFF1D\u4F60\u5DF2\u662F\u5B50\u5BF9\u8BDD\uFF0C\u7981\u6B62\u518D\u6D3E\u53D1\uFF0C\u628A\u7ED3\u679C\u8FD4\u56DE\u7236\u5BF9\u8BDD\u5373\u53EF\u3002`;
|
|
265
|
+
var AGENT_COLLABORATION_INSTRUCTIONS = [
|
|
266
|
+
AGENT_COLLABORATION_VALUE_AND_METHOD,
|
|
267
|
+
AGENT_PLATFORM_CREDITS_GATE,
|
|
268
|
+
AGENT_DISPATCH_PRECHECK,
|
|
269
|
+
AGENT_COLLABORATION_FULL_PROTOCOL,
|
|
270
|
+
AGENT_COMMIT_REVIEW_GATE,
|
|
271
|
+
AGENT_CONFIRM_BOUNDARY
|
|
272
|
+
].join("\n\n");
|
|
273
|
+
var AGENT_COLLABORATION_MIN_INSTRUCTIONS = [
|
|
274
|
+
`--- \u591A Agent \u6D3E\u53D1\uFF08\u6700\u5C0F\u534F\u8BAE\uFF09 ---
|
|
275
|
+
- startAgentRun \u542F\u52A8\u5B50 Agent\uFF1AagentKey \u5FC5\u987B\u539F\u6837\u7167\u6284 listAgents \u8FD4\u56DE\u7684 agentKey \u5B57\u6BB5\uFF08\u4E0D\u62FC\u63A5/\u4E0D\u63A8\u65AD/\u4E0D\u6362\u683C\u5F0F/\u4E0D\u4F20 name\uFF09\uFF1Bwait:false\uFF08\u9ED8\u8BA4\uFF09\u5F02\u6B65\u8FD4\u56DE runId\uFF0C\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\u7B49\u7EC8\u6001\u901A\u77E5\uFF0C\u7981\u6B62\u8F6E\u8BE2\uFF1B\u5E76\u884C\u6D3E\u53D1\u7528\u540C\u4E00 batchId \u5F52\u7EC4\u3002
|
|
276
|
+
- \u5E76\u884C\u6247\u51FA\u53EA\u8DE8\u4E0D\u540C credentialGroup\uFF1A\u540C\u4E00\u51ED\u8BC1\u7981\u6B62\u5E76\u53D1\u6247\u51FA\uFF1Bcredentialed:false\uFF08\u51ED\u8BC1\u5F52\u5C5E\u672A\u77E5\uFF09\u7684 agent \u4E0D\u662F\u300C\u72EC\u7ACB\u51ED\u8BC1\u300D\uFF0C\u540C\u6279\u5E76\u53D1\u4F1A\u88AB\u5B88\u536B\u62D2\u7EDD\uFF0C\u9700\u4E32\u884C\u6D3E\u53D1\u6216\u663E\u5F0F allowUnknownCredential \u786E\u8BA4\u98CE\u9669\u3002
|
|
277
|
+
- \u672C\u8F6E\u672A\u6CE8\u5165\u5B8C\u6574\u7F16\u6392\u534F\u8BAE\uFF08\u65E0\u6D3E\u53D1\u610F\u56FE\uFF09\uFF1B\u5982\u786E\u9700\u591A Agent \u7F16\u6392\uFF0C\u6309\u672C\u6700\u5C0F\u534F\u8BAE\u4E0E startAgentRun \u5DE5\u5177\u63CF\u8FF0\u6267\u884C\uFF0C\u5B89\u5168\u786C\u95E8\u89C1\u4E0B\u3002`,
|
|
278
|
+
AGENT_PLATFORM_CREDITS_GATE,
|
|
279
|
+
AGENT_DISPATCH_PRECHECK,
|
|
280
|
+
AGENT_COMMIT_REVIEW_GATE,
|
|
281
|
+
AGENT_CONFIRM_BOUNDARY
|
|
282
|
+
].join("\n\n");
|
|
270
283
|
var WEBPAGE_ACCESS_INSTRUCTIONS = `--- \u7F51\u9875\u8BBF\u95EE\u80FD\u529B (Web Access) ---
|
|
271
284
|
\u83B7\u53D6\u5916\u90E8\u4FE1\u606F\u7531\u7B80\u5165\u7E41\uFF1A
|
|
272
285
|
0. \u7528\u6237\u5DF2\u7ED9\u660E\u786E URL \u2192 \u5148\u76F4\u63A5 fetch \u8FD9\u4E9B URL\uFF0C\u4E0D\u8981\u5148\u641C\u7D22\u6216\u731C\u5907\u7528\u7F51\u5740\uFF08\u6700\u9AD8\u4F18\u5148\u7EA7\u7684\u7F51\u9875\u771F\u503C\uFF09\uFF1B\u4EC5\u5F53\u6293\u53D6\u5931\u8D25\u3001\u7F3A\u5B57\u6BB5\u6216\u5185\u5BB9\u4E0D\u5339\u914D\u624D\u989D\u5916\u641C\u7D22\uFF0C\u5E76\u8BF4\u660E\u964D\u7EA7\u539F\u56E0\u3002
|
|
@@ -344,7 +357,9 @@ var TOOL_GUIDED_SECTIONS = [
|
|
|
344
357
|
"startAgentRun",
|
|
345
358
|
"controlAgentRun"
|
|
346
359
|
],
|
|
347
|
-
|
|
360
|
+
// 按需注入:完整编排协议仅在有派发意图时给;无派发意图给最小协议
|
|
361
|
+
// (派发机制 + 安全硬门常在:平台积分授权门 / commit review 硬门)。
|
|
362
|
+
build: (_tools, opts) => opts?.dispatchIntent === true ? AGENT_COLLABORATION_INSTRUCTIONS : AGENT_COLLABORATION_MIN_INSTRUCTIONS
|
|
348
363
|
},
|
|
349
364
|
{ id: "menuUsage", triggerTools: ["ask_user"], build: () => MENU_USAGE_INSTRUCTIONS },
|
|
350
365
|
{
|
|
@@ -372,12 +387,12 @@ var TOOL_GUIDED_SECTION_ORDER = [
|
|
|
372
387
|
"memoryCapture",
|
|
373
388
|
"agentConfigMaintenance"
|
|
374
389
|
];
|
|
375
|
-
function resolveToolGuidedSections(agentTools) {
|
|
390
|
+
function resolveToolGuidedSections(agentTools, opts) {
|
|
376
391
|
const out = {};
|
|
377
392
|
for (const section of TOOL_GUIDED_SECTIONS) {
|
|
378
393
|
const triggered = section.triggerAnyTool ? agentTools.length > 0 : section.triggerTools.some((t) => agentTools.includes(t));
|
|
379
394
|
if (triggered) {
|
|
380
|
-
out[section.id] = section.build(agentTools);
|
|
395
|
+
out[section.id] = section.build(agentTools, opts);
|
|
381
396
|
} else {
|
|
382
397
|
out[section.id] = "";
|
|
383
398
|
}
|
|
@@ -385,6 +400,49 @@ function resolveToolGuidedSections(agentTools) {
|
|
|
385
400
|
return out;
|
|
386
401
|
}
|
|
387
402
|
|
|
403
|
+
// packages/ai/agent/dispatchIntent.ts
|
|
404
|
+
var DISPATCH_INTENT_PATTERN = /(派发|派单|派个|派一|派两|派几|派人|子任务|子\s*[aA]gent|多\s*[aA]gent|多个\s*[aA]gent|并行处理|并行派发|并发派发|并行执行|并发执行|分头|分工|同时处理|后台跑|后台执行|编排|会商|发散|代码审查|独立\s*review|派.{0,4}review|dispatch|delegat|sub[\s-]?agent|sub[\s-]?task|fan[\s-]?out|orchestrat|\bbatch\b|in parallel|concurrent|paralleliz|background run|review.{0,20}(diff|code|代码))/i;
|
|
405
|
+
var DISPATCH_TOOL_NAMES = /* @__PURE__ */ new Set(["startAgentRun", "controlAgentRun"]);
|
|
406
|
+
function detectDispatchIntent(text) {
|
|
407
|
+
if (typeof text !== "string" || !text.trim()) return false;
|
|
408
|
+
return DISPATCH_INTENT_PATTERN.test(text);
|
|
409
|
+
}
|
|
410
|
+
function messageText(content) {
|
|
411
|
+
if (typeof content === "string") return content;
|
|
412
|
+
if (Array.isArray(content)) {
|
|
413
|
+
return content.map((part) => typeof part?.text === "string" ? part.text : "").join("\n");
|
|
414
|
+
}
|
|
415
|
+
return "";
|
|
416
|
+
}
|
|
417
|
+
function toolCallName(call) {
|
|
418
|
+
const nested = call?.function?.name;
|
|
419
|
+
if (typeof nested === "string" && nested) return nested;
|
|
420
|
+
const flat = call?.name;
|
|
421
|
+
if (typeof flat === "string" && flat) return flat;
|
|
422
|
+
return "";
|
|
423
|
+
}
|
|
424
|
+
function hasDispatchToolCall(msg) {
|
|
425
|
+
const calls = Array.isArray(msg.tool_calls) ? msg.tool_calls : Array.isArray(msg.toolCalls) ? msg.toolCalls : [];
|
|
426
|
+
if (calls.some((call) => DISPATCH_TOOL_NAMES.has(toolCallName(call)))) {
|
|
427
|
+
return true;
|
|
428
|
+
}
|
|
429
|
+
for (const field of [msg.toolName, msg.name]) {
|
|
430
|
+
if (typeof field === "string" && DISPATCH_TOOL_NAMES.has(field)) return true;
|
|
431
|
+
}
|
|
432
|
+
return false;
|
|
433
|
+
}
|
|
434
|
+
function detectDispatchIntentFromMessages(messages) {
|
|
435
|
+
if (!Array.isArray(messages)) return false;
|
|
436
|
+
for (const msg of messages) {
|
|
437
|
+
if (!msg) continue;
|
|
438
|
+
if (msg.role === "user" && detectDispatchIntent(messageText(msg.content))) {
|
|
439
|
+
return true;
|
|
440
|
+
}
|
|
441
|
+
if (hasDispatchToolCall(msg)) return true;
|
|
442
|
+
}
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
|
|
388
446
|
// packages/ai/agent/contextCompiler.ts
|
|
389
447
|
function createHash(_algo) {
|
|
390
448
|
let buf = "";
|
|
@@ -535,6 +593,8 @@ export {
|
|
|
535
593
|
buildRuntimeGuidanceBlocks,
|
|
536
594
|
TOOL_GUIDED_SECTION_ORDER,
|
|
537
595
|
resolveToolGuidedSections,
|
|
596
|
+
detectDispatchIntent,
|
|
597
|
+
detectDispatchIntentFromMessages,
|
|
538
598
|
hashStablePrefixContent,
|
|
539
599
|
estimateContextTokens,
|
|
540
600
|
compileContextLayers,
|
|
@@ -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-
|
|
329
|
+
const { updateContentTitle } = await import("./contentThunks-ATLWNC2D.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-
|
|
368
|
+
const { createPageAction } = await import("./createPageAction-WNURYCWU.js");
|
|
369
369
|
return createPageAction(args, thunkApi);
|
|
370
370
|
}
|
|
371
371
|
function subscribe(listener) {
|
|
@@ -420,6 +420,9 @@ function toSafeAgentSummary(record, options) {
|
|
|
420
420
|
...nextAvailableAt !== void 0 ? { nextAvailableAt } : {},
|
|
421
421
|
...credentialGroup !== void 0 ? { credentialGroup } : {},
|
|
422
422
|
...credentialKind !== void 0 ? { credentialKind } : {},
|
|
423
|
+
// 「未知 ≠ 独立」:无 credentialGroup 时显式 credentialed:false,调用方
|
|
424
|
+
// 不得把缺失解读成独立凭证(并发扇出守卫依赖这个区分)。
|
|
425
|
+
credentialed: credentialGroup !== void 0,
|
|
423
426
|
updatedAt
|
|
424
427
|
};
|
|
425
428
|
}
|
|
@@ -446,7 +449,8 @@ var COMPACT_AGENT_SUMMARY_FIELDS = [
|
|
|
446
449
|
// 所以通常根本不占字节。
|
|
447
450
|
"nextAvailableAt",
|
|
448
451
|
"credentialGroup",
|
|
449
|
-
"credentialKind"
|
|
452
|
+
"credentialKind",
|
|
453
|
+
"credentialed"
|
|
450
454
|
];
|
|
451
455
|
function omitNullishAgentSummaryFields(summary) {
|
|
452
456
|
const result = {};
|
|
@@ -304,7 +304,7 @@ var slice = createSliceWithThunks({
|
|
|
304
304
|
const overrides = {};
|
|
305
305
|
if (args.systemPromptOverride !== void 0) overrides.prompt = args.systemPromptOverride;
|
|
306
306
|
if (args.toolsOverride !== void 0) overrides.tools = args.toolsOverride;
|
|
307
|
-
const { _executeModel } = await import("./_executeModel-
|
|
307
|
+
const { _executeModel } = await import("./_executeModel-JIG7MRXQ.js");
|
|
308
308
|
return _executeModel(
|
|
309
309
|
{
|
|
310
310
|
isStreaming: args.isStreaming ?? false,
|
|
@@ -325,7 +325,7 @@ var slice = createSliceWithThunks({
|
|
|
325
325
|
* - 循环直到无工具调用或触发其他运行时停止条件
|
|
326
326
|
*/
|
|
327
327
|
runAgent: create.asyncThunk(async (args, thunkApi) => {
|
|
328
|
-
const { runAgentClientLoop } = await import("./runAgentClientLoop-
|
|
328
|
+
const { runAgentClientLoop } = await import("./runAgentClientLoop-ZYENU7GH.js");
|
|
329
329
|
const { content: loopContent, toolCallCount } = await runAgentClientLoop(
|
|
330
330
|
{
|
|
331
331
|
agentKey: args.agentKey,
|
|
@@ -341,7 +341,7 @@ var slice = createSliceWithThunks({
|
|
|
341
341
|
* 聊天轮次流式 Agent 调用
|
|
342
342
|
*/
|
|
343
343
|
streamAgentChatTurn: create.asyncThunk(async (args, thunkApi) => {
|
|
344
|
-
const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-
|
|
344
|
+
const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-43GPPQSN.js");
|
|
345
345
|
return streamAgentChatTurnHandler(args, thunkApi);
|
|
346
346
|
}),
|
|
347
347
|
/**
|