nolo-cli 0.8.0-alpha.21 → 0.8.0-alpha.24
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-42U3VOVZ.js → _executeModel-2ZAPHFOX.js} +46 -43
- package/{action-TLI3V62L.js → action-QM2ONPYZ.js} +9 -9
- package/{addContentAction-57RSIIMR.js → addContentAction-UXY3GM53.js} +8 -8
- package/{addDialogAgentAction-G3VWEA6E.js → addDialogAgentAction-MUBYOG65.js} +10 -10
- package/{agentDeleteCommand-5DD2IM3J.js → agentDeleteCommand-5TFSII4Z.js} +28 -27
- package/{agentEmailCommands-6FACJBU4.js → agentEmailCommands-XMXWGUMZ.js} +62 -58
- package/{agentListCommands-I6KZYCIG.js → agentListCommands-OWEFQEY4.js} +119 -33
- package/{agentMachineCommands-VKLIGMZA.js → agentMachineCommands-DGHYBBFC.js} +27 -26
- package/{agentPullCommand-O2MTUAFR.js → agentPullCommand-N6UWRTVL.js} +3 -3
- package/{agentRecordCommands-7TZICYDT.js → agentRecordCommands-I433EE5F.js} +53 -49
- package/{agentRunCommand-L4OM23KV.js → agentRunCommand-UQSX3IGW.js} +57 -52
- package/{agentRunControl-K4VKNEHF.js → agentRunControl-S3G62M6C.js} +3 -3
- package/{agentRuntimeLocal-ZYEIPTY4.js → agentRuntimeLocal-73SVOC5U.js} +14 -12
- package/{agentSlice-BX7GXSNO.js → agentSlice-JQCS4LR3.js} +9 -9
- package/{authCommand-EB5JSOX5.js → authCommand-B6P2XYLN.js} +11 -11
- package/{authCommands-XPEHTKSM.js → authCommands-4YKA4GTU.js} +7 -7
- package/{chunk-AS4PVWA4.js → chunk-2CVZSC5L.js} +1 -1
- package/{chunk-JRKKFRAV.js → chunk-3HPUUWOR.js} +58 -8
- package/{chunk-5KLGBAAR.js → chunk-3KGTFX3T.js} +2 -13
- package/{chunk-IWX4UW2E.js → chunk-524BDL33.js} +89 -8
- package/chunk-6QFNUK2G.js +144 -0
- package/{chunk-4QEWT7KD.js → chunk-AISLHYDB.js} +367 -85
- package/{chunk-2FTTDCD4.js → chunk-AMJ7LA5D.js} +1 -1
- package/{chunk-I6XMPTMR.js → chunk-BFDWXLFF.js} +2 -2
- package/{chunk-RL776AGR.js → chunk-BKGNXJAM.js} +1 -1
- package/{chunk-RCSJFQPB.js → chunk-BQECZ3Q4.js} +361 -90
- package/{chunk-VVX233PH.js → chunk-BT37DVDA.js} +9 -9
- package/{chunk-ENOG22KJ.js → chunk-BT57QC5K.js} +18 -20
- package/chunk-BYXBJQAS.js +0 -0
- package/{chunk-O2ZNTTET.js → chunk-C4DZRHFJ.js} +24 -15
- package/{chunk-4XENYTF5.js → chunk-DS3VC4EA.js} +3 -3
- package/{chunk-N54XAP77.js → chunk-FVVST32H.js} +1 -1
- package/{chunk-P3PKED2I.js → chunk-FZ2G3I4B.js} +11 -13
- package/{chunk-AGFH73SK.js → chunk-G7KM6BBZ.js} +1 -1
- package/{chunk-2ECQG4YX.js → chunk-GROGNZOA.js} +264 -161
- package/chunk-IOQIOZNI.js +42 -0
- package/{chunk-AL2KDGR2.js → chunk-IPA2WQGY.js} +201 -98
- package/{chunk-7DAJ4AI4.js → chunk-IYMGQ3TN.js} +9 -2
- package/{chunk-CKOJQDKR.js → chunk-JEMATI63.js} +1 -1
- package/{chunk-7U44LYTR.js → chunk-JTINRTBT.js} +1 -1
- package/{chunk-4O3CARJ4.js → chunk-KTHLAJEY.js} +1 -1
- package/{chunk-URUUZLPA.js → chunk-L3KWEH3V.js} +8 -8
- package/{chunk-XBUBEFNX.js → chunk-L76QNLGU.js} +1 -1
- package/{chunk-UB6SN4NJ.js → chunk-LE6JAIXE.js} +6 -6
- package/{chunk-2JCXITPK.js → chunk-LRKEOCWY.js} +15 -15
- package/{chunk-5EFXE3O7.js → chunk-LTH6AVG7.js} +3 -3
- package/{chunk-YPRZSPF3.js → chunk-OCDEWRE2.js} +1 -1
- package/{chunk-6KHNO3SK.js → chunk-P2SPC3FT.js} +27 -23
- package/{chunk-4IJYA27C.js → chunk-PXZAAB4L.js} +4 -4
- package/{chunk-VUW5FBDB.js → chunk-Q7S2ORXX.js} +9 -9
- package/{chunk-C3RUNRHT.js → chunk-QWM7YWVT.js} +1 -1
- package/{chunk-25LCXTML.js → chunk-RQPZX6KP.js} +2 -2
- package/chunk-S3UTETIC.js +4885 -0
- package/{chunk-SDJDLO5W.js → chunk-SBVUZC2E.js} +5 -5
- package/{chunk-VX3SXJ3N.js → chunk-UBSKX3LP.js} +6 -6
- package/{chunk-4ZDM73SD.js → chunk-V2J635L5.js} +1 -1
- package/{chunk-DSZUWUYB.js → chunk-VBKJTOAW.js} +1 -1
- package/{chunk-FVYY6MCS.js → chunk-VUEXKW6U.js} +17 -17
- package/{chunk-7KCUSYT2.js → chunk-WKQGZJVI.js} +7 -7
- package/{chunk-GU3PEVGZ.js → chunk-WM7P5OWZ.js} +2639 -1579
- package/{chunk-7GNGZRLZ.js → chunk-WTBWWBSF.js} +150 -78
- package/{chunk-FSO5B7GH.js → chunk-WVS3GX3B.js} +2 -2
- package/chunk-Z3NEXVYE.js +33 -0
- package/{createAgentAutomationAction-RJF3N2QY.js → createAgentAutomationAction-GXZNLJZK.js} +26 -24
- package/{createDialogAction-DRSPS6CE.js → createDialogAction-KLW42ZGF.js} +26 -24
- package/{createPageAction-6B2WMNO3.js → createPageAction-IBJHE6MH.js} +26 -24
- package/{dbSlice-Q3TM2FJV.js → dbSlice-R5EJKZBW.js} +7 -7
- package/{deleteFile-OW53A6BX.js → deleteFile-WPWVZE4B.js} +5 -5
- package/{dialogCommands-4IX4XIZE.js → dialogCommands-7O5PUZRU.js} +23 -22
- package/{dialogSlice-3M7KX2TX.js → dialogSlice-GGV7PF53.js} +25 -23
- package/{docCreateCommands-SIL3NPGT.js → docCreateCommands-7ZO2NQQF.js} +22 -21
- package/{docDeleteCommands-7IOMLUS4.js → docDeleteCommands-YKIXZYBR.js} +23 -22
- package/{docReadCommands-FNFXUA5L.js → docReadCommands-5UDONBUL.js} +22 -21
- package/{docStore-SV7E34D4.js → docStore-VDWTATFH.js} +25 -23
- package/{docUpdateCommands-X2HNDVUC.js → docUpdateCommands-EPZIIQMY.js} +22 -21
- package/fetchMessages-KTNM7QAR.js +1 -1
- package/{getPricing-3E6UNPKL.js → getPricing-6TOZXPAU.js} +7 -3
- package/{handleSendMessageAction-JYETO5RZ.js → handleSendMessageAction-MMATC5V5.js} +30 -28
- package/index.js +74 -74
- package/{localDialogRead-2VRI24F4.js → localDialogRead-YSKFFRTT.js} +1 -1
- package/{machineCommands-RIO3RP5Q.js → machineCommands-PTHPKSIZ.js} +59 -55
- package/{machineWsRunDispatch-W7UYLGB5.js → machineWsRunDispatch-M5L2NVWJ.js} +51 -47
- package/{memoryCommands-O4MIPIWQ.js → memoryCommands-HG4WKTU7.js} +2 -2
- package/{models-4OPOOLFS.js → models-H524GH3U.js} +3 -2
- package/package.json +1 -1
- package/{read-GW7ZEI23.js → read-5ZMY7FKP.js} +5 -5
- package/{readDocTool-HUFU6OCT.js → readDocTool-2NXDK32S.js} +1 -1
- package/{readlineWorkspace-27JR7WPW.js → readlineWorkspace-4NXMEOHP.js} +835 -622
- package/{removeDialogAgentAction-CXKR4NJI.js → removeDialogAgentAction-KOLQ2R5W.js} +13 -12
- package/{runAgentClientLoop-HZFAPJHS.js → runAgentClientLoop-FGUYNGSA.js} +45 -42
- package/{runtimeDoctorCommands-LRHLPDRC.js → runtimeDoctorCommands-UWR5UDSM.js} +5 -5
- package/{setDialogExtraReferencesAction-6RKUSXHX.js → setDialogExtraReferencesAction-OMTEO7X6.js} +10 -10
- package/{setPrimaryDialogAgentAction-T3UTBEFG.js → setPrimaryDialogAgentAction-DOCIS6V4.js} +13 -12
- package/{settingSlice-IVKXJXMG.js → settingSlice-UWZJYDOA.js} +8 -8
- package/{spaceCommands-E7VOF4LO.js → spaceCommands-S3EB6TOS.js} +29 -28
- package/{spaceSlice-TSVROA5U.js → spaceSlice-RG2GSV7K.js} +24 -22
- package/{streamAgentChatTurn-3C5RQZJF.js → streamAgentChatTurn-X576C23M.js} +209 -86
- package/{tableCommands-O7O2LBEG.js → tableCommands-M3DJUETS.js} +10 -10
- package/{toolApiClient-QI3YBNWB.js → toolApiClient-C7P7YSE4.js} +2 -2
- package/{tools-EQDEKR6N.js → tools-HURZ2N4O.js} +33 -30
- package/{tuiSummaryLlmCaller-RV3THLZF.js → tuiSummaryLlmCaller-DG2LBTBX.js} +8 -6
- package/{updateCommands-VOSPKXFF.js → updateCommands-TC5SX42Y.js} +3 -3
- package/{updateDialogTitleAction-3XV7VWSZ.js → updateDialogTitleAction-62LVIAUZ.js} +28 -26
- package/chunk-BBYVOSU2.js +0 -792
- package/chunk-DCOA4QSN.js +0 -105
- package/{chunk-DZ3XJVET.js → chunk-3QAF2LTL.js} +3 -3
- package/{chunk-EHLHSX7R.js → chunk-5MMZUWSG.js} +3 -3
- package/{chunk-ISNCLGUZ.js → chunk-AVMJVOQY.js} +3 -3
- package/{chunk-UTLZINAP.js → chunk-DVRHHFEA.js} +10 -10
- package/{chunk-4CQLVGRV.js → chunk-ID4G2MAR.js} +3 -3
- package/{chunk-5MIDPSSK.js → chunk-JK7VW2FN.js} +3 -3
- package/{chunk-TILFE6LV.js → chunk-YOCHZD7D.js} +3 -3
- package/{db-HCJ5PRB5.js → db-6QED3ZVO.js} +3 -3
- package/{understanding-3CUQQ6SV.js → understanding-ZOESBLF3.js} +3 -3
|
@@ -2,23 +2,17 @@ import {
|
|
|
2
2
|
buildCurrentTimeBlock,
|
|
3
3
|
buildIdentityBlock,
|
|
4
4
|
buildRuntimeGuidanceBlocks
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-G7KM6BBZ.js";
|
|
6
6
|
import {
|
|
7
7
|
canonicalizeToolNames
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-FZ2G3I4B.js";
|
|
9
9
|
import {
|
|
10
10
|
clipCompactText
|
|
11
11
|
} from "./chunk-5MMAK75Q.js";
|
|
12
12
|
import {
|
|
13
13
|
findModelConfig,
|
|
14
14
|
getProviderByModelName
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import {
|
|
17
|
-
compactWhitespace
|
|
18
|
-
} from "./chunk-DWLEOOGR.js";
|
|
19
|
-
import {
|
|
20
|
-
toErrorMessage
|
|
21
|
-
} from "./chunk-HNMXYYJR.js";
|
|
15
|
+
} from "./chunk-S3UTETIC.js";
|
|
22
16
|
import {
|
|
23
17
|
asRecordOrEmpty
|
|
24
18
|
} from "./chunk-KX6YBIHG.js";
|
|
@@ -26,11 +20,14 @@ import {
|
|
|
26
20
|
asTrimmedLowercaseString
|
|
27
21
|
} from "./chunk-QSJ3HFEF.js";
|
|
28
22
|
import {
|
|
29
|
-
|
|
30
|
-
} from "./chunk-
|
|
23
|
+
toErrorMessage
|
|
24
|
+
} from "./chunk-HNMXYYJR.js";
|
|
31
25
|
import {
|
|
32
26
|
isRecord
|
|
33
27
|
} from "./chunk-KUG52IAP.js";
|
|
28
|
+
import {
|
|
29
|
+
asOptionalTrimmedString
|
|
30
|
+
} from "./chunk-G3SUCT4W.js";
|
|
34
31
|
|
|
35
32
|
// packages/agent-runtime/actionGate.ts
|
|
36
33
|
function readCommandActionGatePayload(payload) {
|
|
@@ -273,6 +270,20 @@ function summarizeToolArguments(toolName, rawArgs) {
|
|
|
273
270
|
);
|
|
274
271
|
}
|
|
275
272
|
|
|
273
|
+
// packages/agent-runtime/contextBlockScope.ts
|
|
274
|
+
var isContextBlockScope = (value) => {
|
|
275
|
+
if (typeof value !== "object" || value === null) return false;
|
|
276
|
+
const candidate = value;
|
|
277
|
+
return typeof candidate.content === "string" && (candidate.cacheScope === "session" || candidate.cacheScope === "turn");
|
|
278
|
+
};
|
|
279
|
+
var normalizeContextBlockScopes = (legacyBlocks = void 0, scopes = void 0) => {
|
|
280
|
+
const trimmedScopes = (Array.isArray(scopes) ? scopes : []).filter(isContextBlockScope).map((scope) => ({ content: scope.content.trim(), cacheScope: scope.cacheScope })).filter((scope) => scope.content.length > 0);
|
|
281
|
+
if (trimmedScopes.length > 0) {
|
|
282
|
+
return trimmedScopes;
|
|
283
|
+
}
|
|
284
|
+
return (Array.isArray(legacyBlocks) ? legacyBlocks : []).filter((block) => typeof block === "string").map((block) => block.trim()).filter((block) => block.length > 0).map((block) => ({ content: block, cacheScope: "turn" }));
|
|
285
|
+
};
|
|
286
|
+
|
|
276
287
|
// packages/agent-runtime/localLoop.ts
|
|
277
288
|
var LOCAL_AGENT_CONFIG_MISSING_CODE = "LOCAL_AGENT_CONFIG_MISSING";
|
|
278
289
|
var EMPTY_ASSISTANT_REPAIR_PROMPT = "\u8BF7\u7ED9\u51FA\u660E\u786E\u7684\u6587\u5B57\u56DE\u7B54\u6216\u6267\u884C\u4E0B\u4E00\u6B65\uFF1A\u5982\u679C\u4EFB\u52A1\u5DF2\u5B8C\u6210\uFF0C\u8BF7\u76F4\u63A5\u603B\u7ED3\u7ED3\u679C\uFF1B\u5982\u679C\u9700\u8981\u8C03\u7528\u5DE5\u5177\uFF0C\u8BF7\u76F4\u63A5\u8F93\u51FA tool_calls\u3002\u8BF7\u5207\u52FF\u8FD4\u56DE\u7A7A\u5185\u5BB9\u3002";
|
|
@@ -341,14 +352,43 @@ function buildAbortedError() {
|
|
|
341
352
|
function throwIfAborted(input) {
|
|
342
353
|
if (input.abortSignal?.aborted) throw buildAbortedError();
|
|
343
354
|
}
|
|
355
|
+
async function raceWithAbort(input, promise, pendingToolName) {
|
|
356
|
+
const signal = input.abortSignal;
|
|
357
|
+
if (!signal) return promise;
|
|
358
|
+
let abortListener;
|
|
359
|
+
const abortPromise = new Promise((_resolve, reject) => {
|
|
360
|
+
abortListener = () => {
|
|
361
|
+
const error = buildAbortedError();
|
|
362
|
+
if (pendingToolName) error.pendingToolName = pendingToolName;
|
|
363
|
+
promise.catch(() => {
|
|
364
|
+
});
|
|
365
|
+
reject(error);
|
|
366
|
+
};
|
|
367
|
+
if (signal.aborted) {
|
|
368
|
+
abortListener();
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
signal.addEventListener("abort", abortListener, { once: true });
|
|
372
|
+
});
|
|
373
|
+
try {
|
|
374
|
+
return await Promise.race([promise, abortPromise]);
|
|
375
|
+
} finally {
|
|
376
|
+
if (signal && abortListener) signal.removeEventListener("abort", abortListener);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
344
379
|
function resolveLlmRequestTimeoutMs(input) {
|
|
345
380
|
const raw = input.llmRequestTimeoutMs ?? input.timeoutMs;
|
|
346
381
|
if (typeof raw !== "number" || !Number.isFinite(raw) || raw <= 0) return void 0;
|
|
347
382
|
return raw;
|
|
348
383
|
}
|
|
349
384
|
async function runCompleteWithTimeout(args) {
|
|
350
|
-
const { provider, messages, options, timeoutMs, round, input } = args;
|
|
351
|
-
emitLoopEvent(input, {
|
|
385
|
+
const { provider, messages, options, timeoutMs, round, input, context } = args;
|
|
386
|
+
emitLoopEvent(input, {
|
|
387
|
+
kind: "llm-start",
|
|
388
|
+
round,
|
|
389
|
+
atMs: Date.now(),
|
|
390
|
+
...context ? { context } : {}
|
|
391
|
+
});
|
|
352
392
|
const complete = provider.complete(messages, options);
|
|
353
393
|
let ok = false;
|
|
354
394
|
const signal = input.abortSignal;
|
|
@@ -513,50 +553,209 @@ function buildActionGate(args) {
|
|
|
513
553
|
}
|
|
514
554
|
var MAX_HISTORICAL_TOOL_CONTENT_CHARS = 1600;
|
|
515
555
|
var MAX_IN_TURN_TOOL_CONTENT_CHARS = 4e3;
|
|
516
|
-
|
|
556
|
+
var DEFAULT_TOOL_OUTPUT_PROFILE = {
|
|
557
|
+
maxChars: MAX_IN_TURN_TOOL_CONTENT_CHARS,
|
|
558
|
+
headRatio: 0.5
|
|
559
|
+
};
|
|
560
|
+
var TOOL_OUTPUT_PROFILES = {
|
|
561
|
+
readFile: { maxChars: 4800, headRatio: 0.68 },
|
|
562
|
+
read_file: { maxChars: 4800, headRatio: 0.68 },
|
|
563
|
+
readWorkspaceFile: { maxChars: 4800, headRatio: 0.68 },
|
|
564
|
+
searchFiles: { maxChars: 3600, headRatio: 0.78 },
|
|
565
|
+
search_files: { maxChars: 3600, headRatio: 0.78 },
|
|
566
|
+
listFiles: { maxChars: 2800, headRatio: 0.85 },
|
|
567
|
+
globFiles: { maxChars: 2800, headRatio: 0.85 },
|
|
568
|
+
execShell: { maxChars: 4e3, headRatio: 0.35 },
|
|
569
|
+
runCommand: { maxChars: 4e3, headRatio: 0.35 },
|
|
570
|
+
launchProcess: { maxChars: 2800, headRatio: 0.35 },
|
|
571
|
+
editFile: { maxChars: 2800, headRatio: 0.62 },
|
|
572
|
+
writeFile: { maxChars: 2400, headRatio: 0.62 },
|
|
573
|
+
readPastedText: { maxChars: 4800, headRatio: 0.5 }
|
|
574
|
+
};
|
|
575
|
+
var TOOL_METADATA_KEYS = [
|
|
576
|
+
"path",
|
|
577
|
+
"query",
|
|
578
|
+
"effectivePattern",
|
|
579
|
+
"startLine",
|
|
580
|
+
"endLine",
|
|
581
|
+
"totalLines",
|
|
582
|
+
"totalBytes",
|
|
583
|
+
"bytes",
|
|
584
|
+
"totalChars",
|
|
585
|
+
"count",
|
|
586
|
+
"matchCount",
|
|
587
|
+
"matchedFiles",
|
|
588
|
+
"truncated",
|
|
589
|
+
"limitedByMaxResults",
|
|
590
|
+
"limitedByMaxDepth",
|
|
591
|
+
"visitedEntries",
|
|
592
|
+
"maxResults",
|
|
593
|
+
"exitCode",
|
|
594
|
+
"status",
|
|
595
|
+
"timedOut",
|
|
596
|
+
"aborted",
|
|
597
|
+
"replacements",
|
|
598
|
+
"code",
|
|
599
|
+
"error",
|
|
600
|
+
"message",
|
|
601
|
+
"pasteId",
|
|
602
|
+
"source"
|
|
603
|
+
];
|
|
604
|
+
function resolveToolOutputProfile(toolName) {
|
|
605
|
+
return (toolName ? TOOL_OUTPUT_PROFILES[toolName] : void 0) ?? DEFAULT_TOOL_OUTPUT_PROFILE;
|
|
606
|
+
}
|
|
607
|
+
function contentCharCount(content) {
|
|
608
|
+
if (typeof content === "string") return content.length;
|
|
609
|
+
if (!Array.isArray(content)) return 0;
|
|
610
|
+
return content.reduce((total, part) => {
|
|
611
|
+
if (part?.type === "text") return total + part.text.length;
|
|
612
|
+
if (part?.type === "image_url") return total + part.image_url.url.length;
|
|
613
|
+
return total;
|
|
614
|
+
}, 0);
|
|
615
|
+
}
|
|
616
|
+
function compactToolMetadata(metadata) {
|
|
617
|
+
if (!metadata) return "";
|
|
618
|
+
const selected = {};
|
|
619
|
+
for (const key of TOOL_METADATA_KEYS) {
|
|
620
|
+
const value = metadata[key];
|
|
621
|
+
if (value === void 0) continue;
|
|
622
|
+
if (typeof value === "string") {
|
|
623
|
+
selected[key] = clipCompactText(value, 240);
|
|
624
|
+
continue;
|
|
625
|
+
}
|
|
626
|
+
if (Array.isArray(value)) {
|
|
627
|
+
selected[key] = value.slice(0, 20).map(
|
|
628
|
+
(item) => typeof item === "string" ? clipCompactText(item, 180) : clipCompactText(JSON.stringify(item), 180)
|
|
629
|
+
);
|
|
630
|
+
continue;
|
|
631
|
+
}
|
|
632
|
+
selected[key] = value;
|
|
633
|
+
}
|
|
634
|
+
return Object.keys(selected).length > 0 ? clipCompactText(JSON.stringify(selected), 1200) : "";
|
|
635
|
+
}
|
|
636
|
+
function clipToolText(content, maxChars, headRatio) {
|
|
637
|
+
const normalized = content.replace(/\r\n/g, "\n").trim();
|
|
638
|
+
if (normalized.length <= maxChars) return normalized;
|
|
639
|
+
const marker = "\n\n[... tool output middle omitted; head/tail preserved ...]\n\n";
|
|
640
|
+
if (maxChars <= marker.length + 2) return normalized.slice(0, maxChars);
|
|
641
|
+
const available = maxChars - marker.length;
|
|
642
|
+
const headChars = Math.max(1, Math.floor(available * headRatio));
|
|
643
|
+
const tailChars = Math.max(1, available - headChars);
|
|
644
|
+
return `${normalized.slice(0, headChars)}${marker}${normalized.slice(-tailChars)}`;
|
|
645
|
+
}
|
|
646
|
+
function projectToolContentForProvider(args) {
|
|
647
|
+
const content = args.content;
|
|
517
648
|
if (typeof content !== "string") return content;
|
|
518
|
-
|
|
519
|
-
const
|
|
520
|
-
const
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
649
|
+
const metadataText = compactToolMetadata(args.metadata);
|
|
650
|
+
const embeddedMetadataIndex = metadataText ? content.indexOf("\n\n[tool metadata]\n") : -1;
|
|
651
|
+
const contentForProjection = embeddedMetadataIndex >= 0 ? content.slice(0, embeddedMetadataIndex) : content;
|
|
652
|
+
const metadataSuffix = metadataText ? `
|
|
653
|
+
|
|
654
|
+
[tool metadata]
|
|
655
|
+
${metadataText}` : "";
|
|
656
|
+
if (embeddedMetadataIndex >= 0 && content.length <= args.maxChars) {
|
|
657
|
+
return content;
|
|
658
|
+
}
|
|
659
|
+
const headRatio = resolveToolOutputProfile(args.toolName).headRatio;
|
|
660
|
+
const diagnostic = (clippedLength) => `[${args.label}; originalChars=${content.length}; omittedChars=${Math.max(
|
|
661
|
+
0,
|
|
662
|
+
content.length - clippedLength
|
|
663
|
+
)}]`;
|
|
664
|
+
const suffix = (clippedLength) => [diagnostic(clippedLength), metadataSuffix.trimStart()].filter(Boolean).join("\n\n");
|
|
665
|
+
const initialBudget = Math.max(
|
|
666
|
+
1,
|
|
667
|
+
args.maxChars - suffix(contentForProjection.length).length - 2
|
|
532
668
|
);
|
|
669
|
+
let clipped = clipToolText(contentForProjection, initialBudget, headRatio);
|
|
670
|
+
const wasClipped = clipped.length < contentForProjection.trim().length;
|
|
671
|
+
const needsProjection = wasClipped || Boolean(metadataSuffix) || embeddedMetadataIndex >= 0;
|
|
672
|
+
if (!needsProjection) return args.content;
|
|
673
|
+
let projected = wasClipped || metadataSuffix ? `${clipped}
|
|
674
|
+
|
|
675
|
+
${suffix(clipped.length)}` : clipped;
|
|
676
|
+
if (projected.length > args.maxChars) {
|
|
677
|
+
const boundedBudget = Math.max(
|
|
678
|
+
1,
|
|
679
|
+
args.maxChars - suffix(clipped.length).length - 2
|
|
680
|
+
);
|
|
681
|
+
clipped = clipToolText(contentForProjection, boundedBudget, headRatio);
|
|
682
|
+
projected = `${clipped}
|
|
683
|
+
|
|
684
|
+
${suffix(clipped.length)}`;
|
|
685
|
+
}
|
|
686
|
+
return projected.length <= args.maxChars ? projected : projected.slice(0, args.maxChars);
|
|
687
|
+
}
|
|
688
|
+
function summarizeHistoricalToolContent(content, toolName, metadata) {
|
|
689
|
+
const profile = resolveToolOutputProfile(toolName);
|
|
690
|
+
return projectToolContentForProvider({
|
|
691
|
+
content,
|
|
692
|
+
toolName,
|
|
693
|
+
metadata,
|
|
694
|
+
maxChars: Math.min(profile.maxChars, MAX_HISTORICAL_TOOL_CONTENT_CHARS),
|
|
695
|
+
label: "historical tool result truncated for the next turn"
|
|
696
|
+
});
|
|
533
697
|
}
|
|
534
698
|
function prepareMessagesForProviderCall(messages) {
|
|
535
699
|
const paired = sanitizeToolCallPairing(messages);
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
700
|
+
let toolMessageCount = 0;
|
|
701
|
+
let rawToolContentChars = 0;
|
|
702
|
+
let projectedToolContentChars = 0;
|
|
703
|
+
let truncatedToolResults = 0;
|
|
704
|
+
const projected = paired.map((message) => {
|
|
705
|
+
const { context_reference: _contextReference, ...providerMessage } = message;
|
|
706
|
+
const sanitizedContent = providerMessage.content == null ? "" : typeof providerMessage.content === "string" ? providerMessage.content : providerMessage.content;
|
|
707
|
+
if (providerMessage.role !== "tool") {
|
|
539
708
|
return {
|
|
540
|
-
...
|
|
709
|
+
...providerMessage,
|
|
541
710
|
content: sanitizedContent
|
|
542
711
|
};
|
|
543
712
|
}
|
|
713
|
+
toolMessageCount += 1;
|
|
714
|
+
rawToolContentChars += contentCharCount(sanitizedContent);
|
|
715
|
+
const profile = resolveToolOutputProfile(providerMessage.toolName);
|
|
716
|
+
const projectedContent = projectToolContentForProvider({
|
|
717
|
+
content: sanitizedContent,
|
|
718
|
+
toolName: providerMessage.toolName,
|
|
719
|
+
metadata: providerMessage.tool_result_metadata,
|
|
720
|
+
maxChars: profile.maxChars,
|
|
721
|
+
label: "in-turn tool result truncated/projected before next provider call"
|
|
722
|
+
});
|
|
723
|
+
projectedToolContentChars += contentCharCount(projectedContent);
|
|
724
|
+
if (contentCharCount(projectedContent) < contentCharCount(sanitizedContent)) {
|
|
725
|
+
truncatedToolResults += 1;
|
|
726
|
+
}
|
|
544
727
|
return {
|
|
545
|
-
...
|
|
546
|
-
content:
|
|
547
|
-
sanitizedContent,
|
|
548
|
-
MAX_IN_TURN_TOOL_CONTENT_CHARS,
|
|
549
|
-
"in-turn tool result truncated before next provider call"
|
|
550
|
-
)
|
|
728
|
+
...providerMessage,
|
|
729
|
+
content: projectedContent
|
|
551
730
|
};
|
|
552
731
|
});
|
|
732
|
+
return {
|
|
733
|
+
messages: projected,
|
|
734
|
+
metrics: {
|
|
735
|
+
messageCount: projected.length,
|
|
736
|
+
contentChars: projected.reduce((total, message) => total + contentCharCount(message.content), 0),
|
|
737
|
+
toolMessageCount,
|
|
738
|
+
rawToolContentChars,
|
|
739
|
+
projectedToolContentChars,
|
|
740
|
+
truncatedToolResults,
|
|
741
|
+
stableContextChars: 0,
|
|
742
|
+
dynamicContextChars: 0
|
|
743
|
+
}
|
|
744
|
+
};
|
|
553
745
|
}
|
|
554
|
-
function prepareHistoryForNextTurn(history) {
|
|
746
|
+
function prepareHistoryForNextTurn(history, contextReferenceResolver) {
|
|
555
747
|
return history.map((message) => {
|
|
748
|
+
if (message.role === "user" && message.context_reference !== void 0 && contextReferenceResolver?.(message.context_reference)) {
|
|
749
|
+
return { ...message, content: message.context_reference };
|
|
750
|
+
}
|
|
556
751
|
if (message.role !== "tool") return message;
|
|
557
752
|
return {
|
|
558
753
|
...message,
|
|
559
|
-
content: summarizeHistoricalToolContent(
|
|
754
|
+
content: summarizeHistoricalToolContent(
|
|
755
|
+
message.content,
|
|
756
|
+
message.toolName,
|
|
757
|
+
message.tool_result_metadata
|
|
758
|
+
)
|
|
560
759
|
};
|
|
561
760
|
});
|
|
562
761
|
}
|
|
@@ -578,25 +777,33 @@ function buildMessages(args) {
|
|
|
578
777
|
if (args.contextBlockScopes?.length) {
|
|
579
778
|
const blocks2 = args.contextBlockScopes.filter((b) => b.content.trim());
|
|
580
779
|
const stableParts = [args.prompt?.trim(), ...blocks2.filter((b) => b.cacheScope === "session").map((b) => b.content)].filter(Boolean);
|
|
581
|
-
const dynamicParts = blocks2.filter((b) => b.cacheScope === "turn").map((b) => b.content).filter(Boolean);
|
|
780
|
+
const dynamicParts = blocks2.filter((b) => b.cacheScope === "turn").map((b) => b.content).map((block) => block.trim()).filter(Boolean);
|
|
582
781
|
const stableContent = stableParts.join("\n\n");
|
|
583
782
|
const dynamicContent = dynamicParts.join("\n\n");
|
|
584
783
|
const systemContent2 = dynamicContent ? `${stableContent}
|
|
585
784
|
|
|
586
785
|
${dynamicContent}` : stableContent;
|
|
587
|
-
return
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
786
|
+
return {
|
|
787
|
+
messages: [
|
|
788
|
+
...systemContent2 ? [{ role: "system", content: systemContent2 }] : [],
|
|
789
|
+
...prepareHistoryForNextTurn(args.history, args.contextReferenceResolver),
|
|
790
|
+
{ role: "user", content: args.input }
|
|
791
|
+
],
|
|
792
|
+
stableContextChars: stableContent.length,
|
|
793
|
+
dynamicContextChars: dynamicContent.length
|
|
794
|
+
};
|
|
592
795
|
}
|
|
593
796
|
const blocks = (args.contextBlocks ?? []).map((block) => block.trim()).filter(Boolean);
|
|
594
797
|
const systemContent = [args.prompt?.trim(), ...blocks].filter(Boolean).join("\n\n");
|
|
595
|
-
return
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
798
|
+
return {
|
|
799
|
+
messages: [
|
|
800
|
+
...systemContent ? [{ role: "system", content: systemContent }] : [],
|
|
801
|
+
...prepareHistoryForNextTurn(args.history, args.contextReferenceResolver),
|
|
802
|
+
{ role: "user", content: args.input }
|
|
803
|
+
],
|
|
804
|
+
stableContextChars: (args.prompt?.trim() ?? "").length,
|
|
805
|
+
dynamicContextChars: blocks.join("\n\n").length
|
|
806
|
+
};
|
|
600
807
|
}
|
|
601
808
|
function mergeTurnUsage(current, next) {
|
|
602
809
|
if (!next) return current;
|
|
@@ -624,6 +831,52 @@ function extractUserInputText(content) {
|
|
|
624
831
|
if (!Array.isArray(content)) return "";
|
|
625
832
|
return content.flatMap((part) => part?.type === "text" && part.text ? [part.text] : []).join("\n").trim();
|
|
626
833
|
}
|
|
834
|
+
function attachDialogIdToError(error, dialogId) {
|
|
835
|
+
if (!dialogId) return;
|
|
836
|
+
if (typeof error === "object" && error !== null) {
|
|
837
|
+
error.dialogId = dialogId;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
async function persistFailedLocalTurn(args) {
|
|
841
|
+
const errorMessage = toErrorMessage(args.error);
|
|
842
|
+
try {
|
|
843
|
+
const saved = await args.adapter.saveTurn({
|
|
844
|
+
agentKey: args.agentKey,
|
|
845
|
+
messages: args.messages,
|
|
846
|
+
result: {
|
|
847
|
+
content: args.partialContent || `[nolo] Agent run failed: ${errorMessage}`,
|
|
848
|
+
model: args.model ?? "unknown",
|
|
849
|
+
toolCallCount: args.toolCallCount ?? 0,
|
|
850
|
+
error: true,
|
|
851
|
+
errorMessage
|
|
852
|
+
},
|
|
853
|
+
...args.input.runtimeContext ? { runtimeContext: args.input.runtimeContext } : {},
|
|
854
|
+
...args.input.continueDialogId ? { continueDialogId: args.input.continueDialogId } : {},
|
|
855
|
+
...args.input.spaceId ? { spaceId: args.input.spaceId } : {},
|
|
856
|
+
...args.input.category ? { category: args.input.category } : {},
|
|
857
|
+
...args.input.inheritedFromDialogKey ? { inheritedFromDialogKey: args.input.inheritedFromDialogKey } : {},
|
|
858
|
+
...args.input.parentDialogId ? { parentDialogId: args.input.parentDialogId } : {}
|
|
859
|
+
});
|
|
860
|
+
return saved?.dialogId;
|
|
861
|
+
} catch {
|
|
862
|
+
return args.input.continueDialogId;
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
function applyPersistedTurnInput(messages, persistedInput, persistedInputReference) {
|
|
866
|
+
if (persistedInput === void 0 && persistedInputReference === void 0) {
|
|
867
|
+
return messages;
|
|
868
|
+
}
|
|
869
|
+
let replaced = false;
|
|
870
|
+
return messages.map((message) => {
|
|
871
|
+
if (replaced || message.role !== "user") return message;
|
|
872
|
+
replaced = true;
|
|
873
|
+
return {
|
|
874
|
+
...message,
|
|
875
|
+
...persistedInput !== void 0 ? { content: persistedInput } : {},
|
|
876
|
+
...persistedInputReference !== void 0 ? { context_reference: persistedInputReference } : {}
|
|
877
|
+
};
|
|
878
|
+
});
|
|
879
|
+
}
|
|
627
880
|
async function runLocalAgentTurn(input) {
|
|
628
881
|
const agentConfig = await input.adapter.loadAgentConfig(input.agentRef);
|
|
629
882
|
if (!agentConfig) {
|
|
@@ -632,7 +885,21 @@ async function runLocalAgentTurn(input) {
|
|
|
632
885
|
error.agentRef = input.agentRef;
|
|
633
886
|
throw error;
|
|
634
887
|
}
|
|
635
|
-
|
|
888
|
+
let history = [];
|
|
889
|
+
try {
|
|
890
|
+
history = input.continueDialogId ? await input.adapter.loadDialogHistory(input.continueDialogId) : [];
|
|
891
|
+
} catch (error) {
|
|
892
|
+
const dialogId = await persistFailedLocalTurn({
|
|
893
|
+
adapter: input.adapter,
|
|
894
|
+
agentKey: agentConfig.key,
|
|
895
|
+
messages: [{ role: "user", content: input.input }],
|
|
896
|
+
error,
|
|
897
|
+
model: agentConfig.model,
|
|
898
|
+
input
|
|
899
|
+
});
|
|
900
|
+
attachDialogIdToError(error, dialogId);
|
|
901
|
+
throw error;
|
|
902
|
+
}
|
|
636
903
|
const identityBlock = buildIdentityBlock({
|
|
637
904
|
agentName: agentConfig.name,
|
|
638
905
|
agentId: agentConfig.key,
|
|
@@ -649,27 +916,27 @@ async function runLocalAgentTurn(input) {
|
|
|
649
916
|
const currentTimeScope = [
|
|
650
917
|
{ content: buildCurrentTimeBlock(/* @__PURE__ */ new Date(), void 0), cacheScope: "turn" }
|
|
651
918
|
];
|
|
919
|
+
const callerScopes = normalizeContextBlockScopes(
|
|
920
|
+
input.contextBlocks,
|
|
921
|
+
input.contextBlockScopes
|
|
922
|
+
);
|
|
652
923
|
const mergedContextBlockScopes = [
|
|
653
924
|
{ content: identityBlock, cacheScope: "session" },
|
|
654
925
|
...guidanceScopes,
|
|
655
926
|
...currentTimeScope,
|
|
656
|
-
...
|
|
927
|
+
...callerScopes
|
|
657
928
|
];
|
|
658
|
-
const hasContextBlocks = (
|
|
659
|
-
(block) => block.trim()
|
|
660
|
-
) || mergedContextBlockScopes.some(
|
|
661
|
-
(block) => block.content.trim()
|
|
662
|
-
);
|
|
929
|
+
const hasContextBlocks = callerScopes.some((block) => block.content.trim()) || mergedContextBlockScopes.some((block) => block.content.trim());
|
|
663
930
|
const promptMessageCount = agentConfig.prompt?.trim() || hasContextBlocks ? 1 : 0;
|
|
664
931
|
const turnStartIndex = promptMessageCount + history.length;
|
|
665
|
-
const
|
|
932
|
+
const builtMessages = buildMessages({
|
|
666
933
|
prompt: agentConfig.prompt,
|
|
667
|
-
contextBlocks: input.contextBlocks,
|
|
668
934
|
contextBlockScopes: mergedContextBlockScopes,
|
|
669
935
|
history,
|
|
670
|
-
input: input.input
|
|
936
|
+
input: input.input,
|
|
937
|
+
contextReferenceResolver: input.adapter.host === "cli" ? input.contextReferenceResolver : void 0
|
|
671
938
|
});
|
|
672
|
-
const
|
|
939
|
+
const messages = builtMessages.messages;
|
|
673
940
|
const supportsImages = resolveAgentImageInputSupport({
|
|
674
941
|
apiSource: agentConfig.apiSource,
|
|
675
942
|
provider: agentConfig.provider,
|
|
@@ -688,11 +955,13 @@ async function runLocalAgentTurn(input) {
|
|
|
688
955
|
let skipFinalAppend = false;
|
|
689
956
|
let partialContent = "";
|
|
690
957
|
try {
|
|
958
|
+
const provider = await input.adapter.resolveProvider(agentConfig);
|
|
691
959
|
while (true) {
|
|
692
960
|
partialContent = "";
|
|
693
961
|
throwIfAborted(input);
|
|
962
|
+
const preparedMessages = prepareMessagesForProviderCall(messages);
|
|
694
963
|
const baseRequestMessages = filterImagePartsFromMessages(
|
|
695
|
-
|
|
964
|
+
preparedMessages.messages,
|
|
696
965
|
supportsImages
|
|
697
966
|
);
|
|
698
967
|
if (!supportsImages && !imageDowngradeNotified && messages.some((m) => Array.isArray(m.content) && m.content.some((p) => p?.type === "image_url"))) {
|
|
@@ -704,6 +973,16 @@ async function runLocalAgentTurn(input) {
|
|
|
704
973
|
});
|
|
705
974
|
}
|
|
706
975
|
const requestMessages = emptyAssistantRepairPending ? [...baseRequestMessages, { role: "user", content: EMPTY_ASSISTANT_REPAIR_PROMPT }] : baseRequestMessages;
|
|
976
|
+
const contextMetrics = {
|
|
977
|
+
...preparedMessages.metrics,
|
|
978
|
+
messageCount: requestMessages.length,
|
|
979
|
+
contentChars: requestMessages.reduce(
|
|
980
|
+
(total, message) => total + contentCharCount(message.content),
|
|
981
|
+
0
|
|
982
|
+
),
|
|
983
|
+
stableContextChars: builtMessages.stableContextChars,
|
|
984
|
+
dynamicContextChars: builtMessages.dynamicContextChars
|
|
985
|
+
};
|
|
707
986
|
emptyAssistantRepairPending = false;
|
|
708
987
|
result = await runCompleteWithTimeout({
|
|
709
988
|
provider,
|
|
@@ -720,7 +999,8 @@ async function runLocalAgentTurn(input) {
|
|
|
720
999
|
},
|
|
721
1000
|
timeoutMs: resolveLlmRequestTimeoutMs(input),
|
|
722
1001
|
round,
|
|
723
|
-
input
|
|
1002
|
+
input,
|
|
1003
|
+
context: contextMetrics
|
|
724
1004
|
});
|
|
725
1005
|
turnUsage = mergeTurnUsage(turnUsage, result.usage);
|
|
726
1006
|
const toolCalls = result.tool_calls ?? [];
|
|
@@ -790,13 +1070,14 @@ async function runLocalAgentTurn(input) {
|
|
|
790
1070
|
argumentsPreview: summarizeToolArguments(toolName, toolCall.function.arguments)
|
|
791
1071
|
});
|
|
792
1072
|
try {
|
|
793
|
-
|
|
1073
|
+
const executePromise = input.adapter.executeTool({
|
|
794
1074
|
id: toolCall.id,
|
|
795
1075
|
name: toolName,
|
|
796
1076
|
arguments: toolCall.function.arguments,
|
|
797
1077
|
...userInputText ? { userInput: userInputText } : {},
|
|
798
1078
|
...input.abortSignal ? { abortSignal: input.abortSignal } : {}
|
|
799
1079
|
});
|
|
1080
|
+
toolResult = await raceWithAbort(input, executePromise, toolName);
|
|
800
1081
|
const actionGate = buildActionGate({
|
|
801
1082
|
toolName,
|
|
802
1083
|
toolCallId: toolCall.id,
|
|
@@ -821,6 +1102,9 @@ async function runLocalAgentTurn(input) {
|
|
|
821
1102
|
});
|
|
822
1103
|
} catch (error) {
|
|
823
1104
|
emitLoopEvent(input, { kind: "tool-end", name: toolName, atMs: Date.now(), ok: false });
|
|
1105
|
+
if (error && typeof error === "object" && error.code === LOCAL_TURN_ABORTED_CODE) {
|
|
1106
|
+
throw error;
|
|
1107
|
+
}
|
|
824
1108
|
if (!shouldReturnToolExecutionErrors(input.adapter)) throw error;
|
|
825
1109
|
emitToolEvent(input, {
|
|
826
1110
|
type: "tool-error",
|
|
@@ -858,28 +1142,22 @@ async function runLocalAgentTurn(input) {
|
|
|
858
1142
|
loopError = error;
|
|
859
1143
|
}
|
|
860
1144
|
if (loopError) {
|
|
861
|
-
const
|
|
862
|
-
|
|
863
|
-
|
|
1145
|
+
const turnMessages2 = applyPersistedTurnInput(
|
|
1146
|
+
messages.slice(turnStartIndex),
|
|
1147
|
+
input.persistedInput,
|
|
1148
|
+
input.persistedInputReference
|
|
1149
|
+
);
|
|
1150
|
+
const dialogId = await persistFailedLocalTurn({
|
|
1151
|
+
adapter: input.adapter,
|
|
864
1152
|
agentKey: agentConfig.key,
|
|
865
1153
|
messages: turnMessages2,
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
errorMessage
|
|
872
|
-
},
|
|
873
|
-
...input.runtimeContext ? { runtimeContext: input.runtimeContext } : {},
|
|
874
|
-
...input.continueDialogId ? { continueDialogId: input.continueDialogId } : {},
|
|
875
|
-
...input.spaceId ? { spaceId: input.spaceId } : {},
|
|
876
|
-
...input.category ? { category: input.category } : {},
|
|
877
|
-
...input.inheritedFromDialogKey ? { inheritedFromDialogKey: input.inheritedFromDialogKey } : {},
|
|
878
|
-
...input.parentDialogId ? { parentDialogId: input.parentDialogId } : {}
|
|
1154
|
+
error: loopError,
|
|
1155
|
+
model: agentConfig.model,
|
|
1156
|
+
toolCallCount,
|
|
1157
|
+
partialContent,
|
|
1158
|
+
input
|
|
879
1159
|
});
|
|
880
|
-
|
|
881
|
-
loopError.dialogId = saved2.dialogId;
|
|
882
|
-
}
|
|
1160
|
+
attachDialogIdToError(loopError, dialogId);
|
|
883
1161
|
throw loopError;
|
|
884
1162
|
}
|
|
885
1163
|
result = result;
|
|
@@ -892,7 +1170,11 @@ async function runLocalAgentTurn(input) {
|
|
|
892
1170
|
...result.reasoning_content ? { reasoning_content: result.reasoning_content } : {}
|
|
893
1171
|
});
|
|
894
1172
|
}
|
|
895
|
-
const turnMessages =
|
|
1173
|
+
const turnMessages = applyPersistedTurnInput(
|
|
1174
|
+
messages.slice(turnStartIndex),
|
|
1175
|
+
input.persistedInput,
|
|
1176
|
+
input.persistedInputReference
|
|
1177
|
+
);
|
|
896
1178
|
const saved = await input.adapter.saveTurn({
|
|
897
1179
|
agentKey: agentConfig.key,
|
|
898
1180
|
messages: turnMessages,
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
patch,
|
|
6
6
|
read
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-L3KWEH3V.js";
|
|
8
8
|
import {
|
|
9
9
|
DEVICE_LOCAL_OWNER_ID,
|
|
10
10
|
isDeviceLocalSpaceBody,
|
|
11
11
|
selectIdentityUserId
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-DVRHHFEA.js";
|
|
13
13
|
|
|
14
14
|
// packages/create/space/utils/permissions.ts
|
|
15
15
|
var checkSpaceMembership = (spaceData, userId) => {
|