nolo-cli 0.7.0 → 0.8.0-alpha.11
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-GPU2276G.js +198 -0
- package/action-PAXRPJJF.js +27 -0
- package/addContentAction-CZVWF3QZ.js +25 -0
- package/addDialogAgentAction-CCIDTPHC.js +67 -0
- package/agentDeleteCommand-4ZZFM6AT.js +323 -0
- package/agentEmailCommands-C4FIVQYV.js +621 -0
- package/agentListCommands-VQAKVNEX.js +219 -0
- package/agentMachineCommands-ONFDXZUQ.js +421 -0
- package/agentPullCommand-O2MTUAFR.js +122 -0
- package/agentRecordCommands-QANUGHLK.js +89 -0
- package/agentRunCommand-A3OSRB5Q.js +102 -0
- package/agentRunControl-K4VKNEHF.js +57 -0
- package/agentRuntimeLocal-62ZB2ODP.js +99 -0
- package/agentSlice-GCGLVR2N.js +41 -0
- package/authCommand-WXMD3IPR.js +574 -0
- package/authCommands-X74AFDTC.js +26 -0
- package/chunk-2EISRLRC.js +238 -0
- package/chunk-2FTTDCD4.js +675 -0
- package/chunk-2MALU52L.js +51 -0
- package/chunk-2UZXR7WO.js +3631 -0
- package/chunk-3ASDTTEI.js +1774 -0
- package/chunk-3EUW3WEO.js +8 -0
- package/chunk-3LY4F7SV.js +9293 -0
- package/chunk-4CQLVGRV.js +50 -0
- package/chunk-4IJYA27C.js +342 -0
- package/chunk-4SN6J65J.js +38 -0
- package/chunk-4VNS5WPM.js +42 -0
- package/chunk-53DNV5AT.js +421 -0
- package/chunk-572EKYLF.js +792 -0
- package/chunk-5MIDPSSK.js +206 -0
- package/chunk-5MMAK75Q.js +15 -0
- package/chunk-63W5N6P3.js +150 -0
- package/chunk-6B7G54GE.js +1078 -0
- package/chunk-6HYVJV7B.js +102 -0
- package/chunk-6WD3OOJS.js +20 -0
- package/chunk-7OC5VCLW.js +929 -0
- package/chunk-7YLKNMOM.js +562 -0
- package/chunk-ATNTHIZI.js +13 -0
- package/chunk-AUGHVUFE.js +69 -0
- package/chunk-AVMKZHBC.js +85 -0
- package/chunk-AZPCASRE.js +36 -0
- package/chunk-BR2WP3DF.js +548 -0
- package/chunk-BSTNFPHD.js +231 -0
- package/chunk-CF2WZF4N.js +134 -0
- package/chunk-CF7PE763.js +10 -0
- package/chunk-CJH2VTEU.js +360 -0
- package/chunk-CKOJQDKR.js +198 -0
- package/chunk-CM54RSSA.js +206 -0
- package/chunk-CQAHS7YO.js +4300 -0
- package/chunk-CWMSB67P.js +34 -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-EYEEHCU4.js +3066 -0
- package/chunk-F6QQI5YI.js +19 -0
- package/chunk-G3SUCT4W.js +8 -0
- package/chunk-G5H7RNFL.js +807 -0
- package/chunk-GAKEBQD6.js +30 -0
- package/chunk-GBRG75BQ.js +86 -0
- package/chunk-GCMRDRCQ.js +190 -0
- package/chunk-GGUO4FKF.js +27158 -0
- package/chunk-GGXABIPP.js +628 -0
- package/chunk-H2RMRZJE.js +113 -0
- package/chunk-H33743XH.js +25 -0
- package/chunk-HEIIIZBX.js +104 -0
- package/chunk-HNMXYYJR.js +12 -0
- package/chunk-I3D64LRJ.js +1447 -0
- package/chunk-IAXBCTTE.js +175 -0
- package/chunk-IDZTNRP2.js +85 -0
- package/chunk-ISNCLGUZ.js +146 -0
- package/chunk-IYQV26RA.js +138 -0
- package/chunk-J4576WMJ.js +91 -0
- package/chunk-J5KV47ZW.js +222 -0
- package/chunk-JBTJAPUF.js +35 -0
- package/chunk-JZPBVBIY.js +94 -0
- package/chunk-KB7YFGL6.js +34 -0
- package/chunk-KKY4B2Q2.js +21 -0
- package/chunk-KQHGZWSV.js +63 -0
- package/chunk-KUG52IAP.js +8 -0
- package/chunk-KX6YBIHG.js +8 -0
- package/chunk-LAWBMYBC.js +171 -0
- package/chunk-LCBAMY2M.js +60 -0
- package/chunk-LM25IZBJ.js +902 -0
- package/chunk-LM6IYQ3F.js +16 -0
- package/chunk-M76ECQRD.js +13658 -0
- package/chunk-MRC4Q34M.js +188 -0
- package/chunk-NXZGF7F7.js +2878 -0
- package/chunk-OF5H3QWS.js +300 -0
- package/chunk-OLZBQWZU.js +6 -0
- package/chunk-OWOHNGCN.js +50 -0
- package/chunk-PN7AFLOK.js +3401 -0
- package/chunk-QR5IPGT3.js +24674 -0
- package/chunk-QSJ3HFEF.js +8 -0
- package/chunk-QYXLLLGL.js +4519 -0
- package/chunk-R2HXWML7.js +1949 -0
- package/chunk-ROWQEJRP.js +139 -0
- package/chunk-S7Z2HMCN.js +25 -0
- package/chunk-SYOF5TAS.js +962 -0
- package/chunk-TDIQFT2F.js +301 -0
- package/chunk-TILFE6LV.js +381 -0
- package/chunk-TZNCFAUP.js +2157 -0
- package/chunk-U4TRT5V4.js +246 -0
- package/chunk-U6VC4MU4.js +8 -0
- package/chunk-UAD2WT54.js +64 -0
- package/chunk-USZMK5UT.js +105 -0
- package/chunk-VEJLAVTC.js +2052 -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-VQ2AJRGD.js +148 -0
- package/chunk-W4NVOSFF.js +37 -0
- package/chunk-WWC7I6TA.js +8 -0
- package/chunk-X7W4TNB4.js +1550 -0
- package/chunk-XBIUN5CR.js +191 -0
- package/chunk-XDVAYP26.js +537 -0
- package/chunk-XKIMRZO2.js +221 -0
- package/chunk-Y5GCAMGP.js +9 -0
- package/chunk-YOUZDXU7.js +9013 -0
- package/chunk-Z4NR32XR.js +50 -0
- package/chunk-ZNFJWEN4.js +56 -0
- package/cliExecutor-DNE7TCC4.js +36 -0
- package/clipboardy-BVE3LVEH.js +12001 -0
- package/createAgentAutomationAction-537X433B.js +864 -0
- package/createDialogAction-YUD4RKBS.js +52 -0
- package/createPageAction-KJMFHL4C.js +169 -0
- package/db-HCJ5PRB5.js +271 -0
- package/dbSlice-C4UJLRZP.js +59 -0
- package/deleteFile-4SKGPHOZ.js +41 -0
- package/dialogCommands-H74KJKHC.js +59 -0
- package/dialogSlice-ETSD4YWS.js +146 -0
- package/docCreateCommands-ADUSU34K.js +215 -0
- package/docDeleteCommands-ZXV3S5OS.js +176 -0
- package/docReadCommands-YYYI6LT7.js +129 -0
- package/docStore-ZBF5DDKR.js +96 -0
- package/docUpdateCommands-7MGJ3BYA.js +313 -0
- package/fetchMessages-JOCYIFKL.js +16 -0
- package/getPricing-PWPJ6MNV.js +30 -0
- package/handleSendMessageAction-MGKI62Y6.js +183 -0
- package/index.js +184 -112288
- package/lib-FYYBQIXS.js +19839 -0
- package/localDialogRead-D3BELSTF.js +26 -0
- package/localFirstLog-DHNOY2NA.js +19 -0
- package/localRuntimeAuthority-TEGCOWX4.js +471 -0
- package/localRuntimeDb-LGDF6FQP.js +12 -0
- package/machineCommands-RMTMN7VQ.js +774 -0
- package/machineInfo-M6KB6HZN.js +10 -0
- package/machineWsRunDispatch-UIP355FN.js +105 -0
- package/memoryCommands-O4MIPIWQ.js +476 -0
- package/models-XLEOET3E.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-CRNQRZ6D.js +5374 -0
- package/removeDialogAgentAction-CXLST3N6.js +72 -0
- package/runAgentClientLoop-2S334SGA.js +288 -0
- package/runtimeDoctorCommands-LRHLPDRC.js +289 -0
- package/setDialogExtraReferencesAction-LP6VYGU7.js +59 -0
- package/setPrimaryDialogAgentAction-D3GGH23T.js +79 -0
- package/settingSlice-J4I3Z5H7.js +198 -0
- package/skillSummaryMarker-42HKSXYY.js +9 -0
- package/slateToRenderMarkdown-Y5IYN73U.js +7 -0
- package/slateUtils-2M7MUTWX.js +19 -0
- package/spaceCommands-NDEWMFZJ.js +450 -0
- package/spaceSlice-RLB6RTHO.js +145 -0
- package/streamAgentChatTurn-Y2TTYPBD.js +4503 -0
- package/tableCommands-GOFP7QKA.js +1286 -0
- package/toolApiClient-QI3YBNWB.js +26 -0
- package/tools-YZYLY2ZQ.js +83 -0
- package/understanding-HCSFPE7R.js +318 -0
- package/updateCommands-VOSPKXFF.js +31 -0
- package/updateDialogTitleAction-LQV6QLBW.js +185 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createSpaceKey
|
|
3
|
+
} from "./chunk-UAD2WT54.js";
|
|
4
|
+
import {
|
|
5
|
+
patch,
|
|
6
|
+
read
|
|
7
|
+
} from "./chunk-G5H7RNFL.js";
|
|
8
|
+
import {
|
|
9
|
+
DEVICE_LOCAL_OWNER_ID,
|
|
10
|
+
isDeviceLocalSpaceBody,
|
|
11
|
+
selectIdentityUserId
|
|
12
|
+
} from "./chunk-EYEEHCU4.js";
|
|
13
|
+
|
|
14
|
+
// packages/create/space/utils/permissions.ts
|
|
15
|
+
var checkSpaceMembership = (spaceData, userId) => {
|
|
16
|
+
if (!spaceData) {
|
|
17
|
+
console.error("[Permission Check] Space data is missing.");
|
|
18
|
+
throw new Error("\u65E0\u6CD5\u6267\u884C\u6743\u9650\u68C0\u67E5\uFF1A\u7A7A\u95F4\u6570\u636E\u7F3A\u5931\u3002");
|
|
19
|
+
}
|
|
20
|
+
if (isDeviceLocalSpaceBody(spaceData)) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (!userId) {
|
|
24
|
+
console.error("[Permission Check] User ID is missing.");
|
|
25
|
+
throw new Error("\u65E0\u6CD5\u6267\u884C\u6743\u9650\u68C0\u67E5\uFF1A\u7528\u6237 ID \u7F3A\u5931\u3002");
|
|
26
|
+
}
|
|
27
|
+
if (!spaceData.members || !Array.isArray(spaceData.members) || !spaceData.members.includes(userId)) {
|
|
28
|
+
console.warn(
|
|
29
|
+
`[Permission Check] User ${userId} attempt to operate on space ${spaceData.id} without membership.`
|
|
30
|
+
);
|
|
31
|
+
throw new Error("\u5F53\u524D\u7528\u6237\u4E0D\u662F\u7A7A\u95F4\u6210\u5458");
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
var localSpaceAuthorityPatchStamp = (spaceData) => isDeviceLocalSpaceBody(spaceData) ? { userId: DEVICE_LOCAL_OWNER_ID } : {};
|
|
35
|
+
|
|
36
|
+
// packages/create/space/constants.ts
|
|
37
|
+
var UNCATEGORIZED_ID = "__uncategorized_container__";
|
|
38
|
+
|
|
39
|
+
// packages/create/space/content/addContentAction.ts
|
|
40
|
+
var addContentAction = async (input, thunkAPI) => {
|
|
41
|
+
const {
|
|
42
|
+
spaceId,
|
|
43
|
+
title,
|
|
44
|
+
type,
|
|
45
|
+
contentKey,
|
|
46
|
+
fileCategory,
|
|
47
|
+
mimeType,
|
|
48
|
+
fileSize,
|
|
49
|
+
originalName,
|
|
50
|
+
categoryId: rawCategoryId,
|
|
51
|
+
pinned = false,
|
|
52
|
+
order,
|
|
53
|
+
triggerType,
|
|
54
|
+
skillSummary
|
|
55
|
+
} = input;
|
|
56
|
+
const { dispatch, getState } = thunkAPI;
|
|
57
|
+
const userId = selectIdentityUserId(getState());
|
|
58
|
+
if (!contentKey || typeof contentKey !== "string" || contentKey.trim() === "")
|
|
59
|
+
throw new Error("Invalid contentKey provided.");
|
|
60
|
+
if (!title || typeof title !== "string" || title.trim() === "")
|
|
61
|
+
throw new Error("Invalid or empty title provided.");
|
|
62
|
+
if (!type || typeof type !== "string")
|
|
63
|
+
throw new Error("Invalid content type provided.");
|
|
64
|
+
const spaceKey = createSpaceKey.space(spaceId);
|
|
65
|
+
const spaceData = await dispatch(read({
|
|
66
|
+
dbKey: spaceKey
|
|
67
|
+
})).unwrap();
|
|
68
|
+
checkSpaceMembership(spaceData, userId);
|
|
69
|
+
if (spaceData.contents && spaceData.contents[contentKey]) {
|
|
70
|
+
throw new Error(`\u5185\u5BB9\u952E "${contentKey}" \u5DF2\u5B58\u5728\u3002`);
|
|
71
|
+
}
|
|
72
|
+
let categoryIdForStorage;
|
|
73
|
+
if (rawCategoryId && rawCategoryId !== "" && rawCategoryId !== UNCATEGORIZED_ID) {
|
|
74
|
+
if (spaceData.categories?.[rawCategoryId]) {
|
|
75
|
+
categoryIdForStorage = rawCategoryId;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const now = Date.now();
|
|
79
|
+
const newSpaceContent = {
|
|
80
|
+
title: title.trim(),
|
|
81
|
+
type,
|
|
82
|
+
contentKey,
|
|
83
|
+
...fileCategory !== void 0 ? { fileCategory } : {},
|
|
84
|
+
...mimeType !== void 0 ? { mimeType } : {},
|
|
85
|
+
...fileSize !== void 0 ? { fileSize } : {},
|
|
86
|
+
...originalName !== void 0 ? { originalName } : {},
|
|
87
|
+
...categoryIdForStorage !== void 0 && {
|
|
88
|
+
categoryId: categoryIdForStorage
|
|
89
|
+
},
|
|
90
|
+
pinned,
|
|
91
|
+
createdAt: now,
|
|
92
|
+
updatedAt: now,
|
|
93
|
+
...order !== void 0 && typeof order === "number" && { order },
|
|
94
|
+
...triggerType !== void 0 && { triggerType },
|
|
95
|
+
...skillSummary !== void 0 ? { skillSummary } : {}
|
|
96
|
+
};
|
|
97
|
+
const changes = {
|
|
98
|
+
contents: { [contentKey]: newSpaceContent },
|
|
99
|
+
updatedAt: now,
|
|
100
|
+
...localSpaceAuthorityPatchStamp(spaceData)
|
|
101
|
+
};
|
|
102
|
+
const updatedSpaceData = await dispatch(
|
|
103
|
+
patch({ dbKey: spaceKey, changes })
|
|
104
|
+
).unwrap();
|
|
105
|
+
return { spaceId, updatedSpaceData };
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export {
|
|
109
|
+
checkSpaceMembership,
|
|
110
|
+
localSpaceAuthorityPatchStamp,
|
|
111
|
+
UNCATEGORIZED_ID,
|
|
112
|
+
addContentAction
|
|
113
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveNoloHome
|
|
3
|
+
} from "./chunk-LM6IYQ3F.js";
|
|
4
|
+
|
|
5
|
+
// packages/cli/localRuntimeDb.ts
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
function resolveCliLocalRuntimeDbPath(options = {}) {
|
|
8
|
+
return path.join(resolveNoloHome(options), "data", "leveldb");
|
|
9
|
+
}
|
|
10
|
+
function buildCliLocalRuntimeDbEnv(env = process.env) {
|
|
11
|
+
return {
|
|
12
|
+
...env,
|
|
13
|
+
NOLO_SERVER_DB_PATH: env.NOLO_SERVER_DB_PATH?.trim() || resolveCliLocalRuntimeDbPath({ env })
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
async function getDefaultCliLocalRuntimeDb(options = {}) {
|
|
17
|
+
const { getDefaultCliLocalRuntimeDb: getAuthorityBackedDb } = await import("./localRuntimeAuthority-TEGCOWX4.js");
|
|
18
|
+
return getAuthorityBackedDb(options);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
resolveCliLocalRuntimeDbPath,
|
|
23
|
+
buildCliLocalRuntimeDbEnv,
|
|
24
|
+
getDefaultCliLocalRuntimeDb
|
|
25
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createMemoryKey,
|
|
3
|
+
memoryOwnerRange,
|
|
4
|
+
memorySubjectKindRange
|
|
5
|
+
} from "./chunk-PN7AFLOK.js";
|
|
6
|
+
|
|
7
|
+
// packages/ai/memory/queryShared.ts
|
|
8
|
+
var chooseMemoryOwners = (input) => {
|
|
9
|
+
const owners = [];
|
|
10
|
+
if (input.userId) {
|
|
11
|
+
owners.push({ ownerType: "user", ownerId: input.userId });
|
|
12
|
+
}
|
|
13
|
+
if (input.spaceId) {
|
|
14
|
+
owners.push({ ownerType: "space", ownerId: input.spaceId });
|
|
15
|
+
}
|
|
16
|
+
return owners;
|
|
17
|
+
};
|
|
18
|
+
var loadOwnerItemsFromDb = async (db, owner, limit) => {
|
|
19
|
+
const range = memoryOwnerRange(owner.ownerType, owner.ownerId);
|
|
20
|
+
const refs = [];
|
|
21
|
+
for await (const [, value] of db.iterator({
|
|
22
|
+
gte: range.start,
|
|
23
|
+
lte: range.end,
|
|
24
|
+
reverse: true
|
|
25
|
+
})) {
|
|
26
|
+
refs.push(value ?? {});
|
|
27
|
+
if (refs.length >= limit) break;
|
|
28
|
+
}
|
|
29
|
+
const items = await Promise.all(
|
|
30
|
+
refs.map(
|
|
31
|
+
(ref) => typeof ref?.memoryId === "string" ? db.get(createMemoryKey(owner.ownerType, owner.ownerId, ref.memoryId)).catch(() => null) : Promise.resolve(null)
|
|
32
|
+
)
|
|
33
|
+
);
|
|
34
|
+
return items.filter((item) => !!item);
|
|
35
|
+
};
|
|
36
|
+
var loadSubjectKindItemsFromDb = async (db, subject, kind, limit) => {
|
|
37
|
+
const range = memorySubjectKindRange(subject.subjectType, subject.subjectId, kind);
|
|
38
|
+
const refs = [];
|
|
39
|
+
for await (const [, value] of db.iterator({
|
|
40
|
+
gte: range.start,
|
|
41
|
+
lte: range.end,
|
|
42
|
+
reverse: true
|
|
43
|
+
})) {
|
|
44
|
+
refs.push(value ?? {});
|
|
45
|
+
if (refs.length >= limit) break;
|
|
46
|
+
}
|
|
47
|
+
const items = await Promise.all(
|
|
48
|
+
refs.map(
|
|
49
|
+
(ref) => typeof ref?.memoryKey === "string" ? db.get(ref.memoryKey).catch(() => null) : Promise.resolve(null)
|
|
50
|
+
)
|
|
51
|
+
);
|
|
52
|
+
return items.filter((item) => !!item);
|
|
53
|
+
};
|
|
54
|
+
var loadMemoryCandidatesFromDb = async (db, input) => {
|
|
55
|
+
const kinds = input.kinds ?? ["episodic", "semantic", "procedural"];
|
|
56
|
+
const ownerLimit = input.ownerLimit ?? 12;
|
|
57
|
+
const ownerFallback = input.ownerFallback ?? "onSubjectMiss";
|
|
58
|
+
const ownerKeySet = new Set(
|
|
59
|
+
input.owners.filter((owner) => owner.ownerId).map((owner) => `${owner.ownerType}:${owner.ownerId}`)
|
|
60
|
+
);
|
|
61
|
+
const subjects = input.subjects.filter(
|
|
62
|
+
(subject) => !!subject.subjectId
|
|
63
|
+
);
|
|
64
|
+
const subjectResults = subjects.length > 0 ? await Promise.all(
|
|
65
|
+
subjects.flatMap(
|
|
66
|
+
(subject) => kinds.map(
|
|
67
|
+
(kind) => loadSubjectKindItemsFromDb(db, subject, kind, ownerLimit)
|
|
68
|
+
)
|
|
69
|
+
)
|
|
70
|
+
) : [];
|
|
71
|
+
const subjectHitCount = subjectResults.reduce((sum, items) => sum + items.length, 0);
|
|
72
|
+
const shouldLoadOwnerFallback = ownerFallback !== "never" && (subjects.length === 0 || subjectHitCount === 0 || ownerFallback === "always");
|
|
73
|
+
const results = shouldLoadOwnerFallback ? await Promise.all(
|
|
74
|
+
[
|
|
75
|
+
...subjectResults,
|
|
76
|
+
...input.owners.map((owner) => loadOwnerItemsFromDb(db, owner, ownerLimit))
|
|
77
|
+
]
|
|
78
|
+
) : subjectResults;
|
|
79
|
+
const kindSet = new Set(kinds);
|
|
80
|
+
const seen = /* @__PURE__ */ new Set();
|
|
81
|
+
const merged = [];
|
|
82
|
+
for (const items of results) {
|
|
83
|
+
for (const item of items) {
|
|
84
|
+
if (seen.has(item.id)) continue;
|
|
85
|
+
if (!kindSet.has(item.kind)) continue;
|
|
86
|
+
if (ownerKeySet.size > 0 && !ownerKeySet.has(`${item.ownerType}:${item.ownerId}`)) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (!shouldLoadOwnerFallback && subjects.length > 0 && !subjects.some(
|
|
90
|
+
(subject) => subject.subjectType === item.subjectType && subject.subjectId === item.subjectId
|
|
91
|
+
)) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
seen.add(item.id);
|
|
95
|
+
merged.push(item);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return merged;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export {
|
|
102
|
+
chooseMemoryOwners,
|
|
103
|
+
loadMemoryCandidatesFromDb
|
|
104
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// packages/core/errorMessage.ts
|
|
2
|
+
function toErrorMessage(error) {
|
|
3
|
+
if (error instanceof Error) return error.message;
|
|
4
|
+
if (error !== null && typeof error === "object" && "message" in error && typeof error.message === "string") {
|
|
5
|
+
return error.message;
|
|
6
|
+
}
|
|
7
|
+
return String(error);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
toErrorMessage
|
|
12
|
+
};
|