nolo-cli 0.185.0-alpha.4 → 0.186.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-WTNQE227.js → _executeModel-35LFG5KF.js} +12 -12
- package/{agentDeleteCommand-KJFY6C7J.js → agentDeleteCommand-TMFQR6QL.js} +11 -11
- package/{agentEmailCommands-CGXK25TI.js → agentEmailCommands-JZ6GYJ4H.js} +13 -13
- package/{agentListCommands-PRG4ZBJC.js → agentListCommands-PFZRMIAI.js} +2 -2
- package/{agentMachineCommands-OVFR25AO.js → agentMachineCommands-BT643ADE.js} +3 -3
- package/{agentRecordCommands-V233UFDQ.js → agentRecordCommands-LJ5EWR67.js} +12 -12
- package/{agentRunCommand-CNBQZ4PZ.js → agentRunCommand-6CPXONR3.js} +14 -14
- package/{agentRuntimeLocal-CBDP2OYK.js → agentRuntimeLocal-3QBUFZEC.js} +2 -2
- package/{agentSlice-XC35R4QW.js → agentSlice-RW25WUPR.js} +1 -1
- package/{appDeleteCommands-OP4GGXEJ.js → appDeleteCommands-WEBDQMVH.js} +2 -2
- package/{appDeployCommands-LHTVLNL5.js → appDeployCommands-HFZ3I7Z4.js} +2 -2
- package/{appDeployStatusCommands-BSDDQU7S.js → appDeployStatusCommands-TVBQOFIY.js} +2 -2
- package/{appGetCommands-LNHGUJKF.js → appGetCommands-Y5RKR25C.js} +2 -2
- package/{appListCommands-RGOFZV5M.js → appListCommands-4UZIZPB3.js} +2 -2
- package/{chunk-5BSIT4IP.js → chunk-37ZDGCX6.js} +8 -8
- package/{chunk-IOQHM7ID.js → chunk-4ALQFIFF.js} +720 -92
- package/{chunk-Z4AZSU7X.js → chunk-4GZ2LY5F.js} +12 -8
- package/{chunk-KQFC7IPI.js → chunk-6HFMPUSN.js} +2 -2
- package/{chunk-AU7AXHUL.js → chunk-7KWPNGVJ.js} +57 -21
- package/{chunk-5STT2WW5.js → chunk-BRBG72OP.js} +7 -7
- package/{chunk-3SMSREBB.js → chunk-CDUK5BF6.js} +2 -2
- package/{chunk-ZN2PUXZ2.js → chunk-DK7QNJVM.js} +2 -2
- package/{chunk-TGH6MIC7.js → chunk-ECAGROXS.js} +2 -2
- package/{chunk-TIHN5AXV.js → chunk-IOB5RBBZ.js} +1 -1
- package/{chunk-7XY4VVIL.js → chunk-J5Y3BXJP.js} +124 -22
- package/{chunk-PHD5UL5B.js → chunk-PEOLOK72.js} +1 -1
- package/{chunk-MKAWH3AL.js → chunk-PL6YNOF7.js} +10 -10
- package/chunk-Q6RMLYSA.js +385 -0
- package/{chunk-DKYQN6DO.js → chunk-QBMO66MI.js} +3 -3
- package/{chunk-DIP5EVZD.js → chunk-SIX7N4AH.js} +2 -2
- package/{chunk-TURPPK3Y.js → chunk-TB7E6UEO.js} +1 -1
- package/{chunk-KBW2QSGY.js → chunk-VMMS7L64.js} +3 -3
- package/{chunk-ZPRV4GQD.js → chunk-XJECR5M3.js} +2 -2
- package/{chunk-CH3QKJ2T.js → chunk-ZV6ESGA7.js} +2 -2
- package/{chunk-SL2TDPXF.js → chunk-ZXUPGFJ5.js} +6 -6
- package/{commandRegistry-2J53NSBR.js → commandRegistry-6EEZMM43.js} +40 -40
- package/{contentThunks-TFYSYUDO.js → contentThunks-EPHFLF62.js} +3 -3
- package/{createAgentAutomationAction-KCODNBWN.js → createAgentAutomationAction-MFE4QIL4.js} +3 -3
- package/{createDialogAction-RGDFOBVN.js → createDialogAction-SGOXQ7BC.js} +4 -4
- package/{createPageAction-XXI7D2CN.js → createPageAction-OTNUT7WI.js} +3 -3
- package/{dialogCommands-6MR232CJ.js → dialogCommands-KNE72SUM.js} +2 -2
- package/{dialogSlice-IZAIMZXJ.js → dialogSlice-PHPLFD5F.js} +2 -2
- package/{docCreateCommands-DAZJ2Y5E.js → docCreateCommands-MG67RHCR.js} +2 -2
- package/{docDeleteCommands-XO26LNIO.js → docDeleteCommands-2UAG5JVZ.js} +2 -2
- package/{docReadCommands-77XGRLD6.js → docReadCommands-JKJJ4FNU.js} +2 -2
- package/{docStore-IRZWBI3X.js → docStore-HI7P3MVA.js} +1 -1
- package/{docUpdateCommands-QXN3MJAJ.js → docUpdateCommands-6D7ADVPS.js} +2 -2
- package/{handleSendMessageAction-E6PA6K6X.js → handleSendMessageAction-YAO4RDWU.js} +8 -8
- package/index.js +3 -3
- package/{localRuntimeAdapter-ATJCBXFO.js → localRuntimeAdapter-4J62I4YU.js} +11 -11
- package/{machineCommands-T4XT4J4G.js → machineCommands-XW5I55QW.js} +12 -12
- package/{machineWsRunDispatch-VZZHV4G7.js → machineWsRunDispatch-W5VEHHMI.js} +12 -12
- package/package.json +1 -1
- package/{readlineWorkspace-4RIJTRPN.js → readlineWorkspace-EE6JMRIW.js} +14 -14
- package/{runAgentClientLoop-7DKG2KL2.js → runAgentClientLoop-BU6GOWQI.js} +10 -10
- package/skillDiscovery-F3TMVQOJ.js +28 -0
- package/{spaceCommands-PHLKQ2AW.js → spaceCommands-GTQQ6GFS.js} +2 -2
- package/{streamAgentChatTurn-2764VROY.js → streamAgentChatTurn-MHRXV7XZ.js} +13 -13
- package/{tools-UJELIY4A.js → tools-YA5NIWI7.js} +7 -7
- package/{updateDialogTitleAction-HUFWSVYC.js → updateDialogTitleAction-M6U2VK5L.js} +3 -3
- package/chunk-VEA7H5FG.js +0 -173
- package/skillDiscovery-QC35EQY4.js +0 -18
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-QYPE3TS3.js";
|
|
15
15
|
import {
|
|
16
16
|
runLlm
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-VMMS7L64.js";
|
|
18
18
|
import {
|
|
19
19
|
getApproxPricePerImage
|
|
20
20
|
} from "./chunk-4JH2UMJR.js";
|
|
@@ -7225,6 +7225,7 @@ var space_locale_default = {
|
|
|
7225
7225
|
unpin: "Unpin",
|
|
7226
7226
|
favorite: "Favorite",
|
|
7227
7227
|
unfavorite: "Unfavorite",
|
|
7228
|
+
favoriteDetailMissingHint: "Favorited item \u2014 opening it will show its title",
|
|
7228
7229
|
quickAddToRail: "Add to Rail Shortcut",
|
|
7229
7230
|
quickRemoveFromRail: "Remove from Rail Shortcut",
|
|
7230
7231
|
quickMoveRailUp: "Move Rail Shortcut Up",
|
|
@@ -7551,6 +7552,7 @@ var space_locale_default = {
|
|
|
7551
7552
|
unpin: "\u53D6\u6D88\u7F6E\u9876",
|
|
7552
7553
|
favorite: "\u6536\u85CF",
|
|
7553
7554
|
unfavorite: "\u53D6\u6D88\u6536\u85CF",
|
|
7555
|
+
favoriteDetailMissingHint: "\u6536\u85CF\u9879\uFF0C\u6253\u5F00\u540E\u4F1A\u663E\u793A\u6807\u9898",
|
|
7554
7556
|
quickAddToRail: "\u52A0\u5165\u5FEB\u6377",
|
|
7555
7557
|
quickRemoveFromRail: "\u4ECE\u5FEB\u6377\u79FB\u9664",
|
|
7556
7558
|
quickMoveRailUp: "\u5FEB\u6377\u4E0A\u79FB",
|
|
@@ -7876,6 +7878,7 @@ var space_locale_default = {
|
|
|
7876
7878
|
unpin: "\u53D6\u6D88\u7F6E\u9802",
|
|
7877
7879
|
favorite: "\u6536\u85CF",
|
|
7878
7880
|
unfavorite: "\u53D6\u6D88\u6536\u85CF",
|
|
7881
|
+
favoriteDetailMissingHint: "\u6536\u85CF\u9805\uFF0C\u958B\u555F\u5F8C\u6703\u986F\u793A\u6A19\u984C",
|
|
7879
7882
|
quickAddToRail: "\u52A0\u5165\u5FEB\u6377",
|
|
7880
7883
|
quickRemoveFromRail: "\u5F9E\u5FEB\u6377\u79FB\u9664",
|
|
7881
7884
|
quickMoveRailUp: "\u5FEB\u6377\u4E0A\u79FB",
|
|
@@ -8202,6 +8205,7 @@ var space_locale_default = {
|
|
|
8202
8205
|
unpin: "\u30D4\u30F3\u7559\u3081\u89E3\u9664",
|
|
8203
8206
|
favorite: "\u304A\u6C17\u306B\u5165\u308A",
|
|
8204
8207
|
unfavorite: "\u304A\u6C17\u306B\u5165\u308A\u89E3\u9664",
|
|
8208
|
+
favoriteDetailMissingHint: "\u304A\u6C17\u306B\u5165\u308A\u9805\u76EE\u3002\u958B\u304F\u3068\u30BF\u30A4\u30C8\u30EB\u304C\u8868\u793A\u3055\u308C\u307E\u3059",
|
|
8205
8209
|
quickAddToRail: "\u30EC\u30FC\u30EB\u306B\u8FFD\u52A0",
|
|
8206
8210
|
quickRemoveFromRail: "\u30EC\u30FC\u30EB\u304B\u3089\u524A\u9664",
|
|
8207
8211
|
quickMoveRailUp: "\u30EC\u30FC\u30EB\u5185\u3067\u4E0A\u3078\u79FB\u52D5",
|
|
@@ -11067,7 +11071,7 @@ var messageSlice = createSliceWithThunks({
|
|
|
11067
11071
|
runtimeOptions: args.runtimeOptions
|
|
11068
11072
|
});
|
|
11069
11073
|
if (agentKeyToUse) {
|
|
11070
|
-
const { streamAgentChatTurn } = await import("./agentSlice-
|
|
11074
|
+
const { streamAgentChatTurn } = await import("./agentSlice-RW25WUPR.js");
|
|
11071
11075
|
await dispatch(
|
|
11072
11076
|
streamAgentChatTurn({
|
|
11073
11077
|
agentKey: agentKeyToUse,
|
|
@@ -13881,7 +13885,7 @@ var deleteDialogThunk = async (payload, thunkApi) => {
|
|
|
13881
13885
|
}
|
|
13882
13886
|
if (isCurrentDialog) {
|
|
13883
13887
|
await thunkApi.dispatch(resetMsgs());
|
|
13884
|
-
const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-
|
|
13888
|
+
const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-PHPLFD5F.js");
|
|
13885
13889
|
dispatch(clearPendingAttachments2());
|
|
13886
13890
|
}
|
|
13887
13891
|
return { dialogKey, isCurrentDialog, attachmentPlan };
|
|
@@ -13889,15 +13893,15 @@ var deleteDialogThunk = async (payload, thunkApi) => {
|
|
|
13889
13893
|
|
|
13890
13894
|
// packages/chat/dialog/dialogSlice.ts
|
|
13891
13895
|
var runCreateDialogAction = async (args, thunkApi) => {
|
|
13892
|
-
const { createDialogAction } = await import("./createDialogAction-
|
|
13896
|
+
const { createDialogAction } = await import("./createDialogAction-SGOXQ7BC.js");
|
|
13893
13897
|
return createDialogAction(args, thunkApi);
|
|
13894
13898
|
};
|
|
13895
13899
|
var runCreateAgentAutomationAction = async (args, thunkApi) => {
|
|
13896
|
-
const { createAgentAutomationAction } = await import("./createAgentAutomationAction-
|
|
13900
|
+
const { createAgentAutomationAction } = await import("./createAgentAutomationAction-MFE4QIL4.js");
|
|
13897
13901
|
return createAgentAutomationAction(args, thunkApi);
|
|
13898
13902
|
};
|
|
13899
13903
|
var runUpdateDialogTitleAction = async (args, thunkApi) => {
|
|
13900
|
-
const { updateDialogTitleAction } = await import("./updateDialogTitleAction-
|
|
13904
|
+
const { updateDialogTitleAction } = await import("./updateDialogTitleAction-M6U2VK5L.js");
|
|
13901
13905
|
return updateDialogTitleAction(args, thunkApi);
|
|
13902
13906
|
};
|
|
13903
13907
|
var runAddDialogAgentAction = async (args, thunkApi) => {
|
|
@@ -13921,7 +13925,7 @@ var runSetDialogExtraReferencesAction = async (args, thunkApi) => {
|
|
|
13921
13925
|
return setDialogExtraReferencesAction(args, thunkApi);
|
|
13922
13926
|
};
|
|
13923
13927
|
var runHandleSendMessageAction = async (args, thunkApi) => {
|
|
13924
|
-
const { handleSendMessageAction } = await import("./handleSendMessageAction-
|
|
13928
|
+
const { handleSendMessageAction } = await import("./handleSendMessageAction-YAO4RDWU.js");
|
|
13925
13929
|
return handleSendMessageAction(args, thunkApi);
|
|
13926
13930
|
};
|
|
13927
13931
|
function clearDialogState() {
|
|
@@ -13934,7 +13938,7 @@ var createPageAndAddReference = createAsyncThunk(
|
|
|
13934
13938
|
async (payload, { dispatch, getState, rejectWithValue }) => {
|
|
13935
13939
|
const { slateData, jsonData, title, type, fileId, groupId, dialogKey } = payload;
|
|
13936
13940
|
try {
|
|
13937
|
-
const { createDocState } = await import("./docStore-
|
|
13941
|
+
const { createDocState } = await import("./docStore-HI7P3MVA.js");
|
|
13938
13942
|
const pageKey = await createDocState(
|
|
13939
13943
|
{ slateData, title },
|
|
13940
13944
|
{ dispatch, getState }
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
clipMultilineText,
|
|
3
3
|
fetchAndSerializeTable,
|
|
4
4
|
waitForAbortableDelay
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-XJECR5M3.js";
|
|
6
6
|
import {
|
|
7
7
|
isGatewayHttpStatus
|
|
8
8
|
} from "./chunk-NF64D32W.js";
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
} from "./chunk-AGIM7IMJ.js";
|
|
22
22
|
import {
|
|
23
23
|
fetchAndCacheMessages
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-4GZ2LY5F.js";
|
|
25
25
|
import {
|
|
26
26
|
createSpaceKey
|
|
27
27
|
} from "./chunk-UAD2WT54.js";
|
|
@@ -2,16 +2,19 @@ import {
|
|
|
2
2
|
load
|
|
3
3
|
} from "./chunk-KHCLMKZZ.js";
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
DEFAULT_SKILL_CATALOG_BUDGET,
|
|
6
|
+
applySkillDescriptionBudget,
|
|
7
|
+
buildSkillDiscoveryCatalogLayer,
|
|
8
|
+
mapDiscoveredSkillsToCatalogEntries,
|
|
9
|
+
resolveSkillCatalog,
|
|
10
|
+
resolveSkillCatalogSync
|
|
11
|
+
} from "./chunk-Q6RMLYSA.js";
|
|
7
12
|
|
|
8
13
|
// packages/agent-runtime/skillDiscovery.ts
|
|
9
14
|
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
10
15
|
import { join } from "node:path";
|
|
11
16
|
var SKILL_SCAN_DIRS = [".agents/skills"];
|
|
12
|
-
var MAX_DISCOVERED_SKILLS =
|
|
13
|
-
var MAX_DISCOVERY_DESC_BUDGET = 4e3;
|
|
14
|
-
var MIN_DESC_LENGTH = 80;
|
|
17
|
+
var MAX_DISCOVERED_SKILLS = DEFAULT_SKILL_CATALOG_BUDGET.maxEntries;
|
|
15
18
|
function parseSkillFrontmatter(filePath) {
|
|
16
19
|
try {
|
|
17
20
|
const content = readFileSync(filePath, "utf8").slice(0, 2048);
|
|
@@ -57,17 +60,7 @@ function discoverSkills(cwd) {
|
|
|
57
60
|
} catch {
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
|
-
|
|
61
|
-
if (totalDescLen > MAX_DISCOVERY_DESC_BUDGET && skills.length > 0) {
|
|
62
|
-
const scale = MAX_DISCOVERY_DESC_BUDGET / totalDescLen;
|
|
63
|
-
for (const s of skills) {
|
|
64
|
-
const targetLen = Math.max(MIN_DESC_LENGTH, Math.floor(s.description.length * scale));
|
|
65
|
-
if (s.description.length > targetLen) {
|
|
66
|
-
s.description = s.description.slice(0, targetLen).trimEnd();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return skills;
|
|
63
|
+
return applySkillDescriptionBudget(skills);
|
|
71
64
|
}
|
|
72
65
|
function resolveSkillByName(cwd, name) {
|
|
73
66
|
const trimmed = name.trim();
|
|
@@ -94,21 +87,64 @@ function resolveSkillByName(cwd, name) {
|
|
|
94
87
|
}
|
|
95
88
|
return null;
|
|
96
89
|
}
|
|
97
|
-
function
|
|
90
|
+
function listLocalWorkspaceSkillCatalogEntries(cwd) {
|
|
91
|
+
return mapDiscoveredSkillsToCatalogEntries(discoverSkills(cwd));
|
|
92
|
+
}
|
|
93
|
+
function createLocalWorkspaceSkillCatalogSource() {
|
|
94
|
+
return {
|
|
95
|
+
id: "local-workspace",
|
|
96
|
+
list: (query) => query.cwd ? listLocalWorkspaceSkillCatalogEntries(query.cwd) : []
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
var collectSources = (args) => [
|
|
100
|
+
...args.includeLocalWorkspace === false || !args.cwd ? [] : [createLocalWorkspaceSkillCatalogSource()],
|
|
101
|
+
...args.sources ?? []
|
|
102
|
+
];
|
|
103
|
+
async function collectWorkspaceSkillCatalog(args) {
|
|
104
|
+
return resolveSkillCatalog(
|
|
105
|
+
collectSources(args),
|
|
106
|
+
{ cwd: args.cwd },
|
|
107
|
+
args.budget ?? DEFAULT_SKILL_CATALOG_BUDGET
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
function collectWorkspaceSkillCatalogSync(args) {
|
|
111
|
+
return resolveSkillCatalogSync(
|
|
112
|
+
collectSources(args),
|
|
113
|
+
{ cwd: args.cwd },
|
|
114
|
+
args.budget ?? DEFAULT_SKILL_CATALOG_BUDGET,
|
|
115
|
+
// HIGH-1:注入来源里混进异步实现时,跳过它并在 skillCatalog 里打 warn,
|
|
116
|
+
// 而不是抛错把「已经收集到的本地文件技能」一起丢掉。
|
|
117
|
+
{ onAsyncSource: "skip" }
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
function buildSkillDiscoveryContextLayerFromCatalog(catalog) {
|
|
121
|
+
return buildSkillDiscoveryCatalogLayer(catalog);
|
|
122
|
+
}
|
|
123
|
+
function buildSkillDiscoveryContextLayer(cwd, options = {}) {
|
|
98
124
|
try {
|
|
99
|
-
return
|
|
100
|
-
|
|
125
|
+
return buildSkillDiscoveryCatalogLayer(
|
|
126
|
+
collectWorkspaceSkillCatalogSync({ cwd, sources: options.sources })
|
|
127
|
+
);
|
|
128
|
+
} catch (error) {
|
|
129
|
+
console.warn(
|
|
130
|
+
`[skillDiscovery] \u6280\u80FD\u76EE\u5F55\u88C5\u914D\u5931\u8D25\uFF0C\u672C\u8F6E\u4E0D\u5E26\u6280\u80FD\u7D22\u5F15\u8FD0\u884C\uFF1A${error instanceof Error ? error.message : String(error)}`
|
|
131
|
+
);
|
|
101
132
|
return null;
|
|
102
133
|
}
|
|
103
134
|
}
|
|
104
|
-
function buildSkillDiscoveryContextBlock(cwd) {
|
|
105
|
-
return buildSkillDiscoveryContextLayer(cwd)?.content ?? null;
|
|
135
|
+
function buildSkillDiscoveryContextBlock(cwd, options = {}) {
|
|
136
|
+
return buildSkillDiscoveryContextLayer(cwd, options)?.content ?? null;
|
|
106
137
|
}
|
|
107
138
|
|
|
108
139
|
export {
|
|
109
140
|
parseSkillFrontmatter,
|
|
110
141
|
discoverSkills,
|
|
111
142
|
resolveSkillByName,
|
|
143
|
+
listLocalWorkspaceSkillCatalogEntries,
|
|
144
|
+
createLocalWorkspaceSkillCatalogSource,
|
|
145
|
+
collectWorkspaceSkillCatalog,
|
|
146
|
+
collectWorkspaceSkillCatalogSync,
|
|
147
|
+
buildSkillDiscoveryContextLayerFromCatalog,
|
|
112
148
|
buildSkillDiscoveryContextLayer,
|
|
113
149
|
buildSkillDiscoveryContextBlock
|
|
114
150
|
};
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
inlineImageUrlsForCustomProvider,
|
|
6
6
|
prepareTools,
|
|
7
7
|
shouldInlineImageUrlsForAgent
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-SIX7N4AH.js";
|
|
9
9
|
import {
|
|
10
10
|
CONFIRMATION_INPUT_KEYS,
|
|
11
11
|
INVALID_TOOL_ARGS_REPLACEMENT,
|
|
@@ -14,16 +14,16 @@ import {
|
|
|
14
14
|
performFetchRequest,
|
|
15
15
|
sanitizeOutboundMessages,
|
|
16
16
|
stripModelToolArgs
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-ZV6ESGA7.js";
|
|
18
18
|
import {
|
|
19
19
|
findToolExecutor,
|
|
20
20
|
toolDefinitionsByName
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-37ZDGCX6.js";
|
|
22
22
|
import {
|
|
23
23
|
classifyApiError,
|
|
24
24
|
classifyGenerationError,
|
|
25
25
|
extractErrorDiagnostics
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-6HFMPUSN.js";
|
|
27
27
|
import {
|
|
28
28
|
createSSEParser,
|
|
29
29
|
createToolRunId,
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
toolRunSetPending,
|
|
33
33
|
toolRunStarted,
|
|
34
34
|
toolRunSucceeded
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-XJECR5M3.js";
|
|
36
36
|
import {
|
|
37
37
|
getPublicImageAgentMode
|
|
38
38
|
} from "./chunk-VIDPVFP3.js";
|
|
@@ -45,10 +45,10 @@ import {
|
|
|
45
45
|
messageStreaming,
|
|
46
46
|
toolResultNeedsUserConfirmation,
|
|
47
47
|
updateToolMessage
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-4GZ2LY5F.js";
|
|
49
49
|
import {
|
|
50
50
|
streamAgentChatTurn
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-VMMS7L64.js";
|
|
52
52
|
import {
|
|
53
53
|
addActiveController,
|
|
54
54
|
removeActiveController,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fetchReferenceContents,
|
|
3
3
|
resolveReferenceAssets
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6HFMPUSN.js";
|
|
5
5
|
import {
|
|
6
6
|
updateTokensAction
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-4GZ2LY5F.js";
|
|
8
8
|
import {
|
|
9
9
|
applyUpdateTokensFulfilled
|
|
10
10
|
} from "./chunk-OWYYDMGJ.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
addContentToSpace
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PEOLOK72.js";
|
|
4
4
|
import {
|
|
5
5
|
format,
|
|
6
6
|
prepareAndPersistMessage,
|
|
7
7
|
uiAskChoiceFunc,
|
|
8
8
|
uiAskChoiceFunctionSchema
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4GZ2LY5F.js";
|
|
10
10
|
import {
|
|
11
11
|
formatISO
|
|
12
12
|
} from "./chunk-ZRAU6T47.js";
|
|
@@ -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-EPHFLF62.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-OTNUT7WI.js");
|
|
376
376
|
return createPageAction(args, thunkApi);
|
|
377
377
|
}
|
|
378
378
|
function subscribe(listener) {
|
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
import {
|
|
61
61
|
inlineImageUrlsForCustomProvider,
|
|
62
62
|
prepareTools
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-SIX7N4AH.js";
|
|
64
64
|
import {
|
|
65
65
|
getServerProviderSecret
|
|
66
66
|
} from "./chunk-HS7MLR74.js";
|
|
@@ -82,7 +82,7 @@ import {
|
|
|
82
82
|
resolveCliLocalRuntimeKeyCapability,
|
|
83
83
|
resolveCliLocalSpawnDispatch,
|
|
84
84
|
resolveStartAgentRunCwd
|
|
85
|
-
} from "./chunk-
|
|
85
|
+
} from "./chunk-37ZDGCX6.js";
|
|
86
86
|
import {
|
|
87
87
|
deriveCredentialGroup,
|
|
88
88
|
deriveCustomProviderCredentialGroup
|
|
@@ -93,7 +93,7 @@ import {
|
|
|
93
93
|
} from "./chunk-KFHREHUQ.js";
|
|
94
94
|
import {
|
|
95
95
|
resolveAgentRequiredPackIds
|
|
96
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-XJECR5M3.js";
|
|
97
97
|
import {
|
|
98
98
|
getDefaultCliLocalRuntimeDb
|
|
99
99
|
} from "./chunk-FDLDMJTM.js";
|
|
@@ -105,14 +105,14 @@ import {
|
|
|
105
105
|
resolveBuiltinPlatformAgentConfig,
|
|
106
106
|
runKeyed,
|
|
107
107
|
validateAskChoiceInput
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-4GZ2LY5F.js";
|
|
109
109
|
import {
|
|
110
110
|
BUILTIN_DIALOG_LLM_CHAT_FALLBACK_MODEL,
|
|
111
111
|
BUILTIN_TITLE_LLM_CONFIG
|
|
112
112
|
} from "./chunk-523DITKR.js";
|
|
113
113
|
import {
|
|
114
114
|
fetchServerSyncedCredential
|
|
115
|
-
} from "./chunk-
|
|
115
|
+
} from "./chunk-VMMS7L64.js";
|
|
116
116
|
import {
|
|
117
117
|
isTombstoneRecord
|
|
118
118
|
} from "./chunk-D2MDMY2M.js";
|
|
@@ -169,7 +169,7 @@ import {
|
|
|
169
169
|
runExecShellGates,
|
|
170
170
|
validateConfiguredRootExecutionLease,
|
|
171
171
|
verifyOwnerRouteAck
|
|
172
|
-
} from "./chunk-
|
|
172
|
+
} from "./chunk-4ALQFIFF.js";
|
|
173
173
|
import {
|
|
174
174
|
accumulateGeminiChunks,
|
|
175
175
|
buildGeminiGenerateContentRequest,
|
|
@@ -4201,60 +4201,153 @@ import { dirname as dirname4, extname, join as join6 } from "node:path";
|
|
|
4201
4201
|
import { fileURLToPath } from "node:url";
|
|
4202
4202
|
|
|
4203
4203
|
// packages/cli/client/localRunExecutionIsolation.ts
|
|
4204
|
+
var UNSANDBOXED_HOST_EXECUTION_MESSAGE = "\u672C\u673A\u6267\u884C\u65E0\u6C99\u76D2\u9694\u79BB\uFF0C\u547D\u4EE4\u76F4\u63A5\u4F5C\u7528\u4E8E\u4F60\u7684\u5DE5\u4F5C\u533A";
|
|
4205
|
+
function normalizeIsolationPlatform(value) {
|
|
4206
|
+
return typeof value === "string" && value.trim() ? value.trim().toLowerCase() : "unknown";
|
|
4207
|
+
}
|
|
4208
|
+
function isSandboxBackendAvailableOnPlatform(platform) {
|
|
4209
|
+
return normalizeIsolationPlatform(platform) === "linux";
|
|
4210
|
+
}
|
|
4204
4211
|
function resolveLocalRunExecutionIsolationFact(args) {
|
|
4205
4212
|
const recordedAt = args.nowMs ?? Date.now();
|
|
4213
|
+
const platform = normalizeIsolationPlatform(args.platform);
|
|
4214
|
+
const sandboxBackend = resolveSandboxBackendSupport({
|
|
4215
|
+
platform,
|
|
4216
|
+
dockerWorkloadEnabled: args.dockerWorkloadEnabled,
|
|
4217
|
+
instaboxWorkloadEnabled: args.instaboxWorkloadEnabled,
|
|
4218
|
+
bwrapWorkloadAvailable: args.bwrapWorkloadAvailable,
|
|
4219
|
+
override: args.sandboxBackend
|
|
4220
|
+
});
|
|
4221
|
+
const finish = (fact) => ({
|
|
4222
|
+
...fact,
|
|
4223
|
+
platform,
|
|
4224
|
+
sandboxBackend,
|
|
4225
|
+
notice: buildIsolationNotice({ fact, platform, sandboxBackend })
|
|
4226
|
+
});
|
|
4206
4227
|
if (args.dockerWorkloadEnabled) {
|
|
4207
|
-
return {
|
|
4228
|
+
return finish({
|
|
4208
4229
|
surface: "docker-sandbox",
|
|
4209
4230
|
isolation: "container",
|
|
4210
4231
|
sandbox: "docker",
|
|
4211
4232
|
reason: "docker-workload",
|
|
4212
4233
|
note: "\u672C run \u7684\u5DE5\u4F5C\u533A\u5DE5\u5177\u65CF\uFF08execShell / readFile / writeFile / editFile / globFiles / grepFiles\uFF09\u8D70\u672C\u673A sbx \u4E91\u6C99\u76D2\uFF08container \u8FB9\u754C\uFF09\uFF0C\u5BBF\u4E3B\u6267\u884C\u5668\u96F6\u8C03\u7528\u3002",
|
|
4213
4234
|
recordedAt
|
|
4214
|
-
};
|
|
4235
|
+
});
|
|
4236
|
+
}
|
|
4237
|
+
if (args.instaboxWorkloadEnabled) {
|
|
4238
|
+
return finish({
|
|
4239
|
+
surface: "instabox-sandbox",
|
|
4240
|
+
isolation: "container",
|
|
4241
|
+
sandbox: "instabox",
|
|
4242
|
+
reason: "instabox-workload",
|
|
4243
|
+
note: "\u672C run \u8D70 `runtimeKey=instabox`\uFF1AexecShell \u4E0E\u6587\u4EF6\u5DE5\u5177\uFF08readFile / writeFile / editFile / globFiles / grepFiles\uFF09\u90FD\u5728 Instabox \u4E91\u5BB9\u5668\u6267\u884C\u540E\u7AEF\u5B8C\u6210\uFF08container \u8FB9\u754C\uFF09\uFF0C\u96A7\u9053\u663E\u5F0F\u62D2\u7EDD\u56DE\u843D\u5BBF\u4E3B\uFF1B\u4E0D\u652F\u6301\u7684\u5DE5\u4F5C\u533A\u5DE5\u5177\u76F4\u63A5\u62A5\u9519\uFF0C\u4E0D\u4F1A\u843D\u5230\u672C\u673A\u3002\u9694\u79BB\u5F3A\u5EA6\u4E0E\u5BBF\u4E3B\u5E73\u53F0\u65E0\u5173\uFF08darwin / win32 \u4E0A\u540C\u6837\u662F\u5BB9\u5668\uFF09\u3002",
|
|
4244
|
+
recordedAt
|
|
4245
|
+
});
|
|
4215
4246
|
}
|
|
4216
4247
|
if (args.bwrapWorkloadAvailable === true) {
|
|
4217
|
-
return {
|
|
4248
|
+
return finish({
|
|
4218
4249
|
surface: "bwrap-os-sandbox",
|
|
4219
4250
|
isolation: "os-sandbox",
|
|
4220
4251
|
sandbox: "bwrap",
|
|
4221
4252
|
reason: "bwrap-execshell-only",
|
|
4222
4253
|
note: "\u672C run \u7684 execShell \u8D70\u672C\u673A linux-bubblewrap-v1\uFF08user namespace + seccomp\uFF09\uFF1BreadFile / writeFile / editFile / globFiles / grepFiles **\u4ECD\u5728\u5BBF\u4E3B\u6267\u884C**\uFF0C\u9694\u79BB\u53EA\u8986\u76D6 shell\u3002",
|
|
4223
4254
|
recordedAt
|
|
4224
|
-
};
|
|
4255
|
+
});
|
|
4225
4256
|
}
|
|
4226
4257
|
if (args.runtimeKey === "local") {
|
|
4227
|
-
return {
|
|
4258
|
+
return finish({
|
|
4228
4259
|
surface: "host",
|
|
4229
4260
|
isolation: "none",
|
|
4230
4261
|
sandbox: "host",
|
|
4231
4262
|
reason: "host-explicit-writes",
|
|
4232
4263
|
note: "\u672C run \u7531\u8C03\u7528\u65B9**\u663E\u5F0F\u70B9\u540D runtimeKey=local**\uFF1A\u5728\u5BBF\u4E3B\u5DE5\u4F5C\u533A\u6267\u884C\u4E14**\u65E0\u9694\u79BB**\uFF0C\u5199\u64CD\u4F5C\u76F4\u63A5\u4F5C\u7528\u4E8E\u5BBF\u4E3B\u6587\u4EF6\u7CFB\u7EDF\uFF08\u4E0D\u843D docker \u526F\u672C\uFF09\u3002\u6388\u6743\u786E\u8BA4\u7531\u8C03\u7528\u65B9\u53E6\u884C\u8BB0\u5F55\uFF0C\u672C\u6587\u4EF6\u4E0D\u63A8\u65AD\u3002",
|
|
4233
4264
|
recordedAt
|
|
4234
|
-
};
|
|
4265
|
+
});
|
|
4235
4266
|
}
|
|
4236
4267
|
if (args.readOnly === true) {
|
|
4237
|
-
return {
|
|
4268
|
+
return finish({
|
|
4238
4269
|
surface: "host",
|
|
4239
4270
|
isolation: "none",
|
|
4240
4271
|
sandbox: "host",
|
|
4241
4272
|
reason: "read-only-host",
|
|
4242
4273
|
note: "\u53EA\u8BFB\u6D3E\u53D1\uFF08\u8C03\u7528\u65B9\u58F0\u660E readOnly\uFF0C\u65E0\u5199\u5DE5\u5177\uFF09\uFF1A\u7559\u5728\u5BBF\u4E3B\u6267\u884C\u4E14**\u65E0\u9694\u79BB**\uFF1B\u5B83\u5199\u4E0D\u4E86\u6587\u4EF6\uFF0C\u8D77\u6C99\u76D2\u662F\u7EAF\u6D6A\u8D39\u3002",
|
|
4243
4274
|
recordedAt
|
|
4244
|
-
};
|
|
4275
|
+
});
|
|
4245
4276
|
}
|
|
4246
|
-
|
|
4277
|
+
if (platform !== "unknown" && !isSandboxBackendAvailableOnPlatform(platform)) {
|
|
4278
|
+
return finish({
|
|
4279
|
+
surface: "host",
|
|
4280
|
+
isolation: "none",
|
|
4281
|
+
sandbox: "host",
|
|
4282
|
+
reason: "host-no-sandbox-backend",
|
|
4283
|
+
note: `\u672C run \u5728\u5BBF\u4E3B\u6267\u884C\u4E14**\u65E0\u9694\u79BB**\uFF1A${platform} \u4E0A\u6CA1\u6709\u53EF\u9694\u79BB\u672C\u673A\u6267\u884C\u7684\u6C99\u76D2\u540E\u7AEF\uFF08macOS \u7684 seatbelt \u4EC5\u6709\u7C7B\u578B\u58F0\u660E\u3001\u65E0\u5B9E\u73B0\uFF1BWindows \u65E0\u5BF9\u5E94\u673A\u5236\uFF09\uFF0C\u547D\u4EE4\u4E0E\u6587\u4EF6\u5199\u5165\u76F4\u63A5\u4F5C\u7528\u4E8E\u5BBF\u4E3B\u5DE5\u4F5C\u533A\u3002\u8981\u9694\u79BB\u8BF7\u7528 --runtime-key docker\u3002`,
|
|
4284
|
+
recordedAt
|
|
4285
|
+
});
|
|
4286
|
+
}
|
|
4287
|
+
return finish({
|
|
4247
4288
|
surface: "host",
|
|
4248
4289
|
isolation: "none",
|
|
4249
4290
|
sandbox: "host",
|
|
4250
4291
|
reason: "host-no-sandbox",
|
|
4251
4292
|
note: "\u672C run \u5728\u5BBF\u4E3B\u6267\u884C\u4E14**\u65E0\u9694\u79BB**\uFF08\u672A\u8D70 docker \u901A\u9053\uFF0C\u4E5F\u6CA1\u6709\u53EF\u7528\u7684 bwrap workload\uFF09\u3002\u5199\u64CD\u4F5C\u76F4\u63A5\u4F5C\u7528\u4E8E\u5BBF\u4E3B\u5DE5\u4F5C\u533A\uFF1B\u6D3E\u53D1\u578B run \u7684\u9ED8\u8BA4\u843D\u70B9\u662F\u672C\u673A docker \u6C99\u76D2\uFF0C\u4EA4\u4E92\u5F0F run \u53EF\u7528 --runtime-key docker\uFF08\u6216 --local \u663E\u5F0F\u58F0\u660E\u672C\u673A\u6267\u884C\uFF09\u3002",
|
|
4252
4293
|
recordedAt
|
|
4294
|
+
});
|
|
4295
|
+
}
|
|
4296
|
+
function resolveSandboxBackendSupport(args) {
|
|
4297
|
+
if (args.override) return args.override;
|
|
4298
|
+
if (args.dockerWorkloadEnabled || args.instaboxWorkloadEnabled || args.bwrapWorkloadAvailable === true) {
|
|
4299
|
+
return "available";
|
|
4300
|
+
}
|
|
4301
|
+
if (args.platform === "unknown") return "unknown";
|
|
4302
|
+
if (!isSandboxBackendAvailableOnPlatform(args.platform)) return "none-on-platform";
|
|
4303
|
+
return args.bwrapWorkloadAvailable === false ? "unavailable" : "unknown";
|
|
4304
|
+
}
|
|
4305
|
+
function buildIsolationNotice(args) {
|
|
4306
|
+
if (args.fact.reason === "read-only-host") return null;
|
|
4307
|
+
if (args.fact.isolation !== "none") return null;
|
|
4308
|
+
if (args.sandboxBackend !== "none-on-platform" && args.sandboxBackend !== "unavailable") {
|
|
4309
|
+
return null;
|
|
4310
|
+
}
|
|
4311
|
+
const why = args.sandboxBackend === "none-on-platform" ? `${args.platform} \u4E0A\u6CA1\u6709\u53EF\u9694\u79BB\u672C\u673A\u6267\u884C\u7684\u6C99\u76D2\u540E\u7AEF` + (args.platform === "darwin" ? "\uFF08seatbelt \u4EC5\u6709\u7C7B\u578B\u58F0\u660E\u3001\u65E0\u5B9E\u73B0\uFF09" : "") : "\u672C\u673A\u6C99\u76D2\u540E\u7AEF\u4E0D\u53EF\u7528\uFF08Linux \u9700\u8981 bwrap \u4E0E user namespace\uFF09";
|
|
4312
|
+
return {
|
|
4313
|
+
code: "host-execution-unsandboxed",
|
|
4314
|
+
level: "warn",
|
|
4315
|
+
message: `${UNSANDBOXED_HOST_EXECUTION_MESSAGE}\uFF1A${why}\uFF0Crun \u4ECD\u5728\u5BBF\u4E3B\u8FDB\u7A0B\u91CC\u8DD1\u3002`,
|
|
4316
|
+
platform: args.platform,
|
|
4317
|
+
reason: args.fact.reason,
|
|
4318
|
+
sandboxBackend: args.sandboxBackend
|
|
4253
4319
|
};
|
|
4254
4320
|
}
|
|
4255
4321
|
function describeLocalRunExecutionIsolation(fact) {
|
|
4256
4322
|
return `execution isolation: ${fact.isolation} (sandbox: ${fact.sandbox}, target: ${fact.surface}) \u2014 ${fact.note}`;
|
|
4257
4323
|
}
|
|
4324
|
+
var emittedNoticeKeys = /* @__PURE__ */ new Set();
|
|
4325
|
+
function createLocalRunIsolationNoticeEmitter(args) {
|
|
4326
|
+
const seen = args.seen ?? emittedNoticeKeys;
|
|
4327
|
+
return (fact, context) => {
|
|
4328
|
+
const notice = fact.notice;
|
|
4329
|
+
if (!notice) return false;
|
|
4330
|
+
const key = `${notice.platform}:${notice.sandboxBackend}:${notice.reason}`;
|
|
4331
|
+
if (seen.has(key)) return false;
|
|
4332
|
+
seen.add(key);
|
|
4333
|
+
args.sink({
|
|
4334
|
+
message: notice.message,
|
|
4335
|
+
fields: {
|
|
4336
|
+
event: "execution_isolation_unsandboxed",
|
|
4337
|
+
code: notice.code,
|
|
4338
|
+
level: notice.level,
|
|
4339
|
+
isolation: fact.isolation,
|
|
4340
|
+
sandbox: fact.sandbox,
|
|
4341
|
+
surface: fact.surface,
|
|
4342
|
+
reason: fact.reason,
|
|
4343
|
+
platform: fact.platform,
|
|
4344
|
+
sandboxBackend: fact.sandboxBackend,
|
|
4345
|
+
...context ?? {}
|
|
4346
|
+
}
|
|
4347
|
+
});
|
|
4348
|
+
return true;
|
|
4349
|
+
};
|
|
4350
|
+
}
|
|
4258
4351
|
function recordLocalRunExecutionIsolation(args) {
|
|
4259
4352
|
const path = joinPath(args.runsDir, `${args.runId}.isolation.json`);
|
|
4260
4353
|
args.fs.mkdirSync?.(args.runsDir, { recursive: true });
|
|
@@ -12386,6 +12479,11 @@ function setCliAutoCompactionSummaryFallback(caller) {
|
|
|
12386
12479
|
function getCliAutoCompactionSummaryFallback() {
|
|
12387
12480
|
return cliAutoCompactionSummaryFallback;
|
|
12388
12481
|
}
|
|
12482
|
+
var emitRunIsolationNotice = createLocalRunIsolationNoticeEmitter({
|
|
12483
|
+
sink: ({ message, fields }) => {
|
|
12484
|
+
getLogger("cli.localRuntimeAdapter").child({ fields }).warn(`[nolo] ${message}`);
|
|
12485
|
+
}
|
|
12486
|
+
});
|
|
12389
12487
|
function createCliLocalRuntimeAdapter(deps) {
|
|
12390
12488
|
const now = deps.now ?? Date.now;
|
|
12391
12489
|
const createId = deps.createId ?? createFallbackId;
|
|
@@ -12538,16 +12636,20 @@ function createCliLocalRuntimeAdapter(deps) {
|
|
|
12538
12636
|
}
|
|
12539
12637
|
};
|
|
12540
12638
|
const recordRunExecutionIsolation = async () => {
|
|
12639
|
+
const fact = resolveLocalRunExecutionIsolationFact({
|
|
12640
|
+
runtimeKey: dockerRuntimeEnabled ? "docker" : instaboxRuntimeEnabled ? "instabox" : runtimeKey === "local" ? "local" : void 0,
|
|
12641
|
+
dockerWorkloadEnabled: dockerRuntimeEnabled,
|
|
12642
|
+
// MEDIUM-1(review):instabox 是容器隔离通道(execShell + 文件工具 bridge,
|
|
12643
|
+
// 显式拒绝回落宿主),darwin / win32 上同样不是宿主执行。不传这一项会落进
|
|
12644
|
+
// 「本平台没有隔离后端」分支,产出「本机执行无沙盒隔离」的误报。
|
|
12645
|
+
instaboxWorkloadEnabled: instaboxRuntimeEnabled,
|
|
12646
|
+
platform: process.platform
|
|
12647
|
+
});
|
|
12648
|
+
const runId = asOptionalTrimmedString(deps.env?.NOLO_AGENT_RUN_ID) ?? "interactive";
|
|
12649
|
+
emitRunIsolationNotice(fact, { runId });
|
|
12541
12650
|
try {
|
|
12542
12651
|
const { writeFileSync: writeFileSync4, mkdirSync: mkdirSync4 } = await import("node:fs");
|
|
12543
12652
|
const { resolveRunsDir: resolveRunsDir2 } = await import("./agentRunControl-SBHIICUQ.js");
|
|
12544
|
-
const fact = resolveLocalRunExecutionIsolationFact({
|
|
12545
|
-
// F1:显式点名宿主执行的 run 在审计里必须与 docker 沙盒区分开
|
|
12546
|
-
// (reason: host-explicit-writes vs docker-workload)。
|
|
12547
|
-
runtimeKey: dockerRuntimeEnabled ? "docker" : runtimeKey === "local" ? "local" : void 0,
|
|
12548
|
-
dockerWorkloadEnabled: dockerRuntimeEnabled
|
|
12549
|
-
});
|
|
12550
|
-
const runId = asOptionalTrimmedString(deps.env?.NOLO_AGENT_RUN_ID) ?? "interactive";
|
|
12551
12653
|
recordLocalRunExecutionIsolation({
|
|
12552
12654
|
runId,
|
|
12553
12655
|
runsDir: resolveRunsDir2(deps.env),
|