nolo-cli 0.171.0-alpha.1 → 0.172.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.
- package/{_executeModel-YJW2HPFY.js → _executeModel-PVY4AXG4.js} +18 -18
- package/{agentDeleteCommand-O3EG3HS4.js → agentDeleteCommand-QYNICESQ.js} +20 -19
- package/{agentEmailCommands-AIWZNMRW.js → agentEmailCommands-QEJHRESH.js} +22 -21
- package/{agentListCommands-377PQ6K4.js → agentListCommands-MGMBNFAS.js} +14 -13
- package/{agentMachineCommands-TYL7KKSL.js → agentMachineCommands-SKOAHGVC.js} +11 -10
- package/{agentRecordCommands-YPRND72K.js → agentRecordCommands-2NVWBDQN.js} +21 -20
- package/{agentRunCommand-T7AQKKH5.js → agentRunCommand-2LHV37FZ.js} +22 -21
- package/{agentRuntimeLocal-7ZE2ZQAL.js → agentRuntimeLocal-K3777H5R.js} +10 -9
- package/{agentSlice-BHH2DZKN.js → agentSlice-QMOFHPJR.js} +1 -1
- package/{appDeleteCommands-LHOX4HM3.js → appDeleteCommands-3HZNWZ2V.js} +10 -9
- package/{appDeployCommands-A6CQQTI3.js → appDeployCommands-Q5BIBQE2.js} +10 -9
- package/{appDeployStatusCommands-7TTNQODL.js → appDeployStatusCommands-ZZFFVM3W.js} +10 -9
- package/{appGetCommands-22F4E37N.js → appGetCommands-7AAOXZQK.js} +10 -9
- package/{appListCommands-WCDOJUVV.js → appListCommands-H76IX2X5.js} +10 -9
- package/{chunk-Q7UPF643.js → chunk-2FAQDT6E.js} +1 -1
- package/chunk-2WZXXAQD.js +57 -0
- package/{chunk-BJWOOJX5.js → chunk-3XUE7WJA.js} +27 -23
- package/{chunk-7MBN2JZ5.js → chunk-54YLFF7P.js} +3 -3
- package/{chunk-CEYUVQYU.js → chunk-7OQ7IDU3.js} +13 -11
- package/{chunk-O3FUFEUI.js → chunk-7TBARDLF.js} +1 -46
- package/{chunk-SC5TDLTP.js → chunk-BE42X662.js} +4 -4
- package/{chunk-XHR22EKE.js → chunk-BKCR2JHG.js} +48 -3
- package/{chunk-EPMWJ7X7.js → chunk-CFLYUFMA.js} +8 -8
- package/{chunk-MIME4XKU.js → chunk-DNQ55DHN.js} +11 -11
- package/{chunk-X2Q5GT5J.js → chunk-EK3LIELB.js} +2 -2
- package/{chunk-AUGBRK3P.js → chunk-HBUKJB3W.js} +9 -2
- package/{chunk-JHXY4H3P.js → chunk-I33CJERI.js} +2 -57
- package/{chunk-K2NTGYVK.js → chunk-ISMHFI2Y.js} +1 -1
- package/{chunk-UPC23AAN.js → chunk-JCILHZJZ.js} +4 -4
- package/{chunk-AGAB26VE.js → chunk-JIGBVOHH.js} +10 -10
- package/{chunk-C2OYZYJ7.js → chunk-KUA3PPFK.js} +3 -3
- package/{chunk-6OYC7NDH.js → chunk-ME7N4YHG.js} +44 -55
- package/{chunk-P4V35AFD.js → chunk-MOOQN57G.js} +2 -2
- package/{chunk-BQSW7453.js → chunk-MTAWQNSU.js} +1 -1
- package/{chunk-22FIHMYU.js → chunk-PPR6G2U2.js} +2 -2
- package/{chunk-7L2HZQNN.js → chunk-SHPY7A3P.js} +101 -2
- package/{chunk-7CDMXZJA.js → chunk-TI7ZIWYR.js} +3 -3
- package/{chunk-ZJ66I757.js → chunk-UMVEB5QT.js} +9 -9
- package/{chunk-DWQD3JTX.js → chunk-UU4TLYRZ.js} +1 -1
- package/{chunk-WPOSH6PA.js → chunk-VAQ3EGPC.js} +2 -2
- package/{chunk-6OC2YMGH.js → chunk-XBJIESNS.js} +1 -1
- package/{chunk-UIVOLTFM.js → chunk-XUZQCRSA.js} +2 -2
- package/{chunk-72T5DXRH.js → chunk-YEOFTC2H.js} +8 -2
- package/{commandRegistry-EAPXP4BC.js → commandRegistry-D3V6AB3G.js} +40 -40
- package/{contentThunks-SJAKJV4V.js → contentThunks-P2GNXUKN.js} +6 -6
- package/{createAgentAutomationAction-IBSAZBSP.js → createAgentAutomationAction-PQA43W2W.js} +6 -6
- package/{createDialogAction-MQDTLASD.js → createDialogAction-ITOZ5TAM.js} +7 -7
- package/{createPageAction-EOPBBQMH.js → createPageAction-IKB3LOMU.js} +6 -6
- package/{dialogCommands-SV4M5HAV.js → dialogCommands-IZAQB6GY.js} +10 -9
- package/{dialogSlice-6CC3YDDL.js → dialogSlice-Y6WIZWTC.js} +5 -5
- package/{docCreateCommands-UC2CPMH7.js → docCreateCommands-U25MRSOL.js} +10 -9
- package/{docDeleteCommands-SRPTGMZ2.js → docDeleteCommands-F46A6FJZ.js} +10 -9
- package/{docReadCommands-U3TDUPOY.js → docReadCommands-DITPVWA3.js} +10 -9
- package/{docStore-RSBDE3UH.js → docStore-HRNZKKVS.js} +1 -1
- package/{docUpdateCommands-G5J5UKGP.js → docUpdateCommands-O447KO7Z.js} +10 -9
- package/{handleSendMessageAction-EM43KNSP.js → handleSendMessageAction-4OVVUVJ4.js} +13 -12
- package/index.js +4 -4
- package/{localRuntimeAdapter-N5WDXYSY.js → localRuntimeAdapter-CL3QW3OJ.js} +20 -19
- package/{machineCommands-L34XTTLG.js → machineCommands-T3VQCFHT.js} +21 -20
- package/{machineWsRunDispatch-IKI7FGKI.js → machineWsRunDispatch-IGX4UK4C.js} +21 -20
- package/package.json +1 -1
- package/{readlineWorkspace-ZANIHEDR.js → readlineWorkspace-3IZBF57U.js} +23 -22
- package/{runAgentClientLoop-HPF2WFFQ.js → runAgentClientLoop-RUBF4JIP.js} +16 -16
- package/{spaceCommands-6KPBWGGE.js → spaceCommands-FSATGIKW.js} +10 -9
- package/{streamAgentChatTurn-3SNWCCK2.js → streamAgentChatTurn-N7UJ6FFK.js} +23 -22
- package/{tools-7SMCO2GW.js → tools-Z7EJ6KIM.js} +11 -11
- package/{tuiSummaryLlmCaller-H6WX54WY.js → tuiSummaryLlmCaller-ZETARZOH.js} +10 -4
- package/{updateDialogTitleAction-XIMLNROU.js → updateDialogTitleAction-CEFNJE4T.js} +6 -6
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
flushChatCompletionStream,
|
|
12
12
|
providerHttpFailure,
|
|
13
13
|
throwIfChatCompletionStreamFailed
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-YEOFTC2H.js";
|
|
15
15
|
import {
|
|
16
16
|
readSseFrames
|
|
17
17
|
} from "./chunk-HNUWUO75.js";
|
|
@@ -23,16 +23,17 @@ import {
|
|
|
23
23
|
EXECUTION_BACKEND_KINDS
|
|
24
24
|
} from "./chunk-PWTNI4N7.js";
|
|
25
25
|
import {
|
|
26
|
-
IMAGE_OMITTED_PLACEHOLDER,
|
|
27
26
|
hasImageInRuntimeMessages,
|
|
28
27
|
stripImagePartsFromMessages
|
|
29
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-HBUKJB3W.js";
|
|
30
29
|
import {
|
|
31
30
|
clipToolText,
|
|
32
|
-
resolveAgentImageInputSupport,
|
|
33
31
|
resolveHistoricalToolContentCap,
|
|
34
32
|
resolveToolOutputProfile
|
|
35
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-2WZXXAQD.js";
|
|
34
|
+
import {
|
|
35
|
+
resolveAgentImageInputSupport
|
|
36
|
+
} from "./chunk-I33CJERI.js";
|
|
36
37
|
import {
|
|
37
38
|
applyShapingCounts,
|
|
38
39
|
attachProjectionFacts,
|
|
@@ -69,14 +70,18 @@ import {
|
|
|
69
70
|
resolveToolGuidedSections
|
|
70
71
|
} from "./chunk-RATR6VCP.js";
|
|
71
72
|
import {
|
|
73
|
+
TOOL_HAD_IMAGES,
|
|
74
|
+
TOOL_IMAGES,
|
|
72
75
|
classifyUnparsableToolArgs,
|
|
73
76
|
collectStablePromptPrefix,
|
|
74
77
|
convertMessagesToResponsesInput,
|
|
78
|
+
createToolImageLedger,
|
|
75
79
|
downgradeUnparsableToolCalls,
|
|
76
80
|
extractReasoningFromResponseOutput,
|
|
77
81
|
extractTextFromResponseOutput,
|
|
78
82
|
extractToolCallsFromResponseOutput,
|
|
79
83
|
getUsageRequestOptions,
|
|
84
|
+
hadToolImages,
|
|
80
85
|
hasParsableObjectArguments,
|
|
81
86
|
markDowngradedToolTurnOrigin,
|
|
82
87
|
normalizeChatCompletionsBodyForProvider,
|
|
@@ -87,11 +92,14 @@ import {
|
|
|
87
92
|
scanTruncation,
|
|
88
93
|
shouldStripReasoningContentForOutbound,
|
|
89
94
|
stablePromptCacheKey,
|
|
95
|
+
stripToolImages,
|
|
90
96
|
toBareImageUrlMessages,
|
|
91
97
|
toOpenAiCompatibleMessages,
|
|
92
98
|
toResponsesTools,
|
|
93
|
-
|
|
94
|
-
|
|
99
|
+
toolImages,
|
|
100
|
+
transferDowngradedToolTurnOrigin,
|
|
101
|
+
withoutToolImages
|
|
102
|
+
} from "./chunk-SHPY7A3P.js";
|
|
95
103
|
import {
|
|
96
104
|
BRIDGE_STREAM_MAX_CHARS,
|
|
97
105
|
CLI_NOLO_WORKSPACE_TOOL_NAMES,
|
|
@@ -126,7 +134,7 @@ import {
|
|
|
126
134
|
resolveEmptyAssistantFallbackMessage,
|
|
127
135
|
resolveEmptyAssistantOutcome,
|
|
128
136
|
resolveTruncatedReasoningTailLog
|
|
129
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-7TBARDLF.js";
|
|
130
138
|
import {
|
|
131
139
|
COMPACTION_SUMMARY_SCHEMA_VERSION,
|
|
132
140
|
COMPACTION_SUMMARY_SYSTEM_PROMPT,
|
|
@@ -149,7 +157,7 @@ import {
|
|
|
149
157
|
sha256Hex,
|
|
150
158
|
truncateToolOutputForContext,
|
|
151
159
|
withProviderCallTimingFields
|
|
152
|
-
} from "./chunk-
|
|
160
|
+
} from "./chunk-BKCR2JHG.js";
|
|
153
161
|
import {
|
|
154
162
|
clipCompactText
|
|
155
163
|
} from "./chunk-5MMAK75Q.js";
|
|
@@ -12504,32 +12512,6 @@ function createLoopTiming() {
|
|
|
12504
12512
|
return { mark, flush: flush2 };
|
|
12505
12513
|
}
|
|
12506
12514
|
|
|
12507
|
-
// packages/agent-runtime/toolImages.ts
|
|
12508
|
-
import { createHash } from "node:crypto";
|
|
12509
|
-
var TOOL_IMAGES = Symbol("runtime-only-tool-images");
|
|
12510
|
-
function toolImages(message) {
|
|
12511
|
-
return message[TOOL_IMAGES] ?? [];
|
|
12512
|
-
}
|
|
12513
|
-
function withoutToolImages(message) {
|
|
12514
|
-
if (!(TOOL_IMAGES in message)) return message;
|
|
12515
|
-
const { [TOOL_IMAGES]: _images, ...textOnly } = message;
|
|
12516
|
-
return textOnly;
|
|
12517
|
-
}
|
|
12518
|
-
function createToolImageLedger() {
|
|
12519
|
-
const seen = /* @__PURE__ */ new Set();
|
|
12520
|
-
return (images) => (images ?? []).filter((image) => {
|
|
12521
|
-
const hash2 = createHash("sha256").update(Buffer.from(image.dataBase64, "base64")).digest("hex");
|
|
12522
|
-
if (seen.has(hash2)) return false;
|
|
12523
|
-
seen.add(hash2);
|
|
12524
|
-
return true;
|
|
12525
|
-
});
|
|
12526
|
-
}
|
|
12527
|
-
function omitToolImages(message, reason, placeholder = `[image omitted: ${reason}]`) {
|
|
12528
|
-
if (!toolImages(message).length) return message;
|
|
12529
|
-
return { ...withoutToolImages(message), content: `${message.content ?? ""}
|
|
12530
|
-
${placeholder}` };
|
|
12531
|
-
}
|
|
12532
|
-
|
|
12533
12515
|
// packages/agent-runtime/toolCallPairing.ts
|
|
12534
12516
|
function readToolCallId(message) {
|
|
12535
12517
|
if (typeof message.tool_call_id === "string" && message.tool_call_id) {
|
|
@@ -12632,7 +12614,7 @@ function sanitizeToolCallPairing(messages) {
|
|
|
12632
12614
|
}
|
|
12633
12615
|
|
|
12634
12616
|
// packages/agent-runtime/toolSpillStore.ts
|
|
12635
|
-
import { createHash
|
|
12617
|
+
import { createHash } from "node:crypto";
|
|
12636
12618
|
import { existsSync, mkdirSync, readdirSync, renameSync, statSync, unlinkSync, utimesSync, writeFileSync } from "node:fs";
|
|
12637
12619
|
import { isAbsolute, join as join2, relative } from "node:path";
|
|
12638
12620
|
var DEFAULT_MAX_SPILL_DIR_BYTES = 50 * 1024 * 1024;
|
|
@@ -12724,7 +12706,7 @@ function spillToolOutput(options) {
|
|
|
12724
12706
|
maxTotalBytes: options.maxRetentionBytes,
|
|
12725
12707
|
throttleMs: SPILL_CLEANUP_THROTTLE_MS
|
|
12726
12708
|
});
|
|
12727
|
-
const hash2 =
|
|
12709
|
+
const hash2 = createHash("sha256").update(content).digest("hex").slice(0, 12);
|
|
12728
12710
|
const safeToolName = (options.toolName || "tool").replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 24);
|
|
12729
12711
|
const fileName = `spill-${safeToolName}-${hash2}.log`;
|
|
12730
12712
|
const spillPath = join2(spillDir, fileName);
|
|
@@ -12872,7 +12854,8 @@ function scrubObjectSecrets(val) {
|
|
|
12872
12854
|
// packages/agent-runtime/providerMessageProjection.ts
|
|
12873
12855
|
var TOOL_DURATION_METADATA_KEY = "toolExecMs";
|
|
12874
12856
|
var OBSERVATION_ONLY_METADATA_KEYS = /* @__PURE__ */ new Set([
|
|
12875
|
-
TOOL_DURATION_METADATA_KEY
|
|
12857
|
+
TOOL_DURATION_METADATA_KEY,
|
|
12858
|
+
TOOL_HAD_IMAGES
|
|
12876
12859
|
]);
|
|
12877
12860
|
function formatToolMessageContent(args2) {
|
|
12878
12861
|
const scrubbedContent = scrubSecrets(args2.content).cleaned;
|
|
@@ -13197,7 +13180,7 @@ function prepareHistoryForNextTurn(history, contextReferenceResolver) {
|
|
|
13197
13180
|
function filterImagePartsFromMessages(messages, supportsImages) {
|
|
13198
13181
|
if (supportsImages) return messages;
|
|
13199
13182
|
return stripImagePartsFromMessages(messages).map(
|
|
13200
|
-
(stripped, index) =>
|
|
13183
|
+
(stripped, index) => stripToolImages(transferDowngradedToolTurnOrigin(messages[index], stripped))
|
|
13201
13184
|
);
|
|
13202
13185
|
}
|
|
13203
13186
|
var MODEL_PROJECTED_USER_PART_TYPES = /* @__PURE__ */ new Set(["attachment", "media_job"]);
|
|
@@ -13289,7 +13272,7 @@ ${args2.input}` : [
|
|
|
13289
13272
|
}
|
|
13290
13273
|
|
|
13291
13274
|
// packages/agent-runtime/toolArgsTruncationPolicy.ts
|
|
13292
|
-
import { createHash as
|
|
13275
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
13293
13276
|
var TRUNCATION_TAIL_DROP_ALLOWED_TOOLS = /* @__PURE__ */ new Set([
|
|
13294
13277
|
"ask_user"
|
|
13295
13278
|
]);
|
|
@@ -13320,7 +13303,7 @@ function buildToolArgsDiagnosticLine(args2) {
|
|
|
13320
13303
|
const { toolName, raw, outcome, context: context3 } = args2;
|
|
13321
13304
|
const env = args2.env ?? process.env;
|
|
13322
13305
|
const scan2 = scanTruncation(raw);
|
|
13323
|
-
const sha =
|
|
13306
|
+
const sha = createHash2("sha256").update(raw).digest("hex").slice(0, 12);
|
|
13324
13307
|
const parts2 = [
|
|
13325
13308
|
`[tool-args-diag] ${toolName} ${outcome}`,
|
|
13326
13309
|
`len=${raw.length}`,
|
|
@@ -13923,7 +13906,7 @@ async function evaluateCapabilityPolicy(capability, normalizedInput, ctx) {
|
|
|
13923
13906
|
}
|
|
13924
13907
|
|
|
13925
13908
|
// packages/agent-runtime/capabilities/execShellCapability.ts
|
|
13926
|
-
import { createHash as
|
|
13909
|
+
import { createHash as createHash3 } from "node:crypto";
|
|
13927
13910
|
|
|
13928
13911
|
// packages/agent-runtime/execShellCompletionWarnings.ts
|
|
13929
13912
|
var BG_ESCAPE_WORD_PATTERN = /(?:^|[\s;|(&/\\])(nohup|disown|setsid|start-process)(?=$|[\s;|)&])/i;
|
|
@@ -15599,7 +15582,7 @@ function execShellExecutionBinding(input, ctx) {
|
|
|
15599
15582
|
confirmed: ctx.confirmed,
|
|
15600
15583
|
enableDestructiveShellGuard: ctx.enableDestructiveShellGuard,
|
|
15601
15584
|
blockDestructiveWithoutConfirmation: ctx.blockDestructiveWithoutConfirmation,
|
|
15602
|
-
envDigest:
|
|
15585
|
+
envDigest: createHash3("sha256").update(JSON.stringify(process.env)).digest("hex")
|
|
15603
15586
|
});
|
|
15604
15587
|
}
|
|
15605
15588
|
var execShellCapability = {
|
|
@@ -15732,7 +15715,7 @@ async function invokeCapability(capabilityOrName, input, ctx = {}) {
|
|
|
15732
15715
|
|
|
15733
15716
|
// packages/agent-runtime/localWorkspaceTools.ts
|
|
15734
15717
|
import { existsSync as existsSync4 } from "node:fs";
|
|
15735
|
-
import { createHash as
|
|
15718
|
+
import { createHash as createHash4 } from "node:crypto";
|
|
15736
15719
|
|
|
15737
15720
|
// packages/agent-runtime/readImage.ts
|
|
15738
15721
|
import { readFile } from "node:fs/promises";
|
|
@@ -17230,7 +17213,7 @@ async function readFileTool(args2) {
|
|
|
17230
17213
|
const force = parsed.force === true;
|
|
17231
17214
|
const ledger = args2.readLedger;
|
|
17232
17215
|
const requestRange = { startLine: sliced.startLine, endLine: sliced.endLine };
|
|
17233
|
-
const fingerprint =
|
|
17216
|
+
const fingerprint = createHash4("sha1").update(content).digest("hex").slice(0, 20);
|
|
17234
17217
|
let entry = ledger?.get(relativePath);
|
|
17235
17218
|
if (entry && entry.fingerprint !== fingerprint) {
|
|
17236
17219
|
entry = void 0;
|
|
@@ -19600,8 +19583,8 @@ function createTurnCompactionController(args2) {
|
|
|
19600
19583
|
}
|
|
19601
19584
|
|
|
19602
19585
|
// packages/agent-runtime/providerCallTelemetry.ts
|
|
19603
|
-
import { createHash as
|
|
19604
|
-
var shortHash = (value) =>
|
|
19586
|
+
import { createHash as createHash5 } from "node:crypto";
|
|
19587
|
+
var shortHash = (value) => createHash5("sha1").update(value).digest("hex").slice(0, 12);
|
|
19605
19588
|
var hashMessage = (message) => {
|
|
19606
19589
|
let text2;
|
|
19607
19590
|
try {
|
|
@@ -20347,9 +20330,8 @@ async function runLocalAgentTurn(input) {
|
|
|
20347
20330
|
providerName: agentConfig.provider,
|
|
20348
20331
|
model: provider.model
|
|
20349
20332
|
});
|
|
20350
|
-
|
|
20351
|
-
|
|
20352
|
-
));
|
|
20333
|
+
acceptToolImages.commit(requestMessages.flatMap(toolImages));
|
|
20334
|
+
transcript.replaceWorkingHistory(transcript.working().map((message) => stripToolImages(message)));
|
|
20353
20335
|
loopTiming.mark("llmCall", round);
|
|
20354
20336
|
usageLedger.recordProviderCall({
|
|
20355
20337
|
usage: result4.usage,
|
|
@@ -20535,7 +20517,10 @@ ${reasoningTailLog}
|
|
|
20535
20517
|
tool_call_id: toolCall.id,
|
|
20536
20518
|
toolName,
|
|
20537
20519
|
[TOOL_IMAGES]: acceptToolImages(toolResult.images),
|
|
20538
|
-
...observedMetadata ? { tool_result_metadata:
|
|
20520
|
+
...observedMetadata || toolResult.images?.length ? { tool_result_metadata: {
|
|
20521
|
+
...observedMetadata,
|
|
20522
|
+
...toolResult.images?.length ? { [TOOL_HAD_IMAGES]: true } : {}
|
|
20523
|
+
} } : {}
|
|
20539
20524
|
});
|
|
20540
20525
|
};
|
|
20541
20526
|
const skippedToolCalls = [];
|
|
@@ -21043,6 +21028,7 @@ function buildOpenAiCompatibleChatCompletionRequest(args2) {
|
|
|
21043
21028
|
);
|
|
21044
21029
|
const sanitizedMessages = sanitizeForOutbound(args2.messages, args2.tools);
|
|
21045
21030
|
const messages = toOpenAiCompatibleMessages(sanitizedMessages, {
|
|
21031
|
+
supportsToolImages: !isResponses && resolveAgentImageInputSupport({ provider: args2.providerConfig.usageProvider ?? args2.providerConfig.provider, model: args2.providerConfig.model, customProviderUrl: args2.providerConfig.endpoint, hasVision: args2.providerConfig.hasVision ?? false }),
|
|
21046
21032
|
stripReasoningContent: shouldStripReasoning,
|
|
21047
21033
|
...args2.shapingCounts ? { shapingCounts: args2.shapingCounts } : {},
|
|
21048
21034
|
...resolveReasoningReplayOptions(
|
|
@@ -21375,6 +21361,7 @@ async function resolveOpenAiCompatibleProviderConfig(args2) {
|
|
|
21375
21361
|
throw new Error("OpenAI-compatible provider config requires a direct provider execution plan.");
|
|
21376
21362
|
}
|
|
21377
21363
|
return {
|
|
21364
|
+
hasVision: args2.agentConfig.hasVision,
|
|
21378
21365
|
model: plan.model,
|
|
21379
21366
|
endpoint: plan.endpoint,
|
|
21380
21367
|
apiKey: plan.apiKey,
|
|
@@ -21672,7 +21659,10 @@ function buildDialogMessageWriteOps(args2) {
|
|
|
21672
21659
|
...message.tool_call_id ? { toolCallId: message.tool_call_id } : {},
|
|
21673
21660
|
...toolName ? { toolName } : {},
|
|
21674
21661
|
...Array.isArray(message.tool_calls) ? { tool_calls: message.tool_calls } : {},
|
|
21675
|
-
...message.tool_result_metadata ? { metadata:
|
|
21662
|
+
...message.tool_result_metadata || hadToolImages(message) ? { metadata: {
|
|
21663
|
+
...message.tool_result_metadata,
|
|
21664
|
+
...hadToolImages(message) ? { [TOOL_HAD_IMAGES]: true } : {}
|
|
21665
|
+
} } : {},
|
|
21676
21666
|
createdAt: args2.nowIso
|
|
21677
21667
|
}
|
|
21678
21668
|
};
|
|
@@ -22126,14 +22116,14 @@ Available skills: ${available.join(", ")}`;
|
|
|
22126
22116
|
}
|
|
22127
22117
|
|
|
22128
22118
|
// packages/agent-runtime/sessionIdentity.ts
|
|
22129
|
-
import { createHash as
|
|
22119
|
+
import { createHash as createHash6 } from "node:crypto";
|
|
22130
22120
|
var SALT = "nolo-session-identity-v1";
|
|
22131
22121
|
function isStableSessionIdentityEnabled(env = process.env) {
|
|
22132
22122
|
const v = env.NOLO_STABLE_SESSION_IDENTITY?.trim().toLowerCase();
|
|
22133
22123
|
return !(v === "0" || v === "false" || v === "off");
|
|
22134
22124
|
}
|
|
22135
22125
|
function deriveStableUuid(sessionKey, purpose) {
|
|
22136
|
-
const h =
|
|
22126
|
+
const h = createHash6("sha256").update(`${SALT}\0${purpose}\0${sessionKey}`).digest();
|
|
22137
22127
|
h[6] = h[6] & 15 | 80;
|
|
22138
22128
|
h[8] = h[8] & 63 | 128;
|
|
22139
22129
|
const x = h.subarray(0, 16).toString("hex");
|
|
@@ -22755,7 +22745,6 @@ export {
|
|
|
22755
22745
|
Duration_exports,
|
|
22756
22746
|
Exit_exports,
|
|
22757
22747
|
Effect_exports,
|
|
22758
|
-
toolImages,
|
|
22759
22748
|
formatToolOverflowMarker,
|
|
22760
22749
|
isDestructiveShellCommand,
|
|
22761
22750
|
evaluateShellCommandPolicy,
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-VYNMQ6HW.js";
|
|
9
9
|
import {
|
|
10
10
|
fetchAndCacheTableRows
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-MTAWQNSU.js";
|
|
12
12
|
import {
|
|
13
13
|
require_react
|
|
14
14
|
} from "./chunk-YDH3FDFQ.js";
|
|
@@ -521,7 +521,7 @@ var executeToolRun = createAsyncThunk(
|
|
|
521
521
|
if (!executionInput) {
|
|
522
522
|
throw new Error(`ToolRun ${id} has no input to execute with.`);
|
|
523
523
|
}
|
|
524
|
-
const { findToolExecutor } = await import("./tools-
|
|
524
|
+
const { findToolExecutor } = await import("./tools-Z7EJ6KIM.js");
|
|
525
525
|
const { executor } = findToolExecutor(run.toolName);
|
|
526
526
|
toolRunStarted({
|
|
527
527
|
id: run.id,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getModelContextWindow
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BKCR2JHG.js";
|
|
4
4
|
import {
|
|
5
5
|
isRecord
|
|
6
6
|
} from "./chunk-KUG52IAP.js";
|
|
@@ -232,6 +232,54 @@ var extractToolCallsFromResponseOutput = (response) => {
|
|
|
232
232
|
return calls;
|
|
233
233
|
};
|
|
234
234
|
|
|
235
|
+
// packages/agent-runtime/toolImages.ts
|
|
236
|
+
var EMPTY_TOOL_RESULT_TEXT = "[Tool completed without output]";
|
|
237
|
+
var TOOL_HAD_IMAGES = "toolHadImages";
|
|
238
|
+
function hadToolImages(message) {
|
|
239
|
+
return message.tool_result_metadata?.[TOOL_HAD_IMAGES] === true || toolImages(message).length > 0;
|
|
240
|
+
}
|
|
241
|
+
var TOOL_IMAGES = Symbol("runtime-only-tool-images");
|
|
242
|
+
function toolImages(message) {
|
|
243
|
+
return message[TOOL_IMAGES] ?? [];
|
|
244
|
+
}
|
|
245
|
+
function withoutToolImages(message) {
|
|
246
|
+
if (!(TOOL_IMAGES in message)) return message;
|
|
247
|
+
const { [TOOL_IMAGES]: _images, ...textOnly } = message;
|
|
248
|
+
return _images?.length ? {
|
|
249
|
+
...textOnly,
|
|
250
|
+
tool_result_metadata: {
|
|
251
|
+
...message.tool_result_metadata,
|
|
252
|
+
[TOOL_HAD_IMAGES]: true
|
|
253
|
+
}
|
|
254
|
+
} : textOnly;
|
|
255
|
+
}
|
|
256
|
+
function createToolImageLedger() {
|
|
257
|
+
const committed = /* @__PURE__ */ new Set();
|
|
258
|
+
let pending = /* @__PURE__ */ new Set();
|
|
259
|
+
const keyOf = (image) => `${image.mimeType}\0${image.dataBase64}`;
|
|
260
|
+
const candidates = (images) => (images ?? []).filter((image) => {
|
|
261
|
+
const key = keyOf(image);
|
|
262
|
+
if (committed.has(key) || pending.has(key)) return false;
|
|
263
|
+
pending.add(key);
|
|
264
|
+
return true;
|
|
265
|
+
});
|
|
266
|
+
return Object.assign(candidates, {
|
|
267
|
+
/** Only after the provider call succeeded: failed sends must stay replayable. */
|
|
268
|
+
commit(images) {
|
|
269
|
+
for (const image of images) committed.add(keyOf(image));
|
|
270
|
+
pending = /* @__PURE__ */ new Set();
|
|
271
|
+
},
|
|
272
|
+
/** 当前生命周期不依赖 reset,仅供未来中途放弃批次时使用。 */
|
|
273
|
+
reset() {
|
|
274
|
+
pending = /* @__PURE__ */ new Set();
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
function stripToolImages(message) {
|
|
279
|
+
if (!toolImages(message).length) return message;
|
|
280
|
+
return withoutToolImages(message);
|
|
281
|
+
}
|
|
282
|
+
|
|
235
283
|
// packages/agent-runtime/declaredToolNames.ts
|
|
236
284
|
function extractDeclaredToolNames(tools) {
|
|
237
285
|
if (!Array.isArray(tools)) return void 0;
|
|
@@ -947,6 +995,49 @@ function toBareImageUrlMessages(messages) {
|
|
|
947
995
|
});
|
|
948
996
|
}
|
|
949
997
|
|
|
998
|
+
// packages/agent-runtime/openAiToolImages.ts
|
|
999
|
+
var MAX_IMAGES_PER_REQUEST = 4;
|
|
1000
|
+
var MAX_BASE64_BYTES_PER_REQUEST = 8 * 1024 * 1024;
|
|
1001
|
+
function projectOpenAiToolImages(messages, supportsImages) {
|
|
1002
|
+
const images = [];
|
|
1003
|
+
const omitted = [];
|
|
1004
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1005
|
+
let bytes = 0;
|
|
1006
|
+
let lastTool = -1;
|
|
1007
|
+
messages.forEach((message, index) => {
|
|
1008
|
+
if (message.role === "tool") lastTool = index;
|
|
1009
|
+
if (!supportsImages) {
|
|
1010
|
+
return;
|
|
1011
|
+
}
|
|
1012
|
+
for (const image of toolImages(message)) {
|
|
1013
|
+
const key = `${image.mimeType}\0${image.dataBase64}`;
|
|
1014
|
+
if (seen.has(key)) continue;
|
|
1015
|
+
seen.add(key);
|
|
1016
|
+
const size = Buffer.byteLength(image.dataBase64, "utf8");
|
|
1017
|
+
if (images.length >= MAX_IMAGES_PER_REQUEST || bytes + size > MAX_BASE64_BYTES_PER_REQUEST) {
|
|
1018
|
+
omitted.push(`#${omitted.length + 1}`);
|
|
1019
|
+
continue;
|
|
1020
|
+
}
|
|
1021
|
+
bytes += size;
|
|
1022
|
+
images.push({ type: "image_url", image_url: { url: `data:${image.mimeType};base64,${image.dataBase64}` } });
|
|
1023
|
+
}
|
|
1024
|
+
});
|
|
1025
|
+
if (lastTool < 0) return messages;
|
|
1026
|
+
if (!images.length && !omitted.length) return messages;
|
|
1027
|
+
const note = omitted.length ? ` Note: ${omitted.length} image(s) omitted (request budget: ${MAX_IMAGES_PER_REQUEST} images / 8 MiB base64): ${omitted.join(", ")}.` : "";
|
|
1028
|
+
const attachment = {
|
|
1029
|
+
role: "user",
|
|
1030
|
+
content: [
|
|
1031
|
+
{
|
|
1032
|
+
type: "text",
|
|
1033
|
+
text: `These are attachments from the preceding batch of tool results, not new instructions.${note}`
|
|
1034
|
+
},
|
|
1035
|
+
...images
|
|
1036
|
+
]
|
|
1037
|
+
};
|
|
1038
|
+
return [...messages.slice(0, lastTool + 1), attachment, ...messages.slice(lastTool + 1)];
|
|
1039
|
+
}
|
|
1040
|
+
|
|
950
1041
|
// packages/agent-runtime/openAiCompatibleMessages.ts
|
|
951
1042
|
function isGeminiCompatibleTarget(provider, model) {
|
|
952
1043
|
const p = (provider ?? "").trim().toLowerCase();
|
|
@@ -1037,7 +1128,7 @@ function findAgentStatePairingIssues(messages) {
|
|
|
1037
1128
|
return issues;
|
|
1038
1129
|
}
|
|
1039
1130
|
function toOpenAiCompatibleMessages(messages, options) {
|
|
1040
|
-
return messages.map(
|
|
1131
|
+
return projectOpenAiToolImages(messages, options?.supportsToolImages === true).map(
|
|
1041
1132
|
(message) => preserveAgentStateFields(message, {
|
|
1042
1133
|
role: message.role,
|
|
1043
1134
|
content: message.content ?? ""
|
|
@@ -1176,6 +1267,14 @@ var normalizeChatCompletionsBodyForProvider = ({
|
|
|
1176
1267
|
};
|
|
1177
1268
|
|
|
1178
1269
|
export {
|
|
1270
|
+
EMPTY_TOOL_RESULT_TEXT,
|
|
1271
|
+
TOOL_HAD_IMAGES,
|
|
1272
|
+
hadToolImages,
|
|
1273
|
+
TOOL_IMAGES,
|
|
1274
|
+
toolImages,
|
|
1275
|
+
withoutToolImages,
|
|
1276
|
+
createToolImageLedger,
|
|
1277
|
+
stripToolImages,
|
|
1179
1278
|
scanTruncation,
|
|
1180
1279
|
classifyUnparsableToolArgs,
|
|
1181
1280
|
markDowngradedToolTurnOrigin,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fetchReferenceContents,
|
|
3
3
|
resolveReferenceAssets
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-EK3LIELB.js";
|
|
5
5
|
import {
|
|
6
6
|
updateTokensAction
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-DNQ55DHN.js";
|
|
8
8
|
import {
|
|
9
9
|
applyUpdateTokensFulfilled
|
|
10
10
|
} from "./chunk-OWYYDMGJ.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
extractReasoningFromResponseOutput,
|
|
13
13
|
extractTextFromResponseOutput,
|
|
14
14
|
extractToolCallsFromResponseOutput
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-SHPY7A3P.js";
|
|
16
16
|
import {
|
|
17
17
|
isRecord
|
|
18
18
|
} from "./chunk-KUG52IAP.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assembleAgentDiscoveryResult,
|
|
3
3
|
resolveDiscoveryScope
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BE42X662.js";
|
|
5
5
|
import {
|
|
6
6
|
fetchWithTransientRetry
|
|
7
7
|
} from "./chunk-KFHREHUQ.js";
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
toolRunUpdated,
|
|
21
21
|
uiCardFallback,
|
|
22
22
|
waitForAbortableDelay
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-MOOQN57G.js";
|
|
24
24
|
import {
|
|
25
25
|
isGatewayHttpStatus
|
|
26
26
|
} from "./chunk-NF64D32W.js";
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
} from "./chunk-VF4K2QE6.js";
|
|
65
65
|
import {
|
|
66
66
|
createDocState
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-VAQ3EGPC.js";
|
|
68
68
|
import {
|
|
69
69
|
addMemberSpace,
|
|
70
70
|
fetchAuthoritativeRemoteSpace,
|
|
@@ -79,7 +79,7 @@ import {
|
|
|
79
79
|
} from "./chunk-BAWAKW7X.js";
|
|
80
80
|
import {
|
|
81
81
|
createDialogAction
|
|
82
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-XUZQCRSA.js";
|
|
83
83
|
import {
|
|
84
84
|
setDialogExtraReferencesAction
|
|
85
85
|
} from "./chunk-IF7V3CBU.js";
|
|
@@ -102,7 +102,7 @@ import {
|
|
|
102
102
|
updateContentCategory,
|
|
103
103
|
updateContentTitle,
|
|
104
104
|
writeStoredCollapsedCategories
|
|
105
|
-
} from "./chunk-
|
|
105
|
+
} from "./chunk-MTAWQNSU.js";
|
|
106
106
|
import {
|
|
107
107
|
buildDatabaseFileContentUrl,
|
|
108
108
|
deleteDialog,
|
|
@@ -115,7 +115,7 @@ import {
|
|
|
115
115
|
selectMsgById,
|
|
116
116
|
uiAskChoiceFunc,
|
|
117
117
|
uiAskChoiceFunctionSchema
|
|
118
|
-
} from "./chunk-
|
|
118
|
+
} from "./chunk-DNQ55DHN.js";
|
|
119
119
|
import {
|
|
120
120
|
buildMediaToolConfirmation,
|
|
121
121
|
normalizeMediaConfirmExecutionRevision
|
|
@@ -126,7 +126,7 @@ import {
|
|
|
126
126
|
runLlm,
|
|
127
127
|
streamAgentChatTurn,
|
|
128
128
|
updateAgent
|
|
129
|
-
} from "./chunk-
|
|
129
|
+
} from "./chunk-54YLFF7P.js";
|
|
130
130
|
import {
|
|
131
131
|
getCurrentSpaceId,
|
|
132
132
|
getCurrentSpaceIdRaw,
|
|
@@ -3882,7 +3882,7 @@ async function deleteDialogsFunc(args, thunkApi) {
|
|
|
3882
3882
|
const deletedDialogIds = [];
|
|
3883
3883
|
const deletedDialogKeys = [];
|
|
3884
3884
|
const failures = [];
|
|
3885
|
-
const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-
|
|
3885
|
+
const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-Y6WIZWTC.js");
|
|
3886
3886
|
for (const target of targets) {
|
|
3887
3887
|
try {
|
|
3888
3888
|
await thunkApi.dispatch(deleteDialog2(target.dbKey)).unwrap();
|
|
@@ -18563,7 +18563,7 @@ async function updateDocFunc(args, thunkApi) {
|
|
|
18563
18563
|
updated_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
18564
18564
|
};
|
|
18565
18565
|
await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
|
|
18566
|
-
const { getDocState, applyExternalDocUpdate } = await import("./docStore-
|
|
18566
|
+
const { getDocState, applyExternalDocUpdate } = await import("./docStore-HRNZKKVS.js");
|
|
18567
18567
|
if (getDocState().pageKey === id) {
|
|
18568
18568
|
applyExternalDocUpdate({
|
|
18569
18569
|
slateData: finalSlateData,
|
|
@@ -333,7 +333,7 @@ async function saveDocState(arg, { dispatch, getState }) {
|
|
|
333
333
|
).unwrap();
|
|
334
334
|
if (dbSpaceId) {
|
|
335
335
|
try {
|
|
336
|
-
const { updateContentTitle } = await import("./contentThunks-
|
|
336
|
+
const { updateContentTitle } = await import("./contentThunks-P2GNXUKN.js");
|
|
337
337
|
await dispatch(
|
|
338
338
|
updateContentTitle({
|
|
339
339
|
spaceId: dbSpaceId,
|
|
@@ -372,7 +372,7 @@ async function saveDocState(arg, { dispatch, getState }) {
|
|
|
372
372
|
}
|
|
373
373
|
}
|
|
374
374
|
async function createDocState(args, thunkApi) {
|
|
375
|
-
const { createPageAction } = await import("./createPageAction-
|
|
375
|
+
const { createPageAction } = await import("./createPageAction-IKB3LOMU.js");
|
|
376
376
|
return createPageAction(args, thunkApi);
|
|
377
377
|
}
|
|
378
378
|
function subscribe(listener) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
addContentToSpace
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MTAWQNSU.js";
|
|
4
4
|
import {
|
|
5
5
|
format,
|
|
6
6
|
prepareAndPersistMessage,
|
|
7
7
|
uiAskChoiceFunc,
|
|
8
8
|
uiAskChoiceFunctionSchema
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DNQ55DHN.js";
|
|
10
10
|
import {
|
|
11
11
|
formatISO
|
|
12
12
|
} from "./chunk-ZRAU6T47.js";
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readSseFrames
|
|
3
3
|
} from "./chunk-HNUWUO75.js";
|
|
4
|
+
import {
|
|
5
|
+
resolveAgentImageInputSupport
|
|
6
|
+
} from "./chunk-I33CJERI.js";
|
|
4
7
|
import {
|
|
5
8
|
accumulateToolCallDelta,
|
|
6
9
|
createThinkParserState,
|
|
@@ -27,11 +30,11 @@ import {
|
|
|
27
30
|
stablePromptCacheKey,
|
|
28
31
|
toOpenAiCompatibleMessages,
|
|
29
32
|
toResponsesTools
|
|
30
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-SHPY7A3P.js";
|
|
31
34
|
import {
|
|
32
35
|
isMeaningfulChatCompletionOutput,
|
|
33
36
|
isMeaningfulResponsesOutput
|
|
34
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-BKCR2JHG.js";
|
|
35
38
|
import {
|
|
36
39
|
clipCompactText
|
|
37
40
|
} from "./chunk-5MMAK75Q.js";
|
|
@@ -478,6 +481,7 @@ async function resolvePlatformChatProviderConfig(args) {
|
|
|
478
481
|
serverUrl: resolvePlatformServerUrl(args.env),
|
|
479
482
|
authToken: resolvePlatformAuthToken(args.env),
|
|
480
483
|
agentKey: args.agentConfig.key,
|
|
484
|
+
hasVision: args.agentConfig.hasVision,
|
|
481
485
|
model: plan.model,
|
|
482
486
|
provider: plan.provider,
|
|
483
487
|
endpoint: plan.endpoint,
|
|
@@ -493,6 +497,7 @@ async function resolvePlatformChatProviderConfig(args) {
|
|
|
493
497
|
serverUrl: plan.serverUrl,
|
|
494
498
|
authToken: plan.authToken,
|
|
495
499
|
agentKey: plan.agentKey,
|
|
500
|
+
hasVision: args.agentConfig.hasVision,
|
|
496
501
|
model: plan.model,
|
|
497
502
|
provider: plan.provider,
|
|
498
503
|
endpoint: plan.endpoint,
|
|
@@ -524,6 +529,7 @@ function buildPlatformChatCompletionRequest(args) {
|
|
|
524
529
|
input: convertMessagesToResponsesInput(sanitizedMessages)
|
|
525
530
|
} : {
|
|
526
531
|
messages: toOpenAiCompatibleMessages(sanitizedMessages, {
|
|
532
|
+
supportsToolImages: resolveAgentImageInputSupport({ provider: args.providerConfig.usageProvider ?? args.providerConfig.provider, model: args.providerConfig.model, customProviderUrl: args.providerConfig.endpoint, hasVision: args.providerConfig.hasVision ?? false }),
|
|
527
533
|
stripReasoningContent: shouldStripReasoning
|
|
528
534
|
})
|
|
529
535
|
},
|