nolo-cli 0.14.0-alpha.9 → 0.15.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-OQ6KPFSB.js → _executeModel-QAUS6B7J.js} +24 -24
- package/{action-N3KXFO5V.js → action-GUOZYYGN.js} +4 -4
- package/{addContentAction-4Z762DMR.js → addContentAction-QDGHGUBH.js} +3 -3
- package/{addDialogAgentAction-FALLEKPR.js → addDialogAgentAction-Z4YCYZIV.js} +2 -2
- package/{agentDeleteCommand-UBXH2FDO.js → agentDeleteCommand-QDO62EZA.js} +20 -20
- package/{agentEmailCommands-ZI2FIUBV.js → agentEmailCommands-UZ5BKX3P.js} +37 -37
- package/{agentListCommands-7M6FHCSH.js → agentListCommands-ZC33UDWT.js} +22 -22
- package/{agentMachineCommands-R3FW62QH.js → agentMachineCommands-RZGZEZRL.js} +20 -20
- package/{agentRecordCommands-WUY3C3HZ.js → agentRecordCommands-DGDXE2VH.js} +32 -32
- package/{agentRunCommand-CWXYVYPZ.js → agentRunCommand-SRZWFOPH.js} +34 -34
- package/{agentRuntimeLocal-BONMVACL.js → agentRuntimeLocal-4YCF6IRF.js} +11 -11
- package/{agentSlice-IHOSTSWC.js → agentSlice-IVE735EV.js} +3 -3
- package/appDeleteCommands-7I26L64I.js +124 -0
- package/appDeployCommands-TZLZNTJN.js +163 -0
- package/appDeployStatusCommands-OPPTLHRW.js +144 -0
- package/appGetCommands-N2S4HYKY.js +119 -0
- package/appListCommands-OBTPPKUM.js +122 -0
- package/{authCommand-IKIU4FZY.js → authCommand-YFTR3347.js} +5 -5
- package/{authCommands-QP43ADV3.js → authCommands-YXGOXNBZ.js} +3 -3
- package/{chunk-3B2LFO6R.js → browser-image-compression-MFDTD7K6.js} +4 -518
- package/{chunk-YQAG2J2T.js → chunk-472E5RMQ.js} +1 -1
- package/chunk-4QQFLN5C.js +552 -0
- package/{chunk-SZ7RUWAQ.js → chunk-5VMYGIIL.js} +97 -38
- package/{chunk-P6DRYHVM.js → chunk-6565R2TI.js} +16 -14
- package/{chunk-2ROIXEDX.js → chunk-6MHDWKOT.js} +2 -2
- package/{chunk-GGHFCK3X.js → chunk-AWDOJBHW.js} +426 -430
- package/{chunk-DUE6E46E.js → chunk-BFRVXJJJ.js} +43 -16
- package/{chunk-UONU6Q4P.js → chunk-G2MKOQCB.js} +1 -1
- package/chunk-GFUIQ4RY.js +136 -0
- package/{chunk-SRKNB2WB.js → chunk-HRQCKQA5.js} +4 -4
- package/{chunk-CDQ2ICPR.js → chunk-IOQ7IBPU.js} +1 -1
- package/{chunk-QLO2G5HP.js → chunk-ISYE6GZB.js} +1 -1
- package/{chunk-CXLGUR7M.js → chunk-IZ2QRVEU.js} +2 -2
- package/{chunk-U4J6ZZFY.js → chunk-JBKVPAYK.js} +7 -140
- package/{chunk-V6VXDXGY.js → chunk-JS33TCQ3.js} +2 -2
- package/{chunk-YG3CCS7C.js → chunk-K53477EY.js} +4 -4
- package/{chunk-3WGLLTK4.js → chunk-LSFAWXKC.js} +100 -3
- package/{chunk-BHK5ZAW7.js → chunk-N5424GSW.js} +1 -1
- package/chunk-NTC6I2FN.js +107 -0
- package/{chunk-QNXEDF7V.js → chunk-O53CP2QR.js} +3 -3
- package/{chunk-CY4TAX6S.js → chunk-OKSYPTDZ.js} +9 -9
- package/{chunk-NFHGY5T5.js → chunk-OQMPU2ML.js} +4 -4
- package/{chunk-NSZB7BYV.js → chunk-P4MJQWWF.js} +2 -2
- package/{chunk-JHFMRUGX.js → chunk-RKM3K52F.js} +1 -1
- package/{chunk-A5V7UEZJ.js → chunk-SFXYKGK2.js} +3 -3
- package/{chunk-S5UACFUP.js → chunk-TTGAVETO.js} +10 -2
- package/{chunk-BOJVWKNA.js → chunk-U7LEGLEB.js} +1 -1
- package/{chunk-YDOTMXTK.js → chunk-UXKQQ2MR.js} +9 -9
- package/{chunk-KUDUXBNE.js → chunk-VE6XMVKG.js} +189 -41
- package/{chunk-NJVPXLRY.js → chunk-VPTJB4HM.js} +1 -1
- package/{chunk-3AE4NQ5O.js → chunk-WA6KZL5V.js} +25 -6
- package/{chunk-T3X232L6.js → chunk-WNLPAOIT.js} +1 -1
- package/{chunk-MEXNTURY.js → chunk-WRN5EQT7.js} +1 -1
- package/{chunk-FVGJNXPJ.js → chunk-XGQZFBO5.js} +83 -206
- package/{chunk-3FCSMQAC.js → chunk-XVP3C2KY.js} +1 -1
- package/{chunk-SW3Q2OV5.js → chunk-YNHQIXX5.js} +774 -5735
- package/{chunk-7VKJDLPO.js → chunk-Z24FGIU2.js} +2 -2
- package/{createAgentAutomationAction-W4OZQ63I.js → createAgentAutomationAction-TS6NNZ4X.js} +9 -9
- package/{createDialogAction-G6XQLPAN.js → createDialogAction-5HVQ33EX.js} +10 -10
- package/{createPageAction-RNT4LCAX.js → createPageAction-4F3ZGQJD.js} +9 -9
- package/{dbSlice-7Q23HSWH.js → dbSlice-OP6UPXKA.js} +2 -2
- package/{dialogCommands-YUTOCICO.js → dialogCommands-3GEPXHFB.js} +16 -16
- package/{dialogSlice-QZZF4JXD.js → dialogSlice-FAWUQDJW.js} +9 -9
- package/{docCreateCommands-LQYOVE7D.js → docCreateCommands-ZE3S6BCP.js} +22 -20
- package/{docDeleteCommands-LNS5V76K.js → docDeleteCommands-TW6PGTRT.js} +21 -19
- package/{docReadCommands-IRCP66BG.js → docReadCommands-LDXL3B6J.js} +20 -18
- package/{docStore-66Q4JTTG.js → docStore-2UHVWLTV.js} +10 -10
- package/{docUpdateCommands-4VUX3Q7W.js → docUpdateCommands-GYD6XI5O.js} +21 -19
- package/{handleSendMessageAction-CB5UKK2X.js → handleSendMessageAction-LJPUYNOH.js} +9 -9
- package/index.js +92 -61
- package/{machineCommands-PX2BADIB.js → machineCommands-OKNDYS3M.js} +35 -35
- package/{machineWsRunDispatch-IBNCRCEQ.js → machineWsRunDispatch-ZX5AJ6FJ.js} +31 -31
- package/package.json +1 -1
- package/{read-SIWMJRHC.js → read-HXHAZBKH.js} +1 -1
- package/{readDocTool-TCYJY4PP.js → readDocTool-VPBDTO4G.js} +1 -1
- package/{readlineWorkspace-YIXJ2OOO.js → readlineWorkspace-MB3ANKHM.js} +92 -92
- package/{removeDialogAgentAction-WKHZT6VJ.js → removeDialogAgentAction-HUFVN35S.js} +4 -4
- package/{runAgentClientLoop-BXMDAQB2.js → runAgentClientLoop-A75BUU6D.js} +19 -19
- package/{setDialogExtraReferencesAction-GCI5QU6E.js → setDialogExtraReferencesAction-2VLGWQKG.js} +2 -2
- package/{setPrimaryDialogAgentAction-NRO57AS6.js → setPrimaryDialogAgentAction-VB4UV2CC.js} +4 -4
- package/{settingSlice-FTWZ5ZHT.js → settingSlice-7JYPQNAC.js} +3 -3
- package/{spaceCommands-7Z6DZFEE.js → spaceCommands-O3KJNCON.js} +21 -21
- package/{spaceSlice-3GLIRD3Q.js → spaceSlice-444MFUP6.js} +9 -9
- package/{streamAgentChatTurn-SN7YS2VV.js → streamAgentChatTurn-DJAE7USZ.js} +42 -39
- package/{tools-4JSNWHIK.js → tools-YB6LXSVN.js} +14 -14
- package/{tuiSummaryLlmCaller-PS5BDLHV.js → tuiSummaryLlmCaller-QQL3JA5I.js} +3 -3
- package/{updateDialogTitleAction-DUJ2JZXX.js → updateDialogTitleAction-6HGFBM64.js} +9 -9
- package/{agentGrantCommands-JMTM6U4B.js → agentGrantCommands-JNDE4RWR.js} +1 -1
- package/{agentPullCommand-UXANSFU3.js → agentPullCommand-6HWUT3SW.js} +1 -1
- package/{chunk-3QAF2LTL.js → chunk-DZ3XJVET.js} +3 -3
- package/{chunk-HBRZXXP5.js → chunk-KMQPSTMJ.js} +6 -6
- package/{tableCommands-V5O7QMXY.js → tableCommands-3P7MJ3PF.js} +3 -3
|
@@ -4,25 +4,26 @@ import {
|
|
|
4
4
|
providerHttpFailure,
|
|
5
5
|
readSseFrames,
|
|
6
6
|
throwIfChatCompletionStreamFailed
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WA6KZL5V.js";
|
|
8
8
|
import {
|
|
9
9
|
parseToolArgumentsJson
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6MHDWKOT.js";
|
|
11
11
|
import {
|
|
12
12
|
createThinkParserState,
|
|
13
13
|
createToolCallAccumulator,
|
|
14
|
+
createToolCallTextParserState,
|
|
14
15
|
extractThinkContent,
|
|
15
16
|
finalizeAccumulatedToolCalls
|
|
16
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-LSFAWXKC.js";
|
|
17
18
|
import {
|
|
18
19
|
requiresBareImageUrl,
|
|
19
20
|
toBareImageUrlMessages
|
|
20
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-RKM3K52F.js";
|
|
21
22
|
import {
|
|
22
23
|
buildProviderAuthHeaders,
|
|
23
24
|
buildProviderExecutionPlan,
|
|
24
25
|
toOpenAiCompatibleMessages
|
|
25
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-HRQCKQA5.js";
|
|
26
27
|
import {
|
|
27
28
|
canonicalizeToolName,
|
|
28
29
|
createGlob,
|
|
@@ -153,6 +154,7 @@ async function readOpenAiCompatibleSseCompletion(args) {
|
|
|
153
154
|
usage: void 0,
|
|
154
155
|
accumulatedToolCalls: createToolCallAccumulator(),
|
|
155
156
|
thinkState: createThinkParserState(),
|
|
157
|
+
toolCallTextState: createToolCallTextParserState(),
|
|
156
158
|
onTextDelta: args.onTextDelta,
|
|
157
159
|
onReasoningDelta: args.onReasoningDelta
|
|
158
160
|
};
|
|
@@ -826,12 +828,16 @@ var buildCombinedShellInput = (args) => {
|
|
|
826
828
|
typeof args.input === "string" ? args.input : ""
|
|
827
829
|
].filter(Boolean).join("\n");
|
|
828
830
|
};
|
|
829
|
-
function
|
|
831
|
+
function resolveScannableShellInput(args) {
|
|
830
832
|
const combined = buildCombinedShellInput(args);
|
|
831
|
-
if (!combined.trim()) return
|
|
832
|
-
|
|
833
|
+
if (!combined.trim()) return void 0;
|
|
834
|
+
return SHELL_STRING_EXECUTION_PATTERNS.some(
|
|
833
835
|
(pattern) => pattern.test(combined)
|
|
834
836
|
) ? combined : stripQuotedSegments(combined);
|
|
837
|
+
}
|
|
838
|
+
function isDestructiveShellCommand(args) {
|
|
839
|
+
const scannable = resolveScannableShellInput(args);
|
|
840
|
+
if (scannable === void 0) return false;
|
|
835
841
|
return SHELL_DESTRUCTIVE_PATTERNS.some((pattern) => pattern.test(scannable));
|
|
836
842
|
}
|
|
837
843
|
var LONG_RUNNING_COMMAND_PATTERNS = [
|
|
@@ -847,13 +853,42 @@ var LONG_RUNNING_COMMAND_PATTERNS = [
|
|
|
847
853
|
/\bpm2\b.*\bstart\b/i
|
|
848
854
|
];
|
|
849
855
|
function isLongRunningShellCommand(args) {
|
|
850
|
-
const
|
|
851
|
-
if (
|
|
852
|
-
const scannable = SHELL_STRING_EXECUTION_PATTERNS.some(
|
|
853
|
-
(pattern) => pattern.test(combined)
|
|
854
|
-
) ? combined : stripQuotedSegments(combined);
|
|
856
|
+
const scannable = resolveScannableShellInput(args);
|
|
857
|
+
if (scannable === void 0) return false;
|
|
855
858
|
return LONG_RUNNING_COMMAND_PATTERNS.some((pattern) => pattern.test(scannable));
|
|
856
859
|
}
|
|
860
|
+
var IMMEDIATE_DETACH_COMMAND_PATTERNS = [
|
|
861
|
+
/\btail\s+(?:-\S*[fF]\S*|--follow)\b/,
|
|
862
|
+
/\bwatch\s+\S/,
|
|
863
|
+
/\bwhile\s+(?:true|:|\[\s*true\s*\])\s*;\s*do\b/
|
|
864
|
+
];
|
|
865
|
+
var IMMEDIATE_DETACH_SLEEP_THRESHOLD_SECONDS = 5;
|
|
866
|
+
var SLEEP_PREFIX_PATTERN = /^(?:[A-Za-z_][A-Za-z0-9_]*=\S*\s+)*(?:nohup\s+|time\s+)*sleep\s+(\S+)/;
|
|
867
|
+
function parseSleepDurationSeconds(token) {
|
|
868
|
+
const match = /^(\d+(?:\.\d+)?)(s|m|h|d)?$/i.exec(token);
|
|
869
|
+
if (!match) return void 0;
|
|
870
|
+
const value = Number(match[1]);
|
|
871
|
+
if (!Number.isFinite(value)) return void 0;
|
|
872
|
+
const unit = (match[2] ?? "s").toLowerCase();
|
|
873
|
+
const factor = unit === "m" ? 60 : unit === "h" ? 3600 : unit === "d" ? 86400 : 1;
|
|
874
|
+
return value * factor;
|
|
875
|
+
}
|
|
876
|
+
function isLongSleepCommand(scannable) {
|
|
877
|
+
const match = SLEEP_PREFIX_PATTERN.exec(scannable.trim());
|
|
878
|
+
if (!match) return false;
|
|
879
|
+
const durationToken = match[1] ?? "";
|
|
880
|
+
if (/^inf(inity)?$/i.test(durationToken)) return true;
|
|
881
|
+
const seconds = parseSleepDurationSeconds(durationToken);
|
|
882
|
+
if (seconds === void 0) return true;
|
|
883
|
+
return seconds > IMMEDIATE_DETACH_SLEEP_THRESHOLD_SECONDS;
|
|
884
|
+
}
|
|
885
|
+
function isImmediateDetachShellCommand(args) {
|
|
886
|
+
const scannable = resolveScannableShellInput(args);
|
|
887
|
+
if (scannable === void 0) return false;
|
|
888
|
+
return isLongSleepCommand(scannable) || LONG_RUNNING_COMMAND_PATTERNS.some((pattern) => pattern.test(scannable)) || IMMEDIATE_DETACH_COMMAND_PATTERNS.some(
|
|
889
|
+
(pattern) => pattern.test(scannable)
|
|
890
|
+
);
|
|
891
|
+
}
|
|
857
892
|
function evaluateShellCommandPolicy(args) {
|
|
858
893
|
if (isDestructiveShellCommand(args) && !hasExplicitDestructivePermission(args.userInput)) {
|
|
859
894
|
return {
|
|
@@ -1536,7 +1571,7 @@ function buildExecShellTool(toolName) {
|
|
|
1536
1571
|
type: "function",
|
|
1537
1572
|
function: {
|
|
1538
1573
|
name: toolName,
|
|
1539
|
-
description: "Run a shell command in the local workspace. Commands already execute from the workspace root; do not cd into guessed paths such as /workspace, /repo, /home/user, or /home/user/workspace. Prefer one command that performs a complete verification or related git operation instead of many tiny commands. For branch setup, prefer idempotent commands such as git switch -C <branch> when replacing or recreating a benchmark branch is acceptable. Use portable POSIX commands for macOS/BSD shells; avoid GNU-only flags such as cat -A. Do not use cat -A. Do not use brittle byte-offset commands such as xxd -s -32. For separator lines, use echo or printf '%s\\n'. For text-file content or trailing-newline checks, prefer readFile over shell byte inspection when that tool is available. Do not run repeated git status, git log, git rev-parse, or branch checks after a successful command already returned the needed clean status and commit information; use one final verification command. If a command fails, use the error output to adjust the next command rather than repeating the same shape. For long-running commands that should keep running in the background (dev servers, watchers, REPLs, `--watch`/`serve`/`dev` scripts),
|
|
1574
|
+
description: "Run a shell command in the local workspace. Commands already execute from the workspace root; do not cd into guessed paths such as /workspace, /repo, /home/user, or /home/user/workspace. Prefer one command that performs a complete verification or related git operation instead of many tiny commands. For branch setup, prefer idempotent commands such as git switch -C <branch> when replacing or recreating a benchmark branch is acceptable. Use portable POSIX commands for macOS/BSD shells; avoid GNU-only flags such as cat -A. Do not use cat -A. Do not use brittle byte-offset commands such as xxd -s -32. For separator lines, use echo or printf '%s\\n'. For text-file content or trailing-newline checks, prefer readFile over shell byte inspection when that tool is available. Do not run repeated git status, git log, git rev-parse, or branch checks after a successful command already returned the needed clean status and commit information; use one final verification command. If a command fails, use the error output to adjust the next command rather than repeating the same shape. For long-running commands that should keep running in the background (dev servers, watchers, REPLs, `--watch`/`serve`/`dev` scripts), prefer launchProcess. Obviously long-running commands run via execShell (sleep over 5s, tail -f, watch, infinite loops, dev/serve/watch scripts) are moved to the background automatically and return {detached: true, pid, label} \u2014 use listProcesses to inspect or stop them, and tell the user the command is running in the background. Any other command blocks until it exits, so keep those short.",
|
|
1540
1575
|
parameters: {
|
|
1541
1576
|
type: "object",
|
|
1542
1577
|
properties: {
|
|
@@ -1733,8 +1768,9 @@ function resolveExecShellTimeoutMs(override) {
|
|
|
1733
1768
|
return asOptionalPositiveFiniteNumber(Number(raw));
|
|
1734
1769
|
}
|
|
1735
1770
|
function resolveDetachMs(override) {
|
|
1736
|
-
|
|
1737
|
-
|
|
1771
|
+
if (typeof override === "number" && Number.isFinite(override) && override >= 0) {
|
|
1772
|
+
return override;
|
|
1773
|
+
}
|
|
1738
1774
|
const raw = process.env[EXEC_SHELL_DETACH_ENV];
|
|
1739
1775
|
if (raw === void 0) return DEFAULT_EXEC_SHELL_DETACH_MS;
|
|
1740
1776
|
const parsed = asOptionalPositiveFiniteNumber(Number(raw));
|
|
@@ -1961,15 +1997,22 @@ function isPathInsideWorkspace(args) {
|
|
|
1961
1997
|
const relativePath = relative(args.workspaceRoot, args.targetPath);
|
|
1962
1998
|
return relativePath === "" || !relativePath.startsWith("..") && !relativePath.includes(`..${sep}`);
|
|
1963
1999
|
}
|
|
2000
|
+
var PATH_FIELD_ALIASES = ["path", "file_path", "filePath", "filename", "file", "target_file", "targetFile", "file_to_read", "fileToRead"];
|
|
2001
|
+
var OLD_TEXT_FIELD_ALIASES = ["oldText", "old_string", "oldString", "search", "search_string", "find", "match"];
|
|
2002
|
+
var NEW_TEXT_FIELD_ALIASES = ["newText", "new_string", "newString", "replacement", "replace"];
|
|
2003
|
+
var SEARCH_QUERY_FIELD_ALIASES = ["query", "search_query", "searchQuery", "q", "pattern", "search"];
|
|
2004
|
+
function pickFirstAlias(args, aliases, preserveWhitespace = false) {
|
|
2005
|
+
for (const key of aliases) {
|
|
2006
|
+
const val = args[key];
|
|
2007
|
+
if (typeof val === "string" && val.length > 0) return preserveWhitespace ? val : val.trim();
|
|
2008
|
+
}
|
|
2009
|
+
return void 0;
|
|
2010
|
+
}
|
|
1964
2011
|
function requireWorkspaceToolPath(args) {
|
|
1965
|
-
const requestedPath =
|
|
2012
|
+
const requestedPath = pickFirstAlias(args, PATH_FIELD_ALIASES) ?? "";
|
|
1966
2013
|
if (!requestedPath) throw new Error("Workspace tool requires a non-empty path.");
|
|
1967
2014
|
return requestedPath;
|
|
1968
2015
|
}
|
|
1969
|
-
function readWorkspacePathAlias(args) {
|
|
1970
|
-
const path = args.path ?? args.file_path ?? args.filePath ?? args.filename ?? args.file;
|
|
1971
|
-
return asOptionalTrimmedString(path);
|
|
1972
|
-
}
|
|
1973
2016
|
function requireWorkspaceFileContent(args) {
|
|
1974
2017
|
if (typeof args.content !== "string") {
|
|
1975
2018
|
throw new Error("writeFile requires string content.");
|
|
@@ -1977,16 +2020,18 @@ function requireWorkspaceFileContent(args) {
|
|
|
1977
2020
|
return args.content;
|
|
1978
2021
|
}
|
|
1979
2022
|
function requireWorkspaceOldText(args) {
|
|
1980
|
-
|
|
2023
|
+
const oldText = pickFirstAlias(args, OLD_TEXT_FIELD_ALIASES, true);
|
|
2024
|
+
if (!oldText || !oldText.trim()) {
|
|
1981
2025
|
throw new Error("editFile requires non-empty oldText.");
|
|
1982
2026
|
}
|
|
1983
|
-
return
|
|
2027
|
+
return oldText;
|
|
1984
2028
|
}
|
|
1985
2029
|
function requireWorkspaceNewText(args) {
|
|
1986
|
-
|
|
1987
|
-
|
|
2030
|
+
for (const key of NEW_TEXT_FIELD_ALIASES) {
|
|
2031
|
+
const val = args[key];
|
|
2032
|
+
if (typeof val === "string") return val;
|
|
1988
2033
|
}
|
|
1989
|
-
|
|
2034
|
+
throw new Error("editFile requires string newText.");
|
|
1990
2035
|
}
|
|
1991
2036
|
function readExpectedReplacementCount(args) {
|
|
1992
2037
|
if (args.expectedReplacements === void 0) return 1;
|
|
@@ -2190,7 +2235,7 @@ function clipEditSnippet(text) {
|
|
|
2190
2235
|
return lines.slice(0, EDIT_SNIPPET_MAX_LINES).map((line) => line.length > EDIT_SNIPPET_WIDTH ? `${line.slice(0, EDIT_SNIPPET_WIDTH)}\u2026` : line).join("\n");
|
|
2191
2236
|
}
|
|
2192
2237
|
function requireWorkspaceSearchQuery(args) {
|
|
2193
|
-
const query =
|
|
2238
|
+
const query = pickFirstAlias(args, SEARCH_QUERY_FIELD_ALIASES);
|
|
2194
2239
|
if (!query) throw new Error("searchFiles requires a non-empty query.");
|
|
2195
2240
|
return query;
|
|
2196
2241
|
}
|
|
@@ -2489,9 +2534,9 @@ async function runWorkspaceCommand(args) {
|
|
|
2489
2534
|
args.abortSignal.addEventListener("abort", abortListener, { once: true });
|
|
2490
2535
|
}) : null;
|
|
2491
2536
|
const effectiveDetachMs = resolveDetachMs(args.detachMs);
|
|
2492
|
-
const detachPromise =
|
|
2537
|
+
const detachPromise = new Promise((r) => {
|
|
2493
2538
|
detachTimer = setTimeout(() => r(detachResult), effectiveDetachMs);
|
|
2494
|
-
})
|
|
2539
|
+
});
|
|
2495
2540
|
const racers = [exitPromise];
|
|
2496
2541
|
if (timeoutMs) {
|
|
2497
2542
|
racers.push(
|
|
@@ -2501,7 +2546,7 @@ async function runWorkspaceCommand(args) {
|
|
|
2501
2546
|
);
|
|
2502
2547
|
}
|
|
2503
2548
|
if (abortPromise) racers.push(abortPromise);
|
|
2504
|
-
|
|
2549
|
+
racers.push(detachPromise);
|
|
2505
2550
|
let raceWinner;
|
|
2506
2551
|
try {
|
|
2507
2552
|
raceWinner = await Promise.race(racers);
|
|
@@ -2534,25 +2579,35 @@ async function runWorkspaceCommand(args) {
|
|
|
2534
2579
|
killChild("SIGKILL");
|
|
2535
2580
|
}
|
|
2536
2581
|
if (didDetach) {
|
|
2537
|
-
|
|
2582
|
+
exitPromise.catch(() => {
|
|
2583
|
+
});
|
|
2538
2584
|
const pid = typeof proc.pid === "number" ? proc.pid : 0;
|
|
2539
2585
|
const label = deriveLabel(args.command.join(" "));
|
|
2540
2586
|
const pgid = pid;
|
|
2541
2587
|
const registry2 = getProcessRegistry();
|
|
2542
2588
|
registry2.add({ pid, pgid, command: args.command.join(" "), label });
|
|
2543
2589
|
proc.on("close", (code) => {
|
|
2590
|
+
detachSignalCleanup();
|
|
2544
2591
|
registry2.markExited(pid, code ?? 1);
|
|
2545
2592
|
});
|
|
2593
|
+
const immediate = effectiveDetachMs === 0;
|
|
2594
|
+
const reason = immediate ? `command looks long-running; moved to background immediately (pid=${pid}, label=${label})` : `command detached to background after ${effectiveDetachMs}ms (pid=${pid}, label=${label})`;
|
|
2546
2595
|
return {
|
|
2547
2596
|
stdout: "",
|
|
2548
|
-
stderr:
|
|
2549
|
-
Use listProcesses
|
|
2597
|
+
stderr: `${reason}
|
|
2598
|
+
Use listProcesses to inspect or stop it.`,
|
|
2550
2599
|
exitCode: 0,
|
|
2551
2600
|
timedOut: false,
|
|
2552
2601
|
detached: true,
|
|
2553
2602
|
pid,
|
|
2554
2603
|
label,
|
|
2555
|
-
content: JSON.stringify({
|
|
2604
|
+
content: JSON.stringify({
|
|
2605
|
+
detached: true,
|
|
2606
|
+
pid,
|
|
2607
|
+
label,
|
|
2608
|
+
status: "running",
|
|
2609
|
+
...immediate ? { reason: "long-running-command" } : {}
|
|
2610
|
+
})
|
|
2556
2611
|
};
|
|
2557
2612
|
}
|
|
2558
2613
|
const [stdout, rawStderr] = await Promise.all([
|
|
@@ -2868,7 +2923,7 @@ async function listWorkspaceEntries(args) {
|
|
|
2868
2923
|
async function listFilesTool(args) {
|
|
2869
2924
|
const parsed = parseWorkspaceToolArguments(args.call.arguments);
|
|
2870
2925
|
const warnings = [];
|
|
2871
|
-
const requestedPath =
|
|
2926
|
+
const requestedPath = pickFirstAlias(parsed, PATH_FIELD_ALIASES) ?? ".";
|
|
2872
2927
|
const maxDepth = readWorkspaceMaxDepth(parsed, warnings);
|
|
2873
2928
|
const maxResults = readWorkspaceMaxResults(parsed, warnings);
|
|
2874
2929
|
const entryType = readWorkspaceEntryType(parsed, warnings);
|
|
@@ -2909,7 +2964,7 @@ async function searchFilesTool(args) {
|
|
|
2909
2964
|
const contextLines = readWorkspaceContextLines(parsed, warnings);
|
|
2910
2965
|
const literal = parsed.literal === true;
|
|
2911
2966
|
const caseSensitive = parsed.caseSensitive === false ? false : true;
|
|
2912
|
-
const requestedPath =
|
|
2967
|
+
const requestedPath = pickFirstAlias(parsed, PATH_FIELD_ALIASES) ?? ".";
|
|
2913
2968
|
const includeIgnored = parsed.includeIgnored === true;
|
|
2914
2969
|
const searchPath = await resolveLocalWorkspaceToolPath({
|
|
2915
2970
|
workspaceRoot: args.workspaceRoot,
|
|
@@ -3185,7 +3240,7 @@ async function globFilesTool(args) {
|
|
|
3185
3240
|
const pattern = requireWorkspaceGlobPattern(parsed);
|
|
3186
3241
|
const exclude = readWorkspaceExcludeGlobs(parsed);
|
|
3187
3242
|
const maxResults = readWorkspaceMaxResults(parsed, warnings);
|
|
3188
|
-
const requestedPath =
|
|
3243
|
+
const requestedPath = pickFirstAlias(parsed, PATH_FIELD_ALIASES) ?? ".";
|
|
3189
3244
|
const includeIgnored = parsed.includeIgnored === true;
|
|
3190
3245
|
const searchPath = await resolveLocalWorkspaceToolPath({
|
|
3191
3246
|
workspaceRoot: args.workspaceRoot,
|
|
@@ -3384,7 +3439,11 @@ async function execShellTool(args) {
|
|
|
3384
3439
|
outputLimit: args.commandOutputLimit,
|
|
3385
3440
|
commandPrefix: args.commandPrefix,
|
|
3386
3441
|
abortSignal: args.abortSignal,
|
|
3387
|
-
|
|
3442
|
+
// Commands that clearly never exit (long sleeps, tail -f, watch, dev
|
|
3443
|
+
// servers, infinite loops) are promoted to background immediately so the
|
|
3444
|
+
// turn — and the user's conversation — keeps going. Everything else keeps
|
|
3445
|
+
// the caller/env detach grace window.
|
|
3446
|
+
detachMs: isImmediateDetachShellCommand({ command }) ? 0 : args.detachMs
|
|
3388
3447
|
});
|
|
3389
3448
|
const activity = extractActivity(parsed);
|
|
3390
3449
|
return {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ANTIGRAVITY_CLOUD_CODE_BASE_URL,
|
|
3
3
|
isAntigravityOAuthAgent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ISYE6GZB.js";
|
|
5
5
|
import {
|
|
6
6
|
clipMultilineText,
|
|
7
7
|
fetchAndSerializeTable,
|
|
8
8
|
waitForAbortableDelay
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VE6XMVKG.js";
|
|
10
10
|
import {
|
|
11
11
|
createDrainExhaustedResponse,
|
|
12
12
|
isCoreDrainingBody,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
} from "./chunk-RQSOAMPJ.js";
|
|
17
17
|
import {
|
|
18
18
|
slateToSimplifiedMarkdown
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-U7LEGLEB.js";
|
|
20
20
|
import {
|
|
21
21
|
extractCategorizedMentions
|
|
22
22
|
} from "./chunk-VP4WJWKW.js";
|
|
@@ -26,17 +26,17 @@ import {
|
|
|
26
26
|
import {
|
|
27
27
|
fetchAndCacheMessages,
|
|
28
28
|
shouldUseServerProxy
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-YNHQIXX5.js";
|
|
30
30
|
import {
|
|
31
31
|
fetchServerSyncedCredential
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-OQMPU2ML.js";
|
|
33
33
|
import {
|
|
34
34
|
buildCurrentTimeBlock,
|
|
35
35
|
buildIdentityBlock,
|
|
36
36
|
buildRuntimeGuidanceBlocks,
|
|
37
37
|
requiresBareImageUrl,
|
|
38
38
|
toBareImageUrlMessages
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-RKM3K52F.js";
|
|
40
40
|
import {
|
|
41
41
|
buildProviderAuthHeaders,
|
|
42
42
|
convertMessagesToResponsesInput,
|
|
@@ -44,13 +44,13 @@ import {
|
|
|
44
44
|
preserveAgentStateFields,
|
|
45
45
|
resolvePlatformChatCompletionsEndpoint,
|
|
46
46
|
resolvePlatformResponsesEndpoint
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-HRQCKQA5.js";
|
|
48
48
|
import {
|
|
49
49
|
canonicalizeToolNames
|
|
50
50
|
} from "./chunk-B4KT7RN2.js";
|
|
51
51
|
import {
|
|
52
52
|
estimateTokenCount
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-4QQFLN5C.js";
|
|
54
54
|
import {
|
|
55
55
|
clampReasoningEffort,
|
|
56
56
|
getModelConfig,
|
|
@@ -76,10 +76,10 @@ import {
|
|
|
76
76
|
} from "./chunk-524BDL33.js";
|
|
77
77
|
import {
|
|
78
78
|
createSpaceKey
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-XVP3C2KY.js";
|
|
80
80
|
import {
|
|
81
81
|
read
|
|
82
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-SFXYKGK2.js";
|
|
83
83
|
import {
|
|
84
84
|
asNonEmptyStringArray
|
|
85
85
|
} from "./chunk-I42VC5KR.js";
|
|
@@ -760,20 +760,22 @@ var CONTEXT_USAGE_INSTRUCTIONS = `\u53C2\u8003\u8D44\u6599\u4F7F\u7528\u8BF4\u66
|
|
|
760
760
|
var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\u540E\u53F0 Run\uFF09 ---
|
|
761
761
|
\u4F60\u53EF\u7528 startAgentRun \u540E\u53F0\u542F\u52A8\u5B50 Agent\uFF08fork+exec\uFF0C\u8FD4\u56DE runId\uFF09\uFF0C\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF08wait+signal+proc\uFF09\u3002\u6838\u5FC3\u7EAA\u5F8B\uFF08\u53CD\u9762\u6559\u6750\uFF1A\u5B50\u4EE3\u7406\u5D29\u6E83/\u6302\u8D77\u800C\u7F16\u6392\u5668\u6BEB\u65E0\u5BDF\u89C9\uFF09\uFF1A
|
|
762
762
|
1. \u5148\u53D1\u73B0\u518D\u6D3E\u53D1\u3002\u8C03\u7528 listAgents \u8BFB\u53D6\u5B89\u5168\u6458\u8981\u3002\u9009\u4EBA\u6309\u4F18\u5148\u7EA7\uFF1A\u7279\u5B9A\u5DE5\u5177\u9700\u6C42 \u2192 \u4EFB\u52A1\u6863\u4E0E\u6210\u672C/\u80FD\u529B\u5339\u914D \u2192 \u80DC\u4EFB\u8005\u4E2D\u7684 isFavorite \u2192 modelAbility / inputPrice/outputPrice\u3002
|
|
763
|
+
- \u6D3E\u53D1\u524D\u5148\u5224\u65AD"\u8BE5\u4E0D\u8BE5\u6D3E\u53D1"\uFF1A\u7236 agent \u8F6E\u8BE2 + \u4E0A\u4E0B\u6587\u4F20\u9012\u672C\u8EAB\u6709\u6210\u672C\uFF0C\u5B50\u4EE3\u7406\u5355\u4EF7\u4F4E\u4E0D\u7B49\u4E8E\u603B\u6210\u672C\u66F4\u4F4E\u3002\u5C0F\u4EFB\u52A1\u76F4\u63A5\u505A\uFF1B\u53EA\u6709\u4EFB\u52A1\u5927\u5230\u5355 agent \u88C5\u4E0D\u4E0B\u3001\u6216\u53EF\u5E76\u884C\u7701\u65F6\u95F4\uFF0C\u7F16\u6392\u624D\u5212\u7B97\u3002
|
|
763
764
|
- \u5148\u4F30\u4EFB\u52A1\u6863\uFF1A\u5FAE/\u7B80\u5355\uFF08\u22642 \u6B65\u3001\u6587\u6848\u3001\u5355\u70B9 polish\uFF09\uFF5C\u4E2D\uFF08\u591A\u6587\u4EF6\u8BFB\u6539\u9A8C\uFF09\uFF5C\u9AD8\uFF08\u67B6\u6784\u3001\u6DF1 review\u3001\u9AD8\u98CE\u9669\u63A8\u7406\uFF09\u3002
|
|
764
765
|
- \u9AD8\u4EF7/\u9876\u6863\u6A21\u578B\uFF08Opus\u3001GPT-5.6 Sol\u3001\u540C\u7EA7 Pro/K \u9876\u6863\u7B49\uFF09\u9ED8\u8BA4\u4E0D\u63A5\u7B80\u5355\u6D3B\uFF1B\u7B80\u5355\u6D3B\u4F18\u5148 Flash/Luna/\u4F4E\u4EF7\u6216\u6536\u85CF\u91CC\u7684\u8F7B\u91CF\u5019\u9009\u3002
|
|
765
766
|
- \u7981\u6B62\u51ED\u540D\u5B57\u7F16\u9020\u7EC6\u80FD\u529B\uFF0C\u4F46\u5141\u8BB8\u7528\u4EF7\u683C\u3001modelAbility \u53CA\u660E\u663E\u9876\u6863\u65CF\u7CFB\u505A\u7C97\u6863\u4F4D\u5339\u914D\uFF0C\u907F\u514D\u5927\u6A21\u578B\u5E72\u6742\u6D3B\u3002\u4E0D\u8981\u67E5\u6307\u6D3E\u8868\uFF0C\u4E0D\u8981\u6C42 recommendedFor\u3002
|
|
766
767
|
2. coding \u662F\u9ED8\u8BA4\u80FD\u529B\u3002tools \u53EA\u7528\u4E8E\u6D4F\u89C8\u5668\u3001\u56FE\u7247\u3001\u8868\u683C\u3001\u90AE\u4EF6\u3001\u6570\u636E\u5E93\u7B49\u7279\u5B9A\u5DE5\u5177\u4EFB\u52A1\uFF1B\u4E0D\u8981\u56E0\u4E3A coding agent \u7684 tools \u6458\u8981\u4E3A\u7A7A\u5C31\u6DD8\u6C70\u5B83\u3002
|
|
767
768
|
3. listAgents \u8FD4\u56DE\u7684 id\u3001publicKey\u3001handle \u53EA\u662F\u5019\u9009\u6807\u8BC6\u3002\u9009\u4E2D\u540E\u4F18\u5148\u8C03\u7528 readAgent \u89E3\u6790\u53EF\u8FD0\u884C\u7684 agentKey\uFF0C\u518D\u628A\u8BE5 agentKey \u4F20\u7ED9 startAgentRun\uFF1B\u4E0D\u8981\u51ED\u5C55\u793A\u540D\u79F0\u6216 id \u731C key\uFF0C\u4E5F\u4E0D\u8981\u7D22\u53D6 prompt\u3001\u5BC6\u94A5\u6216\u6570\u636E\u5E93 key \u6765\u9009\u4EBA\u3002\u6CA1\u6709 readAgent \u65F6\u53EA\u80FD\u4F7F\u7528\u5DF2\u6709\u4E0A\u4E0B\u6587\u4E2D\u660E\u786E\u7684 agentKey\u3002
|
|
768
|
-
4. \u6D3E\u53D1\u540E\
|
|
769
|
-
5. \
|
|
770
|
-
6. stop \u524D\u5148\u770B\u65E5\u5FD7\u3002\u7528 status \u5224\u65AD\u662F\u771F\u5361\u6B7B\u8FD8\u662F\u6B63\u5E38\u8DD1\uFF0C\u786E\u8BA4\u9700\u8981\u53EB\u505C\u518D controlAgentRun(action:"stop", runId)\uFF1B\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\uFF0C\u522B\u5047\u8BBE"\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1"\u3002
|
|
769
|
+
4. \u6D3E\u53D1\u540E\u8F7B\u8F6E\u8BE2\u3002startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528 controlAgentRun(action:"status", runId, tailLines:0) \u8F6E\u8BE2\u2014\u2014tailLines:0 \u53EA\u8FD4\u56DE\u72B6\u6001\u6458\u8981\uFF08\u4E0D\u62C9\u65E5\u5FD7\uFF09\uFF0C\u7701 token\u3002\u6BCF\u6B21\u8F6E\u8BE2 = \u7236 agent \u591A\u4E00\u4E2A turn = \u5168\u524D\u7F00\u91CD\u65B0\u8BA1\u4EF7\uFF0C\u6240\u4EE5\u95F4\u9694\u4E0D\u8981\u592A\u5BC6\uFF08\u5EFA\u8BAE 10\u201315s\uFF09\uFF0C\u4E0D\u8981 5s \u4E00\u6B21\u3002\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4F18\u5148\u5E76\u884C\u6D3E\u53D1\uFF08\u4E00\u6B21 startAgentRun \u591A\u4E2A\uFF09\uFF0C\u7236 agent 1 \u4E2A turn \u6D3E\u53D1 + 1 \u4E2A turn \u6536\u96C6\u7ED3\u679C\uFF0C\u800C\u975E\u4E32\u884C\u7B49\u5F85 N \u4E2A turn\u3002
|
|
770
|
+
5. \u5F02\u5E38\u624D\u62C9\u65E5\u5FD7\u3002tailLines:0 \u663E\u793A running \u4E14\u8FDB\u5EA6\u6B63\u5E38 \u2192 \u7EE7\u7EED\u8F7B\u8F6E\u8BE2\uFF1B\u53EA\u6709 status=failed/\u8D85\u65F6/\u7591\u4F3C\u5361\u6B7B\u624D controlAgentRun(action:"status", runId, tailLines:30) \u62C9\u65E5\u5FD7\u8BCA\u65AD\u3002\u6B63\u5E38\u5B8C\u6210\u7684\u5B50 agent \u770B\u72B6\u6001\u6458\u8981\u5373\u53EF\uFF0C\u4E0D\u5FC5\u62C9\u5B8C\u6574\u65E5\u5FD7\u3002
|
|
771
|
+
6. stop \u524D\u5148\u770B\u65E5\u5FD7\u3002\u7528 status(tailLines:30) \u5224\u65AD\u662F\u771F\u5361\u6B7B\u8FD8\u662F\u6B63\u5E38\u8DD1\uFF0C\u786E\u8BA4\u9700\u8981\u53EB\u505C\u518D controlAgentRun(action:"stop", runId)\uFF1B\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\uFF0C\u522B\u5047\u8BBE"\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1"\u3002
|
|
771
772
|
\u5DE5\u5177\u9009\u62E9\uFF1A\u5B50\u4EFB\u52A1 <100s \u4E14\u8981\u7ACB\u5373\u62FF\u7ED3\u679C \u2192 callAgent\uFF08\u540C\u6B65\uFF09\uFF1B\u957F\u4EFB\u52A1 / \u5E76\u884C / \u9700\u8981\u89C2\u5BDF\u6216\u53EB\u505C \u2192 startAgentRun\uFF08\u672C\u6BB5\uFF09\u3002`;
|
|
772
773
|
var AGENT_COLLABORATION_INSTRUCTIONS = `--- \u591A Agent \u534F\u4F5C\uFF08\u8BA1\u5212 \u2192 \u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
|
|
773
774
|
\u7528\u5B50\u4EE3\u7406\u5B8C\u6210\u4E2D\u5927\u578B\u4EFB\u52A1\u65F6\uFF0C\u6309\u4E09\u6BB5\u7EAA\u5F8B\u6267\u884C\uFF1A
|
|
774
775
|
1. \u8BA1\u5212\u5148\u884C\uFF1A\u52A8\u624B\u524D\u5148\u60F3\u6E05\u695A\u76EE\u6807\u3001\u8FB9\u754C\u3001\u9A8C\u8BC1\u65B9\u5F0F\u548C\u505C\u6B62\u6761\u4EF6\uFF1B\u9884\u8BA1 3 \u6B65\u4EE5\u4E0A\uFF08\u8BFB\u6539\u9A8C\u3001\u591A\u6587\u4EF6\u3001\u4EFB\u4F55\u6D3E\u53D1\uFF09\u5148\u5B9A\u8BA1\u5212\uFF0C\u518D\u51B3\u5B9A\u81EA\u5DF1\u505A\u5B8C\u8FD8\u662F\u6D3E\u53D1\u3002
|
|
776
|
+
- \u6D3E\u53D1\u524D\u505A\u6210\u672C\u6743\u8861\uFF1A\u7236 agent \u8F6E\u8BE2\u3001\u4E0A\u4E0B\u6587\u4F20\u9012\u3001\u534F\u8C03\u5F00\u9500\u672C\u8EAB\u8981\u6D88\u8017 token\uFF1B\u5B50\u4EE3\u7406\u66F4\u4FBF\u5B9C\u4E0D\u7B49\u4E8E\u7F16\u6392\u4E00\u5B9A\u66F4\u7701\u3002\u7B80\u5355/\u4E2D\u7B49\u4EFB\u52A1\u7528\u5F3A\u6A21\u578B\u76F4\u63A5\u505A\uFF0C\u5F80\u5F80\u6BD4"\u5F3A\u6A21\u578B\u6307\u6325 + \u5F31\u6A21\u578B\u5B9E\u73B0"\u66F4\u7701\uFF08\u5B9E\u6D4B\uFF1A\u6307\u6325+\u5B9E\u73B0\u7684\u53CC\u5C42 credits \u5E38\u8D85\u8FC7\u5355\u5C42\u5F3A\u6A21\u578B\u76F4\u505A\uFF09\u3002\u53EA\u6709\u4EFB\u52A1\u8DB3\u591F\u5927\uFF08\u591A\u6587\u4EF6\u6DF1\u6539\u3001\u53EF\u5E76\u884C\u3001\u5355 agent \u4E0A\u4E0B\u6587\u88C5\u4E0D\u4E0B\uFF09\u65F6\uFF0C\u7F16\u6392\u7684\u62C6\u5206\u6536\u76CA\u624D\u660E\u663E\u8D85\u8FC7\u534F\u8C03\u6210\u672C\u3002
|
|
775
777
|
2. \u6D3E\u53D1\u539F\u5219\uFF1A\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\u3001\u80FD\u5E76\u884C\u5219\u5E76\u884C\uFF1B\u7ED9\u6267\u884C\u8005\u5199\u6E05\u4EFB\u52A1\u3001\u9A8C\u6536\u548C\u7981\u533A\uFF0C\u4E0D\u4F20\u65E0\u5173\u5386\u53F2\u3002\u6D3E\u53D1\u540E\u8F6E\u8BE2\u7ED3\u679C\uFF0C\u4E0D\u5047\u8BBE\u6210\u529F\u3002
|
|
776
|
-
3. \u72EC\u7ACB\u5BA1\u67E5\uFF1A\
|
|
778
|
+
3. \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\u3002reviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002\u8BE6\u7EC6\u6D41\u7A0B\uFF08\u591A\u8F6E\u65E0\u4E0A\u4E0B\u6587 review\u3001\u901A\u8FC7\u6761\u4EF6\u3001ephemeral \u6D3E\u53D1\u3001\u9003\u9038\u673A\u5236\uFF09\u89C1 nolo-commit skill \u7684\u63D0\u4EA4\u524D\u81EA\u68C0\u7B2C 0 \u9879\u3002
|
|
777
779
|
\u6700\u5C0F\u5B9E\u73B0\uFF1A\u80FD\u5220\u89E3\u51B3\u5C31\u4E0D\u52A0\uFF0C\u80FD\u590D\u7528\u5C31\u4E0D\u65B0\u5EFA\uFF1B\u65B0\u62BD\u8C61\u524D\u5148\u641C\u5DF2\u6709\u5B9E\u73B0\u3002\u4E0D\u8981\u4E3A\u4E86\u663E\u5F97\u5FD9\u788C\u800C\u6D3E\u53D1\u6216\u8FC7\u5EA6\u8BBE\u8BA1\u3002`;
|
|
778
780
|
var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
|
|
779
781
|
\u6240\u6709\u7528\u6237\u8F93\u5165\u5747\u4E3A\u7EAF\u6587\u672C\u6D88\u606F\uFF0C\u76F4\u63A5\u7406\u89E3\u5373\u53EF\uFF0C\u4E0D\u8981\u5728\u56DE\u590D\u4E2D\u63D0\u53CA\u6309\u94AE\u3001\u83DC\u5355\u3001\u754C\u9762\u7B49 UI \u5143\u7D20\u3002
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
buildCurrentTimeBlock,
|
|
3
3
|
buildIdentityBlock,
|
|
4
4
|
buildRuntimeGuidanceBlocks
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RKM3K52F.js";
|
|
6
6
|
import {
|
|
7
7
|
canonicalizeToolNames
|
|
8
8
|
} from "./chunk-B4KT7RN2.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
planCompression,
|
|
13
13
|
planContextUsage,
|
|
14
14
|
serializeMessageContent
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-4QQFLN5C.js";
|
|
16
16
|
import {
|
|
17
17
|
clipCompactText
|
|
18
18
|
} from "./chunk-5MMAK75Q.js";
|