nodejs-store 2.6.0 → 3.0.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/README.md +157 -0
- package/README.zh-CN.md +147 -0
- package/llms-full.txt +71 -0
- package/llms.txt +1 -0
- package/package.json +2 -2
- package/src/ask.js +358 -0
- package/src/ask_knowledge.md +250 -0
- package/src/ddl.js +182 -1
- package/src/feedback.js +6 -1
- package/src/index.js +95 -25
- package/src/llm.js +157 -0
- package/src/permission.js +75 -0
- package/src/profile.js +35 -0
- package/src/schema.js +37 -2
- package/src/workflow.js +734 -0
package/src/schema.js
CHANGED
|
@@ -41,9 +41,26 @@ function register(defn) {
|
|
|
41
41
|
const computes = {};
|
|
42
42
|
for (const [key, val] of Object.entries(defn.computes || {})) {
|
|
43
43
|
const fnRef = val.fnRef || key;
|
|
44
|
-
if (val.fn)
|
|
44
|
+
if (val.fn) {
|
|
45
|
+
const userFn = val.fn;
|
|
46
|
+
// FFI 边界契约:JS `undefined` 无法表示为 JSON 值(core 回调桥 SyncFnBridge
|
|
47
|
+
// 对 fn 返回值做 serde 序列化,undefined 即 InvalidArg);归一为 null——
|
|
48
|
+
// 与 py 侧 lambda 返回 None → null 同语义,非错误兜底
|
|
49
|
+
core.setFn(fnRef, (item, ctx) => {
|
|
50
|
+
const r = userFn(item, ctx);
|
|
51
|
+
return r === undefined ? null : r;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
45
54
|
if (val.asyncFn) _asyncFns[fnRef] = val.asyncFn;
|
|
46
|
-
|
|
55
|
+
// 镜像保留声明元数据(对齐 py_store.schema.register):agg 形态与 read 白名单
|
|
56
|
+
// 供 AI 摘要(ask.describeForAi)等消费者读取;可执行物(fn/asyncFn)不入镜像
|
|
57
|
+
// (执行判决唯一在 core 规划 + Host 尾处理)
|
|
58
|
+
const meta = {};
|
|
59
|
+
for (const k of ['type', 'depends', 'agg', 'read']) {
|
|
60
|
+
if (k in val) meta[k] = val[k];
|
|
61
|
+
}
|
|
62
|
+
meta.fnRef = fnRef;
|
|
63
|
+
computes[key] = meta;
|
|
47
64
|
}
|
|
48
65
|
|
|
49
66
|
_schemas[defn.name] = {
|
|
@@ -110,6 +127,21 @@ function setRequireContext(needCtx = true) {
|
|
|
110
127
|
core.setRequireContext(Boolean(needCtx));
|
|
111
128
|
}
|
|
112
129
|
|
|
130
|
+
/** 豁免角色清单(命中者在一切判决环节直接放行)。默认空——无豁免(清单化语义) */
|
|
131
|
+
function setExemptRoles(roles) {
|
|
132
|
+
core.setExemptRoles(roles);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** 拒写角色清单(命中者一切写路径拒绝,读不受影响)。默认空——无拒写 */
|
|
136
|
+
function setDenyWriteRoles(roles) {
|
|
137
|
+
core.setDenyWriteRoles(roles);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** schema 白名单缺失/为空时的默认姿态:'open'(默认,放行)| 'closed'(全拒) */
|
|
141
|
+
function setUnconfiguredPolicy(policy) {
|
|
142
|
+
core.setUnconfiguredPolicy(policy);
|
|
143
|
+
}
|
|
144
|
+
|
|
113
145
|
/** 「上下文强制」开关当前值(对齐 py_store.schema.require_context) */
|
|
114
146
|
function requireContext() {
|
|
115
147
|
return core.requireContext();
|
|
@@ -143,6 +175,9 @@ module.exports = {
|
|
|
143
175
|
list,
|
|
144
176
|
setRequireContext,
|
|
145
177
|
requireContext,
|
|
178
|
+
setExemptRoles,
|
|
179
|
+
setDenyWriteRoles,
|
|
180
|
+
setUnconfiguredPolicy,
|
|
146
181
|
setProfile,
|
|
147
182
|
getProfile,
|
|
148
183
|
getAsyncFn,
|