nolo-cli 0.8.0 → 0.9.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-UD44KGZ4.js +203 -0
- package/action-ZJWE3Y5S.js +28 -0
- package/addContentAction-TVDBNJM5.js +26 -0
- package/addDialogAgentAction-EKH774VT.js +68 -0
- package/agentDeleteCommand-TCPEFJTF.js +327 -0
- package/agentEmailCommands-CZ3UILZ4.js +626 -0
- package/agentListCommands-SJKO2FFB.js +223 -0
- package/agentMachineCommands-PSNABISZ.js +425 -0
- package/agentPullCommand-O2MTUAFR.js +122 -0
- package/agentRecordCommands-MH2JKFHS.js +94 -0
- package/agentRunCommand-4KH6MIZR.js +110 -0
- package/agentRunControl-K4VKNEHF.js +57 -0
- package/agentRuntimeLocal-SKHJUWSS.js +104 -0
- package/agentSlice-3WXXN4VK.js +42 -0
- package/authCommand-PXFX6JDT.js +581 -0
- package/authCommands-356AYWEK.js +35 -0
- package/chunk-2EISRLRC.js +238 -0
- package/chunk-2FTTDCD4.js +675 -0
- package/chunk-2K2ECKSG.js +222 -0
- package/chunk-2PUGVR6E.js +19 -0
- package/chunk-3ASDTTEI.js +1774 -0
- package/chunk-3EUW3WEO.js +8 -0
- package/chunk-3LY4F7SV.js +9293 -0
- package/chunk-3TZDXYSF.js +71 -0
- package/chunk-3WYQEUBI.js +34 -0
- package/chunk-4CQLVGRV.js +50 -0
- package/chunk-4IJYA27C.js +342 -0
- package/chunk-4K2KKCSD.js +577 -0
- package/chunk-4SN6J65J.js +38 -0
- package/chunk-4VNS5WPM.js +42 -0
- package/chunk-4ZDM73SD.js +34 -0
- package/chunk-5CS33IBL.js +301 -0
- package/chunk-5KLGBAAR.js +386 -0
- package/chunk-5MIDPSSK.js +206 -0
- package/chunk-5MMAK75Q.js +15 -0
- package/chunk-5PJ3VWCS.js +360 -0
- package/chunk-63SLEOLK.js +175 -0
- package/chunk-63W5N6P3.js +150 -0
- package/chunk-6GANEXVO.js +231 -0
- package/chunk-6HYVJV7B.js +102 -0
- package/chunk-6WD3OOJS.js +20 -0
- package/chunk-7OOXPE3N.js +628 -0
- package/chunk-7QRKCBOP.js +1078 -0
- package/chunk-ATNTHIZI.js +13 -0
- package/chunk-AUQ747NZ.js +902 -0
- package/chunk-AVMKZHBC.js +85 -0
- package/chunk-AZPCASRE.js +36 -0
- package/chunk-BBYVOSU2.js +792 -0
- package/chunk-C3RUNRHT.js +51 -0
- package/chunk-CF2WZF4N.js +134 -0
- package/chunk-CF7PE763.js +10 -0
- package/chunk-CKOJQDKR.js +198 -0
- package/chunk-COMXDWNM.js +807 -0
- package/chunk-CPB2YM4D.js +171 -0
- package/chunk-CWMSB67P.js +34 -0
- package/chunk-DCOA4QSN.js +105 -0
- package/chunk-DFFIZ25G.js +30 -0
- package/chunk-DWLEOOGR.js +8 -0
- package/chunk-DZ3XJVET.js +231 -0
- package/chunk-EHLHSX7R.js +1433 -0
- package/chunk-ELRRLDWI.js +478 -0
- package/chunk-EXTIQUCI.js +482 -0
- package/chunk-EYEEHCU4.js +3066 -0
- package/chunk-G3SUCT4W.js +8 -0
- package/chunk-G43KEVSC.js +1447 -0
- package/chunk-GAKEBQD6.js +30 -0
- package/chunk-GBRG75BQ.js +86 -0
- package/chunk-GG4AJPSR.js +191 -0
- package/chunk-H33743XH.js +25 -0
- package/chunk-HNMXYYJR.js +12 -0
- package/chunk-I42VC5KR.js +15 -0
- package/chunk-IDZTNRP2.js +85 -0
- package/chunk-ISNCLGUZ.js +146 -0
- package/chunk-IWX4UW2E.js +548 -0
- package/chunk-JBTJAPUF.js +35 -0
- package/chunk-JEXVIMYZ.js +55 -0
- package/chunk-JRKKFRAV.js +537 -0
- package/chunk-JZPBVBIY.js +94 -0
- package/chunk-KKY4B2Q2.js +21 -0
- package/chunk-KOCA5FCS.js +4750 -0
- package/chunk-KQHGZWSV.js +63 -0
- package/chunk-KTVVPRJS.js +138 -0
- package/chunk-KUG52IAP.js +8 -0
- package/chunk-KX6YBIHG.js +8 -0
- package/chunk-LARL2V6G.js +9017 -0
- package/chunk-LCBAMY2M.js +60 -0
- package/chunk-LM6IYQ3F.js +16 -0
- package/chunk-M76ECQRD.js +13658 -0
- package/chunk-MGOJ5R6J.js +113 -0
- package/chunk-MKMWT7SA.js +27196 -0
- package/chunk-MRC4Q34M.js +188 -0
- package/chunk-OLZBQWZU.js +6 -0
- package/chunk-OPZYGHUC.js +89 -0
- package/chunk-OWOHNGCN.js +50 -0
- package/chunk-PAKN26FP.js +239 -0
- package/chunk-PCWC3JTN.js +91 -0
- package/chunk-PG5PNA7Y.js +939 -0
- package/chunk-Q2YZULBH.js +104 -0
- package/chunk-QSJ3HFEF.js +8 -0
- package/chunk-QYXLLLGL.js +4519 -0
- package/chunk-ROWQEJRP.js +139 -0
- package/chunk-S7Z2HMCN.js +25 -0
- package/chunk-SBR32ZZS.js +1901 -0
- package/chunk-SH2CFQOH.js +3391 -0
- package/chunk-SL35K7AH.js +226 -0
- package/chunk-TILFE6LV.js +381 -0
- package/chunk-TSS3XJY4.js +2052 -0
- package/chunk-U4TRT5V4.js +246 -0
- package/chunk-U6VC4MU4.js +8 -0
- package/chunk-UAD2WT54.js +64 -0
- package/chunk-UUJDGGAK.js +421 -0
- package/chunk-VF4K2QE6.js +21 -0
- package/chunk-VHBWHNVT.js +59 -0
- package/chunk-VIDPVFP3.js +20 -0
- package/chunk-VP4WJWKW.js +8882 -0
- package/chunk-W4NVOSFF.js +37 -0
- package/chunk-WKM6FH35.js +190 -0
- package/chunk-WWC7I6TA.js +8 -0
- package/chunk-X7W4TNB4.js +1550 -0
- package/chunk-XE635NI4.js +1948 -0
- package/chunk-XKIMRZO2.js +221 -0
- package/chunk-XS466O7S.js +933 -0
- package/chunk-Y5GCAMGP.js +9 -0
- package/chunk-YBWOP46I.js +3272 -0
- package/chunk-YPRZSPF3.js +148 -0
- package/chunk-YYUCRDOK.js +69 -0
- package/chunk-Z4NR32XR.js +50 -0
- package/chunk-ZIG5LJ7X.js +24765 -0
- package/chunk-ZNFJWEN4.js +56 -0
- package/chunk-ZQ2UM4KG.js +2878 -0
- package/cliExecutor-DNE7TCC4.js +36 -0
- package/clipboardy-BVE3LVEH.js +12001 -0
- package/createAgentAutomationAction-63OIP6X5.js +866 -0
- package/createDialogAction-ZLYZDYBB.js +54 -0
- package/createPageAction-AL5FSDCK.js +171 -0
- package/db-HCJ5PRB5.js +271 -0
- package/dbSlice-PR44QPXY.js +60 -0
- package/deleteFile-4SKGPHOZ.js +41 -0
- package/dialogCommands-F6YI5742.js +63 -0
- package/dialogSlice-JSBNZRLR.js +148 -0
- package/docCreateCommands-4CTO7ERT.js +219 -0
- package/docDeleteCommands-VBWERDRG.js +180 -0
- package/docReadCommands-KNP4MFYB.js +133 -0
- package/docStore-ADP5VYY4.js +98 -0
- package/docUpdateCommands-4BCBJQHA.js +317 -0
- package/fetchMessages-U6ZHN56A.js +17 -0
- package/getPricing-3E6UNPKL.js +30 -0
- package/handleSendMessageAction-IJDQ6ARA.js +185 -0
- package/index.js +188 -112943
- package/lib-FYYBQIXS.js +19839 -0
- package/localDialogRead-Z5UTAJPU.js +26 -0
- package/localFirstLog-DHNOY2NA.js +19 -0
- package/localRuntimeAuthority-TEGCOWX4.js +471 -0
- package/localRuntimeDb-LGDF6FQP.js +12 -0
- package/machineCommands-EA3M4XTN.js +779 -0
- package/machineInfo-M6KB6HZN.js +10 -0
- package/machineWsRunDispatch-NAPKE5ZA.js +110 -0
- package/memoryCommands-O4MIPIWQ.js +476 -0
- package/models-4OPOOLFS.js +9 -0
- package/offlineMarxistsAgentCommand-BCPJITJL.js +242 -0
- package/package.json +3 -25
- package/read-RIJCIVKX.js +17 -0
- package/readDocTool-GZD2N3LO.js +16 -0
- package/readlineWorkspace-KMWT4T4S.js +5509 -0
- package/removeDialogAgentAction-GJQJNDW6.js +73 -0
- package/runAgentClientLoop-U5Q6NDTJ.js +291 -0
- package/runtimeDoctorCommands-LRHLPDRC.js +289 -0
- package/setDialogExtraReferencesAction-M7OQG54N.js +60 -0
- package/setPrimaryDialogAgentAction-46UNFJDL.js +80 -0
- package/settingSlice-FVUUH4JA.js +199 -0
- package/skillSummaryMarker-42HKSXYY.js +9 -0
- package/slateToRenderMarkdown-Y5IYN73U.js +7 -0
- package/slateUtils-2M7MUTWX.js +19 -0
- package/spaceCommands-E2CFRPZJ.js +454 -0
- package/spaceSlice-L3R6IMXE.js +147 -0
- package/streamAgentChatTurn-UBDAOQWE.js +4528 -0
- package/tableCommands-GOFP7QKA.js +1286 -0
- package/toolApiClient-QI3YBNWB.js +26 -0
- package/tools-TMJXZTCA.js +85 -0
- package/tuiSummaryLlmCaller-RV3THLZF.js +78 -0
- package/understanding-GQKNDDWM.js +271 -0
- package/updateCommands-VOSPKXFF.js +31 -0
- package/updateDialogTitleAction-ZTWRDXI2.js +188 -0
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import {
|
|
2
|
+
updateContentTitle
|
|
3
|
+
} from "./chunk-ZIG5LJ7X.js";
|
|
4
|
+
import {
|
|
5
|
+
require_date_fns
|
|
6
|
+
} from "./chunk-M76ECQRD.js";
|
|
7
|
+
import {
|
|
8
|
+
require_react
|
|
9
|
+
} from "./chunk-3ASDTTEI.js";
|
|
10
|
+
import {
|
|
11
|
+
toErrorMessage
|
|
12
|
+
} from "./chunk-HNMXYYJR.js";
|
|
13
|
+
import {
|
|
14
|
+
patch,
|
|
15
|
+
readAndWait
|
|
16
|
+
} from "./chunk-COMXDWNM.js";
|
|
17
|
+
import {
|
|
18
|
+
asOptionalTrimmedString
|
|
19
|
+
} from "./chunk-G3SUCT4W.js";
|
|
20
|
+
import {
|
|
21
|
+
__toESM
|
|
22
|
+
} from "./chunk-4VNS5WPM.js";
|
|
23
|
+
|
|
24
|
+
// packages/render/page/docStore.ts
|
|
25
|
+
var import_react = __toESM(require_react(), 1);
|
|
26
|
+
var import_date_fns = __toESM(require_date_fns(), 1);
|
|
27
|
+
var createInitialState = () => ({
|
|
28
|
+
content: null,
|
|
29
|
+
slateData: null,
|
|
30
|
+
title: null,
|
|
31
|
+
dbSpaceId: null,
|
|
32
|
+
tags: null,
|
|
33
|
+
icon: null,
|
|
34
|
+
isReadOnly: true,
|
|
35
|
+
isLoading: false,
|
|
36
|
+
isInitialized: false,
|
|
37
|
+
error: null,
|
|
38
|
+
pageKey: null,
|
|
39
|
+
isSaving: false,
|
|
40
|
+
saveError: null,
|
|
41
|
+
lastSavedAt: null,
|
|
42
|
+
createdAt: null,
|
|
43
|
+
lastSavedSlateData: null,
|
|
44
|
+
lastSavedTitle: null,
|
|
45
|
+
lastSavedIcon: null,
|
|
46
|
+
justSaved: false,
|
|
47
|
+
tools: null,
|
|
48
|
+
meta: null,
|
|
49
|
+
id: null,
|
|
50
|
+
type: null,
|
|
51
|
+
creator: null,
|
|
52
|
+
focusContext: null,
|
|
53
|
+
externalUpdateSeq: 0
|
|
54
|
+
});
|
|
55
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
56
|
+
var version = 0;
|
|
57
|
+
var state = createInitialState();
|
|
58
|
+
var notify = () => {
|
|
59
|
+
for (const listener of listeners) {
|
|
60
|
+
try {
|
|
61
|
+
listener();
|
|
62
|
+
} catch {
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
var bump = () => {
|
|
67
|
+
version += 1;
|
|
68
|
+
notify();
|
|
69
|
+
};
|
|
70
|
+
var setState = (updater) => {
|
|
71
|
+
state = typeof updater === "function" ? updater(state) : updater;
|
|
72
|
+
bump();
|
|
73
|
+
};
|
|
74
|
+
var deepEqualEditorContent = (a, b) => {
|
|
75
|
+
if (a === b) return true;
|
|
76
|
+
if (a == null || b == null) return false;
|
|
77
|
+
if (typeof a !== "object" || typeof b !== "object") return false;
|
|
78
|
+
const isArrayA = Array.isArray(a);
|
|
79
|
+
const isArrayB = Array.isArray(b);
|
|
80
|
+
if (isArrayA || isArrayB) {
|
|
81
|
+
if (!isArrayA || !isArrayB || a.length !== b.length) return false;
|
|
82
|
+
return a.every(
|
|
83
|
+
(item, index) => deepEqualEditorContent(item, b[index])
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
const keysA = Object.keys(a);
|
|
87
|
+
const keysB = Object.keys(b);
|
|
88
|
+
if (keysA.length !== keysB.length) return false;
|
|
89
|
+
return keysA.every(
|
|
90
|
+
(key) => Object.prototype.hasOwnProperty.call(b, key) && deepEqualEditorContent(a[key], b[key])
|
|
91
|
+
);
|
|
92
|
+
};
|
|
93
|
+
var hasSlateContentChanged = (newContent, oldContent) => {
|
|
94
|
+
if (newContent === oldContent) return false;
|
|
95
|
+
if (!newContent || !oldContent) return true;
|
|
96
|
+
if (newContent.length !== oldContent.length) return true;
|
|
97
|
+
return !deepEqualEditorContent(newContent, oldContent);
|
|
98
|
+
};
|
|
99
|
+
function getDocState() {
|
|
100
|
+
return state;
|
|
101
|
+
}
|
|
102
|
+
function getDocField(selector) {
|
|
103
|
+
return selector(state);
|
|
104
|
+
}
|
|
105
|
+
function getDocPageKey() {
|
|
106
|
+
return state.pageKey;
|
|
107
|
+
}
|
|
108
|
+
function getDocIsInitialized() {
|
|
109
|
+
return state.isInitialized;
|
|
110
|
+
}
|
|
111
|
+
function getDocIsReadOnly() {
|
|
112
|
+
return state.isReadOnly;
|
|
113
|
+
}
|
|
114
|
+
function getDocHasPendingChanges() {
|
|
115
|
+
if (!state.isInitialized || state.isReadOnly) return false;
|
|
116
|
+
return hasSlateContentChanged(state.slateData, state.lastSavedSlateData) || (state.title || "") !== (state.lastSavedTitle || "") || JSON.stringify(state.icon ?? null) !== JSON.stringify(state.lastSavedIcon ?? null);
|
|
117
|
+
}
|
|
118
|
+
function updateSlateDoc(value) {
|
|
119
|
+
if (!state.isInitialized || state.isReadOnly) return;
|
|
120
|
+
if (state.slateData === value) return;
|
|
121
|
+
setState((prev) => ({ ...prev, slateData: value, justSaved: false }));
|
|
122
|
+
}
|
|
123
|
+
function updateTitleDoc(title) {
|
|
124
|
+
if (!state.isInitialized || state.isReadOnly) return;
|
|
125
|
+
setState((prev) => ({ ...prev, title, justSaved: false }));
|
|
126
|
+
}
|
|
127
|
+
function updateIconDoc(icon) {
|
|
128
|
+
if (!state.isInitialized || state.isReadOnly) return;
|
|
129
|
+
setState((prev) => ({ ...prev, icon, justSaved: false }));
|
|
130
|
+
}
|
|
131
|
+
function resetJustSavedStatus() {
|
|
132
|
+
if (state.justSaved === false) return;
|
|
133
|
+
setState((prev) => ({ ...prev, justSaved: false }));
|
|
134
|
+
}
|
|
135
|
+
function setDocFocusContext(focusContext) {
|
|
136
|
+
setState((prev) => ({ ...prev, focusContext }));
|
|
137
|
+
}
|
|
138
|
+
function toggleReadOnlyDoc() {
|
|
139
|
+
setState((prev) => ({ ...prev, isReadOnly: !prev.isReadOnly }));
|
|
140
|
+
}
|
|
141
|
+
function setReadOnlyDoc(isReadOnly) {
|
|
142
|
+
setState((prev) => ({ ...prev, isReadOnly }));
|
|
143
|
+
}
|
|
144
|
+
function updateDocTags(tags) {
|
|
145
|
+
if (!state.isInitialized) return;
|
|
146
|
+
setState((prev) => ({ ...prev, tags }));
|
|
147
|
+
}
|
|
148
|
+
function resetDocState() {
|
|
149
|
+
setState(createInitialState());
|
|
150
|
+
}
|
|
151
|
+
function previewDocState(payload) {
|
|
152
|
+
const next = createInitialState();
|
|
153
|
+
next.isInitialized = true;
|
|
154
|
+
next.isLoading = false;
|
|
155
|
+
next.isReadOnly = true;
|
|
156
|
+
next.slateData = payload.slateData;
|
|
157
|
+
next.title = payload.title;
|
|
158
|
+
next.lastSavedTitle = payload.title;
|
|
159
|
+
next.pageKey = payload.dbKey;
|
|
160
|
+
next.id = payload.id;
|
|
161
|
+
next.type = payload.type || "page" /* DOC */;
|
|
162
|
+
next.lastSavedSlateData = payload.slateData;
|
|
163
|
+
next.tags = payload.tags || null;
|
|
164
|
+
next.icon = payload.icon || null;
|
|
165
|
+
next.lastSavedIcon = payload.icon || null;
|
|
166
|
+
next.dbSpaceId = payload.spaceId;
|
|
167
|
+
next.content = payload.content || null;
|
|
168
|
+
next.meta = payload.meta || null;
|
|
169
|
+
setState(next);
|
|
170
|
+
}
|
|
171
|
+
function applyExternalDocUpdate(payload) {
|
|
172
|
+
if (!state.isInitialized) return;
|
|
173
|
+
const { slateData, content, title, tools, meta, savedAt } = payload;
|
|
174
|
+
setState((prev) => {
|
|
175
|
+
const next = {
|
|
176
|
+
...prev,
|
|
177
|
+
slateData,
|
|
178
|
+
lastSavedSlateData: slateData,
|
|
179
|
+
lastSavedAt: savedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
180
|
+
justSaved: true,
|
|
181
|
+
saveError: null,
|
|
182
|
+
externalUpdateSeq: prev.externalUpdateSeq + 1
|
|
183
|
+
};
|
|
184
|
+
if (content !== void 0) next.content = content;
|
|
185
|
+
if (title != null) {
|
|
186
|
+
next.title = title;
|
|
187
|
+
next.lastSavedTitle = title;
|
|
188
|
+
}
|
|
189
|
+
if (tools !== void 0) next.tools = tools;
|
|
190
|
+
if (meta !== void 0) next.meta = meta;
|
|
191
|
+
return next;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
async function initDocState(args, { dispatch }) {
|
|
195
|
+
const { pageKey, isReadOnly } = args;
|
|
196
|
+
setState((prev) => ({
|
|
197
|
+
...createInitialState(),
|
|
198
|
+
isLoading: true,
|
|
199
|
+
pageKey,
|
|
200
|
+
isReadOnly
|
|
201
|
+
}));
|
|
202
|
+
try {
|
|
203
|
+
const readAction = await dispatch(readAndWait(pageKey));
|
|
204
|
+
if (readAndWait.fulfilled.match(readAction) && readAction.payload) {
|
|
205
|
+
const data = readAction.payload;
|
|
206
|
+
if (data.type !== "page" /* DOC */) {
|
|
207
|
+
const msg = `\u52A0\u8F7D\u7684\u5185\u5BB9 ${pageKey} \u4E0D\u662F\u6587\u6863\u7C7B\u578B (${data.type})`;
|
|
208
|
+
setState((prev) => ({
|
|
209
|
+
...prev,
|
|
210
|
+
isLoading: false,
|
|
211
|
+
isInitialized: true,
|
|
212
|
+
error: msg
|
|
213
|
+
}));
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const payload = data;
|
|
217
|
+
const lastSavedAt = payload.updatedAt || payload.updated_at || null;
|
|
218
|
+
const createdAt = typeof payload.created === "string" && payload.created || typeof payload.createdAt === "string" && payload.createdAt || lastSavedAt;
|
|
219
|
+
setState((prev) => ({
|
|
220
|
+
...prev,
|
|
221
|
+
isLoading: false,
|
|
222
|
+
isInitialized: true,
|
|
223
|
+
error: null,
|
|
224
|
+
externalUpdateSeq: prev.externalUpdateSeq + 1,
|
|
225
|
+
content: payload.content || null,
|
|
226
|
+
slateData: payload.slateData || null,
|
|
227
|
+
lastSavedSlateData: payload.slateData || null,
|
|
228
|
+
title: payload.title || null,
|
|
229
|
+
lastSavedTitle: payload.title || null,
|
|
230
|
+
dbSpaceId: payload.spaceId || null,
|
|
231
|
+
tags: payload.tags || null,
|
|
232
|
+
icon: payload.icon || null,
|
|
233
|
+
lastSavedIcon: payload.icon || null,
|
|
234
|
+
isReadOnly: payload.isReadOnly,
|
|
235
|
+
pageKey: payload.dbKey,
|
|
236
|
+
id: payload.id,
|
|
237
|
+
type: payload.type,
|
|
238
|
+
lastSavedAt,
|
|
239
|
+
createdAt,
|
|
240
|
+
tools: payload.tools || null,
|
|
241
|
+
meta: payload.meta || null
|
|
242
|
+
}));
|
|
243
|
+
} else {
|
|
244
|
+
const msg = readAction.payload?.message || `\u65E0\u6CD5\u52A0\u8F7D\u6587\u6863 ${pageKey}`;
|
|
245
|
+
setState((prev) => ({
|
|
246
|
+
...prev,
|
|
247
|
+
isLoading: false,
|
|
248
|
+
isInitialized: true,
|
|
249
|
+
error: msg
|
|
250
|
+
}));
|
|
251
|
+
}
|
|
252
|
+
} catch (e) {
|
|
253
|
+
setState((prev) => ({
|
|
254
|
+
...prev,
|
|
255
|
+
isLoading: false,
|
|
256
|
+
isInitialized: true,
|
|
257
|
+
error: e?.message || `\u521D\u59CB\u5316\u6587\u6863 ${pageKey} \u65F6\u51FA\u9519`
|
|
258
|
+
}));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
async function saveDocState(arg, { dispatch, getState }) {
|
|
262
|
+
const requestedPageKey = arg.pageKey;
|
|
263
|
+
const current = state;
|
|
264
|
+
const { pageKey, slateData, dbSpaceId, meta, icon } = current;
|
|
265
|
+
const triggerSource = arg.triggerSource ?? "unknown";
|
|
266
|
+
const hasPending = getDocHasPendingChanges();
|
|
267
|
+
if (typeof console !== "undefined") {
|
|
268
|
+
console.info("[saveDocState] triggered", {
|
|
269
|
+
triggerSource,
|
|
270
|
+
pageKey,
|
|
271
|
+
hasPendingChanges: hasPending,
|
|
272
|
+
lastSavedAt: current.lastSavedAt,
|
|
273
|
+
externalUpdateSeq: current.externalUpdateSeq
|
|
274
|
+
// 若 hasPending=false,说明 slateData===lastSavedSlateData,
|
|
275
|
+
// 此刻 save 仍被无条件触发 → 会用旧内容覆盖数据库(若数据库已有更新)
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
if (!pageKey || pageKey !== requestedPageKey) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (!slateData) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (!hasPending) {
|
|
285
|
+
if (typeof console !== "undefined") {
|
|
286
|
+
console.info("[saveDocState] skipped \u2014 no pending changes (protects external writes)", {
|
|
287
|
+
triggerSource,
|
|
288
|
+
pageKey,
|
|
289
|
+
externalUpdateSeq: current.externalUpdateSeq
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
setState((prev) => ({
|
|
295
|
+
...prev,
|
|
296
|
+
isSaving: true,
|
|
297
|
+
saveError: null,
|
|
298
|
+
justSaved: false
|
|
299
|
+
}));
|
|
300
|
+
try {
|
|
301
|
+
const [
|
|
302
|
+
{ extractTitleFromSlate, extractMentionsFromSlate },
|
|
303
|
+
{ slateToRenderMarkdown },
|
|
304
|
+
{ buildSkillSummaryMarker }
|
|
305
|
+
] = await Promise.all([
|
|
306
|
+
import("./slateUtils-2M7MUTWX.js"),
|
|
307
|
+
import("./slateToRenderMarkdown-Y5IYN73U.js"),
|
|
308
|
+
import("./skillSummaryMarker-42HKSXYY.js")
|
|
309
|
+
]);
|
|
310
|
+
const title = asOptionalTrimmedString(current.title) || extractTitleFromSlate(slateData) || "\u672A\u547D\u540D\u9875\u9762";
|
|
311
|
+
const tools = extractMentionsFromSlate(slateData);
|
|
312
|
+
const skillSummary = buildSkillSummaryMarker(meta);
|
|
313
|
+
const content = slateToRenderMarkdown(slateData);
|
|
314
|
+
const now = /* @__PURE__ */ new Date();
|
|
315
|
+
const updatedAt = (0, import_date_fns.formatISO)(now);
|
|
316
|
+
await dispatch(
|
|
317
|
+
patch({
|
|
318
|
+
dbKey: pageKey,
|
|
319
|
+
changes: {
|
|
320
|
+
updatedAt,
|
|
321
|
+
slateData,
|
|
322
|
+
title,
|
|
323
|
+
tools,
|
|
324
|
+
content,
|
|
325
|
+
icon: icon ?? null,
|
|
326
|
+
...meta ? { meta } : {}
|
|
327
|
+
}
|
|
328
|
+
})
|
|
329
|
+
).unwrap();
|
|
330
|
+
if (dbSpaceId) {
|
|
331
|
+
try {
|
|
332
|
+
await dispatch(
|
|
333
|
+
updateContentTitle({
|
|
334
|
+
spaceId: dbSpaceId,
|
|
335
|
+
contentKey: pageKey,
|
|
336
|
+
title,
|
|
337
|
+
skillSummary
|
|
338
|
+
})
|
|
339
|
+
).unwrap();
|
|
340
|
+
} catch (spaceSyncError) {
|
|
341
|
+
console.warn(
|
|
342
|
+
`[saveDoc] \u7A7A\u95F4\u6807\u9898\u540C\u6B65\u5931\u8D25\uFF08\u9875\u9762\u5DF2\u4FDD\u5B58\uFF09: ${toErrorMessage(spaceSyncError)}`
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (typeof window !== "undefined") {
|
|
347
|
+
window.dispatchEvent(new Event("nolo-user-data-updated"));
|
|
348
|
+
}
|
|
349
|
+
setState((prev) => ({
|
|
350
|
+
...prev,
|
|
351
|
+
isSaving: false,
|
|
352
|
+
lastSavedAt: updatedAt,
|
|
353
|
+
title,
|
|
354
|
+
content,
|
|
355
|
+
lastSavedSlateData: slateData,
|
|
356
|
+
lastSavedTitle: title,
|
|
357
|
+
lastSavedIcon: prev.icon,
|
|
358
|
+
justSaved: true
|
|
359
|
+
}));
|
|
360
|
+
} catch (e) {
|
|
361
|
+
setState((prev) => ({
|
|
362
|
+
...prev,
|
|
363
|
+
isSaving: false,
|
|
364
|
+
saveError: e?.message || "\u4FDD\u5B58\u5931\u8D25",
|
|
365
|
+
justSaved: false
|
|
366
|
+
}));
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
async function createDocState(args, thunkApi) {
|
|
370
|
+
const { createPageAction } = await import("./createPageAction-AL5FSDCK.js");
|
|
371
|
+
return createPageAction(args, thunkApi);
|
|
372
|
+
}
|
|
373
|
+
function subscribe(listener) {
|
|
374
|
+
listeners.add(listener);
|
|
375
|
+
return () => {
|
|
376
|
+
listeners.delete(listener);
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
function getSnapshot() {
|
|
380
|
+
return version;
|
|
381
|
+
}
|
|
382
|
+
function useDocState() {
|
|
383
|
+
(0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
384
|
+
return getDocState();
|
|
385
|
+
}
|
|
386
|
+
function useDocField(selector) {
|
|
387
|
+
(0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
388
|
+
return selector(state);
|
|
389
|
+
}
|
|
390
|
+
function resetDocStoreForTests() {
|
|
391
|
+
state = createInitialState();
|
|
392
|
+
bump();
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
export {
|
|
396
|
+
getDocState,
|
|
397
|
+
getDocField,
|
|
398
|
+
getDocPageKey,
|
|
399
|
+
getDocIsInitialized,
|
|
400
|
+
getDocIsReadOnly,
|
|
401
|
+
getDocHasPendingChanges,
|
|
402
|
+
updateSlateDoc,
|
|
403
|
+
updateTitleDoc,
|
|
404
|
+
updateIconDoc,
|
|
405
|
+
resetJustSavedStatus,
|
|
406
|
+
setDocFocusContext,
|
|
407
|
+
toggleReadOnlyDoc,
|
|
408
|
+
setReadOnlyDoc,
|
|
409
|
+
updateDocTags,
|
|
410
|
+
resetDocState,
|
|
411
|
+
previewDocState,
|
|
412
|
+
applyExternalDocUpdate,
|
|
413
|
+
initDocState,
|
|
414
|
+
saveDocState,
|
|
415
|
+
createDocState,
|
|
416
|
+
subscribe,
|
|
417
|
+
getSnapshot,
|
|
418
|
+
useDocState,
|
|
419
|
+
useDocField,
|
|
420
|
+
resetDocStoreForTests
|
|
421
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// packages/ai/skills/skillSummaryMarker.ts
|
|
2
|
+
var buildSkillSummaryMarker = (meta) => {
|
|
3
|
+
const skillConfig = meta?.skillConfig;
|
|
4
|
+
if (meta?.kind !== "skill" && !skillConfig) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
isSkill: true,
|
|
9
|
+
...skillConfig?.id ? { skillId: skillConfig.id } : {},
|
|
10
|
+
...skillConfig?.name ? { name: skillConfig.name } : {},
|
|
11
|
+
...skillConfig?.description ? { description: skillConfig.description } : {},
|
|
12
|
+
...skillConfig?.toolNames?.length ? { toolNames: skillConfig.toolNames } : {},
|
|
13
|
+
...skillConfig?.triggerMode ? { triggerMode: skillConfig.triggerMode } : {}
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
var isSkillSummaryMarker = (value) => Boolean(value?.isSkill);
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
buildSkillSummaryMarker,
|
|
20
|
+
isSkillSummaryMarker
|
|
21
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {
|
|
2
|
+
asTrimmedLowercaseString
|
|
3
|
+
} from "./chunk-QSJ3HFEF.js";
|
|
4
|
+
|
|
5
|
+
// packages/cli/agentAliases.ts
|
|
6
|
+
var CURRENT_OPERATOR_USER_ID = "0e95801d90";
|
|
7
|
+
var NOLO_DEFAULT_AGENT_ID = "01NOLOAPPBLD000000019KCKT0";
|
|
8
|
+
var NOLO_DEFAULT_AGENT_KEY = `agent-pub-${NOLO_DEFAULT_AGENT_ID}`;
|
|
9
|
+
var NOLO_PROJECT_MANAGER_AGENT_ID = "01NOLOPROJMGR00000000MSVGG";
|
|
10
|
+
var NOLO_PROJECT_MANAGER_AGENT_KEY = `agent-${CURRENT_OPERATOR_USER_ID}-${NOLO_PROJECT_MANAGER_AGENT_ID}`;
|
|
11
|
+
var NOLO_FRONTEND_AGENT_ID = "01FRONTENDAG0000000115N4E1";
|
|
12
|
+
var NOLO_FRONTEND_AGENT_KEY = `agent-${CURRENT_OPERATOR_USER_ID}-${NOLO_FRONTEND_AGENT_ID}`;
|
|
13
|
+
var LOCAL_CODEX_AGENT_ID = "01LOCALCODEXCLI000000NEW";
|
|
14
|
+
var LOCAL_CODEX_AGENT_KEY = `agent-${CURRENT_OPERATOR_USER_ID}-${LOCAL_CODEX_AGENT_ID}`;
|
|
15
|
+
var AGENT_ALIAS_TO_KEY = {
|
|
16
|
+
nolo: NOLO_DEFAULT_AGENT_KEY,
|
|
17
|
+
default: NOLO_DEFAULT_AGENT_KEY,
|
|
18
|
+
"default-nolo": NOLO_DEFAULT_AGENT_KEY,
|
|
19
|
+
// Product implementation & coordination aliases
|
|
20
|
+
"frontend-implementer": NOLO_FRONTEND_AGENT_KEY,
|
|
21
|
+
"frontend-agent": NOLO_FRONTEND_AGENT_KEY,
|
|
22
|
+
frontend: NOLO_FRONTEND_AGENT_KEY,
|
|
23
|
+
"frontend agent": NOLO_FRONTEND_AGENT_KEY,
|
|
24
|
+
"\u524D\u7AEFagent": NOLO_FRONTEND_AGENT_KEY,
|
|
25
|
+
"\u524D\u7AEF agent": NOLO_FRONTEND_AGENT_KEY,
|
|
26
|
+
"project-manager": NOLO_PROJECT_MANAGER_AGENT_KEY,
|
|
27
|
+
pm: NOLO_PROJECT_MANAGER_AGENT_KEY,
|
|
28
|
+
// Explicit local CLI agents. These are ordinary private agent records that
|
|
29
|
+
// run through the current computer local runtime when unbound.
|
|
30
|
+
"local-codex": LOCAL_CODEX_AGENT_KEY,
|
|
31
|
+
"codex-local": LOCAL_CODEX_AGENT_KEY,
|
|
32
|
+
"local codex": LOCAL_CODEX_AGENT_KEY,
|
|
33
|
+
"minimax-m3": "agent-0e95801d90-minimax-m3",
|
|
34
|
+
minimax: "agent-0e95801d90-minimax-m3"
|
|
35
|
+
};
|
|
36
|
+
function parseAgentKeyFromInput(raw) {
|
|
37
|
+
const trimmed = raw.trim();
|
|
38
|
+
if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) {
|
|
39
|
+
const url = new URL(trimmed);
|
|
40
|
+
return url.pathname.replace(/^\/+/, "");
|
|
41
|
+
}
|
|
42
|
+
return trimmed;
|
|
43
|
+
}
|
|
44
|
+
function resolveCliAgentKeyInput(raw) {
|
|
45
|
+
return AGENT_ALIAS_TO_KEY[asTrimmedLowercaseString(raw)] ?? parseAgentKeyFromInput(raw);
|
|
46
|
+
}
|
|
47
|
+
function isLocalCliAgentKey(agentKey) {
|
|
48
|
+
return agentKey === LOCAL_CODEX_AGENT_KEY;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
NOLO_DEFAULT_AGENT_ID,
|
|
53
|
+
NOLO_DEFAULT_AGENT_KEY,
|
|
54
|
+
NOLO_PROJECT_MANAGER_AGENT_KEY,
|
|
55
|
+
LOCAL_CODEX_AGENT_ID,
|
|
56
|
+
LOCAL_CODEX_AGENT_KEY,
|
|
57
|
+
resolveCliAgentKeyInput,
|
|
58
|
+
isLocalCliAgentKey
|
|
59
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// packages/ai/agent/utils/publicImageAgentMode.ts
|
|
2
|
+
var getPublicImageAgentMode = (agent) => {
|
|
3
|
+
if (!agent) return null;
|
|
4
|
+
if (agent.imageWorkflow) return agent.imageWorkflow;
|
|
5
|
+
return null;
|
|
6
|
+
};
|
|
7
|
+
var getPublicImageAgentDefaultProfile = (mode) => {
|
|
8
|
+
if (mode === "generate") {
|
|
9
|
+
return { quality: "medium", size: "1024x1024", outputFormat: "png" };
|
|
10
|
+
}
|
|
11
|
+
if (mode === "edit") {
|
|
12
|
+
return { quality: "medium", size: "auto", outputFormat: "png" };
|
|
13
|
+
}
|
|
14
|
+
return { quality: "low", size: "auto", outputFormat: "png" };
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
getPublicImageAgentMode,
|
|
19
|
+
getPublicImageAgentDefaultProfile
|
|
20
|
+
};
|