openfeel 1.3.1 → 1.3.3
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.en.md +1 -0
- package/README.md +2 -1
- package/README.zh-CN.md +1 -0
- package/dist/commands/flow.d.ts.map +1 -1
- package/dist/commands/flow.js +98 -14
- package/dist/commands/flow.js.map +1 -1
- package/dist/commands/instructions.js +1 -1
- package/dist/commands/instructions.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +9 -1
- package/dist/commands/plan.js.map +1 -1
- package/dist/core/archive/merge.js +8 -8
- package/dist/core/archive/merge.js.map +1 -1
- package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
- package/dist/core/artifact-graph/resolver.js +8 -0
- package/dist/core/artifact-graph/resolver.js.map +1 -1
- package/dist/core/config.d.ts +12 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +25 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/flow-manager.d.ts +26 -1
- package/dist/core/flow-manager.d.ts.map +1 -1
- package/dist/core/flow-manager.js +112 -9
- package/dist/core/flow-manager.js.map +1 -1
- package/dist/core/i18n-data/en.d.ts.map +1 -1
- package/dist/core/i18n-data/en.js +12 -0
- package/dist/core/i18n-data/en.js.map +1 -1
- package/dist/core/i18n-data/zh-CN.d.ts.map +1 -1
- package/dist/core/i18n-data/zh-CN.js +12 -0
- package/dist/core/i18n-data/zh-CN.js.map +1 -1
- package/dist/core/plan/stage.d.ts.map +1 -1
- package/dist/core/plan/stage.js +3 -1
- package/dist/core/plan/stage.js.map +1 -1
- package/dist/core/template-loader.d.ts.map +1 -1
- package/dist/core/template-loader.js +38 -18
- package/dist/core/template-loader.js.map +1 -1
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +25 -5
- package/dist/core/update.js.map +1 -1
- package/dist/core/view/entry.d.ts +13 -4
- package/dist/core/view/entry.d.ts.map +1 -1
- package/dist/core/view/entry.js +40 -16
- package/dist/core/view/entry.js.map +1 -1
- package/dist/core/workspace/structure.d.ts +21 -1
- package/dist/core/workspace/structure.d.ts.map +1 -1
- package/dist/core/workspace/structure.js +30 -11
- package/dist/core/workspace/structure.js.map +1 -1
- package/dsh/ADAPTER.md +17 -4
- package/dsh/README.md +41 -5
- package/dsh/cordis.patch.yml +14 -0
- package/dsh/lib/adapters/dashboard.js +2 -2
- package/dsh/lib/guard.js +424 -0
- package/dsh/lib/index.js +53 -7
- package/dsh/lib/surface/prompt.js +78 -2
- package/dsh/lib/tools/shared.js +28 -14
- package/dsh/package.json +2 -2
- package/package.json +1 -1
package/dsh/lib/tools/shared.js
CHANGED
|
@@ -188,26 +188,40 @@ export function toWireEnvelope(action, payload) {
|
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
/**
|
|
191
|
-
*
|
|
191
|
+
* 安全序列化:只对**真环**(祖先路径上出现过的对象)写 `[循环引用]`;
|
|
192
|
+
* 同一对象的**重复引用**(DAG,如 focus.deps 与 stages[i].deps 指向同一数组)正常复制(P1-2)。
|
|
193
|
+
* 兼处理 BigInt / 不可序列化值,永不抛错。
|
|
192
194
|
* @param {unknown} value
|
|
193
195
|
* @returns {string}
|
|
194
196
|
*/
|
|
195
197
|
export function stringifySafe(value) {
|
|
196
198
|
try {
|
|
197
|
-
/**
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
199
|
+
/**
|
|
200
|
+
* @param {unknown} item
|
|
201
|
+
* @param {WeakSet<object>} ancestors
|
|
202
|
+
* @returns {unknown}
|
|
203
|
+
*/
|
|
204
|
+
const clone = (item, ancestors) => {
|
|
205
|
+
if (typeof item === 'bigint') return item.toString();
|
|
206
|
+
if (typeof item === 'function' || typeof item === 'symbol') return undefined;
|
|
207
|
+
if (typeof item !== 'object' || item === null) return item;
|
|
208
|
+
// 保留 Date / URL 等自带 toJSON 的语义(与 JSON.stringify 一致)
|
|
209
|
+
if (typeof item.toJSON === 'function') return item.toJSON();
|
|
210
|
+
if (ancestors.has(item)) return '[循环引用]';
|
|
211
|
+
ancestors.add(item);
|
|
212
|
+
let out;
|
|
213
|
+
if (Array.isArray(item)) {
|
|
214
|
+
out = item.map((entry) => clone(entry, ancestors));
|
|
215
|
+
} else {
|
|
216
|
+
out = {};
|
|
217
|
+
for (const [key, entry] of Object.entries(item)) {
|
|
218
|
+
out[key] = clone(entry, ancestors);
|
|
205
219
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
);
|
|
220
|
+
}
|
|
221
|
+
ancestors.delete(item);
|
|
222
|
+
return out;
|
|
223
|
+
};
|
|
224
|
+
return JSON.stringify(clone(value, new WeakSet()), null, 2);
|
|
211
225
|
} catch {
|
|
212
226
|
return String(value);
|
|
213
227
|
}
|
package/dsh/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openfeel-dsh",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
4
4
|
"description": "OpenFeel × DSH — Feel 模式适配器:把 OpenFeel 的流水线、需求分发、版本归档与知识库接入 DeepSeek Harness",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": true,
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"openfeel": {
|
|
34
34
|
"adapter": "dsh",
|
|
35
|
-
"requiresCli": ">=1.3.
|
|
35
|
+
"requiresCli": ">=1.3.3"
|
|
36
36
|
},
|
|
37
37
|
"keywords": [
|
|
38
38
|
"openfeel",
|