@jim80net/memex-core 0.4.0 → 0.6.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 +42 -0
- package/dist/cache.js +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/origin.d.ts +137 -0
- package/dist/origin.d.ts.map +1 -0
- package/dist/origin.js +490 -0
- package/dist/origin.js.map +1 -0
- package/dist/portable-location.d.ts +84 -0
- package/dist/portable-location.d.ts.map +1 -0
- package/dist/portable-location.js +248 -0
- package/dist/portable-location.js.map +1 -0
- package/dist/skill-index.d.ts +19 -1
- package/dist/skill-index.d.ts.map +1 -1
- package/dist/skill-index.js +97 -33
- package/dist/skill-index.js.map +1 -1
- package/dist/types.d.ts +98 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -174,6 +174,48 @@ boost: 0.05
|
|
|
174
174
|
|
|
175
175
|
Consumers typically extend `MemexCoreConfig` with platform-specific fields (hooks config, sync config, sleep schedule, etc.) and handle file loading themselves.
|
|
176
176
|
|
|
177
|
+
## Shared origin + projection
|
|
178
|
+
|
|
179
|
+
Harness-neutral primitives for a **shared origin** corpus and **symlink projection** into harness dirs (file-shaped rules/skills; provenance via `readlink`). Design: `design/shared-origin-sync-profile.md`.
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
import {
|
|
183
|
+
resolveOriginRoot,
|
|
184
|
+
planProjection,
|
|
185
|
+
applyProjection,
|
|
186
|
+
materializeEntry,
|
|
187
|
+
} from "@jim80net/memex-core";
|
|
188
|
+
|
|
189
|
+
const { root } = await resolveOriginRoot(); // default ~/.memex (+ XDG / memex-claude fallbacks)
|
|
190
|
+
|
|
191
|
+
await materializeEntry(root, {
|
|
192
|
+
kind: "rule",
|
|
193
|
+
originRelPath: "rules/my-rule.md",
|
|
194
|
+
content: "---\nname: my-rule\ntype: rule\n---\n…\n",
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
const plan = await planProjection(root, [
|
|
198
|
+
{
|
|
199
|
+
id: "user-rules",
|
|
200
|
+
targetDir: `${process.env.HOME}/.grok/rules`,
|
|
201
|
+
originRelDir: "rules",
|
|
202
|
+
entryKind: "files",
|
|
203
|
+
},
|
|
204
|
+
]);
|
|
205
|
+
// Partial apply: non-conflicting links applied; real files never clobbered
|
|
206
|
+
const report = await applyProjection(plan);
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
| API | Role |
|
|
210
|
+
|-----|------|
|
|
211
|
+
| `resolveOriginRoot` | Default `~/.memex`; env `MEMEX_ORIGIN`; fallbacks XDG `memex` then legacy `memex-claude` |
|
|
212
|
+
| `planProjection` / `applyProjection` | Per-entry **absolute** symlinks; fail-closed on real files; partial apply + conflict report |
|
|
213
|
+
| `materializeEntry` | Write rule/skill/memory into origin (per-file lock; no commit) |
|
|
214
|
+
| `commitOriginPaths` | Optional git commit of origin-relative paths (no push) |
|
|
215
|
+
| `migrateOriginToDefault` | Move legacy corpus → `~/.memex` + one-release compat symlink |
|
|
216
|
+
|
|
217
|
+
Adapters own harness paths and CLI/doctor; core stays path-agnostic except the product-default origin chain.
|
|
218
|
+
|
|
177
219
|
## Sync
|
|
178
220
|
|
|
179
221
|
The `sync` module provides Git-based cross-device sync via `syncPull` and `syncCommitAndPush`. Both accept a `SyncConfig` object.
|
package/dist/cache.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { randomBytes } from "node:crypto";
|
|
2
2
|
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
|
-
const CACHE_VERSION =
|
|
4
|
+
const CACHE_VERSION = 3;
|
|
5
5
|
export async function loadCache(cachePath, embeddingModel) {
|
|
6
6
|
const empty = { version: CACHE_VERSION, embeddingModel, skills: {} };
|
|
7
7
|
try {
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,15 @@ export * from "./cache.js";
|
|
|
2
2
|
export * from "./config.js";
|
|
3
3
|
export * from "./embeddings.js";
|
|
4
4
|
export * from "./file-lock.js";
|
|
5
|
+
export type { ApplyProjectionOptions, ApplyProjectionResult, CommitOriginResult, InstallLegacyCompatResult, MigrateOriginResult, OriginRootSource, PlanProjectionOptions, ResolvedOriginRoot, ResolveOriginRootOptions, } from "./origin.js";
|
|
6
|
+
export { applyProjection, commitOriginPaths, defaultOriginRoot, expandUserPath, installLegacyOriginCompatSymlink, isPathInsideRoot, legacyClaudeOriginRoot, materializeEntry, migrateOriginToDefault, planProjection, resolveOriginRoot, resolveUnderOrigin, toAbsolutePath, } from "./origin.js";
|
|
5
7
|
export * from "./path-encoder.js";
|
|
8
|
+
export type { HarnessKind, PortableLocationWarn, ResolvedPortableLocation, ScanRoot, ScanRootContext, ScanRootRegistry, ScanRootSpec, } from "./portable-location.js";
|
|
9
|
+
export { buildScanRoots, decodeFragment, decodePortableLocation, decodePortableLocationResolved, encodeFragment, encodePortableLocation, escapePortableText, HANDLE_PREFIX, resolvePortableLocation, resolvePortableLocationResolved, splitPortableHandle, stableUnclassifiedKey, unescapePortableText, } from "./portable-location.js";
|
|
6
10
|
export * from "./project-mapping.js";
|
|
7
11
|
export * from "./project-registry.js";
|
|
8
12
|
export * from "./session.js";
|
|
9
|
-
export type { ScanDirs } from "./skill-index.js";
|
|
13
|
+
export type { ScanDirs, SkillIndexOptions } from "./skill-index.js";
|
|
10
14
|
export { parseFrontmatter, parseMemoryFile, SkillIndex } from "./skill-index.js";
|
|
11
15
|
export { autoResolveMarkdownConflict, getSyncScanDirs, initSyncRepo, syncCommitAndPush, syncPull, } from "./sync.js";
|
|
12
16
|
export type { MigrationResult } from "./sync-migration.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gCAAgC,EAChC,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,cAAc,mBAAmB,CAAC;AAClC,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,wBAAwB,EACxB,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,8BAA8B,EAC9B,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,+BAA+B,EAC/B,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,9 @@ export * from "./cache.js";
|
|
|
2
2
|
export * from "./config.js";
|
|
3
3
|
export * from "./embeddings.js";
|
|
4
4
|
export * from "./file-lock.js";
|
|
5
|
+
export { applyProjection, commitOriginPaths, defaultOriginRoot, expandUserPath, installLegacyOriginCompatSymlink, isPathInsideRoot, legacyClaudeOriginRoot, materializeEntry, migrateOriginToDefault, planProjection, resolveOriginRoot, resolveUnderOrigin, toAbsolutePath, } from "./origin.js";
|
|
5
6
|
export * from "./path-encoder.js";
|
|
7
|
+
export { buildScanRoots, decodeFragment, decodePortableLocation, decodePortableLocationResolved, encodeFragment, encodePortableLocation, escapePortableText, HANDLE_PREFIX, resolvePortableLocation, resolvePortableLocationResolved, splitPortableHandle, stableUnclassifiedKey, unescapePortableText, } from "./portable-location.js";
|
|
6
8
|
export * from "./project-mapping.js";
|
|
7
9
|
export * from "./project-registry.js";
|
|
8
10
|
export * from "./session.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAY/B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gCAAgC,EAChC,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,cAAc,mBAAmB,CAAC;AAUlC,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,8BAA8B,EAC9B,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,+BAA+B,EAC/B,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
|
package/dist/origin.d.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared origin root resolution, symlink projection, and materialize writes.
|
|
3
|
+
*
|
|
4
|
+
* Design: design/shared-origin-sync-profile.md (XO-gated 2026-07-10).
|
|
5
|
+
* Locked: ~/.memex default + resolver; absolute symlinks v1; partial apply
|
|
6
|
+
* + report conflicts; one-release memex-claude → ~/.memex compat symlink.
|
|
7
|
+
*/
|
|
8
|
+
import type { MaterializeInput, MaterializeResult, ProjectConflict, ProjectionTarget, ProjectPlan } from "./types.js";
|
|
9
|
+
export type OriginRootSource = "explicit" | "env" | "default" | "xdg" | "legacy-claude";
|
|
10
|
+
export type ResolveOriginRootOptions = {
|
|
11
|
+
/** Explicit root from profile.origin.root (absolute or ~/…). */
|
|
12
|
+
root?: string;
|
|
13
|
+
/** Override homedir (tests). */
|
|
14
|
+
homeDir?: string;
|
|
15
|
+
/** Override process.env (tests). */
|
|
16
|
+
env?: NodeJS.ProcessEnv;
|
|
17
|
+
/**
|
|
18
|
+
* When nothing exists on disk, still return the product default path
|
|
19
|
+
* (`~/.memex`). Default true.
|
|
20
|
+
*/
|
|
21
|
+
preferDefaultWhenMissing?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export type ResolvedOriginRoot = {
|
|
24
|
+
root: string;
|
|
25
|
+
source: OriginRootSource;
|
|
26
|
+
/** Whether the resolved path currently exists. */
|
|
27
|
+
exists: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Expand `~/…` against homeDir; leave other paths for resolve().
|
|
31
|
+
*/
|
|
32
|
+
export declare function expandUserPath(path: string, homeDir: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve to an absolute path. Rejects empty input.
|
|
35
|
+
*/
|
|
36
|
+
export declare function toAbsolutePath(path: string, homeDir: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* True when `candidate` is exactly `root` or a path under `root`
|
|
39
|
+
* (after resolve). Does not follow symlinks on the inputs.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isPathInsideRoot(root: string, candidate: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Join origin root + relative path with traversal rejection.
|
|
44
|
+
* `relPath` must not be absolute and must stay under root.
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveUnderOrigin(originRoot: string, relPath: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the shared origin root.
|
|
49
|
+
*
|
|
50
|
+
* Precedence (XO-locked):
|
|
51
|
+
* 1. explicit `opts.root`
|
|
52
|
+
* 2. env `MEMEX_ORIGIN`
|
|
53
|
+
* 3. existing `~/.memex`
|
|
54
|
+
* 4. existing `~/.local/share/memex` (XDG / historical grok default)
|
|
55
|
+
* 5. existing `~/.local/share/memex-claude` (legacy live corpus)
|
|
56
|
+
* 6. product default `~/.memex` (may not exist yet)
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveOriginRoot(opts?: ResolveOriginRootOptions): Promise<ResolvedOriginRoot>;
|
|
59
|
+
/** Product-default origin path for a given home (does not touch the filesystem). */
|
|
60
|
+
export declare function defaultOriginRoot(homeDir?: string): string;
|
|
61
|
+
/** Legacy claude corpus path (compat / migrate source). */
|
|
62
|
+
export declare function legacyClaudeOriginRoot(homeDir?: string): string;
|
|
63
|
+
export type PlanProjectionOptions = {
|
|
64
|
+
/** Default true — replace managed symlinks that point under origin. */
|
|
65
|
+
relinkManaged?: boolean;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Build a projection plan: which dirs to ensure, which links to create/relink/noop,
|
|
69
|
+
* and which paths conflict (fail-closed — never clobber real files).
|
|
70
|
+
*/
|
|
71
|
+
export declare function planProjection(originRoot: string, targets: ProjectionTarget[], opts?: PlanProjectionOptions): Promise<ProjectPlan>;
|
|
72
|
+
export type ApplyProjectionOptions = {
|
|
73
|
+
/** v1: only "fail-closed" — conflicts are never applied. */
|
|
74
|
+
onClobber?: "fail-closed";
|
|
75
|
+
};
|
|
76
|
+
export type ApplyProjectionResult = {
|
|
77
|
+
linked: number;
|
|
78
|
+
skipped: number;
|
|
79
|
+
conflicts: ProjectConflict[];
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Apply a projection plan with **partial success**: non-conflicting links are
|
|
83
|
+
* applied; conflicts are reported and never applied (XO-locked).
|
|
84
|
+
*
|
|
85
|
+
* Symlinks are **absolute** (v1).
|
|
86
|
+
*/
|
|
87
|
+
export declare function applyProjection(plan: ProjectPlan, _opts?: ApplyProjectionOptions): Promise<ApplyProjectionResult>;
|
|
88
|
+
/**
|
|
89
|
+
* Write one corpus entry under origin.root with per-file lock.
|
|
90
|
+
* Does not commit. Rejects path traversal outside origin.
|
|
91
|
+
*/
|
|
92
|
+
export declare function materializeEntry(originRoot: string, input: MaterializeInput): Promise<MaterializeResult>;
|
|
93
|
+
export type CommitOriginResult = "committed" | "no-changes" | "not-a-repo" | `failed: ${string}`;
|
|
94
|
+
/**
|
|
95
|
+
* Stage and commit specific origin-relative paths when origin is a git repo.
|
|
96
|
+
* Does not push.
|
|
97
|
+
*/
|
|
98
|
+
export declare function commitOriginPaths(originRoot: string, relPaths: string[], message: string): Promise<CommitOriginResult>;
|
|
99
|
+
export type InstallLegacyCompatResult = "created" | "already" | "conflict" | "skipped-missing-default";
|
|
100
|
+
/**
|
|
101
|
+
* Install one-release backward-compat symlink:
|
|
102
|
+
* `~/.local/share/memex-claude` → `~/.memex` (or custom paths).
|
|
103
|
+
*
|
|
104
|
+
* Fail-closed if legacy path is a real file/dir (non-link).
|
|
105
|
+
*/
|
|
106
|
+
export declare function installLegacyOriginCompatSymlink(defaultRoot: string, opts?: {
|
|
107
|
+
legacyPath?: string;
|
|
108
|
+
homeDir?: string;
|
|
109
|
+
}): Promise<InstallLegacyCompatResult>;
|
|
110
|
+
export type MigrateOriginResult = {
|
|
111
|
+
status: "migrated";
|
|
112
|
+
from: string;
|
|
113
|
+
to: string;
|
|
114
|
+
compat: InstallLegacyCompatResult;
|
|
115
|
+
} | {
|
|
116
|
+
status: "already-at-default";
|
|
117
|
+
root: string;
|
|
118
|
+
} | {
|
|
119
|
+
status: "source-missing";
|
|
120
|
+
from: string;
|
|
121
|
+
} | {
|
|
122
|
+
status: "destination-exists";
|
|
123
|
+
to: string;
|
|
124
|
+
} | {
|
|
125
|
+
status: "failed";
|
|
126
|
+
reason: string;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Move an existing origin tree to the product default (`~/.memex`) and
|
|
130
|
+
* optionally install the one-release legacy compat symlink.
|
|
131
|
+
*/
|
|
132
|
+
export declare function migrateOriginToDefault(opts?: {
|
|
133
|
+
from?: string;
|
|
134
|
+
homeDir?: string;
|
|
135
|
+
installCompatSymlink?: boolean;
|
|
136
|
+
}): Promise<MigrateOriginResult>;
|
|
137
|
+
//# sourceMappingURL=origin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../src/origin.ts"],"names":[],"mappings":"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"}
|