@co-engram/core 0.1.1 → 0.1.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/dist/bootstrap/classify.d.ts +67 -0
- package/dist/bootstrap/classify.d.ts.map +1 -0
- package/dist/bootstrap/classify.js +119 -0
- package/dist/bootstrap/classify.js.map +1 -0
- package/dist/bootstrap/index.d.ts +89 -0
- package/dist/bootstrap/index.d.ts.map +1 -0
- package/dist/bootstrap/index.js +158 -0
- package/dist/bootstrap/index.js.map +1 -0
- package/dist/concepts/dictionary.d.ts +260 -0
- package/dist/concepts/dictionary.d.ts.map +1 -0
- package/dist/concepts/dictionary.js +253 -0
- package/dist/concepts/dictionary.js.map +1 -0
- package/dist/concepts/index.d.ts +11 -0
- package/dist/concepts/index.d.ts.map +1 -0
- package/dist/concepts/index.js +10 -0
- package/dist/concepts/index.js.map +1 -0
- package/dist/concepts/types.d.ts +65 -0
- package/dist/concepts/types.d.ts.map +1 -0
- package/dist/concepts/types.js +15 -0
- package/dist/concepts/types.js.map +1 -0
- package/dist/config/defaults.d.ts +32 -3
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +52 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +18 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +75 -3
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts +10 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +10 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +97 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/contradiction/auto-degrade.d.ts +11 -2
- package/dist/contradiction/auto-degrade.d.ts.map +1 -1
- package/dist/contradiction/auto-degrade.js +22 -0
- package/dist/contradiction/auto-degrade.js.map +1 -1
- package/dist/contradiction/resolver.d.ts.map +1 -1
- package/dist/contradiction/resolver.js +7 -1
- package/dist/contradiction/resolver.js.map +1 -1
- package/dist/dreaming/index.d.ts +1 -0
- package/dist/dreaming/index.d.ts.map +1 -1
- package/dist/dreaming/index.js +1 -0
- package/dist/dreaming/index.js.map +1 -1
- package/dist/dreaming/llm-pattern-abstraction.d.ts +31 -0
- package/dist/dreaming/llm-pattern-abstraction.d.ts.map +1 -0
- package/dist/dreaming/llm-pattern-abstraction.js +70 -0
- package/dist/dreaming/llm-pattern-abstraction.js.map +1 -0
- package/dist/dreaming/rem.d.ts.map +1 -1
- package/dist/dreaming/rem.js +1 -0
- package/dist/dreaming/rem.js.map +1 -1
- package/dist/dreaming/scheduler.d.ts +13 -0
- package/dist/dreaming/scheduler.d.ts.map +1 -1
- package/dist/dreaming/scheduler.js +14 -2
- package/dist/dreaming/scheduler.js.map +1 -1
- package/dist/evolution/triggered.d.ts.map +1 -1
- package/dist/evolution/triggered.js +1 -0
- package/dist/evolution/triggered.js.map +1 -1
- package/dist/generative/hypothesis.d.ts.map +1 -1
- package/dist/generative/hypothesis.js +1 -0
- package/dist/generative/hypothesis.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1262 -32
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/index.d.ts +34 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +36 -7
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/zh.d.ts +698 -32
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +1267 -33
- package/dist/i18n/zh.js.map +1 -1
- package/dist/index/graph-builder.js +3 -3
- package/dist/index/graph-builder.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/loop.d.ts +9 -0
- package/dist/learning/loop.d.ts.map +1 -1
- package/dist/learning/loop.js +42 -1
- package/dist/learning/loop.js.map +1 -1
- package/dist/maintenance/types.d.ts +11 -0
- package/dist/maintenance/types.d.ts.map +1 -1
- package/dist/maintenance/types.js.map +1 -1
- package/dist/merge/synapse-merger.js +6 -0
- package/dist/merge/synapse-merger.js.map +1 -1
- package/dist/merge-driver.cjs +64 -5
- package/dist/observability/audit-log.d.ts +7 -1
- package/dist/observability/audit-log.d.ts.map +1 -1
- package/dist/observability/audit-log.js.map +1 -1
- package/dist/observability/necessity-evaluator.d.ts +29 -0
- package/dist/observability/necessity-evaluator.d.ts.map +1 -1
- package/dist/observability/necessity-evaluator.js +240 -13
- package/dist/observability/necessity-evaluator.js.map +1 -1
- package/dist/observability/proposal-engine.d.ts.map +1 -1
- package/dist/observability/proposal-engine.js +12 -0
- package/dist/observability/proposal-engine.js.map +1 -1
- package/dist/observability/runtime-description-check.d.ts +55 -0
- package/dist/observability/runtime-description-check.d.ts.map +1 -0
- package/dist/observability/runtime-description-check.js +63 -0
- package/dist/observability/runtime-description-check.js.map +1 -0
- package/dist/prompt-signals/cache.d.ts +73 -0
- package/dist/prompt-signals/cache.d.ts.map +1 -1
- package/dist/prompt-signals/cache.js +102 -0
- package/dist/prompt-signals/cache.js.map +1 -1
- package/dist/prompt-signals/event-bus.d.ts +82 -0
- package/dist/prompt-signals/event-bus.d.ts.map +1 -0
- package/dist/prompt-signals/event-bus.js +105 -0
- package/dist/prompt-signals/event-bus.js.map +1 -0
- package/dist/prompt-signals/index.d.ts +2 -1
- package/dist/prompt-signals/index.d.ts.map +1 -1
- package/dist/prompt-signals/index.js +2 -1
- package/dist/prompt-signals/index.js.map +1 -1
- package/dist/reinforcement/ltp.d.ts +15 -1
- package/dist/reinforcement/ltp.d.ts.map +1 -1
- package/dist/reinforcement/ltp.js +24 -5
- package/dist/reinforcement/ltp.js.map +1 -1
- package/dist/reinforcement/related.d.ts +31 -2
- package/dist/reinforcement/related.d.ts.map +1 -1
- package/dist/reinforcement/related.js +39 -3
- package/dist/reinforcement/related.js.map +1 -1
- package/dist/retrieval/filter.d.ts.map +1 -1
- package/dist/retrieval/filter.js +7 -0
- package/dist/retrieval/filter.js.map +1 -1
- package/dist/retrieval/fts.d.ts +6 -5
- package/dist/retrieval/fts.d.ts.map +1 -1
- package/dist/retrieval/fts.js +74 -22
- package/dist/retrieval/fts.js.map +1 -1
- package/dist/status/index.d.ts +7 -0
- package/dist/status/index.d.ts.map +1 -0
- package/dist/status/index.js +7 -0
- package/dist/status/index.js.map +1 -0
- package/dist/status/status.d.ts +132 -0
- package/dist/status/status.d.ts.map +1 -0
- package/dist/status/status.js +437 -0
- package/dist/status/status.js.map +1 -0
- package/dist/storage/engram-store.d.ts.map +1 -1
- package/dist/storage/engram-store.js +17 -2
- package/dist/storage/engram-store.js.map +1 -1
- package/dist/storage/git.d.ts +168 -0
- package/dist/storage/git.d.ts.map +1 -1
- package/dist/storage/git.js +616 -33
- package/dist/storage/git.js.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/infra-doctor.d.ts +42 -0
- package/dist/storage/infra-doctor.d.ts.map +1 -0
- package/dist/storage/infra-doctor.js +92 -0
- package/dist/storage/infra-doctor.js.map +1 -0
- package/dist/storage/obsidian-links.d.ts +73 -0
- package/dist/storage/obsidian-links.d.ts.map +1 -0
- package/dist/storage/obsidian-links.js +177 -0
- package/dist/storage/obsidian-links.js.map +1 -0
- package/dist/storage/path.d.ts +24 -0
- package/dist/storage/path.d.ts.map +1 -1
- package/dist/storage/path.js +53 -0
- package/dist/storage/path.js.map +1 -1
- package/dist/storage/repository.d.ts +37 -1
- package/dist/storage/repository.d.ts.map +1 -1
- package/dist/storage/repository.js +235 -17
- package/dist/storage/repository.js.map +1 -1
- package/dist/storage/synapse-store.d.ts +7 -1
- package/dist/storage/synapse-store.d.ts.map +1 -1
- package/dist/storage/synapse-store.js +8 -0
- package/dist/storage/synapse-store.js.map +1 -1
- package/dist/tools/audit-query-tool.d.ts +53 -0
- package/dist/tools/audit-query-tool.d.ts.map +1 -0
- package/dist/tools/audit-query-tool.js +123 -0
- package/dist/tools/audit-query-tool.js.map +1 -0
- package/dist/tools/doctor-tools.d.ts +5 -0
- package/dist/tools/doctor-tools.d.ts.map +1 -1
- package/dist/tools/doctor-tools.js +11 -3
- package/dist/tools/doctor-tools.js.map +1 -1
- package/dist/tools/engram-tools.d.ts +13 -0
- package/dist/tools/engram-tools.d.ts.map +1 -1
- package/dist/tools/engram-tools.js +72 -8
- package/dist/tools/engram-tools.js.map +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/llm-descriptions.d.ts +28 -28
- package/dist/tools/llm-descriptions.d.ts.map +1 -1
- package/dist/tools/llm-descriptions.js +56 -489
- package/dist/tools/llm-descriptions.js.map +1 -1
- package/dist/tools/normalization.d.ts +43 -0
- package/dist/tools/normalization.d.ts.map +1 -0
- package/dist/tools/normalization.js +68 -0
- package/dist/tools/normalization.js.map +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +6 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/schemas.d.ts +67 -11
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +61 -6
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/skill-tools.js +1 -1
- package/dist/tools/skill-tools.js.map +1 -1
- package/dist/tools/synapse-tools.d.ts.map +1 -1
- package/dist/tools/synapse-tools.js +1 -0
- package/dist/tools/synapse-tools.js.map +1 -1
- package/dist/tools/sync-tools.d.ts +102 -0
- package/dist/tools/sync-tools.d.ts.map +1 -0
- package/dist/tools/sync-tools.js +309 -0
- package/dist/tools/sync-tools.js.map +1 -0
- package/dist/tools/synthesize-tools.d.ts +79 -0
- package/dist/tools/synthesize-tools.d.ts.map +1 -0
- package/dist/tools/synthesize-tools.js +297 -0
- package/dist/tools/synthesize-tools.js.map +1 -0
- package/dist/tools/tool-profile.d.ts +68 -0
- package/dist/tools/tool-profile.d.ts.map +1 -0
- package/dist/tools/tool-profile.js +174 -0
- package/dist/tools/tool-profile.js.map +1 -0
- package/dist/tools/tool.d.ts +24 -0
- package/dist/tools/tool.d.ts.map +1 -1
- package/dist/tools/tool.js.map +1 -1
- package/dist/types/disclosure.d.ts +7 -0
- package/dist/types/disclosure.d.ts.map +1 -1
- package/dist/types/repository-types.d.ts +17 -1
- package/dist/types/repository-types.d.ts.map +1 -1
- package/dist/types/synapse.d.ts +19 -1
- package/dist/types/synapse.d.ts.map +1 -1
- package/package.json +9 -9
package/dist/storage/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/storage/git.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/storage/git.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
|
package/dist/storage/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基础设施自愈:补齐 `computeStatus` 检测到、但 `EngramRepository.runDoctor` 不覆盖的层。
|
|
3
|
+
*
|
|
4
|
+
* `runDoctor` 只扫 engram 文件层(moved / title / missing / orphan / dangling)。
|
|
5
|
+
* 但 status 还会检测:
|
|
6
|
+
* - digest.jsonl / graph.json 缺失(派生索引文件,IndexOrchestrator 的职责)
|
|
7
|
+
* - merge driver 未配置(git 层,onboard 的职责)
|
|
8
|
+
*
|
|
9
|
+
* 这两层问题让用户「点 doctor 按钮也修不了」,因为 doctor 跑完是空报告。
|
|
10
|
+
* 本模块在 doctor 执行前做 preflight,把这些基础设施问题自动修复,
|
|
11
|
+
* 让「网页 health tab → 运行 doctor 扫描」真正成为一键自愈入口。
|
|
12
|
+
*
|
|
13
|
+
* 设计:
|
|
14
|
+
* - 纯函数,不持有状态;接受 repo + dataRoot
|
|
15
|
+
* - 失败不抛错(返回空 fixes),让上层 doctor 主流程继续
|
|
16
|
+
* - 幂等(IndexOrchestrator.fullRebuild / autoOnboardMergeDriver 都幂等)
|
|
17
|
+
*
|
|
18
|
+
* @module @co-engram/core/storage
|
|
19
|
+
*/
|
|
20
|
+
import type { EngramRepository } from "./repository.js";
|
|
21
|
+
import type { DoctorIssue } from "../types/repository-types.js";
|
|
22
|
+
export interface InfraDoctorResult {
|
|
23
|
+
/** 基础设施层的修复列表(已自动应用),插入到 DoctorReport.fixes 头部。 */
|
|
24
|
+
readonly fixes: readonly DoctorIssue[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 在 runDoctor 之前运行的基础设施自愈。
|
|
28
|
+
*
|
|
29
|
+
* 检查范围:
|
|
30
|
+
* 1. `.co-engram/digest.jsonl` 或 `.co-engram/graph.json` 缺失 → 全量重建
|
|
31
|
+
* 2. merge driver 未配置(且 dataRoot 在 git repo 内)→ autoOnboardMergeDriver
|
|
32
|
+
*
|
|
33
|
+
* 不检查(留给 runDoctor 或人工):
|
|
34
|
+
* - engram-index.json(已由 EngramRepository.getIndex 惰性重建)
|
|
35
|
+
* - git dirty(不能 auto-commit 用户工作)
|
|
36
|
+
* - config 字段缺失(需用户决策)
|
|
37
|
+
*/
|
|
38
|
+
export declare function runInfraDoctor(params: {
|
|
39
|
+
repo: EngramRepository;
|
|
40
|
+
dataRoot: string;
|
|
41
|
+
}): InfraDoctorResult;
|
|
42
|
+
//# sourceMappingURL=infra-doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-doctor.d.ts","sourceRoot":"","sources":["../../src/storage/infra-doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,iBAAiB,CAuDpB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基础设施自愈:补齐 `computeStatus` 检测到、但 `EngramRepository.runDoctor` 不覆盖的层。
|
|
3
|
+
*
|
|
4
|
+
* `runDoctor` 只扫 engram 文件层(moved / title / missing / orphan / dangling)。
|
|
5
|
+
* 但 status 还会检测:
|
|
6
|
+
* - digest.jsonl / graph.json 缺失(派生索引文件,IndexOrchestrator 的职责)
|
|
7
|
+
* - merge driver 未配置(git 层,onboard 的职责)
|
|
8
|
+
*
|
|
9
|
+
* 这两层问题让用户「点 doctor 按钮也修不了」,因为 doctor 跑完是空报告。
|
|
10
|
+
* 本模块在 doctor 执行前做 preflight,把这些基础设施问题自动修复,
|
|
11
|
+
* 让「网页 health tab → 运行 doctor 扫描」真正成为一键自愈入口。
|
|
12
|
+
*
|
|
13
|
+
* 设计:
|
|
14
|
+
* - 纯函数,不持有状态;接受 repo + dataRoot
|
|
15
|
+
* - 失败不抛错(返回空 fixes),让上层 doctor 主流程继续
|
|
16
|
+
* - 幂等(IndexOrchestrator.fullRebuild / autoOnboardMergeDriver 都幂等)
|
|
17
|
+
*
|
|
18
|
+
* @module @co-engram/core/storage
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync } from "node:fs";
|
|
21
|
+
import { dirname, join } from "node:path";
|
|
22
|
+
import { fileURLToPath } from "node:url";
|
|
23
|
+
import { resolveMergeDriverBundle } from "../merge/auto-onboard.js";
|
|
24
|
+
import { IndexOrchestrator, defaultCachePath } from "../index/orchestrator.js";
|
|
25
|
+
import { autoOnboardMergeDriver } from "../merge/auto-onboard.js";
|
|
26
|
+
/**
|
|
27
|
+
* 在 runDoctor 之前运行的基础设施自愈。
|
|
28
|
+
*
|
|
29
|
+
* 检查范围:
|
|
30
|
+
* 1. `.co-engram/digest.jsonl` 或 `.co-engram/graph.json` 缺失 → 全量重建
|
|
31
|
+
* 2. merge driver 未配置(且 dataRoot 在 git repo 内)→ autoOnboardMergeDriver
|
|
32
|
+
*
|
|
33
|
+
* 不检查(留给 runDoctor 或人工):
|
|
34
|
+
* - engram-index.json(已由 EngramRepository.getIndex 惰性重建)
|
|
35
|
+
* - git dirty(不能 auto-commit 用户工作)
|
|
36
|
+
* - config 字段缺失(需用户决策)
|
|
37
|
+
*/
|
|
38
|
+
export function runInfraDoctor(params) {
|
|
39
|
+
const { repo, dataRoot } = params;
|
|
40
|
+
const fixes = [];
|
|
41
|
+
const cachePath = defaultCachePath(dataRoot);
|
|
42
|
+
// 1. 派生索引文件缺失 → IndexOrchestrator.fullRebuild
|
|
43
|
+
const digestPath = join(cachePath, "digest.jsonl");
|
|
44
|
+
const graphPath = join(cachePath, "graph.json");
|
|
45
|
+
const digestMissing = !existsSync(digestPath);
|
|
46
|
+
const graphMissing = !existsSync(graphPath);
|
|
47
|
+
if (digestMissing || graphMissing) {
|
|
48
|
+
try {
|
|
49
|
+
const orchestrator = new IndexOrchestrator(repo, cachePath);
|
|
50
|
+
const result = orchestrator.fullRebuild();
|
|
51
|
+
const parts = [];
|
|
52
|
+
if (digestMissing) {
|
|
53
|
+
parts.push(`digest.jsonl (${result.digest.total} entries)`);
|
|
54
|
+
}
|
|
55
|
+
if (graphMissing) {
|
|
56
|
+
parts.push(`graph.json (${result.graph.nodes} nodes, ${result.graph.edges} edges)`);
|
|
57
|
+
}
|
|
58
|
+
fixes.push({
|
|
59
|
+
kind: "index_rebuilt",
|
|
60
|
+
path: cachePath,
|
|
61
|
+
message: `Rebuilt missing derived index: ${parts.join(", ")}`,
|
|
62
|
+
autoFixed: true,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// 失败不阻塞 — 让上层 doctor 继续扫 engram 文件层,问题留给用户
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// 2. merge driver 未配置 + 在 git repo → autoOnboardMergeDriver
|
|
70
|
+
// 本文件在 dist/storage/infra-doctor.js,bundle 在上一级 dist/merge-driver.cjs
|
|
71
|
+
const storageDir = dirname(fileURLToPath(import.meta.url));
|
|
72
|
+
const coreDistDir = dirname(storageDir);
|
|
73
|
+
const bundleSourcePath = resolveMergeDriverBundle(coreDistDir);
|
|
74
|
+
if (bundleSourcePath) {
|
|
75
|
+
const onboard = autoOnboardMergeDriver({ dataRoot, bundleSourcePath });
|
|
76
|
+
if (onboard.attempted && !onboard.error) {
|
|
77
|
+
// bundleUpgraded=true 表示版本不同(可能是首次安装或升级)
|
|
78
|
+
// gitattributesUpdated=true 表示 .gitattributes 新加了条目
|
|
79
|
+
// 二者任一为 true 才算"实际修复",避免每次 doctor 都报告
|
|
80
|
+
if (onboard.bundleUpgraded || onboard.gitattributesUpdated) {
|
|
81
|
+
fixes.push({
|
|
82
|
+
kind: "merge_driver_installed",
|
|
83
|
+
path: onboard.repoRoot,
|
|
84
|
+
message: `Merge driver configured (bundle installed=${onboard.bundleUpgraded}, gitattributes updated=${onboard.gitattributesUpdated})`,
|
|
85
|
+
autoFixed: true,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { fixes };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=infra-doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-doctor.js","sourceRoot":"","sources":["../../src/storage/infra-doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Obsidian 集成:派生 wikilinks
|
|
3
|
+
*
|
|
4
|
+
* 当 synapse 写入时,自动在涉及的 engram.md 正文末尾追加一个派生段:
|
|
5
|
+
*
|
|
6
|
+
* <!-- co-engram-derived:synapses -->
|
|
7
|
+
* ## Synapses (derived)
|
|
8
|
+
*
|
|
9
|
+
* - → [[co-engram-foo|Some Title · extends]]
|
|
10
|
+
* - ← [[co-engram-bar|Other Title · similar_to]]
|
|
11
|
+
*
|
|
12
|
+
* wikilink target 用文件名(去 .md),Obsidian 直接解析,不依赖 frontmatter
|
|
13
|
+
* aliases。display 含目标 engram 的标题 + 关系 kind,人类一眼可读。
|
|
14
|
+
*
|
|
15
|
+
* 权威源仍是 synapse.yaml;此派生段是 denormalized view,丢失能从 yaml 重建。
|
|
16
|
+
* 文件名漂移(title 改 → rename)时派生段会断,doctor / cascade refresh 重建。
|
|
17
|
+
*
|
|
18
|
+
* @module @co-engram/core/storage
|
|
19
|
+
*/
|
|
20
|
+
import { type EngramFile } from "./engram-store.js";
|
|
21
|
+
import { type EngramIndexMap } from "./engram-index.js";
|
|
22
|
+
import type { Language } from "../i18n/types.js";
|
|
23
|
+
import type { SynapseKind } from "../types/synapse.js";
|
|
24
|
+
/** 派生段起始 marker,兼作剥离锚点 */
|
|
25
|
+
export declare const DERIVED_SYNAPSES_MARKER = "<!-- co-engram-derived:synapses -->";
|
|
26
|
+
/**
|
|
27
|
+
* 剥离现有派生段(含 marker 至文件末尾),返回干净正文。
|
|
28
|
+
*
|
|
29
|
+
* 不存在 marker 时返回原 content(去尾空白)。
|
|
30
|
+
*/
|
|
31
|
+
export declare function stripDerivedSection(content: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* 检查一条 engram 的派生段是否与权威源(synapse yaml)一致。
|
|
34
|
+
*
|
|
35
|
+
* 用于 doctor 自愈扫描:派生段内容(基于当前 synapse 集合的预期)
|
|
36
|
+
* 与文件正文里的派生段不一致 → stale。
|
|
37
|
+
*
|
|
38
|
+
* @param file 当前磁盘上的 engram 文件(已 parse)
|
|
39
|
+
* @param touching 当前 synapse 集合(outgoing + incoming)
|
|
40
|
+
* @param index 用于把 endpoint id 解析为文件名 + 标题
|
|
41
|
+
*/
|
|
42
|
+
export declare function checkObsidianView(file: EngramFile, touching: {
|
|
43
|
+
readonly outgoing: readonly {
|
|
44
|
+
readonly kind: SynapseKind;
|
|
45
|
+
readonly to: string;
|
|
46
|
+
}[];
|
|
47
|
+
readonly incoming: readonly {
|
|
48
|
+
readonly kind: SynapseKind;
|
|
49
|
+
readonly from: string;
|
|
50
|
+
}[];
|
|
51
|
+
}, index: EngramIndexMap): {
|
|
52
|
+
readonly stale: boolean;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* 重写一条 engram 的派生 synapse 段。
|
|
56
|
+
*
|
|
57
|
+
* 步骤:
|
|
58
|
+
* 1. 解析 stableId → 相对路径(失败静默返回)
|
|
59
|
+
* 2. 读 engram 文件
|
|
60
|
+
* 3. 剥离现有派生段(幂等)
|
|
61
|
+
* 4. 读 outgoing + incoming synapses
|
|
62
|
+
* 5. 通过 index 把 endpoint id 解析为文件名 + 标题(dangling 过滤)
|
|
63
|
+
* 6. 构造新派生段(无 resolved edge 时 = 不写段)
|
|
64
|
+
* 7. checkObsidianView 判定 stale 才写盘
|
|
65
|
+
*
|
|
66
|
+
* 永不抛 — 派生段是 denormalized view,失败不阻塞业务。
|
|
67
|
+
*
|
|
68
|
+
* @param dataRoot 仓库根
|
|
69
|
+
* @param stableId engram 的 ULID
|
|
70
|
+
* @param language 写盘语言
|
|
71
|
+
*/
|
|
72
|
+
export declare function regenerateObsidianLinks(dataRoot: string, stableId: string, language: Language): void;
|
|
73
|
+
//# sourceMappingURL=obsidian-links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-links.d.ts","sourceRoot":"","sources":["../../src/storage/obsidian-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,0BAA0B;AAC1B,eAAO,MAAM,uBAAuB,wCAAwC,CAAC;AA+B7E;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI3D;AAuED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE;IACR,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClF,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrF,EACD,KAAK,EAAE,cAAc,GACpB;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAM7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CA4BN"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Obsidian 集成:派生 wikilinks
|
|
3
|
+
*
|
|
4
|
+
* 当 synapse 写入时,自动在涉及的 engram.md 正文末尾追加一个派生段:
|
|
5
|
+
*
|
|
6
|
+
* <!-- co-engram-derived:synapses -->
|
|
7
|
+
* ## Synapses (derived)
|
|
8
|
+
*
|
|
9
|
+
* - → [[co-engram-foo|Some Title · extends]]
|
|
10
|
+
* - ← [[co-engram-bar|Other Title · similar_to]]
|
|
11
|
+
*
|
|
12
|
+
* wikilink target 用文件名(去 .md),Obsidian 直接解析,不依赖 frontmatter
|
|
13
|
+
* aliases。display 含目标 engram 的标题 + 关系 kind,人类一眼可读。
|
|
14
|
+
*
|
|
15
|
+
* 权威源仍是 synapse.yaml;此派生段是 denormalized view,丢失能从 yaml 重建。
|
|
16
|
+
* 文件名漂移(title 改 → rename)时派生段会断,doctor / cascade refresh 重建。
|
|
17
|
+
*
|
|
18
|
+
* @module @co-engram/core/storage
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync } from "node:fs";
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import { readEngramFile, writeEngramFile } from "./engram-store.js";
|
|
23
|
+
import { readEngramIndex } from "./engram-index.js";
|
|
24
|
+
import { listSynapsesForEngram } from "./synapse-store.js";
|
|
25
|
+
/** 派生段起始 marker,兼作剥离锚点 */
|
|
26
|
+
export const DERIVED_SYNAPSES_MARKER = "<!-- co-engram-derived:synapses -->";
|
|
27
|
+
/** 派生段标题(紧跟 marker) */
|
|
28
|
+
const DERIVED_HEADING = "## Synapses (derived)";
|
|
29
|
+
/**
|
|
30
|
+
* 排序:contradicts 前置(警告性),其他按 kind 字母序;
|
|
31
|
+
* 同 kind 内按 target 文件名字典序(确定性,不依赖 readdir 顺序)。
|
|
32
|
+
*/
|
|
33
|
+
function sortEdges(a, b) {
|
|
34
|
+
if (a.kind === "contradicts" && b.kind !== "contradicts")
|
|
35
|
+
return -1;
|
|
36
|
+
if (b.kind === "contradicts" && a.kind !== "contradicts")
|
|
37
|
+
return 1;
|
|
38
|
+
if (a.kind < b.kind)
|
|
39
|
+
return -1;
|
|
40
|
+
if (a.kind > b.kind)
|
|
41
|
+
return 1;
|
|
42
|
+
if (a.target < b.target)
|
|
43
|
+
return -1;
|
|
44
|
+
if (a.target > b.target)
|
|
45
|
+
return 1;
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 剥离现有派生段(含 marker 至文件末尾),返回干净正文。
|
|
50
|
+
*
|
|
51
|
+
* 不存在 marker 时返回原 content(去尾空白)。
|
|
52
|
+
*/
|
|
53
|
+
export function stripDerivedSection(content) {
|
|
54
|
+
const idx = content.indexOf(DERIVED_SYNAPSES_MARKER);
|
|
55
|
+
if (idx < 0)
|
|
56
|
+
return content.replace(/\n+$/, "");
|
|
57
|
+
return content.slice(0, idx).replace(/\n+$/, "");
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 通过 engram-index 把 synapse endpoint id 解析为 wikilink target + display。
|
|
61
|
+
*
|
|
62
|
+
* - target = path 最后一段去 .md(文件名)
|
|
63
|
+
* - title = index entry 的 title 字段
|
|
64
|
+
*
|
|
65
|
+
* index 中找不到(dangling synapse)返回 undefined,调用方过滤。
|
|
66
|
+
*/
|
|
67
|
+
function resolveEdge(index, id) {
|
|
68
|
+
const entry = index.entries.get(id);
|
|
69
|
+
if (!entry)
|
|
70
|
+
return undefined;
|
|
71
|
+
const fileName = entry.path.split("/").pop();
|
|
72
|
+
if (!fileName)
|
|
73
|
+
return undefined;
|
|
74
|
+
const target = fileName.replace(/\.md$/i, "");
|
|
75
|
+
if (target.length === 0)
|
|
76
|
+
return undefined;
|
|
77
|
+
return { target, title: entry.title };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 构造派生段字符串(wikilink target = 文件名,display = "标题 · kind")。
|
|
81
|
+
*
|
|
82
|
+
* 无 resolved edge 时返回空串(不写空段,保持 engram 文件干净)。
|
|
83
|
+
*/
|
|
84
|
+
function buildDerivedSection(outgoing, incoming) {
|
|
85
|
+
if (outgoing.length === 0 && incoming.length === 0)
|
|
86
|
+
return "";
|
|
87
|
+
const lines = [DERIVED_SYNAPSES_MARKER, DERIVED_HEADING, ""];
|
|
88
|
+
for (const s of [...outgoing].sort(sortEdges)) {
|
|
89
|
+
lines.push(`- → [[${s.target}|${s.title} · ${s.kind}]]`);
|
|
90
|
+
}
|
|
91
|
+
for (const s of [...incoming].sort(sortEdges)) {
|
|
92
|
+
lines.push(`- ← [[${s.target}|${s.title} · ${s.kind}]]`);
|
|
93
|
+
}
|
|
94
|
+
return lines.join("\n");
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 把 touching synapse 集合通过 index 解析为 ResolvedEdge(过滤 dangling)。
|
|
98
|
+
*/
|
|
99
|
+
function resolveTouching(index, touching) {
|
|
100
|
+
const outgoing = touching.outgoing
|
|
101
|
+
.map((s) => {
|
|
102
|
+
const r = resolveEdge(index, s.to);
|
|
103
|
+
return r ? { kind: s.kind, target: r.target, title: r.title } : null;
|
|
104
|
+
})
|
|
105
|
+
.filter((x) => x !== null);
|
|
106
|
+
const incoming = touching.incoming
|
|
107
|
+
.map((s) => {
|
|
108
|
+
const r = resolveEdge(index, s.from);
|
|
109
|
+
return r ? { kind: s.kind, target: r.target, title: r.title } : null;
|
|
110
|
+
})
|
|
111
|
+
.filter((x) => x !== null);
|
|
112
|
+
return { outgoing, incoming };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 检查一条 engram 的派生段是否与权威源(synapse yaml)一致。
|
|
116
|
+
*
|
|
117
|
+
* 用于 doctor 自愈扫描:派生段内容(基于当前 synapse 集合的预期)
|
|
118
|
+
* 与文件正文里的派生段不一致 → stale。
|
|
119
|
+
*
|
|
120
|
+
* @param file 当前磁盘上的 engram 文件(已 parse)
|
|
121
|
+
* @param touching 当前 synapse 集合(outgoing + incoming)
|
|
122
|
+
* @param index 用于把 endpoint id 解析为文件名 + 标题
|
|
123
|
+
*/
|
|
124
|
+
export function checkObsidianView(file, touching, index) {
|
|
125
|
+
const resolved = resolveTouching(index, touching);
|
|
126
|
+
const cleanBody = stripDerivedSection(file.content);
|
|
127
|
+
const expected = buildDerivedSection(resolved.outgoing, resolved.incoming);
|
|
128
|
+
const expectedContent = expected ? `${cleanBody}\n\n${expected}` : cleanBody;
|
|
129
|
+
return { stale: expectedContent !== file.content };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 重写一条 engram 的派生 synapse 段。
|
|
133
|
+
*
|
|
134
|
+
* 步骤:
|
|
135
|
+
* 1. 解析 stableId → 相对路径(失败静默返回)
|
|
136
|
+
* 2. 读 engram 文件
|
|
137
|
+
* 3. 剥离现有派生段(幂等)
|
|
138
|
+
* 4. 读 outgoing + incoming synapses
|
|
139
|
+
* 5. 通过 index 把 endpoint id 解析为文件名 + 标题(dangling 过滤)
|
|
140
|
+
* 6. 构造新派生段(无 resolved edge 时 = 不写段)
|
|
141
|
+
* 7. checkObsidianView 判定 stale 才写盘
|
|
142
|
+
*
|
|
143
|
+
* 永不抛 — 派生段是 denormalized view,失败不阻塞业务。
|
|
144
|
+
*
|
|
145
|
+
* @param dataRoot 仓库根
|
|
146
|
+
* @param stableId engram 的 ULID
|
|
147
|
+
* @param language 写盘语言
|
|
148
|
+
*/
|
|
149
|
+
export function regenerateObsidianLinks(dataRoot, stableId, language) {
|
|
150
|
+
try {
|
|
151
|
+
const index = readEngramIndex(dataRoot);
|
|
152
|
+
const entry = index.entries.get(stableId);
|
|
153
|
+
if (!entry)
|
|
154
|
+
return;
|
|
155
|
+
const absPath = join(dataRoot, entry.path);
|
|
156
|
+
if (!existsSync(absPath))
|
|
157
|
+
return;
|
|
158
|
+
const file = readEngramFile(absPath);
|
|
159
|
+
const touching = listSynapsesForEngram(dataRoot, stableId);
|
|
160
|
+
const status = checkObsidianView(file, touching, index);
|
|
161
|
+
if (!status.stale)
|
|
162
|
+
return;
|
|
163
|
+
const resolved = resolveTouching(index, touching);
|
|
164
|
+
const cleanBody = stripDerivedSection(file.content);
|
|
165
|
+
const derived = buildDerivedSection(resolved.outgoing, resolved.incoming);
|
|
166
|
+
const newContent = derived ? `${cleanBody}\n\n${derived}` : cleanBody;
|
|
167
|
+
const newFile = {
|
|
168
|
+
frontmatter: file.frontmatter,
|
|
169
|
+
content: newContent,
|
|
170
|
+
};
|
|
171
|
+
writeEngramFile(absPath, newFile, language);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// intentional:派生段失败不阻塞业务逻辑
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=obsidian-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-links.js","sourceRoot":"","sources":["../../src/storage/obsidian-links.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/path.d.ts
CHANGED
|
@@ -48,4 +48,28 @@ export declare function deriveAllFilePaths(relativePath: string): {
|
|
|
48
48
|
meta: string;
|
|
49
49
|
synapses: string;
|
|
50
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* 把相对路径安全地拼到仓库根目录下,拒绝 `..` 逃逸(path traversal 防御)。
|
|
53
|
+
*
|
|
54
|
+
* 威胁模型:
|
|
55
|
+
* - 调用方传入 `pathHint='../etc/passwd'` 或 domainTag=`'..'`
|
|
56
|
+
* - 直接 `join(root, '../etc/passwd')` 会跳出 root,读写任意文件
|
|
57
|
+
*
|
|
58
|
+
* 防御:
|
|
59
|
+
* 1. normalize 后用 `relative(root, abs)` 检查结果不以 `..` 开头
|
|
60
|
+
* 2. 同时拒绝绝对路径(Windows 盘符 / POSIX `/`)与盘符相对路径(`C:foo`)
|
|
61
|
+
* 3. 拒绝 NUL 字节(防止截断攻击)
|
|
62
|
+
*
|
|
63
|
+
* @param root 仓库根目录(绝对路径)
|
|
64
|
+
* @param relativePath 用户/调用方传入的相对路径
|
|
65
|
+
* @returns 安全的绝对路径
|
|
66
|
+
* @throws 若 relativePath 试图逃逸 root 或含非法字符
|
|
67
|
+
*/
|
|
68
|
+
export declare function safeJoinWithinRoot(root: string, relativePath: string): string;
|
|
69
|
+
/**
|
|
70
|
+
* 校验相对路径是否在 root 内(不抛错,返回 boolean)。
|
|
71
|
+
*
|
|
72
|
+
* 用于 readEngram 等读取场景:resolvePath 拿到 stableId 后,先校验路径合法性。
|
|
73
|
+
*/
|
|
74
|
+
export declare function isPathWithinRoot(root: string, relativePath: string): boolean;
|
|
51
75
|
//# sourceMappingURL=path.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/storage/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/storage/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAM5D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,YAAY,CAAC,GACrD,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAMA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAsB7E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAO5E"}
|
package/dist/storage/path.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module @co-engram/core/storage
|
|
14
14
|
*/
|
|
15
|
+
import { resolve, normalize, relative, sep } from "node:path";
|
|
15
16
|
import { slugify } from "../types/slugify.js";
|
|
16
17
|
/** 最大 domainTags 深度(防止路径过深) */
|
|
17
18
|
const MAX_DOMAIN_DEPTH = 3;
|
|
@@ -69,4 +70,56 @@ export function deriveAllFilePaths(relativePath) {
|
|
|
69
70
|
synapses: deriveSynapsesFilePath(relativePath),
|
|
70
71
|
};
|
|
71
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* 把相对路径安全地拼到仓库根目录下,拒绝 `..` 逃逸(path traversal 防御)。
|
|
75
|
+
*
|
|
76
|
+
* 威胁模型:
|
|
77
|
+
* - 调用方传入 `pathHint='../etc/passwd'` 或 domainTag=`'..'`
|
|
78
|
+
* - 直接 `join(root, '../etc/passwd')` 会跳出 root,读写任意文件
|
|
79
|
+
*
|
|
80
|
+
* 防御:
|
|
81
|
+
* 1. normalize 后用 `relative(root, abs)` 检查结果不以 `..` 开头
|
|
82
|
+
* 2. 同时拒绝绝对路径(Windows 盘符 / POSIX `/`)与盘符相对路径(`C:foo`)
|
|
83
|
+
* 3. 拒绝 NUL 字节(防止截断攻击)
|
|
84
|
+
*
|
|
85
|
+
* @param root 仓库根目录(绝对路径)
|
|
86
|
+
* @param relativePath 用户/调用方传入的相对路径
|
|
87
|
+
* @returns 安全的绝对路径
|
|
88
|
+
* @throws 若 relativePath 试图逃逸 root 或含非法字符
|
|
89
|
+
*/
|
|
90
|
+
export function safeJoinWithinRoot(root, relativePath) {
|
|
91
|
+
if (typeof relativePath !== "string" || relativePath.length === 0) {
|
|
92
|
+
throw new Error("safeJoinWithinRoot: relativePath is empty");
|
|
93
|
+
}
|
|
94
|
+
if (relativePath.includes("\0")) {
|
|
95
|
+
throw new Error(`safeJoinWithinRoot: NUL byte in path`);
|
|
96
|
+
}
|
|
97
|
+
// 拒绝绝对路径(POSIX `/` 与 Windows `C:\\` / `C:foo`)
|
|
98
|
+
if (relativePath.startsWith("/") || /^[a-zA-Z]:[\\/]/.test(relativePath) || /^[a-zA-Z]:[^\\/]/.test(relativePath)) {
|
|
99
|
+
throw new Error(`safeJoinWithinRoot: absolute path not allowed: ${relativePath}`);
|
|
100
|
+
}
|
|
101
|
+
const absRoot = resolve(root);
|
|
102
|
+
const absTarget = normalize(resolve(absRoot, relativePath));
|
|
103
|
+
const rel = relative(absRoot, absTarget);
|
|
104
|
+
// rel === '' 表示 absTarget === absRoot(自身,合法)
|
|
105
|
+
// rel 不以 `..` 开头且不以 `..${sep}` 开头 → 仍在 root 内
|
|
106
|
+
if (rel === ".." || rel.startsWith(`..${sep}`)) {
|
|
107
|
+
throw new Error(`safeJoinWithinRoot: path escapes root (root=${absRoot}, target=${absTarget})`);
|
|
108
|
+
}
|
|
109
|
+
return absTarget;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 校验相对路径是否在 root 内(不抛错,返回 boolean)。
|
|
113
|
+
*
|
|
114
|
+
* 用于 readEngram 等读取场景:resolvePath 拿到 stableId 后,先校验路径合法性。
|
|
115
|
+
*/
|
|
116
|
+
export function isPathWithinRoot(root, relativePath) {
|
|
117
|
+
try {
|
|
118
|
+
safeJoinWithinRoot(root, relativePath);
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
72
125
|
//# sourceMappingURL=path.js.map
|
package/dist/storage/path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/storage/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/storage/path.ts"],"names":[],"mappings":"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"}
|