nolo-cli 0.202.0-alpha.3 → 0.204.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-IPRTPSW7.js → _executeModel-P6PJZHAX.js} +16 -16
- package/{agentDeleteCommand-6HFA37FH.js → agentDeleteCommand-X5I5MWOV.js} +17 -16
- package/{agentEmailCommands-TDBNVIAT.js → agentEmailCommands-E5XLDF6C.js} +19 -18
- package/{agentListCommands-YSQSDQM3.js → agentListCommands-POQKNVWF.js} +3 -3
- package/{agentMachineCommands-5W23BLFR.js → agentMachineCommands-SKUVXH4H.js} +3 -3
- package/{agentProviderCommands-5ALOQLE5.js → agentProviderCommands-MEFUIECN.js} +30 -12
- package/{agentRecordCommands-SRIMZZFK.js → agentRecordCommands-Y4MDCVEW.js} +18 -17
- package/{agentRunCommand-BLYHIN6S.js → agentRunCommand-D3ZNM22C.js} +19 -18
- package/{agentRuntimeLocal-FE66EBRC.js → agentRuntimeLocal-M2RCAORY.js} +2 -2
- package/{agentSlice-BFDKYW6H.js → agentSlice-PQVS46OF.js} +1 -1
- package/{appDeleteCommands-BEVZGCAG.js → appDeleteCommands-JI6AEOJO.js} +4 -4
- package/{appDeployCommands-E7TFCHSP.js → appDeployCommands-W3W4T7BU.js} +4 -4
- package/{appDeployStatusCommands-MYY5Z5G3.js → appDeployStatusCommands-QXPI3XS4.js} +4 -4
- package/{appGetCommands-HNED5JUU.js → appGetCommands-SQV3MNFW.js} +4 -4
- package/{appListCommands-MSBFWPIY.js → appListCommands-DMYRVV7E.js} +4 -4
- package/{authCommand-W34UWJGR.js → authCommand-KPTIANH2.js} +1 -1
- package/{builtinSkillRegistry-NJVHQIKY.js → builtinSkillRegistry-HH75G5J3.js} +2 -2
- package/{chromeOpsCommands-USKE4B4K.js → chromeOpsCommands-JFT4J4LQ.js} +1 -1
- package/{chunk-326HCB6L.js → chunk-33OJHC3O.js} +8 -8
- package/{chunk-OIB4GARE.js → chunk-4JBJG7XB.js} +3 -3
- package/{chunk-RIKSN62L.js → chunk-4UCFQCD4.js} +3 -3
- package/{chunk-ETTDZBK5.js → chunk-6YY6MOCF.js} +3 -3
- package/{chunk-LAYFVGS4.js → chunk-7H3DHUWL.js} +9 -9
- package/{chunk-ASG7VWPK.js → chunk-COJ76M7O.js} +3 -3
- package/{chunk-TWVVTUNG.js → chunk-E4KACSRR.js} +2 -2
- package/{chunk-CLTGWJVT.js → chunk-E4LYPSYM.js} +2 -0
- package/{chunk-5E4FSR4J.js → chunk-EPJFGQYO.js} +1 -1
- package/{chunk-YV2RSLM4.js → chunk-EWAQ4DYY.js} +4 -4
- package/{chunk-SUBNV2JH.js → chunk-FC4MYLAX.js} +2 -2
- package/{chunk-BRZTSZBG.js → chunk-HMQUNXZ7.js} +24 -122
- package/{chunk-DKZJJ2NQ.js → chunk-I5PBXF7O.js} +1 -1
- package/{chunk-KDUYNEJ5.js → chunk-IK6AAUGM.js} +1 -1
- package/{chunk-BLFZULEQ.js → chunk-IVNI335J.js} +2 -2
- package/{chunk-DHJXDGC3.js → chunk-JL3YTCPQ.js} +1 -1
- package/{chunk-RS66RJLA.js → chunk-LV5V3KRZ.js} +1 -1
- package/{chunk-YAGFPXOX.js → chunk-N5E77S4C.js} +128 -7
- package/{chunk-Q7GNBUT4.js → chunk-NEZGPBL7.js} +2 -2
- package/{chunk-E2FC5RMU.js → chunk-PHNVUFU5.js} +29 -8
- package/{chunk-3CWF2EUZ.js → chunk-QUJ3IHEK.js} +1 -1
- package/{chunk-HKWGI3TM.js → chunk-QVJ7PDL7.js} +235 -11
- package/{chunk-WPQGLJHU.js → chunk-R7FPHYDS.js} +2 -2
- package/{chunk-D57YYGMD.js → chunk-SQTBTTAE.js} +2 -2
- package/{chunk-C7PKPHK6.js → chunk-SRDWWDBV.js} +5 -5
- package/{chunk-6OEPWZV7.js → chunk-TPCDYNJK.js} +3 -0
- package/{chunk-SSK4WNJA.js → chunk-WAECKLPA.js} +1 -1
- package/chunk-WOAZVUSN.js +126 -0
- package/{chunk-LEX6DEH4.js → chunk-Y6M7KJOA.js} +1 -1
- package/{chunk-HKMPGHFZ.js → chunk-ZZC64BCU.js} +4 -4
- package/{commandRegistry-ZU3RX7A2.js → commandRegistry-YQ47YCJW.js} +59 -59
- package/{contentThunks-I4IHSDTM.js → contentThunks-UI4LT732.js} +3 -3
- package/{cooldownCommands-5SJ74DNP.js → cooldownCommands-BLRMLW7Q.js} +1 -1
- package/{createAgentAutomationAction-WQCH5HR2.js → createAgentAutomationAction-52LH2MRZ.js} +3 -3
- package/{createDialogAction-CKMZK5JQ.js → createDialogAction-35JSC2RO.js} +5 -5
- package/{createPageAction-QAZHQGY7.js → createPageAction-BPVFIHSO.js} +3 -3
- package/{dialogCommands-NEQ6NW5H.js → dialogCommands-XBAEKJVC.js} +4 -4
- package/{dialogSlice-GEGACCH2.js → dialogSlice-KHGNTCKG.js} +2 -2
- package/{docCreateCommands-EXV267FP.js → docCreateCommands-XBI32MGB.js} +3 -3
- package/{docDeleteCommands-TSBILA2Z.js → docDeleteCommands-7EKY3XJR.js} +3 -3
- package/{docReadCommands-AKVYHITD.js → docReadCommands-LWDKFZKJ.js} +3 -3
- package/{docStore-B4EFT53J.js → docStore-6MKEBLHS.js} +1 -1
- package/{docUpdateCommands-G6GULDGZ.js → docUpdateCommands-VFB53K4G.js} +3 -3
- package/{handleSendMessageAction-4BACQWOG.js → handleSendMessageAction-24JWFHXL.js} +41 -12
- package/index.js +6 -6
- package/{localRuntimeAdapter-MTDULOUZ.js → localRuntimeAdapter-RLASCXQ5.js} +17 -16
- package/{machineCommands-OGHHBRV3.js → machineCommands-CF72WAXL.js} +18 -17
- package/{machineWsRunDispatch-R6DNC3H7.js → machineWsRunDispatch-HITLYZOL.js} +18 -17
- package/package.json +1 -1
- package/{readlineWorkspace-NC2O4DQP.js → readlineWorkspace-K5EIF774.js} +22 -21
- package/{runAgentClientLoop-QKV66PX5.js → runAgentClientLoop-V7XBFJYH.js} +14 -14
- package/{secretCommands-MKU25CDP.js → secretCommands-S2DDPIQ4.js} +1 -1
- package/{settingThunks-4WU7YE62.js → settingThunks-SWYDFUYT.js} +3 -3
- package/{spaceCommands-J7BRTTM3.js → spaceCommands-BFES7F7G.js} +2 -2
- package/{streamAgentChatTurn-GM3UNSLS.js → streamAgentChatTurn-RKRNK3P5.js} +28 -18
- package/{tools-UJLEQBKI.js → tools-5U5DDFBH.js} +10 -10
- package/{updateCommands-RVDAFHBT.js → updateCommands-LEJRRVBB.js} +3 -3
- package/{updateDialogTitleAction-24QO27NT.js → updateDialogTitleAction-EK2S55EO.js} +3 -3
- package/{windowsSelfUpdate-N2VH2OBW.js → windowsSelfUpdate-LSSQLXVS.js} +2 -2
|
@@ -20,6 +20,13 @@ import {
|
|
|
20
20
|
OAUTH_PROVIDER_REFS,
|
|
21
21
|
buildLocalAgentLookupKeys
|
|
22
22
|
} from "./chunk-U7HTU2S7.js";
|
|
23
|
+
import {
|
|
24
|
+
customNativeAuthHeaders,
|
|
25
|
+
detectDeclaredCustomNativeWire,
|
|
26
|
+
isCallerCancellation,
|
|
27
|
+
resolveCustomNativeApiKeyHeader,
|
|
28
|
+
resolveCustomNativeEndpoint
|
|
29
|
+
} from "./chunk-WOAZVUSN.js";
|
|
23
30
|
import {
|
|
24
31
|
LOCAL_CODEX_AGENT_ID,
|
|
25
32
|
LOCAL_CODEX_AGENT_KEY,
|
|
@@ -57,11 +64,11 @@ import {
|
|
|
57
64
|
import {
|
|
58
65
|
inferCaptureIntent,
|
|
59
66
|
resolveUserSkillRuntime
|
|
60
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-NEZGPBL7.js";
|
|
61
68
|
import {
|
|
62
69
|
inlineImageUrlsForCustomProvider,
|
|
63
70
|
prepareTools
|
|
64
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-IVNI335J.js";
|
|
65
72
|
import {
|
|
66
73
|
getServerProviderSecret
|
|
67
74
|
} from "./chunk-HS7MLR74.js";
|
|
@@ -83,7 +90,7 @@ import {
|
|
|
83
90
|
resolveCliLocalRuntimeKeyCapability,
|
|
84
91
|
resolveCliLocalSpawnDispatch,
|
|
85
92
|
resolveStartAgentRunCwd
|
|
86
|
-
} from "./chunk-
|
|
93
|
+
} from "./chunk-QVJ7PDL7.js";
|
|
87
94
|
import {
|
|
88
95
|
fetchWithTransientRetry,
|
|
89
96
|
isTransientFetchError
|
|
@@ -95,7 +102,7 @@ import {
|
|
|
95
102
|
import {
|
|
96
103
|
resolveAgentRequiredPackIds,
|
|
97
104
|
resolveUserEnabledSkills
|
|
98
|
-
} from "./chunk-
|
|
105
|
+
} from "./chunk-I5PBXF7O.js";
|
|
99
106
|
import {
|
|
100
107
|
applyBuiltinAgentRuntimeOverride,
|
|
101
108
|
applyTokenUsageToDayStats,
|
|
@@ -104,14 +111,14 @@ import {
|
|
|
104
111
|
resolveBuiltinPlatformAgentConfig,
|
|
105
112
|
runKeyed,
|
|
106
113
|
validateAskChoiceInput
|
|
107
|
-
} from "./chunk-
|
|
114
|
+
} from "./chunk-33OJHC3O.js";
|
|
108
115
|
import {
|
|
109
116
|
BUILTIN_DIALOG_LLM_CHAT_FALLBACK_MODEL,
|
|
110
117
|
BUILTIN_TITLE_LLM_CONFIG
|
|
111
118
|
} from "./chunk-523DITKR.js";
|
|
112
119
|
import {
|
|
113
120
|
fetchServerSyncedCredential
|
|
114
|
-
} from "./chunk-
|
|
121
|
+
} from "./chunk-6YY6MOCF.js";
|
|
115
122
|
import {
|
|
116
123
|
getDefaultCliLocalRuntimeDb
|
|
117
124
|
} from "./chunk-P64WRQYV.js";
|
|
@@ -127,7 +134,7 @@ import {
|
|
|
127
134
|
applySystemBuiltinSkillFilter,
|
|
128
135
|
expandEnabledPacks,
|
|
129
136
|
resolveEffectiveEnabledPacks
|
|
130
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-TPCDYNJK.js";
|
|
131
138
|
import {
|
|
132
139
|
DEFAULT_HYBRID_READ_TIMEOUT_MS,
|
|
133
140
|
Duration_exports,
|
|
@@ -171,7 +178,7 @@ import {
|
|
|
171
178
|
runExecShellGates,
|
|
172
179
|
validateConfiguredRootExecutionLease,
|
|
173
180
|
verifyOwnerRouteAck
|
|
174
|
-
} from "./chunk-
|
|
181
|
+
} from "./chunk-4JBJG7XB.js";
|
|
175
182
|
import {
|
|
176
183
|
accumulateGeminiChunks,
|
|
177
184
|
buildGeminiGenerateContentRequest,
|
|
@@ -275,9 +282,6 @@ import {
|
|
|
275
282
|
import {
|
|
276
283
|
compactWhitespace
|
|
277
284
|
} from "./chunk-DWLEOOGR.js";
|
|
278
|
-
import {
|
|
279
|
-
isAbortError
|
|
280
|
-
} from "./chunk-7DPNBQSV.js";
|
|
281
285
|
import {
|
|
282
286
|
createOAuthTokenStore,
|
|
283
287
|
isTokenExpired,
|
|
@@ -380,7 +384,7 @@ import {
|
|
|
380
384
|
import {
|
|
381
385
|
agentRunCardLabels,
|
|
382
386
|
t
|
|
383
|
-
} from "./chunk-
|
|
387
|
+
} from "./chunk-E4LYPSYM.js";
|
|
384
388
|
import {
|
|
385
389
|
createTokenDialogIndexKey,
|
|
386
390
|
createTokenKey,
|
|
@@ -2876,113 +2880,6 @@ var resolveCodexOAuthTransport = async (ctx) => {
|
|
|
2876
2880
|
return null;
|
|
2877
2881
|
};
|
|
2878
2882
|
|
|
2879
|
-
// packages/agent-runtime/customNativeWire.ts
|
|
2880
|
-
var CHAT_COMPLETIONS_SUFFIX = /\/chat\/completions\/?$/;
|
|
2881
|
-
function resolveCustomNativeBase(endpoint) {
|
|
2882
|
-
return endpoint.replace(CHAT_COMPLETIONS_SUFFIX, "").replace(/\/+$/, "");
|
|
2883
|
-
}
|
|
2884
|
-
var NATIVE_PATH_SUFFIX = {
|
|
2885
|
-
"openai-responses": "/responses",
|
|
2886
|
-
"anthropic-messages": "/messages"
|
|
2887
|
-
};
|
|
2888
|
-
var ANTHROPIC_MESSAGES_VERSION = "2023-06-01";
|
|
2889
|
-
var OPENCODE_HOST = "opencode.ai";
|
|
2890
|
-
var OPENCODE_ZEN_GO_PREFIX = "/zen/go";
|
|
2891
|
-
var OPENCODE_INFERENCE_GO_PREFIX = "/inference/go";
|
|
2892
|
-
function normalizeOpencodeGoGeminiBase(base, wire) {
|
|
2893
|
-
if (wire !== "gemini") return base;
|
|
2894
|
-
const schemeEnd = base.indexOf("://");
|
|
2895
|
-
if (schemeEnd <= 0 || base.slice(0, schemeEnd).toLowerCase() !== "https") return base;
|
|
2896
|
-
const authorityStart = schemeEnd + 3;
|
|
2897
|
-
const pathStart = base.indexOf("/", authorityStart);
|
|
2898
|
-
if (pathStart < 0) return base;
|
|
2899
|
-
const host = base.slice(authorityStart, pathStart).toLowerCase();
|
|
2900
|
-
if (host !== OPENCODE_HOST) return base;
|
|
2901
|
-
const pathAndQuery = base.slice(pathStart);
|
|
2902
|
-
const isZenGoPath = pathAndQuery === OPENCODE_ZEN_GO_PREFIX || pathAndQuery.startsWith(`${OPENCODE_ZEN_GO_PREFIX}/`);
|
|
2903
|
-
if (!isZenGoPath) return base;
|
|
2904
|
-
return `${base.slice(0, authorityStart)}${OPENCODE_HOST}${OPENCODE_INFERENCE_GO_PREFIX}${pathAndQuery.slice(
|
|
2905
|
-
OPENCODE_ZEN_GO_PREFIX.length
|
|
2906
|
-
)}`;
|
|
2907
|
-
}
|
|
2908
|
-
function resolveCustomNativeEndpoint(endpoint, wire, model) {
|
|
2909
|
-
const base = normalizeOpencodeGoGeminiBase(resolveCustomNativeBase(endpoint), wire);
|
|
2910
|
-
switch (wire) {
|
|
2911
|
-
case "gemini":
|
|
2912
|
-
return `${base}/models/${model}:streamGenerateContent?alt=sse`;
|
|
2913
|
-
case "openai-responses":
|
|
2914
|
-
case "anthropic-messages": {
|
|
2915
|
-
const suffix = NATIVE_PATH_SUFFIX[wire];
|
|
2916
|
-
return base.endsWith(suffix) ? base : `${base}${suffix}`;
|
|
2917
|
-
}
|
|
2918
|
-
}
|
|
2919
|
-
}
|
|
2920
|
-
var RESERVED_CUSTOM_NATIVE_AUTH_HEADERS = [
|
|
2921
|
-
// 凭据之外、由通道自己决定的头
|
|
2922
|
-
"accept",
|
|
2923
|
-
"accept-encoding",
|
|
2924
|
-
"anthropic-version",
|
|
2925
|
-
"content-type",
|
|
2926
|
-
"content-length",
|
|
2927
|
-
"user-agent",
|
|
2928
|
-
"x-opencode-session",
|
|
2929
|
-
// 请求走私 / 连接语义(hop-by-hop 与 Host/Cookie 家族)
|
|
2930
|
-
"connection",
|
|
2931
|
-
"cookie",
|
|
2932
|
-
"host",
|
|
2933
|
-
"keep-alive",
|
|
2934
|
-
"proxy-authenticate",
|
|
2935
|
-
"proxy-authorization",
|
|
2936
|
-
"proxy-connection",
|
|
2937
|
-
"te",
|
|
2938
|
-
"trailer",
|
|
2939
|
-
"transfer-encoding",
|
|
2940
|
-
"upgrade"
|
|
2941
|
-
];
|
|
2942
|
-
var HTTP_HEADER_TOKEN_RE = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
|
|
2943
|
-
var CustomNativeApiKeyHeaderError = class extends Error {
|
|
2944
|
-
code = "INVALID_API_KEY_HEADER";
|
|
2945
|
-
constructor(message) {
|
|
2946
|
-
super(message);
|
|
2947
|
-
this.name = "CustomNativeApiKeyHeaderError";
|
|
2948
|
-
}
|
|
2949
|
-
};
|
|
2950
|
-
function resolveCustomNativeApiKeyHeader(apiKeyHeader) {
|
|
2951
|
-
const headerName = apiKeyHeader?.trim();
|
|
2952
|
-
if (!headerName) return void 0;
|
|
2953
|
-
if (!HTTP_HEADER_TOKEN_RE.test(headerName)) {
|
|
2954
|
-
throw new CustomNativeApiKeyHeaderError(
|
|
2955
|
-
`Invalid apiKeyHeader "${headerName}": not a valid HTTP header name (spaces, ":", CR/LF, control characters and other non-token characters are not allowed).`
|
|
2956
|
-
);
|
|
2957
|
-
}
|
|
2958
|
-
if (RESERVED_CUSTOM_NATIVE_AUTH_HEADERS.includes(headerName.toLowerCase())) {
|
|
2959
|
-
throw new CustomNativeApiKeyHeaderError(
|
|
2960
|
-
`Invalid apiKeyHeader "${headerName}": reserved header, it cannot be used as the API key header.`
|
|
2961
|
-
);
|
|
2962
|
-
}
|
|
2963
|
-
return headerName;
|
|
2964
|
-
}
|
|
2965
|
-
function customNativeAuthHeaderValue(headerName, apiKey) {
|
|
2966
|
-
return headerName.toLowerCase() === "authorization" ? apiKey.startsWith("Bearer ") ? apiKey : `Bearer ${apiKey}` : apiKey;
|
|
2967
|
-
}
|
|
2968
|
-
function customNativeAuthHeaders(wire, apiKey, apiKeyHeader) {
|
|
2969
|
-
const overrideName = resolveCustomNativeApiKeyHeader(apiKeyHeader);
|
|
2970
|
-
switch (wire) {
|
|
2971
|
-
case "gemini":
|
|
2972
|
-
return overrideName ? { [overrideName]: customNativeAuthHeaderValue(overrideName, apiKey) } : { "x-goog-api-key": apiKey };
|
|
2973
|
-
case "openai-responses":
|
|
2974
|
-
return overrideName ? { [overrideName]: customNativeAuthHeaderValue(overrideName, apiKey) } : { Authorization: `Bearer ${apiKey}` };
|
|
2975
|
-
case "anthropic-messages":
|
|
2976
|
-
return {
|
|
2977
|
-
...overrideName ? { [overrideName]: customNativeAuthHeaderValue(overrideName, apiKey) } : { "x-api-key": apiKey },
|
|
2978
|
-
"anthropic-version": ANTHROPIC_MESSAGES_VERSION
|
|
2979
|
-
};
|
|
2980
|
-
}
|
|
2981
|
-
}
|
|
2982
|
-
function isCallerCancellation(error, callerSignal) {
|
|
2983
|
-
return isAbortError(error) || callerSignal?.aborted === true;
|
|
2984
|
-
}
|
|
2985
|
-
|
|
2986
2883
|
// packages/agent-runtime/customNativeProvider.ts
|
|
2987
2884
|
var TRANSPORT_LABEL = {
|
|
2988
2885
|
"gemini": "gemini-native-custom",
|
|
@@ -3214,7 +3111,8 @@ function buildAnthropicMessagesCustomNativeProvider(p) {
|
|
|
3214
3111
|
var resolveCustomNativeTransport = async (ctx) => {
|
|
3215
3112
|
const { agentConfig, deps, apiKeyRefResolver, credentialBroker, syncFetcher, fetchImpl, recordLocalAvailability, buildProviderOpenAiTools, additionalToolNames } = ctx;
|
|
3216
3113
|
if (!agentConfig.customProviderUrl) return null;
|
|
3217
|
-
const
|
|
3114
|
+
const declaredWire = detectDeclaredCustomNativeWire(agentConfig.customProviderUrl);
|
|
3115
|
+
const wire = findModelConfig(agentConfig.provider ?? "", agentConfig.model ?? "")?.nativeProtocol ?? (declaredWire === "openai-responses" ? declaredWire : null);
|
|
3218
3116
|
if (!wire) return null;
|
|
3219
3117
|
const config = await resolveOpenAiCompatibleProviderConfig({ agentConfig, env: deps.env, apiKeyRefResolver, credentialBroker, syncFetcher });
|
|
3220
3118
|
if (!config.apiKey) return null;
|
|
@@ -3957,8 +3855,12 @@ var resolveOwnerOAuthProxyTransport = async (ctx) => {
|
|
|
3957
3855
|
model: providerConfig.model,
|
|
3958
3856
|
provider: providerConfig.provider,
|
|
3959
3857
|
...streamed.tool_calls ? { tool_calls: streamed.tool_calls } : {},
|
|
3960
|
-
...streamed.reasoning_content ? { reasoning_content: streamed.reasoning_content } : {}
|
|
3961
|
-
|
|
3858
|
+
...streamed.reasoning_content ? { reasoning_content: streamed.reasoning_content } : {},
|
|
3859
|
+
...streamed.finish_reason ? { finish_reason: streamed.finish_reason } : {},
|
|
3860
|
+
...streamed.stream_complete ? { stream_complete: true } : {},
|
|
3861
|
+
...streamed.streamTruncated ? { stream_truncated: true } : {}
|
|
3862
|
+
// owner_required 不上报 usage:N1 约束,客户端不产生可计费 token 记录;
|
|
3863
|
+
// 流完整性证据(finish_reason / stream_complete / stream_truncated)与计费无关,必须透传。
|
|
3962
3864
|
};
|
|
3963
3865
|
}
|
|
3964
3866
|
const raw = await res.text().catch(() => "");
|
|
@@ -92,7 +92,7 @@ var buildIdentityBlock = (input) => {
|
|
|
92
92
|
var DELETE_SAFETY_RED_LINE = [
|
|
93
93
|
"\u3010\u5220\u9664\u5B89\u5168\u7EA2\u7EBF \xB7 \u6700\u9AD8\u4F18\u5148\u7EA7\u3011",
|
|
94
94
|
"\u9664\u4E0B\u8FF0\u552F\u4E00\u4F8B\u5916\u5916\uFF0C\u4EFB\u4F55\u5220\u9664\u64CD\u4F5C\uFF08\u6587\u4EF6\u3001\u6570\u636E\u3001\u5E73\u53F0/\u8FDC\u7AEF\u5185\u5BB9\u3001\u6D88\u606F\u7B49\uFF0C\u65E0\u8BBA\u5355\u6761\u6216\u6279\u91CF\uFF09\u6267\u884C\u524D\uFF0C\u5FC5\u987B\u5148\u5411\u7528\u6237\u5448\u73B0\u5B8C\u6574\u5F85\u5220\u6E05\u5355\uFF08\u540D\u79F0/\u8DEF\u5F84/\u6807\u9898\u7B49\u53EF\u8BC6\u522B\u4FE1\u606F\uFF0C\u4E0D\u5F97\u622A\u65AD\uFF09\uFF0C\u5E76\u83B7\u5F97\u7528\u6237\u660E\u786E\u786E\u8BA4\u540E\u624D\u53EF\u6267\u884C\uFF1B\u4E25\u7981\u7528\u6A21\u7CCA\u5B9A\u4F4D\uFF08\u5982\u201C\u5217\u8868\u6700\u4E0B\u65B9\u201D\uFF09\u6307\u4EE3\u5220\u9664\u76EE\u6807\uFF0C\u4E25\u7981\u5148\u5220\u540E\u62A5\u3002\u5B88\u536B\u68C0\u67E5\u4E0E\u5220\u9664\u52A8\u4F5C**\u4E0D\u5F97\u7528 `;` \u8FDE\u63A5**\u2014\u2014\u5FC5\u987B\u7528 `&&`/`if` \u8BA9\u5220\u9664\u52A8\u4F5C\u5904\u5728\u5B88\u536B\u7684\u6210\u8D25\u8DEF\u5F84\u4E0A\uFF0C\u5426\u5219\u5B88\u536B\u6253\u5370\u7684\u300C\u6709\u5DEE\u5F02 \u2192 \u4E0D\u5220\u300D\u62E6\u4E0D\u4F4F\u7D27\u968F\u5176\u540E\u88AB `;` \u4E32\u8054\u6267\u884C\u7684\u5220\u9664\u547D\u4EE4\uFF082026-10-07 \u771F\u5B9E\u8E29\u5751\uFF09\u3002\uFF082026-09-26 \u6279\u91CF\u8BEF\u5220\u4E8B\u6545\u6559\u8BAD\uFF09",
|
|
95
|
-
"\u552F\u4E00\u4F8B\u5916\xB7\u53EF\u9A8C\u8BC1\u6062\u590D\u7684\u4EFB\u52A1\u6E05\u7406\uFF1A\u672C\u6B21\u4EFB\u52A1\u4EB2\u81EA\u521B\u5EFA/\u542F\u52A8\u3001\u4E14\u6E05\u7406\u524D\u5DF2\u7528\u5B9E\u9645\u547D\u4EE4\u9010\u9879\u9A8C\u8BC1\u300C\u8981\u5220\u7684\u5168\u90E8\u5185\u5BB9\u53E6\u6709\u5B8C\u6574\u526F\u672C\u3001\u5220\u4E86\u53EF\u65E0\u635F\u6062\u590D\u300D\u7684\u8D44\u6E90\uFF0C\u53EF\u514D\u4E8B\u524D\u6E05\u5355\u4E0E\u786E\u8BA4\uFF0C\u6E05\u7406\u540E\u5728\u6C47\u62A5\u4E2D\u9010\u9879\u5217\u660E\uFF1B\u7CBE\u786E\u5B9A\u4F4D\u4ECD\u5FC5\u987B\u3002\u4EC5\u9650\uFF1A\u2460 \u5DF2\u5B8C\u6574\u5408\u5165\u4FDD\u7559\u7684\u96C6\u6210\u5206\u652F\uFF08git merge-base --is-ancestor \u9A8C\u8BC1\uFF09\u7684\u672C\u5730\u5206\u652F\u4E0E worktree\uFF0C\u4E14\u9664 a)\u3001b) \
|
|
95
|
+
"\u552F\u4E00\u4F8B\u5916\xB7\u53EF\u9A8C\u8BC1\u6062\u590D\u7684\u4EFB\u52A1\u6E05\u7406\uFF1A\u672C\u6B21\u4EFB\u52A1\u4EB2\u81EA\u521B\u5EFA/\u542F\u52A8\u3001\u4E14\u6E05\u7406\u524D\u5DF2\u7528\u5B9E\u9645\u547D\u4EE4\u9010\u9879\u9A8C\u8BC1\u300C\u8981\u5220\u7684\u5168\u90E8\u5185\u5BB9\u53E6\u6709\u5B8C\u6574\u526F\u672C\u3001\u5220\u4E86\u53EF\u65E0\u635F\u6062\u590D\u300D\u7684\u8D44\u6E90\uFF0C\u53EF\u514D\u4E8B\u524D\u6E05\u5355\u4E0E\u786E\u8BA4\uFF0C\u6E05\u7406\u540E\u5728\u6C47\u62A5\u4E2D\u9010\u9879\u5217\u660E\uFF1B\u7CBE\u786E\u5B9A\u4F4D\u4ECD\u5FC5\u987B\u3002\u4EC5\u9650\uFF1A\u2460 \u5DF2\u5B8C\u6574\u5408\u5165\u4FDD\u7559\u7684\u96C6\u6210\u5206\u652F\uFF08git merge-base --is-ancestor \u9A8C\u8BC1\uFF09\u7684\u672C\u5730\u5206\u652F\u4E0E worktree\uFF0C\u4E14\u9664 a)\u3001b)\u3001c) \u4E09\u7C7B\u5916\uFF0C`git status --porcelain --ignored` \u8F93\u51FA\u5FC5\u987B\u4E3A\u7A7A\uFF1Aa) `!! node_modules/`\uFF08\u53CA `packages/*/node_modules/`\uFF09\u2014\u2014\u987B\u786E\u8BA4\u5C5E\u4F9D\u8D56\u5B89\u88C5\u4EA7\u7269\uFF0C\u4E14\u80FD\u7528\u4ED3\u5E93\u5185\u65E2\u6709\u547D\u4EE4\uFF08\u5982 `bun install`\uFF0C\u914D\u5408\u4ED3\u5E93\u5185 `bun.lock` \u4E0E `package.json`\uFF09\u65E0\u635F\u91CD\u5EFA\uFF1Bnode_modules \u91CC\u82E5\u6DF7\u6709\u975E\u4F9D\u8D56\u4EA7\u7269\uFF08\u4F8B\u5982\u672C\u5730\u624B\u5DE5\u653E\u7F6E\u7684\u811A\u672C\u3001\u8865\u4E01\u8FC7\u7684\u5305\u3001\u6216\u6307\u5411 worktree \u5916\u7684\u7B26\u53F7\u94FE\u63A5\uFF09\uFF0C\u5219\u8BE5\u76EE\u5F55\u6574\u4F53\u4E0D\u7B97\u53EF\u518D\u751F\uFF0C\u9700\u6309\u539F\u8DEF\u5F84\u9010\u9879\u5224\u65AD\uFF1Bb) \u88AB\u5FFD\u7565\u7684**\u53EF\u518D\u751F\u6784\u5EFA\u4EA7\u7269**\uFF08\u5982 `*.tsbuildinfo`\u3001\u6784\u5EFA/\u7F16\u8BD1\u7F13\u5B58\uFF09\u2014\u2014\u987B\u9010\u9879\u5217\u51FA\u8DEF\u5F84\uFF0C\u5E76\u7ED9\u51FA\u80FD\u91CD\u65B0\u751F\u6210\u5B83\u7684**\u4ED3\u5E93\u5185\u65E2\u6709\u547D\u4EE4**\uFF08\u5F53\u6B21\u5B9E\u9645\u6267\u884C\u901A\u8FC7\uFF1B\u6307\u4E0D\u51FA\u547D\u4EE4\u6216\u8DD1\u4E0D\u901A\u7684\u4E00\u5F8B\u4E0D\u653E\u884C\uFF09\uFF0C\u786E\u8BA4\u53EF\u7531\u8BE5\u547D\u4EE4\u65E0\u635F\u518D\u751F\u3001\u4E0D\u542B\u552F\u4E00\u7ED3\u679C\u6216\u7528\u6237\u6570\u636E\u3001\u4E14\u4E0D\u662F\u624B\u5DE5\u6539\u52A8\u8FC7\u7684\u4EA7\u7269\uFF1Bc) \u5F53\u6B21\u4EFB\u52A1\u81EA\u5EFA worktree \u5185\u3001**\u672C\u6B21\u4EFB\u52A1\u4EA7\u751F**\u7684 `.nolo/spills/`\uFF08\u5DE5\u5177\u8F93\u51FA\u6EA2\u51FA\u65E5\u5FD7\u843D\u70B9\uFF0C\u7531 `resolveSpillDirectory` \u4EA7\u751F\uFF09\u2014\u2014\u5C5E\u53EF\u518D\u751F\u4E2D\u95F4\u4EA7\u7269\uFF0C\u53EF\u968F\u8BE5 worktree \u4E00\u5E76\u6E05\u7406\uFF1B\u4E0B\u5217\u4E00\u5F8B\u4E0D\u5C5E\u6B64\u7C7B\uFF1A`.env*` \u7B49\u51ED\u8BC1\u3001`data/`\u3001`nolo/`\u3001`.nolo/` \u4E2D\u9664\u672C\u6B21\u4EFB\u52A1\u4EA7\u751F\u7684 `spills/` \u5916\u7684\u5185\u5BB9\uFF08\u5982 `credentials/`\uFF09\u3001\u4EFB\u4F55\u6570\u636E\u5E93/LevelDB/WAL/\u5BA1\u8BA1/\u65E5\u5FD7/\u62A5\u544A/\u5BFC\u51FA\u76EE\u5F55\u3001`artifacts/`\u3001\u624B\u5DE5\u6539\u52A8\u8FC7\u7684 `dist/`\u3001`public/` \u4E0B\u7684\u4EA7\u7269\u76EE\u5F55\uFF1B\u300C\u5DF2\u88AB gitignore\u300D\u300C\u662F\u6784\u5EFA\u4EA7\u7269\u300D\u300C\u53EF\u91CD\u65B0\u6784\u5EFA\u300D\u7B49\u672A\u7ECF\u547D\u4EE4\u6838\u5B9E\u7684\u8BF4\u6CD5\u4E0D\u6784\u6210\u653E\u884C\u7406\u7531\u3002\u6CE8\u610F `git worktree remove` \u4E0D\u4F1A\u56E0 ignored \u5185\u5BB9\u800C\u62D2\u7EDD\uFF08\u4F1A\u8FDE\u5176\u4E00\u5E76\u5220\u9664\uFF09\uFF0C\u672C\u4F8B\u5916\u6CA1\u6709\u673A\u68B0\u515C\u5E95\uFF0C\u4E0A\u8FF0\u9010\u9879\u6838\u5B9E\u662F\u552F\u4E00\u9632\u7EBF\uFF1B\u53EA\u7528\u4E0D\u5E26 --force \u7684 git worktree remove \u4E0E git branch -d\uFF0C\u7981\u6B62 -D\u3001--force\u3001rm -rf \u66FF\u4EE3\uFF1B\u2461 \u672C\u6B21\u521B\u5EFA\u3001\u5185\u5BB9\u53EA\u662F\u53EF\u518D\u751F\u4E2D\u95F4\u4EA7\u7269\uFF08\u65E5\u5FD7\u3001\u63A2\u9488\u811A\u672C\u3001\u622A\u56FE\u3001\u6784\u5EFA\u7F13\u5B58\uFF09\u7684 /tmp \u6587\u4EF6\uFF0C\u542B\u552F\u4E00\u7ED3\u679C\u6216\u7528\u6237\u6570\u636E\u7684\u4E0D\u7B97\uFF1B\u2462 \u672C\u6B21\u542F\u52A8\u3001\u6309\u5F53\u6B21\u8BB0\u5F55\u7684 PID \u6838\u5B9E\u8EAB\u4EFD\u3001\u7EC8\u6B62\u4E0D\u4E22\u672A\u4FDD\u5B58\u72B6\u6001\u7684\u540E\u53F0\u8FDB\u7A0B\u3002\u201C\u6709\u5907\u4EFD\u201D\u201C\u5728 /tmp\u201D\u201C\u5DF2\u5408\u5E76\u201D\u7B49\u672A\u7ECF\u547D\u4EE4\u6838\u5B9E\u7684\u5224\u65AD\u4E0D\u6784\u6210\u9A8C\u8BC1\uFF1B\u4EFB\u4E00\u9879\u65E0\u6CD5\u9A8C\u8BC1\uFF0C\u4E00\u5F8B\u56DE\u5230\u4E0A\u9762\u7684\u786E\u8BA4\u6D41\u7A0B\u3002\u7528\u6237\u6570\u636E\u3001\u8FDC\u7AEF/\u5E73\u53F0\u5185\u5BB9\u3001\u4ED6\u4EBA\u6216\u65E2\u6709\u7684\u6587\u4EF6\u3001\u5206\u652F\u3001stash \u6C38\u8FDC\u4E0D\u9002\u7528\u6B64\u4F8B\u5916\u3002"
|
|
96
96
|
].join("\n");
|
|
97
97
|
|
|
98
98
|
// packages/agent-runtime/credentialHygiene.ts
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
inlineImageUrlsForCustomProvider,
|
|
6
6
|
prepareTools,
|
|
7
7
|
shouldInlineImageUrlsForAgent
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-IVNI335J.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-EWAQ4DYY.js";
|
|
18
18
|
import {
|
|
19
19
|
findToolExecutor,
|
|
20
20
|
toolDefinitionsByName
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-QVJ7PDL7.js";
|
|
22
22
|
import {
|
|
23
23
|
classifyApiError,
|
|
24
24
|
classifyGenerationError,
|
|
25
25
|
extractErrorDiagnostics
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-4UCFQCD4.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-SRDWWDBV.js";
|
|
36
36
|
import {
|
|
37
37
|
getPublicImageAgentMode
|
|
38
38
|
} from "./chunk-VIDPVFP3.js";
|
|
@@ -43,17 +43,22 @@ import {
|
|
|
43
43
|
addToolMessage,
|
|
44
44
|
messageStreamEnd,
|
|
45
45
|
messageStreaming,
|
|
46
|
+
toast,
|
|
46
47
|
toolResultNeedsUserConfirmation,
|
|
47
48
|
updateToolMessage
|
|
48
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-33OJHC3O.js";
|
|
49
50
|
import {
|
|
50
51
|
streamAgentChatTurn
|
|
51
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-6YY6MOCF.js";
|
|
52
53
|
import {
|
|
53
54
|
addActiveController,
|
|
55
|
+
getActiveDialogKey,
|
|
54
56
|
removeActiveController,
|
|
55
57
|
tokenUsageLiveUpdate
|
|
56
58
|
} from "./chunk-OWYYDMGJ.js";
|
|
59
|
+
import {
|
|
60
|
+
require_react
|
|
61
|
+
} from "./chunk-YDH3FDFQ.js";
|
|
57
62
|
import {
|
|
58
63
|
selectCurrentServer
|
|
59
64
|
} from "./chunk-HWZT5DKX.js";
|
|
@@ -120,6 +125,9 @@ import {
|
|
|
120
125
|
import {
|
|
121
126
|
asOptionalTrimmedString
|
|
122
127
|
} from "./chunk-G3SUCT4W.js";
|
|
128
|
+
import {
|
|
129
|
+
__toESM
|
|
130
|
+
} from "./chunk-4VNS5WPM.js";
|
|
123
131
|
|
|
124
132
|
// packages/integrations/openai/filterAndCleanMessages.ts
|
|
125
133
|
var isValidMessagePart = (part) => {
|
|
@@ -333,6 +341,115 @@ async function persistToolMessages(dispatch, messages, options = {}) {
|
|
|
333
341
|
}
|
|
334
342
|
}
|
|
335
343
|
|
|
344
|
+
// packages/app/appInspector/appInspectorStore.ts
|
|
345
|
+
var import_react = __toESM(require_react());
|
|
346
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
347
|
+
var version = 0;
|
|
348
|
+
var previewOpen = false;
|
|
349
|
+
var previewUrl = null;
|
|
350
|
+
var previewTarget = null;
|
|
351
|
+
var notify = () => {
|
|
352
|
+
for (const listener of listeners) {
|
|
353
|
+
try {
|
|
354
|
+
listener();
|
|
355
|
+
} catch {
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
};
|
|
359
|
+
var bump = () => {
|
|
360
|
+
version += 1;
|
|
361
|
+
notify();
|
|
362
|
+
};
|
|
363
|
+
function openPreviewTarget(target) {
|
|
364
|
+
previewOpen = true;
|
|
365
|
+
previewTarget = target;
|
|
366
|
+
if (target.kind === "dev" || target.kind === "url") {
|
|
367
|
+
previewUrl = target.url;
|
|
368
|
+
} else {
|
|
369
|
+
previewUrl = null;
|
|
370
|
+
}
|
|
371
|
+
bump();
|
|
372
|
+
}
|
|
373
|
+
function getPreviewTarget() {
|
|
374
|
+
return previewTarget;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// packages/app/appInspector/htmlArtifactClient.ts
|
|
378
|
+
async function readHtmlArtifact(id, options) {
|
|
379
|
+
const fetchFn = options?.fetchImpl ?? (typeof fetch !== "undefined" ? fetch : void 0);
|
|
380
|
+
if (!fetchFn) {
|
|
381
|
+
throw new Error("fetch is not available in current environment");
|
|
382
|
+
}
|
|
383
|
+
const base = options?.serverOrigin ? options.serverOrigin.replace(/\/+$/, "") : "";
|
|
384
|
+
const url = `${base}/api/html-artifacts`;
|
|
385
|
+
const headers = {
|
|
386
|
+
"Content-Type": "application/json"
|
|
387
|
+
};
|
|
388
|
+
if (options?.authToken) {
|
|
389
|
+
headers.Authorization = `Bearer ${options.authToken}`;
|
|
390
|
+
}
|
|
391
|
+
const response = await fetchFn(url, {
|
|
392
|
+
method: "POST",
|
|
393
|
+
headers,
|
|
394
|
+
credentials: "include",
|
|
395
|
+
body: JSON.stringify({
|
|
396
|
+
action: "read",
|
|
397
|
+
id
|
|
398
|
+
})
|
|
399
|
+
});
|
|
400
|
+
if (!response.ok) {
|
|
401
|
+
const errorText = await response.text().catch(() => "");
|
|
402
|
+
throw new Error(`\u8BFB\u53D6 HTML \u6210\u54C1\u5931\u8D25 (${response.status}): ${errorText || response.statusText}`);
|
|
403
|
+
}
|
|
404
|
+
const data = await response.json();
|
|
405
|
+
if (!data?.artifact) {
|
|
406
|
+
throw new Error("\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE\u6709\u6548\u7684 HTML \u6210\u54C1\u5BF9\u8C61");
|
|
407
|
+
}
|
|
408
|
+
return data.artifact;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// packages/chat/messages/web/htmlArtifactEventChannel.ts
|
|
412
|
+
var latestExecution = 0;
|
|
413
|
+
async function receiveHtmlArtifactToolResult(toolName, result, dialogKey, isError = false) {
|
|
414
|
+
if (isError || toolName !== "createHtmlArtifact" && toolName !== "updateHtmlArtifact") return;
|
|
415
|
+
let data = result;
|
|
416
|
+
if (typeof data === "string") {
|
|
417
|
+
try {
|
|
418
|
+
data = JSON.parse(data);
|
|
419
|
+
} catch {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (!data || data.error) return;
|
|
424
|
+
data = data.rawData ?? data;
|
|
425
|
+
if (!data || typeof data !== "object" || data.error) return;
|
|
426
|
+
const artifact = data.artifact ?? data;
|
|
427
|
+
if (!artifact || typeof artifact !== "object") return;
|
|
428
|
+
const id = data.id ?? artifact.id;
|
|
429
|
+
const ownerDialog = data.dialogKey ?? artifact.dialogKey;
|
|
430
|
+
if (typeof id !== "string" || !id || ownerDialog !== dialogKey || getActiveDialogKey() !== dialogKey) return;
|
|
431
|
+
const execution = ++latestExecution;
|
|
432
|
+
const targetBeforeRead = getPreviewTarget();
|
|
433
|
+
try {
|
|
434
|
+
const latest = await readHtmlArtifact(id);
|
|
435
|
+
if (execution !== latestExecution || getActiveDialogKey() !== dialogKey || getPreviewTarget() !== targetBeforeRead) return;
|
|
436
|
+
if (latest.id !== id || latest.dialogKey !== dialogKey || !latest.html) throw new Error("\u6210\u54C1\u8BFB\u53D6\u7ED3\u679C\u4E0D\u5339\u914D");
|
|
437
|
+
openPreviewTarget({ kind: "artifact", artifactId: latest.id, dialogKey: latest.dialogKey, title: latest.title, html: latest.html });
|
|
438
|
+
} catch {
|
|
439
|
+
if (execution === latestExecution && getActiveDialogKey() === dialogKey) {
|
|
440
|
+
toast.error("\u7F51\u9875\u5DF2\u4FDD\u5B58\uFF0C\u4F46\u8BFB\u53D6\u6700\u65B0\u5185\u5BB9\u5931\u8D25\u3002\u8BF7\u5728\u7ED3\u679C\u5361\u7247\u4E2D\u91CD\u8BD5\u6253\u5F00\u3002");
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
function deliverHtmlArtifactToolResult(toolName, content, dialogKey) {
|
|
445
|
+
if (!dialogKey || toolName !== "createHtmlArtifact" && toolName !== "updateHtmlArtifact") {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
void receiveHtmlArtifactToolResult(toolName, content, dialogKey).catch(
|
|
449
|
+
(error) => console.error("[htmlArtifact] live result delivery failed", error)
|
|
450
|
+
);
|
|
451
|
+
}
|
|
452
|
+
|
|
336
453
|
// packages/ai/chat/updateTotalUsage.ts
|
|
337
454
|
function updateTotalUsage(currentUsage, newUsageChunk) {
|
|
338
455
|
if (!newUsageChunk) {
|
|
@@ -762,6 +879,9 @@ var handleToolCalls = createAsyncThunk(
|
|
|
762
879
|
const toolName = result.toolName;
|
|
763
880
|
let rawResult = result.rawResult;
|
|
764
881
|
let toolPayload = result.toolPayload;
|
|
882
|
+
if (toolPayload?.status === "succeeded") {
|
|
883
|
+
deliverHtmlArtifactToolResult(toolName, rawResult, dialogKey);
|
|
884
|
+
}
|
|
765
885
|
if (toolName) {
|
|
766
886
|
const completedToolMessage = {
|
|
767
887
|
...runningToolMessage,
|
|
@@ -1975,6 +2095,7 @@ ${errorText}`
|
|
|
1975
2095
|
export {
|
|
1976
2096
|
filterAndCleanMessages,
|
|
1977
2097
|
persistToolMessages,
|
|
2098
|
+
deliverHtmlArtifactToolResult,
|
|
1978
2099
|
handleToolCalls,
|
|
1979
2100
|
updateTotalUsage,
|
|
1980
2101
|
readStreamChunk,
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
isAgentSkillDisabled,
|
|
5
5
|
resolveAgentSkillConfig,
|
|
6
6
|
resolveUserEnabledSkills
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-I5PBXF7O.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveBuiltinSkillEntry,
|
|
10
10
|
resolveBuiltinSkillPage,
|
|
11
11
|
resolveSkillGraphFromRoots
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-Y6M7KJOA.js";
|
|
13
13
|
import {
|
|
14
14
|
parseSkillDocProtocol
|
|
15
15
|
} from "./chunk-AETZ7AD6.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildStaticUserPolicyContext,
|
|
3
3
|
resolveSpaceContextPreloadPlan
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NEZGPBL7.js";
|
|
5
5
|
import {
|
|
6
6
|
fetchReferenceContents,
|
|
7
7
|
mergeReferences,
|
|
8
8
|
resolveReferenceAssets,
|
|
9
9
|
resolveToolsFromKeys
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4UCFQCD4.js";
|
|
11
11
|
import {
|
|
12
12
|
UI_CARD_ENVELOPE_MAX_BYTES,
|
|
13
13
|
getAllToolRuns,
|
|
@@ -18,14 +18,14 @@ import {
|
|
|
18
18
|
selectSpaceContextLevel,
|
|
19
19
|
selectUserTonePreset,
|
|
20
20
|
uiCardFallback
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-SRDWWDBV.js";
|
|
22
22
|
import {
|
|
23
23
|
resolveAgentRecommendedSkillNames,
|
|
24
24
|
resolveAgentRequiredPackIds
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-I5PBXF7O.js";
|
|
26
26
|
import {
|
|
27
27
|
getDocState
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-SQTBTTAE.js";
|
|
29
29
|
import {
|
|
30
30
|
resolveToolBaseUrl
|
|
31
31
|
} from "./chunk-MYOH447Z.js";
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
} from "./chunk-A2ZMIRLN.js";
|
|
38
38
|
import {
|
|
39
39
|
getTableState
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-WAECKLPA.js";
|
|
41
41
|
import {
|
|
42
42
|
getCurrentSpaceIdRaw,
|
|
43
43
|
getViewMode
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
PERSONALIZATION_DIALOG_CATEGORY,
|
|
47
47
|
buildPersonalizationDialogPolicyContext,
|
|
48
48
|
selectAllMsgs
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-33OJHC3O.js";
|
|
50
50
|
import {
|
|
51
51
|
selectPendingFiles
|
|
52
52
|
} from "./chunk-OWYYDMGJ.js";
|
|
@@ -68,7 +68,7 @@ import {
|
|
|
68
68
|
expandEnabledPackPromptPatches,
|
|
69
69
|
expandEnabledPacks,
|
|
70
70
|
resolveEffectiveEnabledPacks
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-TPCDYNJK.js";
|
|
72
72
|
import {
|
|
73
73
|
projectToolMessageContent
|
|
74
74
|
} from "./chunk-2WZXXAQD.js";
|
|
@@ -993,6 +993,27 @@ var buildEditingContextSummary = (state, runtimeOptions) => {
|
|
|
993
993
|
if (targetKind === "canvas_node") {
|
|
994
994
|
return buildCanvasNodeEditingContextSummary(runtimeOptions);
|
|
995
995
|
}
|
|
996
|
+
if (targetKind === "artifact" || targetKind === "html_artifact") {
|
|
997
|
+
const editingTarget = runtimeOptions?.editingTarget;
|
|
998
|
+
const metadata = editingTarget?.metadata;
|
|
999
|
+
const artifactId = typeof editingTarget?.key === "string" && editingTarget.key ? editingTarget.key : typeof metadata?.artifactId === "string" ? metadata.artifactId : typeof editingTarget?.artifactId === "string" ? editingTarget.artifactId : null;
|
|
1000
|
+
const title = editingTarget?.title ?? (typeof metadata?.title === "string" ? metadata.title : "HTML \u7F51\u9875\u6210\u54C1");
|
|
1001
|
+
const dialogKey = typeof metadata?.dialogKey === "string" ? metadata.dialogKey : typeof editingTarget?.dialogKey === "string" ? editingTarget.dialogKey : null;
|
|
1002
|
+
return [
|
|
1003
|
+
"\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u5355\u6587\u4EF6 HTML \u7F51\u9875\u6210\u54C1\uFF08Editing HTML Artifact\uFF09\u3002",
|
|
1004
|
+
...artifactId ? [`- \u6210\u54C1 ID (artifactId): ${artifactId}`] : ["- \u6210\u54C1 ID: (\u65B0\u5EFA\u4E2D\u6216\u672A\u6307\u5B9A)"],
|
|
1005
|
+
`- \u6807\u9898: ${title}`,
|
|
1006
|
+
...dialogKey ? [`- \u6240\u5C5E\u5BF9\u8BDD: ${dialogKey}`] : [],
|
|
1007
|
+
"",
|
|
1008
|
+
"\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
|
|
1009
|
+
artifactId ? `1. \u5F53\u524D\u5BF9\u8BDD\u5DF2\u5B58\u5728\u5E76\u6B63\u5728\u67E5\u770B HTML \u6210\u54C1\uFF08ID: ${artifactId}\uFF09\u3002\u5982\u679C\u7528\u6237\u8981\u6C42\u4FEE\u6539\u3001\u8C03\u6574\u6837\u5F0F\u3001\u5B8C\u5584\u529F\u80FD\u6216\u8FED\u4EE3\u5F53\u524D\u7F51\u9875\uFF0C**\u5FC5\u987B\u5148\u4F7F\u7528 readHtmlArtifact(id: "${artifactId}") \u8BFB\u53D6\u73B0\u6709\u6E90\u7801\uFF08\u5982\u9700\uFF09\uFF0C\u518D\u8C03\u7528 updateHtmlArtifact(id: "${artifactId}", html: "...") \u66F4\u65B0\u540C\u4E00\u4E2A ID**\uFF0C\u4FDD\u6301\u539F\u6210\u54C1 ID \u7A33\u5B9A\u3002` : "1. \u5982\u679C\u7528\u6237\u8981\u6C42\u751F\u6210\u5168\u65B0\u7F51\u9875\uFF0C\u4F7F\u7528 createHtmlArtifact \u521B\u5EFA\u65B0\u6210\u54C1\u3002",
|
|
1010
|
+
...artifactId ? [
|
|
1011
|
+
`2. **\u4E25\u7981\u65E0\u6761\u4EF6\u8C03\u7528 createHtmlArtifact \u521B\u5EFA\u65B0\u526F\u672C**\u6765\u66FF\u4EE3\u5BF9\u73B0\u6709\u6210\u54C1\u7684\u4FEE\u6539\uFF1B\u53EA\u6709\u7528\u6237\u660E\u786E\u8868\u8FBE\u8981\u53E6\u5916'\u65B0\u5EFA\u4E00\u4E2A\u72EC\u7ACB\u7F51\u9875'\u65F6\u624D\u8C03\u7528 createHtmlArtifact\u3002`,
|
|
1012
|
+
"3. \u7CFB\u7EDF\u4E0D\u4F1A\u9759\u9ED8\u628A create \u8F6C\u6362\u4E3A update\uFF0C\u8C03\u7528\u9519\u8BEF\u4F1A\u5BFC\u81F4\u4EA7\u751F\u5206\u53C9\u526F\u672C\u3002"
|
|
1013
|
+
] : [],
|
|
1014
|
+
"4. \u751F\u6210/\u66F4\u65B0\u7F51\u9875\u8BF7\u4F7F\u7528 createHtmlArtifact / updateHtmlArtifact\uFF0C\u4E0D\u8981\u4F7F\u7528 createDoc \u6216\u666E\u901A\u6587\u6863\u5DE5\u5177\uFF1B\u666E\u901A\u6587\u6863\u5DE5\u5177\u4EC5\u7528\u4E8E\u77E5\u8BC6\u5E93\u4E0E\u6587\u7AE0\u3002"
|
|
1015
|
+
].join("\n");
|
|
1016
|
+
}
|
|
996
1017
|
return null;
|
|
997
1018
|
};
|
|
998
1019
|
|