nolo-cli 0.54.0-alpha.1 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{_executeModel-IVEOJ7L6.js → _executeModel-OPTKYHJA.js} +53 -48
- package/{action-IU6ON7ZB.js → action-ORXWW2ZG.js} +9 -9
- package/{addContentAction-5V5CCI3I.js → addContentAction-53BZ34AE.js} +9 -8
- package/{addDialogAgentAction-KF3KZZNZ.js → addDialogAgentAction-JRYUS54Y.js} +11 -10
- package/{agentDeleteCommand-D7AFLKQN.js → agentDeleteCommand-FJIWU2BS.js} +31 -29
- package/{agentEmailCommands-MXFZGF54.js → agentEmailCommands-CE32L43B.js} +62 -58
- package/{agentListCommands-MP732Q23.js → agentListCommands-VJNKULIK.js} +43 -34
- package/{agentMachineCommands-352JFJX4.js → agentMachineCommands-HCJ3WQXL.js} +31 -29
- package/agentRecordCommands-QFWERED4.js +119 -0
- package/{agentRunCommand-UUWJMH7J.js → agentRunCommand-G3GQMUNN.js} +70 -59
- package/{agentRunControl-4GHHSXFZ.js → agentRunControl-INKFDXDA.js} +3 -1
- package/{agentRuntimeLocal-KWBPJ53H.js → agentRuntimeLocal-K327ELSL.js} +31 -27
- package/{agentSlice-V742SNKC.js → agentSlice-ODKF4J6M.js} +9 -9
- package/{agentSuperviseCommands-VB6BUS5H.js → agentSuperviseCommands-5AR3DKNN.js} +2 -2
- package/{appDeleteCommands-GV4TF52A.js → appDeleteCommands-XUXMFDI4.js} +32 -30
- package/{appDeployCommands-EZMUPNSW.js → appDeployCommands-37F4GPCU.js} +32 -30
- package/{appDeployStatusCommands-AAGELKAN.js → appDeployStatusCommands-WSPU7TUK.js} +32 -30
- package/{appGetCommands-W37KDAON.js → appGetCommands-YLOBA3EM.js} +32 -30
- package/{appListCommands-IFDWBBNV.js → appListCommands-UD62R5ME.js} +32 -30
- package/{authCommand-5HM57KPL.js → authCommand-OK6HLHGS.js} +13 -13
- package/{authCommands-SBQVTD6V.js → authCommands-2DUIUEMT.js} +2 -2
- package/{chatQueueReduxAdapter-ZXXP6E4O.js → chatQueueReduxAdapter-TV2TUOQS.js} +28 -25
- package/{chunk-7CH6U3FL.js → chunk-2GRGFCF6.js} +2 -4
- package/{chunk-T27IEBNQ.js → chunk-2QDDKFG5.js} +74 -1
- package/{chunk-2JYSSXLY.js → chunk-2WBFJHQA.js} +5 -27
- package/{chunk-FZMM2KZC.js → chunk-3LKZRP7E.js} +2 -2
- package/{chunk-WUMYQ2FE.js → chunk-3Y2K5O2R.js} +64 -6
- package/{chunk-5XCW6RQG.js → chunk-3ZTR7ZO4.js} +1 -1
- package/{chunk-W6N3GLUU.js → chunk-5FCIPEKT.js} +327 -149
- package/{chunk-B54WOZ77.js → chunk-5UAYZEXO.js} +2 -2
- package/{chunk-5SXS7T5Q.js → chunk-6COJEAYH.js} +36 -105
- package/{chunk-PEMGYJNS.js → chunk-6HDYSFLO.js} +4 -6
- package/{chunk-6XIE5ZGI.js → chunk-6HIGYUBQ.js} +1 -1
- package/chunk-6IGD47IC.js +19 -0
- package/chunk-6YTOJY35.js +352 -0
- package/{chunk-6FGXGFAH.js → chunk-75MSWWUE.js} +1 -1
- package/{chunk-ALMVQQPG.js → chunk-7FAS3NEF.js} +17 -17
- package/{chunk-76UA7376.js → chunk-7NYDJAQ7.js} +20 -15
- package/{chunk-2T6XO4PK.js → chunk-A65UV3M5.js} +4 -4
- package/{chunk-V2IPBG5U.js → chunk-AA564GBL.js} +2 -2
- package/{chunk-SQTVMYMU.js → chunk-AUVFJGPC.js} +4 -4
- package/{chunk-HR5XDXYM.js → chunk-BBTN4NQD.js} +4 -4
- package/{chunk-CULR4XB4.js → chunk-BG7J6Y5X.js} +1 -1
- package/chunk-BY2FF2C4.js +526 -0
- package/{chunk-FA4SY4F5.js → chunk-BYEJ7K2Z.js} +1 -1
- package/chunk-BYXBJQAS.js +0 -0
- package/{chunk-3AOLVADY.js → chunk-DVINR3PL.js} +1 -1
- package/{chunk-DIQCV4FR.js → chunk-EA5OYZVD.js} +1 -1
- package/{chunk-RO2IUWZE.js → chunk-EICIFHVS.js} +1 -1
- package/chunk-EJE33XNR.js +19059 -0
- package/{chunk-M2CGG6VJ.js → chunk-EVBFYPDC.js} +1 -1
- package/{chunk-KHCLMKZZ.js → chunk-EY7V7REW.js} +280 -6
- package/{chunk-MC66ASS6.js → chunk-FJHMLRDQ.js} +12 -12
- package/{chunk-YFHUQLJF.js → chunk-GRFK2XP4.js} +2 -2
- package/{chunk-J3UALFHL.js → chunk-HJTAGT3W.js} +1 -1
- package/{chunk-J7KVJAUQ.js → chunk-HPW5MNDQ.js} +38 -99
- package/{chunk-H2G6JXTR.js → chunk-HQUORJTM.js} +1 -1
- package/{chunk-OYNDYVSE.js → chunk-JON2PHYT.js} +1 -1
- package/{chunk-RBJD33HM.js → chunk-JXIP6ZWH.js} +7 -7
- package/{chunk-PTHLNXGY.js → chunk-K4NISKOR.js} +46 -8
- package/{chunk-5Y5G76BJ.js → chunk-KLIBF3BY.js} +2 -2
- package/chunk-LRGKOI5Y.js +297 -0
- package/{chunk-OU7NGN5Y.js → chunk-MLEZPE3U.js} +2 -2
- package/{chunk-4RXXP6WD.js → chunk-MYMBBB6Q.js} +5 -64
- package/{chunk-ET7BXWAW.js → chunk-N4JKMCY3.js} +2 -2
- package/{chunk-45E65JER.js → chunk-NFLA6GSU.js} +4 -4
- package/{chunk-SVEUG45B.js → chunk-NHRQCXIQ.js} +0 -24
- package/{chunk-WJV3G7BM.js → chunk-NJUQBYFJ.js} +3 -1
- package/{chunk-LGUQHYAL.js → chunk-O5FLGN2L.js} +3 -2
- package/{chunk-Q24S4NDF.js → chunk-Q4XZVZPN.js} +1 -1
- package/{chunk-L3JWI7WX.js → chunk-QOKAKDPE.js} +15 -11
- package/{chunk-VM7K5EJL.js → chunk-RHMDMTDK.js} +2 -2
- package/{chunk-YZ2WE6CW.js → chunk-SAJSBPI2.js} +2 -2
- package/{chunk-WHVQA7PJ.js → chunk-SSXTSPSG.js} +27 -6
- package/chunk-SUEIAK5N.js +2574 -0
- package/{chunk-X7S7OFUX.js → chunk-SVC3GGUA.js} +6 -6
- package/{chunk-7UFH6THF.js → chunk-SVDMVX4G.js} +118 -2
- package/{chunk-ZMV5PCRS.js → chunk-SWJGJMTW.js} +1 -1
- package/{chunk-DQLYEGP7.js → chunk-SYYUU7EV.js} +2 -2
- package/{chunk-K7CNV7GI.js → chunk-TC6P4NDR.js} +7 -7
- package/{chunk-SUFDWBLV.js → chunk-TR4DXUYX.js} +1988 -452
- package/{chunk-BANYWEYY.js → chunk-TY3ADTX5.js} +1 -1
- package/chunk-UAD2WT54.js +64 -0
- package/{chunk-HCBQVVFZ.js → chunk-UGBHDMHI.js} +4 -4
- package/{chunk-R63FNYSI.js → chunk-UOWXD4VN.js} +851 -970
- package/{chunk-GBXR3CSM.js → chunk-UR66XPVF.js} +3 -3
- package/{chunk-6BYAXNH5.js → chunk-VZMUOPYG.js} +12 -2
- package/{chunk-RVHPY5PC.js → chunk-WQHGJHAL.js} +441 -2982
- package/chunk-XIJZOCSP.js +1766 -0
- package/{chunk-HHBXCRJS.js → chunk-XOJRZUPF.js} +4 -4
- package/{chunk-BKPUPZ6W.js → chunk-YBFJQC2M.js} +95 -778
- package/{chunk-MRWGHF56.js → chunk-YDH3FDFQ.js} +12 -356
- package/{chunk-SG65C33A.js → chunk-YLCUU3WM.js} +4 -4
- package/{chunk-XXZULHJ7.js → chunk-YQBXOHE6.js} +1 -1
- package/chunk-ZJ7UHBJS.js +89 -0
- package/{chunk-TNPCQNGQ.js → chunk-ZVOHVJI3.js} +4 -9
- package/{codingSkills-BYQI6EPT.js → codingSkills-BCQXRZOI.js} +3 -4
- package/contentThunks-KNI6VXLT.js +71 -0
- package/{createAgentAutomationAction-LE3ZYDT6.js → createAgentAutomationAction-OK4L33KF.js} +29 -25
- package/createDialogAction-JDSMY4AY.js +62 -0
- package/{createPageAction-X4C7K3OD.js → createPageAction-T7RA3HCG.js} +32 -28
- package/{dbSlice-FWF5F4L7.js → dbSlice-TVX6SN2T.js} +7 -7
- package/{deleteFile-NPZ64DFN.js → deleteFile-JYKRT7C3.js} +4 -4
- package/{dialogCommands-CP2U44A7.js → dialogCommands-UQZYWOOV.js} +33 -31
- package/{dialogSlice-2SH5636X.js → dialogSlice-TYW2G7IL.js} +28 -25
- package/{docCreateCommands-A2KIJSF7.js → docCreateCommands-OA6HZBWO.js} +37 -36
- package/{docDeleteCommands-NZ7XO4Z4.js → docDeleteCommands-KBB3YQI2.js} +34 -33
- package/{docReadCommands-VWVK4ZAR.js → docReadCommands-ZLMFVC67.js} +33 -32
- package/{docStore-J6GQYKHS.js → docStore-2URPBVCS.js} +9 -34
- package/{docUpdateCommands-YTUEC6PN.js → docUpdateCommands-HMH5KUON.js} +37 -36
- package/{fetchMessages-KZQVBXKY.js → fetchMessages-DRABNDPZ.js} +3 -3
- package/{getPricing-I53UFOPH.js → getPricing-RFOPUWHY.js} +4 -4
- package/{handleSendMessageAction-MD325XZS.js → handleSendMessageAction-GO53TY7U.js} +30 -27
- package/index.js +67 -67
- package/{localDialogRead-NQ33HBSI.js → localDialogRead-PUQKFI73.js} +1 -1
- package/{machineCommands-TCNZV2DC.js → machineCommands-RK6L7ZWL.js} +64 -60
- package/{machineWsRunDispatch-QSX5IWPH.js → machineWsRunDispatch-3X64DW2Z.js} +59 -55
- package/memberThunks-THZYZFSN.js +638 -0
- package/{models-E2CYP4IB.js → models-JVKUEER5.js} +2 -2
- package/package.json +2 -3
- package/{read-J7RVVCHH.js → read-K4JU4MQC.js} +4 -4
- package/{readDocTool-G2WBM4IH.js → readDocTool-LQGR6FUN.js} +1 -1
- package/{readlineWorkspace-N3RGX7EK.js → readlineWorkspace-XUFJV3RS.js} +1005 -437
- package/{removeDialogAgentAction-RMPISD42.js → removeDialogAgentAction-ECHCFB7N.js} +13 -12
- package/{runAgentClientLoop-R3NTOERA.js → runAgentClientLoop-24GQ2AW6.js} +51 -46
- package/{setDialogExtraReferencesAction-7BUTHDAL.js → setDialogExtraReferencesAction-KCVJNGMB.js} +10 -9
- package/{setPrimaryDialogAgentAction-WCYIBGZ4.js → setPrimaryDialogAgentAction-VDOBOMKC.js} +13 -12
- package/{settingSlice-7NN2MI6Y.js → settingSlice-VR2IJSXC.js} +8 -8
- package/{skillDiscovery-COX56OBO.js → skillDiscovery-2QTZINON.js} +3 -4
- package/{spaceCommands-RC7XMYQ7.js → spaceCommands-S5YJJXL7.js} +31 -29
- package/{streamAgentChatTurn-WLWEBWSF.js → streamAgentChatTurn-QHKP3ABO.js} +82 -70
- package/{switchDialogAgentAction-WGMMQHDI.js → switchDialogAgentAction-5L4UP7VI.js} +11 -10
- package/{tableCommands-P2TXJ3CF.js → tableCommands-R6WFRDYF.js} +1 -1
- package/{toolApiClient-B2MFXMEG.js → toolApiClient-53U4UDFF.js} +3 -2
- package/{tools-LSLDSUWU.js → tools-SSXSTC3O.js} +42 -38
- package/{tuiSummaryLlmCaller-TPBL4BV2.js → tuiSummaryLlmCaller-URFJHFC5.js} +19 -17
- package/{updateDialogTitleAction-4HJEARM7.js → updateDialogTitleAction-YFYAEW3T.js} +30 -26
- package/agentRecordCommands-G6EFHU3G.js +0 -115
- package/chunk-AETZ7AD6.js +0 -274
- package/chunk-DMCFF4KE.js +0 -435
- package/chunk-EUG45QJR.js +0 -6104
- package/chunk-J4Z6UI4C.js +0 -7076
- package/chunk-OFZPJ3NT.js +0 -114
- package/createDialogAction-2C6SR62D.js +0 -59
- package/spaceSlice-KBVKKO3M.js +0 -127
- package/{chunk-NQ4N4IGO.js → chunk-CS6TCJ7E.js} +3 -3
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MODEL_LOOKUP_MAP
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SVDMVX4G.js";
|
|
4
4
|
import {
|
|
5
5
|
ALL_MODELS
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NJUQBYFJ.js";
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
} from "./chunk-
|
|
8
|
+
BUILTIN_NOLO_AGENT_KEY
|
|
9
|
+
} from "./chunk-2WBFJHQA.js";
|
|
10
10
|
|
|
11
11
|
// packages/ai/llm/getModelContextWindow.ts
|
|
12
12
|
var DEFAULT_CONTEXT_WINDOW = 256e3;
|
|
@@ -115,6 +115,42 @@ var getModelInfo = (modelName) => {
|
|
|
115
115
|
return map.get(modelName) || map.get(modelName.toLowerCase()) || null;
|
|
116
116
|
};
|
|
117
117
|
|
|
118
|
+
// packages/ai/token/cacheTokenFields.ts
|
|
119
|
+
var finiteTokenCount = (value) => {
|
|
120
|
+
if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
|
|
121
|
+
return Math.max(0, Math.floor(value));
|
|
122
|
+
};
|
|
123
|
+
var readNested = (value, path) => {
|
|
124
|
+
let cursor = value;
|
|
125
|
+
for (const key of path) {
|
|
126
|
+
if (!cursor || typeof cursor !== "object") return void 0;
|
|
127
|
+
cursor = cursor[key];
|
|
128
|
+
}
|
|
129
|
+
return finiteTokenCount(cursor);
|
|
130
|
+
};
|
|
131
|
+
var firstPositive = (usage, readers) => {
|
|
132
|
+
for (const read of readers) {
|
|
133
|
+
const value = read(usage);
|
|
134
|
+
if (value !== void 0 && value !== 0) return value;
|
|
135
|
+
}
|
|
136
|
+
return 0;
|
|
137
|
+
};
|
|
138
|
+
var topLevel = (field) => (usage) => {
|
|
139
|
+
if (!usage || typeof usage !== "object") return void 0;
|
|
140
|
+
return finiteTokenCount(usage[field]);
|
|
141
|
+
};
|
|
142
|
+
var nested = (path) => (usage) => readNested(usage, path);
|
|
143
|
+
var readCacheReadInputTokens = (usage) => firstPositive(usage, [
|
|
144
|
+
topLevel("cache_read_input_tokens"),
|
|
145
|
+
topLevel("prompt_cache_hit_tokens"),
|
|
146
|
+
nested(["input_tokens_details", "cached_tokens"]),
|
|
147
|
+
nested(["prompt_tokens_details", "cached_tokens"])
|
|
148
|
+
]);
|
|
149
|
+
var readCacheCreationInputTokens = (usage) => firstPositive(usage, [
|
|
150
|
+
topLevel("cache_creation_input_tokens"),
|
|
151
|
+
topLevel("prompt_cache_miss_tokens")
|
|
152
|
+
]);
|
|
153
|
+
|
|
118
154
|
// packages/agent-runtime/emptyAssistantRepair.ts
|
|
119
155
|
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";
|
|
120
156
|
var EMPTY_ASSISTANT_FALLBACK_MESSAGE = "\u6A21\u578B\u8FDE\u7EED\u8FD4\u56DE\u7A7A\u6D88\u606F\uFF0C\u5F53\u524D\u4EFB\u52A1\u672A\u5B8C\u6210\u3002\u8BF7\u91CD\u8BD5\u5F53\u524D\u6B65\u9AA4\uFF0C\u6216\u7ED9\u51FA\u66F4\u5177\u4F53\u7684\u4FEE\u6539\u8303\u56F4\u3002";
|
|
@@ -206,11 +242,11 @@ var createProfile = (input) => ({
|
|
|
206
242
|
}
|
|
207
243
|
});
|
|
208
244
|
var FLASH_PROFILE = createProfile({
|
|
209
|
-
id: "builtin:auto:
|
|
245
|
+
id: "builtin:auto:nolo",
|
|
210
246
|
tier: "flash",
|
|
211
|
-
legacyAgentKey:
|
|
212
|
-
name: "
|
|
213
|
-
model: "
|
|
247
|
+
legacyAgentKey: BUILTIN_NOLO_AGENT_KEY,
|
|
248
|
+
name: "nolo",
|
|
249
|
+
model: "glm-5-3-flash"
|
|
214
250
|
});
|
|
215
251
|
var AUTO_EXECUTION_PROFILES = {
|
|
216
252
|
flash: FLASH_PROFILE,
|
|
@@ -223,6 +259,8 @@ var DEFAULT_AUTO_EXECUTION_PROFILE = AUTO_EXECUTION_PROFILES[DEFAULT_AUTO_EXECUT
|
|
|
223
259
|
var resolveAutoExecutionProfile = (tier) => AUTO_EXECUTION_PROFILES[tier ?? DEFAULT_AUTO_EXECUTION_TIER] ?? DEFAULT_AUTO_EXECUTION_PROFILE;
|
|
224
260
|
|
|
225
261
|
export {
|
|
262
|
+
readCacheReadInputTokens,
|
|
263
|
+
readCacheCreationInputTokens,
|
|
226
264
|
DEFAULT_CONTEXT_WINDOW,
|
|
227
265
|
getModelContextWindow,
|
|
228
266
|
getModelInfo,
|
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
resolvePlatformChatCompletionsEndpoint,
|
|
4
4
|
resolvePlatformHostedCredentialProvider,
|
|
5
5
|
resolvePlatformResponsesEndpoint
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-N4JKMCY3.js";
|
|
7
7
|
import {
|
|
8
8
|
CLIENT_VERSION_TOO_OLD_CODE,
|
|
9
9
|
buildClientVersionGateErrorDetail,
|
|
10
10
|
evaluatePlatformHostedClientVersionGate
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HPW5MNDQ.js";
|
|
12
12
|
import {
|
|
13
13
|
asTrimmedLowercaseString
|
|
14
14
|
} from "./chunk-QSJ3HFEF.js";
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import {
|
|
2
|
+
require_react
|
|
3
|
+
} from "./chunk-YDH3FDFQ.js";
|
|
4
|
+
import {
|
|
5
|
+
createSpaceKey,
|
|
6
|
+
normalizeSpaceId
|
|
7
|
+
} from "./chunk-UAD2WT54.js";
|
|
8
|
+
import {
|
|
9
|
+
toTimestampMs
|
|
10
|
+
} from "./chunk-7NYDJAQ7.js";
|
|
11
|
+
import {
|
|
12
|
+
fetchFromServer,
|
|
13
|
+
getAllServers
|
|
14
|
+
} from "./chunk-QOKAKDPE.js";
|
|
15
|
+
import {
|
|
16
|
+
isTombstoneRecord
|
|
17
|
+
} from "./chunk-GBRG75BQ.js";
|
|
18
|
+
import {
|
|
19
|
+
__toESM
|
|
20
|
+
} from "./chunk-4VNS5WPM.js";
|
|
21
|
+
|
|
22
|
+
// packages/create/space/spaceMembershipStore.ts
|
|
23
|
+
var import_react = __toESM(require_react(), 1);
|
|
24
|
+
var createInitialState = () => ({
|
|
25
|
+
memberSpaces: null,
|
|
26
|
+
loading: false,
|
|
27
|
+
membershipStatus: "idle",
|
|
28
|
+
initialized: false
|
|
29
|
+
});
|
|
30
|
+
var state = createInitialState();
|
|
31
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
32
|
+
var version = 0;
|
|
33
|
+
var notify = () => {
|
|
34
|
+
version += 1;
|
|
35
|
+
for (const listener of listeners) {
|
|
36
|
+
try {
|
|
37
|
+
listener();
|
|
38
|
+
} catch {
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
var getMembershipUpdatedAt = (space) => {
|
|
43
|
+
if (!space) return 0;
|
|
44
|
+
return toTimestampMs(
|
|
45
|
+
space.spaceUpdatedAt ?? space.memberUpdatedAt ?? space.updatedAt ?? space.createdAt ?? space.joinedAt
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
function dedupeMemberSpacesById(memberSpaces) {
|
|
49
|
+
const membershipMap = /* @__PURE__ */ new Map();
|
|
50
|
+
memberSpaces.forEach((space) => {
|
|
51
|
+
const prev = membershipMap.get(space.spaceId);
|
|
52
|
+
if (!prev || getMembershipUpdatedAt(space) >= getMembershipUpdatedAt(prev)) {
|
|
53
|
+
membershipMap.set(space.spaceId, space);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return Array.from(membershipMap.values());
|
|
57
|
+
}
|
|
58
|
+
function getMemberSpaces() {
|
|
59
|
+
return state.memberSpaces;
|
|
60
|
+
}
|
|
61
|
+
function getAllMemberSpaces() {
|
|
62
|
+
const memberSpaces = dedupeMemberSpacesById(state.memberSpaces || []);
|
|
63
|
+
return [...memberSpaces].sort((a, b) => {
|
|
64
|
+
return getMembershipUpdatedAt(b) - getMembershipUpdatedAt(a);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function setMemberSpaces(spaces) {
|
|
68
|
+
state = {
|
|
69
|
+
...state,
|
|
70
|
+
memberSpaces: spaces,
|
|
71
|
+
loading: false,
|
|
72
|
+
error: void 0,
|
|
73
|
+
membershipStatus: "fresh",
|
|
74
|
+
initialized: true
|
|
75
|
+
};
|
|
76
|
+
notify();
|
|
77
|
+
}
|
|
78
|
+
function setMembershipLoading() {
|
|
79
|
+
state = { ...state, loading: true, membershipStatus: "loading" };
|
|
80
|
+
notify();
|
|
81
|
+
}
|
|
82
|
+
function setMembershipRejected(errorMessage, isRemoteUnavailable) {
|
|
83
|
+
const membershipStatus = isRemoteUnavailable ? "offline" : state.membershipStatus === "loading" ? "idle" : state.membershipStatus;
|
|
84
|
+
state = {
|
|
85
|
+
...state,
|
|
86
|
+
loading: false,
|
|
87
|
+
error: errorMessage,
|
|
88
|
+
membershipStatus
|
|
89
|
+
};
|
|
90
|
+
notify();
|
|
91
|
+
}
|
|
92
|
+
function hydrateMemberSpacesFromLocal(spaces) {
|
|
93
|
+
if (state.memberSpaces !== null || spaces.length === 0) return;
|
|
94
|
+
state = {
|
|
95
|
+
...state,
|
|
96
|
+
memberSpaces: dedupeMemberSpacesById(spaces),
|
|
97
|
+
loading: false
|
|
98
|
+
};
|
|
99
|
+
notify();
|
|
100
|
+
}
|
|
101
|
+
function appendRecoveredMemberships(recovered) {
|
|
102
|
+
if (!recovered || recovered.length === 0) return;
|
|
103
|
+
if (state.memberSpaces === null) {
|
|
104
|
+
state = {
|
|
105
|
+
...state,
|
|
106
|
+
memberSpaces: dedupeMemberSpacesById(recovered)
|
|
107
|
+
};
|
|
108
|
+
notify();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
state = {
|
|
112
|
+
...state,
|
|
113
|
+
memberSpaces: dedupeMemberSpacesById([
|
|
114
|
+
...state.memberSpaces,
|
|
115
|
+
...recovered
|
|
116
|
+
]).sort((a, b) => toTimestampMs(b.joinedAt) - toTimestampMs(a.joinedAt))
|
|
117
|
+
};
|
|
118
|
+
notify();
|
|
119
|
+
}
|
|
120
|
+
function setSpaceInitialized() {
|
|
121
|
+
state = { ...state, initialized: true };
|
|
122
|
+
notify();
|
|
123
|
+
}
|
|
124
|
+
function setMembershipLoaded() {
|
|
125
|
+
state = { ...state, loading: false, error: void 0 };
|
|
126
|
+
notify();
|
|
127
|
+
}
|
|
128
|
+
function addMemberSpace(space) {
|
|
129
|
+
const existing = state.memberSpaces || [];
|
|
130
|
+
state = {
|
|
131
|
+
...state,
|
|
132
|
+
memberSpaces: dedupeMemberSpacesById([...existing, space])
|
|
133
|
+
};
|
|
134
|
+
notify();
|
|
135
|
+
}
|
|
136
|
+
function removeMemberSpace(spaceId) {
|
|
137
|
+
if (!state.memberSpaces) return;
|
|
138
|
+
const normalized = normalizeSpaceId(spaceId);
|
|
139
|
+
state = {
|
|
140
|
+
...state,
|
|
141
|
+
memberSpaces: state.memberSpaces.filter(
|
|
142
|
+
(s) => normalizeSpaceId(s.spaceId) !== normalized
|
|
143
|
+
)
|
|
144
|
+
};
|
|
145
|
+
notify();
|
|
146
|
+
}
|
|
147
|
+
function updateMemberSpaceName(spaceId, name) {
|
|
148
|
+
if (!state.memberSpaces || !name) return;
|
|
149
|
+
state = {
|
|
150
|
+
...state,
|
|
151
|
+
memberSpaces: state.memberSpaces.map(
|
|
152
|
+
(space) => space.spaceId === spaceId ? { ...space, spaceName: name } : space
|
|
153
|
+
)
|
|
154
|
+
};
|
|
155
|
+
notify();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// packages/create/space/spaceAccess.ts
|
|
159
|
+
var resolveSpaceRemoteServers = (state2) => {
|
|
160
|
+
const currentServer = typeof state2?.settings?.currentServer === "string" ? state2.settings.currentServer : void 0;
|
|
161
|
+
const syncServers = Array.isArray(state2?.settings?.syncServers) ? state2.settings.syncServers : void 0;
|
|
162
|
+
return getAllServers(currentServer, syncServers);
|
|
163
|
+
};
|
|
164
|
+
var selectSpaceRemoteAuth = (state2) => ({
|
|
165
|
+
token: state2?.auth?.currentToken ?? null,
|
|
166
|
+
userId: state2?.auth?.currentUser?.userId ?? null,
|
|
167
|
+
servers: resolveSpaceRemoteServers(state2)
|
|
168
|
+
});
|
|
169
|
+
var spaceListsUser = (spaceData, userId) => {
|
|
170
|
+
if (!spaceData || isTombstoneRecord(spaceData)) return false;
|
|
171
|
+
if (spaceData.ownerId === userId) return true;
|
|
172
|
+
return Array.isArray(spaceData.members) && spaceData.members.includes(userId);
|
|
173
|
+
};
|
|
174
|
+
var membershipBelongsToUser = (membership, userId) => !membership.userId || membership.userId === userId;
|
|
175
|
+
var membershipFetchCache = /* @__PURE__ */ new Map();
|
|
176
|
+
var MEMBERSHIP_FETCH_CACHE_TTL_MS = 3e4;
|
|
177
|
+
async function fetchMembershipsFromServer(server, token, userId, timeoutMs) {
|
|
178
|
+
if (!token) return { ok: false, memberships: [] };
|
|
179
|
+
const controller = new AbortController();
|
|
180
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
181
|
+
try {
|
|
182
|
+
const response = await fetch(`${server}/rpc/getUserSpaceMemberships`, {
|
|
183
|
+
method: "POST",
|
|
184
|
+
headers: {
|
|
185
|
+
Authorization: `Bearer ${token}`,
|
|
186
|
+
"Content-Type": "application/json"
|
|
187
|
+
},
|
|
188
|
+
body: JSON.stringify({ userId }),
|
|
189
|
+
signal: controller.signal
|
|
190
|
+
});
|
|
191
|
+
clearTimeout(timeoutId);
|
|
192
|
+
if (!response.ok) {
|
|
193
|
+
console.error(
|
|
194
|
+
`Failed to fetch memberships from ${server}: ${response.statusText}`
|
|
195
|
+
);
|
|
196
|
+
return { ok: false, memberships: [] };
|
|
197
|
+
}
|
|
198
|
+
const data = await response.json();
|
|
199
|
+
return {
|
|
200
|
+
ok: true,
|
|
201
|
+
server,
|
|
202
|
+
memberships: Array.isArray(data) ? data : []
|
|
203
|
+
};
|
|
204
|
+
} catch (error) {
|
|
205
|
+
clearTimeout(timeoutId);
|
|
206
|
+
console.error(`Error fetching memberships from ${server}:`, error);
|
|
207
|
+
return { ok: false, memberships: [] };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
var fetchRemoteUserSpaceMemberships = (server, token, userId, timeoutMs = 5e3) => {
|
|
211
|
+
const cacheKey = `${server}|${userId}`;
|
|
212
|
+
const cached = membershipFetchCache.get(cacheKey);
|
|
213
|
+
if (cached) return cached;
|
|
214
|
+
const promise = fetchMembershipsFromServer(server, token, userId, timeoutMs);
|
|
215
|
+
membershipFetchCache.set(cacheKey, promise);
|
|
216
|
+
promise.catch(() => {
|
|
217
|
+
}).finally(() => {
|
|
218
|
+
setTimeout(() => {
|
|
219
|
+
if (membershipFetchCache.get(cacheKey) === promise) {
|
|
220
|
+
membershipFetchCache.delete(cacheKey);
|
|
221
|
+
}
|
|
222
|
+
}, MEMBERSHIP_FETCH_CACHE_TTL_MS);
|
|
223
|
+
});
|
|
224
|
+
return promise;
|
|
225
|
+
};
|
|
226
|
+
var fetchRemoteSpace = async (server, token, spaceId) => {
|
|
227
|
+
try {
|
|
228
|
+
const space = await fetchFromServer(
|
|
229
|
+
server,
|
|
230
|
+
createSpaceKey.space(normalizeSpaceId(spaceId)),
|
|
231
|
+
token ?? void 0
|
|
232
|
+
);
|
|
233
|
+
return space && typeof space === "object" ? space : null;
|
|
234
|
+
} catch {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
var hasActiveRemoteMembership = async (server, token, userId, spaceId) => {
|
|
239
|
+
const result = await fetchRemoteUserSpaceMemberships(server, token, userId);
|
|
240
|
+
if (!result.ok) return false;
|
|
241
|
+
const normalizedSpaceId = normalizeSpaceId(spaceId);
|
|
242
|
+
return result.memberships.some((membership) => {
|
|
243
|
+
const membershipSpaceId = typeof membership?.spaceId === "string" ? normalizeSpaceId(membership.spaceId) : "";
|
|
244
|
+
return membershipSpaceId === normalizedSpaceId && membershipBelongsToUser(membership, userId) && !isTombstoneRecord(membership);
|
|
245
|
+
});
|
|
246
|
+
};
|
|
247
|
+
var fetchAuthoritativeRemoteSpace = async ({
|
|
248
|
+
servers,
|
|
249
|
+
token,
|
|
250
|
+
userId,
|
|
251
|
+
spaceId
|
|
252
|
+
}) => {
|
|
253
|
+
const normalizedSpaceId = normalizeSpaceId(spaceId);
|
|
254
|
+
for (const server of servers) {
|
|
255
|
+
const space = await fetchRemoteSpace(server, token, normalizedSpaceId);
|
|
256
|
+
if (!space) continue;
|
|
257
|
+
if (!spaceListsUser(space, userId)) {
|
|
258
|
+
throw new Error(`Current user is not a member of space: ${normalizedSpaceId}`);
|
|
259
|
+
}
|
|
260
|
+
if (space.ownerId !== userId) {
|
|
261
|
+
const hasMembership = await hasActiveRemoteMembership(
|
|
262
|
+
server,
|
|
263
|
+
token,
|
|
264
|
+
userId,
|
|
265
|
+
normalizedSpaceId
|
|
266
|
+
);
|
|
267
|
+
if (!hasMembership) {
|
|
268
|
+
throw new Error(
|
|
269
|
+
`Current user has no active membership for space: ${normalizedSpaceId}`
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return space;
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
export {
|
|
279
|
+
selectSpaceRemoteAuth,
|
|
280
|
+
spaceListsUser,
|
|
281
|
+
membershipBelongsToUser,
|
|
282
|
+
fetchRemoteUserSpaceMemberships,
|
|
283
|
+
fetchRemoteSpace,
|
|
284
|
+
fetchAuthoritativeRemoteSpace,
|
|
285
|
+
getMemberSpaces,
|
|
286
|
+
getAllMemberSpaces,
|
|
287
|
+
setMemberSpaces,
|
|
288
|
+
setMembershipLoading,
|
|
289
|
+
setMembershipRejected,
|
|
290
|
+
hydrateMemberSpacesFromLocal,
|
|
291
|
+
appendRecoveredMemberships,
|
|
292
|
+
setSpaceInitialized,
|
|
293
|
+
setMembershipLoaded,
|
|
294
|
+
addMemberSpace,
|
|
295
|
+
removeMemberSpace,
|
|
296
|
+
updateMemberSpaceName
|
|
297
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
clearCliLocalRuntimePreparedAgentCache
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5FCIPEKT.js";
|
|
4
4
|
import {
|
|
5
5
|
getReadableCliDb
|
|
6
6
|
} from "./chunk-43CXXVJD.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
resolveAgentRecordFromHybridStore,
|
|
13
13
|
sanitizeAgentRecordForCliOutput,
|
|
14
14
|
writeAgentRecord
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-SYYUU7EV.js";
|
|
16
16
|
import {
|
|
17
17
|
resolveCliAgentKeyInput
|
|
18
18
|
} from "./chunk-EKLRRZIN.js";
|
|
@@ -1,72 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createSpaceKey
|
|
3
|
+
} from "./chunk-UAD2WT54.js";
|
|
1
4
|
import {
|
|
2
5
|
patch,
|
|
3
6
|
read
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7NYDJAQ7.js";
|
|
5
8
|
import {
|
|
6
9
|
DEVICE_LOCAL_OWNER_ID,
|
|
7
10
|
isDeviceLocalSpaceBody,
|
|
8
11
|
selectIdentityUserId
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
|
|
11
|
-
// packages/create/space/spaceKeys.ts
|
|
12
|
-
var SEPARATOR = "-";
|
|
13
|
-
var SPACE_PREFIX = "space";
|
|
14
|
-
var SPACE_PREFIX_WITH_SEPARATOR = `${SPACE_PREFIX}${SEPARATOR}`;
|
|
15
|
-
var normalizeSpaceId = (spaceId) => {
|
|
16
|
-
if (!spaceId) return spaceId;
|
|
17
|
-
return spaceId.startsWith(SPACE_PREFIX_WITH_SEPARATOR) ? spaceId.slice(SPACE_PREFIX_WITH_SEPARATOR.length) : spaceId;
|
|
18
|
-
};
|
|
19
|
-
var createSpaceKey = {
|
|
20
|
-
// 空间基础信息的key
|
|
21
|
-
space: (spaceId) => {
|
|
22
|
-
return [SPACE_PREFIX, normalizeSpaceId(spaceId)].join(SEPARATOR);
|
|
23
|
-
},
|
|
24
|
-
// 空间成员的key
|
|
25
|
-
member: (userId, spaceId) => {
|
|
26
|
-
return [SPACE_PREFIX, "member", userId, normalizeSpaceId(spaceId)].join(
|
|
27
|
-
SEPARATOR
|
|
28
|
-
);
|
|
29
|
-
},
|
|
30
|
-
// 查询用户所在的所有空间的范围
|
|
31
|
-
memberRange: (userId) => {
|
|
32
|
-
return {
|
|
33
|
-
start: [SPACE_PREFIX, "member", userId, ""].join(SEPARATOR),
|
|
34
|
-
end: [SPACE_PREFIX, "member", userId, "\uFFFF"].join(SEPARATOR)
|
|
35
|
-
};
|
|
36
|
-
},
|
|
37
|
-
/**
|
|
38
|
-
* 预留:未来若出现“按用户、按空间、且必须跨设备同步”的空间级偏好,
|
|
39
|
-
* 统一使用这个 key family。当前产品主链不要依赖它。
|
|
40
|
-
*/
|
|
41
|
-
setting: (userId, spaceId) => {
|
|
42
|
-
return [SPACE_PREFIX, "setting", userId, normalizeSpaceId(spaceId)].join(
|
|
43
|
-
SEPARATOR
|
|
44
|
-
);
|
|
45
|
-
},
|
|
46
|
-
/**
|
|
47
|
-
* 预留:未来如确实需要批量读取空间级远端偏好,再使用这个范围。
|
|
48
|
-
*/
|
|
49
|
-
settingRange: (userId) => {
|
|
50
|
-
return {
|
|
51
|
-
start: [SPACE_PREFIX, "setting", userId, ""].join(SEPARATOR),
|
|
52
|
-
end: [SPACE_PREFIX, "setting", userId, "\uFFFF"].join(SEPARATOR)
|
|
53
|
-
};
|
|
54
|
-
},
|
|
55
|
-
// 从成员key中提取空间key
|
|
56
|
-
// 成员 key 格式: space-member-{userId}-{spaceId}
|
|
57
|
-
// userId 是单段(无连字符),spaceId 是 ULID(无连字符)
|
|
58
|
-
spaceFromMember: (memberKey) => {
|
|
59
|
-
const parts = memberKey.split(SEPARATOR);
|
|
60
|
-
if (parts.length < 4) return "";
|
|
61
|
-
const spaceId = parts[parts.length - 1];
|
|
62
|
-
return [SPACE_PREFIX, spaceId].join(SEPARATOR);
|
|
63
|
-
},
|
|
64
|
-
// 从成员key中提取空间ID
|
|
65
|
-
spaceIdFromMember: (memberKey) => {
|
|
66
|
-
const parts = memberKey.split(SEPARATOR);
|
|
67
|
-
return parts.length >= 4 ? parts[parts.length - 1] : "";
|
|
68
|
-
}
|
|
69
|
-
};
|
|
12
|
+
} from "./chunk-XOJRZUPF.js";
|
|
70
13
|
|
|
71
14
|
// packages/create/space/utils/permissions.ts
|
|
72
15
|
var checkSpaceMembership = (spaceData, userId) => {
|
|
@@ -163,8 +106,6 @@ var addContentAction = async (input, thunkAPI) => {
|
|
|
163
106
|
};
|
|
164
107
|
|
|
165
108
|
export {
|
|
166
|
-
normalizeSpaceId,
|
|
167
|
-
createSpaceKey,
|
|
168
109
|
checkSpaceMembership,
|
|
169
110
|
localSpaceAuthorityPatchStamp,
|
|
170
111
|
UNCATEGORIZED_ID,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getModelConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SVDMVX4G.js";
|
|
4
4
|
import {
|
|
5
5
|
isPlatformHostedDeepseekModel,
|
|
6
6
|
isPlatformHostedOpenAIImageModel,
|
|
7
7
|
resolvePlatformHostedRouting
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HPW5MNDQ.js";
|
|
9
9
|
import {
|
|
10
10
|
asTrimmedLowercaseString
|
|
11
11
|
} from "./chunk-QSJ3HFEF.js";
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
getAntigravityUserAgent,
|
|
12
12
|
normalizeAntigravityTokenPayload,
|
|
13
13
|
refreshAntigravityToken
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BG7J6Y5X.js";
|
|
15
15
|
import {
|
|
16
16
|
writeOAuthCredential
|
|
17
17
|
} from "./chunk-FD36SCCD.js";
|
|
@@ -21,12 +21,12 @@ import {
|
|
|
21
21
|
import {
|
|
22
22
|
asOptionalFiniteNumber
|
|
23
23
|
} from "./chunk-WWC7I6TA.js";
|
|
24
|
-
import {
|
|
25
|
-
isRecord
|
|
26
|
-
} from "./chunk-KUG52IAP.js";
|
|
27
24
|
import {
|
|
28
25
|
asTrimmedString
|
|
29
26
|
} from "./chunk-3EUW3WEO.js";
|
|
27
|
+
import {
|
|
28
|
+
isRecord
|
|
29
|
+
} from "./chunk-KUG52IAP.js";
|
|
30
30
|
|
|
31
31
|
// packages/cli/oauth/callback-server.ts
|
|
32
32
|
import { createServer } from "node:http";
|
|
@@ -2393,29 +2393,6 @@ var require_rambda = __commonJS({
|
|
|
2393
2393
|
}
|
|
2394
2394
|
});
|
|
2395
2395
|
|
|
2396
|
-
// packages/create/types.ts
|
|
2397
|
-
var DataType = /* @__PURE__ */ ((DataType2) => {
|
|
2398
|
-
DataType2["AGENT"] = "agent";
|
|
2399
|
-
DataType2["DOC"] = "page";
|
|
2400
|
-
DataType2["DIALOG"] = "dialog";
|
|
2401
|
-
DataType2["NOTIFICATION"] = "notification";
|
|
2402
|
-
DataType2["MSG"] = "msg";
|
|
2403
|
-
DataType2["TOKEN"] = "token";
|
|
2404
|
-
DataType2["SPACE"] = "space";
|
|
2405
|
-
DataType2["TRANSACTION"] = "transaction";
|
|
2406
|
-
DataType2["SETTING"] = "setting";
|
|
2407
|
-
DataType2["TASK"] = "task";
|
|
2408
|
-
DataType2["AGENT_AUTOMATION"] = "agent-automation";
|
|
2409
|
-
DataType2["TABLE"] = "table";
|
|
2410
|
-
DataType2["TABLE_ROW"] = "table_row";
|
|
2411
|
-
DataType2["FILE"] = "file";
|
|
2412
|
-
DataType2["IMAGE"] = "image";
|
|
2413
|
-
DataType2["APP"] = "app";
|
|
2414
|
-
DataType2["EMAIL"] = "email";
|
|
2415
|
-
DataType2["Category"] = "category";
|
|
2416
|
-
return DataType2;
|
|
2417
|
-
})(DataType || {});
|
|
2418
|
-
|
|
2419
2396
|
// packages/core/toTrimmedString.ts
|
|
2420
2397
|
function toTrimmedString(value) {
|
|
2421
2398
|
return typeof value === "string" ? value.trim() : value == null ? "" : String(value).trim();
|
|
@@ -3192,7 +3169,6 @@ var sanitizeShareData = (data) => {
|
|
|
3192
3169
|
};
|
|
3193
3170
|
|
|
3194
3171
|
export {
|
|
3195
|
-
DataType,
|
|
3196
3172
|
ulid,
|
|
3197
3173
|
toTrimmedString,
|
|
3198
3174
|
toNonEmptyString,
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
openrouterModels,
|
|
5
5
|
platformHostedModels,
|
|
6
6
|
zaiModels
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-HPW5MNDQ.js";
|
|
8
8
|
|
|
9
9
|
// packages/ai/llm/modelAbility.ts
|
|
10
10
|
var MODEL_ABILITY_TABLE = {
|
|
@@ -24,6 +24,8 @@ var MODEL_ABILITY_TABLE = {
|
|
|
24
24
|
"claude-sonnet-5": { passAt1: 54, benchmarkScore: 53 },
|
|
25
25
|
"deepseek-v4-flash": { passAt1: 53 },
|
|
26
26
|
"gemini-3.7-flash": { passAt1: 58, benchmarkScore: 65, writingScore: 88 },
|
|
27
|
+
// TODO(benchmark): gemini-3.8-flash 官方基准快照未出,暂沿用 3.7 分数占位,确认后更新。
|
|
28
|
+
"gemini-3.8-flash": { passAt1: 58, benchmarkScore: 65, writingScore: 88 },
|
|
27
29
|
"muse-spark-1.1": { passAt1: 53 },
|
|
28
30
|
"gpt-5.4": { passAt1: 52 },
|
|
29
31
|
"gemini-3.6-flash": { passAt1: 49, benchmarkScore: 50 },
|
|
@@ -22,13 +22,14 @@ var CODE_WORK_DISCIPLINE_BODY = `## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\u
|
|
|
22
22
|
- **\u5EFA\u8BAE\u6C47\u62A5**\uFF1A\u4EA4\u4ED8\u65F6\u628A\u8FC7\u7A0B\u4E2D\u53D1\u73B0\u7684**\u4EFB\u4F55\u503C\u5F97\u7528\u6237\u77E5\u9053\u7684\u4E8B**\u90FD\u5217\u51FA\u6765\uFF08\u9884\u5B58\u65E0\u5173\u6539\u52A8\u3001\u65E2\u6709\u6D4B\u8BD5\u9694\u79BB\u95EE\u9898\u3001\u6F5C\u5728\u98CE\u9669\u3001\u540E\u7EED\u53EF\u4F18\u5316\u70B9\u3001\u9700\u7528\u6237\u51B3\u7B56\u7684\u4E8B\u9879\uFF09\uFF0C\u4E0D\u8981\u53EA\u62A5\u300C\u505A\u5B8C\u4E86\u300D\u3002
|
|
23
23
|
|
|
24
24
|
## Review \u7EAA\u5F8B\uFF08commit \u524D\u786C\u95E8\uFF09
|
|
25
|
-
- \
|
|
25
|
+
- **\u9636\u6BB5\u5212\u5206**\uFF1A\u4E25\u683C\u533A\u5206\u300C\u5B9E\u73B0/\u6784\u5EFA/\u5B89\u88C5/\u7528\u6237\u6D4B\u8BD5/\u6839\u636E\u53CD\u9988\u8FED\u4EE3\u300D\u4E0E\u300C\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u300D\u9636\u6BB5\u3002UI/\u524D\u7AEF\u53CA\u5176\u4ED6\u9700\u7528\u6237\u9A8C\u6536\u7684\u4EFB\u52A1\uFF0C\u5728\u5B9E\u73B0\u9636\u6BB5\u4E0D\u5F97\u89E6\u53D1\u6216\u7B49\u5F85\u6700\u7EC8\u72EC\u7ACB review\uFF0C\u5E94\u5148\u4EA4\u4ED8\u53EF\u6D4B\u8BD5\u4EA7\u7269\u7B49\u5F85\u7528\u6237\u53CD\u9988\u3002
|
|
26
|
+
- \u6700\u7EC8 review \u4EC5\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u65F6\u8FDB\u884C\u3002\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\uFF08\u9519\u522B\u5B57/\u683C\u5F0F/CSS \u5FAE\u8C03\uFF09\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review \u5DE5\u4F5C\u533A diff\uFF08\`git diff\`\uFF0C\u672A\u63D0\u4EA4\u7684\u6539\u52A8\uFF09\u3002reviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF08\u7F16\u6392\u8005\u4EE5\u81EA\u8EAB agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u5168\u65B0\u5B9E\u4F8B\u4E0D\u5171\u4EAB\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF0C\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u4E0D\u7B97\u300C\u81EA\u5DF1\u300D\uFF0C\u8DE8\u5BB6\u65CF\u4F18\u5148\u975E\u5F3A\u5236\uFF09\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002
|
|
26
27
|
- \u6D3E\u53D1\u8D70 \`startAgentRun(agentKey, task, { ephemeral: true })\`\uFF08web/\u684C\u9762\u7AEF\u6CA1\u6709 nolo CLI\uFF0C\u6240\u6709 host \u90FD\u6709\u8FD9\u4E2A\u5DE5\u5177\uFF09\u3002ephemeral \u8BA9 review \u5B8C\u6210\u540E\u4E0D\u7559 dialog \u8BB0\u5F55\u3002
|
|
27
28
|
- task \u91CC\u5FC5\u987B\u5199\u660E\u5BA1\u67E5\u5BF9\u8C61\uFF08\`git diff\` \u770B\u5DE5\u4F5C\u533A\u6539\u52A8\uFF0C\u6216 \`git diff alpha...HEAD\` \u770B\u5DF2\u63D0\u4EA4\u6539\u52A8\uFF09\uFF0C\u5426\u5219 reviewer \u4E0D\u77E5\u9053\u5BA1\u4EC0\u4E48\u3002
|
|
28
29
|
- \u6309\u89D2\u8272\u52A0\u8F7D\u5BF9\u5E94 skill\uFF1Areviewer \u5148 \`loadSkill("coding-review")\` \u62FF\u901A\u7528\u6D41\u7A0B\uFF0C\u518D\u6309\u89D2\u8272 \`loadSkill("coding-review-<role>")\` \u62FF\u68C0\u67E5\u9879\u3002\u89D2\u8272\u6E05\u5355\uFF1Acode-quality\uFF08**\u5FC5\u8DD1**\uFF09/ architecture\uFF08**\u5355\u72EC\u6D3E\u53D1**\uFF0C\u4E2D\u7EA7\u4EE5\u4E0A\u95EE\u9898\uFF09/ security\uFF08\u6309\u9700 + \u5B89\u5168\u654F\u611F\u89E6\u53D1\u5FC5\u8DD1\uFF09/ frontend-ux\uFF08\u6D89\u53CA UI \u65F6\uFF09/ backend-data\uFF08\u6D89\u53CA server \u65F6\uFF09\u3002\u89D2\u8272\u5207\u5272\u7684\u76EE\u7684\u662F\u6CE8\u610F\u529B\u9694\u79BB\u2014\u2014\u6BCF\u4E2A\u89D2\u8272\u53EA\u76EF\u81EA\u5DF1\u7684\u68C0\u67E5\u9762\uFF0C\u6309\u9700\u542F\u7528\uFF0C\u907F\u514D\u4E00\u4E2A reviewer \u80CC\u6240\u6709\u89D2\u8272\u5BFC\u81F4\u6CE8\u610F\u529B\u7A00\u91CA\u3002
|
|
29
30
|
- Verdict \u6807\u51C6\uFF1AAPPROVE\uFF08\u65E0 CRITICAL \u6216 HIGH\uFF09\u2192 \u53EF commit\uFF1BWARNING\uFF08\u4EC5 HIGH\uFF09\u2192 \u62A5\u544A owner \u51B3\u5B9A\uFF1BBLOCK\uFF08\u6709 CRITICAL\uFF09\u2192 \u5FC5\u987B\u5148\u4FEE\u3002
|
|
30
31
|
- review \u53EF\u80FD\u591A\u8F6E\u6536\u655B\uFF08\u6709 finding\u2192\u4FEE\u2192\u518D\u5BA1\u2192\u76F4\u5230 APPROVE\uFF09\u3002\u6BCF\u8F6E review \u662F\u65E0\u4E0A\u4E0B\u6587\u7684\u2014\u2014reviewer \u53EA\u770B\u5F53\u524D\u5DE5\u4F5C\u533A diff\uFF0C\u4E0D\u5E26\u4E0A\u4E00\u8F6E finding \u8BB0\u5FC6\u3002
|
|
31
|
-
- **\
|
|
32
|
+
- **\u63D0\u4EA4\u524D review \u5FAA\u73AF**\uFF1A\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4\u540E\u8FDB\u5165 review \u5FAA\u73AF\uFF0C\u6D41\u7A0B\uFF1A\u6D3E reviewer \u5BA1\u5DE5\u4F5C\u533A diff \u2192 \u82E5\u51FA finding \u5C31\u4FEE\u590D \u2192 \u590D\u5BA1 \u2192 \u76F4\u5230 APPROVE \u624D\u63D0\u4EA4\u3002\u5B89\u5168\u5BA1\u8BA1\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u7684\u53EA\u8BFB review \u53EF\u63D0\u524D\u505A\uFF0C\u4F46\u4E0D\u5F97\u963B\u585E\u7528\u6237\u6D4B\u8BD5\u3002\u9664\u975E\u8C03\u7528\u65B9\u660E\u786E\u8BF4\u300C\u53EA\u6539\u4E0D\u5BA1\u300D\u6216\u7528\u6237\u660E\u786E\u8DF3\u8FC7\uFF0C\u5426\u5219\u63D0\u4EA4\u524D\u5FC5\u987B\u8D70\u5B8C\u6574\u5FAA\u73AF\u3002
|
|
32
33
|
- \u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u3001\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit message \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\uFF0C\u4F46\u9ED8\u8BA4\u5FC5\u987B\u6D3E review\u3002`;
|
|
33
34
|
var buildCodeWorkDiscipline = (heading) => `# ${heading}
|
|
34
35
|
|
|
@@ -20,12 +20,6 @@ var isDevelopment = !isProduction;
|
|
|
20
20
|
var getIsDesktopApp = () => (typeof process !== "undefined" ? process.env?.NOLO_DESKTOP : processEnv?.NOLO_DESKTOP) === "1" || typeof window !== "undefined" && window.__NOLO_DESKTOP__ === true;
|
|
21
21
|
var isDesktopApp = getIsDesktopApp();
|
|
22
22
|
|
|
23
|
-
// packages/core/abortError.ts
|
|
24
|
-
function isAbortError(error) {
|
|
25
|
-
if (!error || typeof error !== "object") return false;
|
|
26
|
-
return error.name === "AbortError";
|
|
27
|
-
}
|
|
28
|
-
|
|
29
23
|
// packages/core/clientLogger.ts
|
|
30
24
|
var LOG_LEVELS = {
|
|
31
25
|
debug: 10,
|
|
@@ -51,12 +45,16 @@ var serializeValue = (value, seen = /* @__PURE__ */ new WeakSet()) => {
|
|
|
51
45
|
return "[Circular]";
|
|
52
46
|
}
|
|
53
47
|
seen.add(value);
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
try {
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
return value.map((item) => serializeValue(item, seen));
|
|
51
|
+
}
|
|
52
|
+
return Object.fromEntries(
|
|
53
|
+
Object.entries(value).map(([key, item]) => [key, serializeValue(item, seen)])
|
|
54
|
+
);
|
|
55
|
+
} finally {
|
|
56
|
+
seen.delete(value);
|
|
56
57
|
}
|
|
57
|
-
return Object.fromEntries(
|
|
58
|
-
Object.entries(value).map(([key, item]) => [key, serializeValue(item, seen)])
|
|
59
|
-
);
|
|
60
58
|
};
|
|
61
59
|
var getLogLevel = () => {
|
|
62
60
|
const configured = typeof process !== "undefined" && typeof process.env?.NOLO_LOG_LEVEL === "string" ? process.env.NOLO_LOG_LEVEL : "info";
|
|
@@ -107,6 +105,12 @@ var createClientLogger = (name, parentFields = {}) => {
|
|
|
107
105
|
};
|
|
108
106
|
};
|
|
109
107
|
|
|
108
|
+
// packages/core/abortError.ts
|
|
109
|
+
function isAbortError(error) {
|
|
110
|
+
if (!error || typeof error !== "object") return false;
|
|
111
|
+
return error.name === "AbortError";
|
|
112
|
+
}
|
|
113
|
+
|
|
110
114
|
// packages/app/utils/retryFetch.ts
|
|
111
115
|
var TRANSIENT_READ_RETRY_STATUSES = /* @__PURE__ */ new Set([502, 503, 504]);
|
|
112
116
|
var DEFAULT_RETRY_DELAYS_MS = [300, 1e3];
|