@jim80net/memex-core 0.5.0 → 0.6.1

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 CHANGED
@@ -148,10 +148,11 @@ hooks:
148
148
  - PreToolUse
149
149
  one-liner: Short reminder text for repeated matches
150
150
  boost: 0.05
151
+ status: active # active | retired; retired entries stay readable but are inactive by default
151
152
  ---
152
153
  ```
153
154
 
154
- `queries` and `keywords` are embedded and used for similarity search. `one-liner` is used for graduated disclosure (full content on first match, one-liner on subsequent matches in the same session). `boost` is an optional float added to the raw similarity score before threshold comparison -- use it to nudge skills that are consistently near the threshold boundary.
155
+ `queries` and `keywords` are embedded and used for similarity search. `one-liner` is used for graduated disclosure (full content on first match, one-liner on subsequent matches in the same session). `boost` is an optional float added to the raw similarity score before threshold comparison -- use it to nudge skills that are consistently near the threshold boundary. `status: retired` keeps an entry available for direct historical reads while excluding it from default search and harness projection. Legacy descriptions beginning with `RETIRED` receive the same treatment until corpus migration adds structured status.
155
156
 
156
157
  ## Configuration
157
158
 
@@ -174,6 +175,48 @@ boost: 0.05
174
175
 
175
176
  Consumers typically extend `MemexCoreConfig` with platform-specific fields (hooks config, sync config, sleep schedule, etc.) and handle file loading themselves.
176
177
 
178
+ ## Shared origin + projection
179
+
180
+ 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`.
181
+
182
+ ```typescript
183
+ import {
184
+ resolveOriginRoot,
185
+ planProjection,
186
+ applyProjection,
187
+ materializeEntry,
188
+ } from "@jim80net/memex-core";
189
+
190
+ const { root } = await resolveOriginRoot(); // default ~/.memex (+ XDG / memex-claude fallbacks)
191
+
192
+ await materializeEntry(root, {
193
+ kind: "rule",
194
+ originRelPath: "rules/my-rule.md",
195
+ content: "---\nname: my-rule\ntype: rule\n---\n…\n",
196
+ });
197
+
198
+ const plan = await planProjection(root, [
199
+ {
200
+ id: "user-rules",
201
+ targetDir: `${process.env.HOME}/.grok/rules`,
202
+ originRelDir: "rules",
203
+ entryKind: "files",
204
+ },
205
+ ]);
206
+ // Partial apply: non-conflicting links applied; real files never clobbered
207
+ const report = await applyProjection(plan);
208
+ ```
209
+
210
+ | API | Role |
211
+ |-----|------|
212
+ | `resolveOriginRoot` | Default `~/.memex`; env `MEMEX_ORIGIN`; fallbacks XDG `memex` then legacy `memex-claude` |
213
+ | `planProjection` / `applyProjection` | Per-entry **absolute** symlinks; fail-closed on real files; partial apply + conflict report |
214
+ | `materializeEntry` | Write rule/skill/memory into origin (per-file lock; no commit) |
215
+ | `commitOriginPaths` | Optional git commit of origin-relative paths (no push) |
216
+ | `migrateOriginToDefault` | Move legacy corpus → `~/.memex` + one-release compat symlink |
217
+
218
+ Adapters own harness paths and CLI/doctor; core stays path-agnostic except the product-default origin chain.
219
+
177
220
  ## Sync
178
221
 
179
222
  The `sync` module provides Git-based cross-device sync via `syncPull` and `syncCommitAndPush`. Both accept a `SyncConfig` object.
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIvE,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAY7F;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE1F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAE3F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAW7E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,CAWnF"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIvE,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAY7F;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE1F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAE3F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAY7E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,CAYnF"}
package/dist/cache.js CHANGED
@@ -1,6 +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
+ import { resolveEntryLifecycle } from "./lifecycle.js";
4
5
  const CACHE_VERSION = 3;
5
6
  export async function loadCache(cachePath, embeddingModel) {
6
7
  const empty = { version: CACHE_VERSION, embeddingModel, skills: {} };
@@ -42,6 +43,7 @@ export function toCachedSkill(skill, mtime) {
42
43
  type: skill.type,
43
44
  oneLiner: skill.oneLiner,
44
45
  boost: skill.boost,
46
+ lifecycle: resolveEntryLifecycle(skill.lifecycle, skill.description),
45
47
  };
46
48
  }
47
49
  export function fromCachedSkill(location, cached) {
@@ -54,6 +56,7 @@ export function fromCachedSkill(location, cached) {
54
56
  queries: cached.queries,
55
57
  oneLiner: cached.oneLiner,
56
58
  boost: cached.boost,
59
+ lifecycle: resolveEntryLifecycle(cached.lifecycle, cached.description),
57
60
  };
58
61
  }
59
62
  //# sourceMappingURL=cache.js.map
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,aAAa,GAAG,CAAU,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAiB,EAAE,cAAsB;IACvE,MAAM,KAAK,GAAc,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAChF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;QAC1C,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;YAC7E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAiB,EAAE,IAAe;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACrE,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAgB,EAAE,QAAgB;IAC/D,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAgB,EAAE,QAAgB,EAAE,KAAkB;IACnF,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAgB,EAAE,QAAgB;IAClE,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,KAAa;IAC9D,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,MAAmB;IACnE,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ;QACR,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function unquoteFrontmatterScalar(value: string): string;
2
+ export declare function normalizeFrontmatterScalar(lines: string[], lineIndex: number, rawValue: string): {
3
+ value: string;
4
+ nextIndex: number;
5
+ };
6
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA0BtC"}
@@ -0,0 +1,29 @@
1
+ const BLOCK_SCALAR_INDICATOR = /^[>|][+-]?$/;
2
+ export function unquoteFrontmatterScalar(value) {
3
+ return value.replace(/^["']|["']$/g, "");
4
+ }
5
+ export function normalizeFrontmatterScalar(lines, lineIndex, rawValue) {
6
+ if (!BLOCK_SCALAR_INDICATOR.test(rawValue)) {
7
+ return { value: unquoteFrontmatterScalar(rawValue), nextIndex: lineIndex + 1 };
8
+ }
9
+ const blockLines = [];
10
+ let nextIndex = lineIndex + 1;
11
+ while (nextIndex < lines.length) {
12
+ const line = lines[nextIndex];
13
+ if (line.trim() !== "" && !/^\s/.test(line))
14
+ break;
15
+ blockLines.push(line);
16
+ nextIndex += 1;
17
+ }
18
+ const contentIndents = blockLines
19
+ .filter((line) => line.trim() !== "")
20
+ .map((line) => line.match(/^\s*/)?.[0].length ?? 0);
21
+ const indent = contentIndents.length > 0 ? Math.min(...contentIndents) : 0;
22
+ const value = blockLines
23
+ .map((line) => line.slice(Math.min(indent, line.length)))
24
+ .join("\n")
25
+ .trim()
26
+ .replace(/\s+/g, " ");
27
+ return { value, nextIndex };
28
+ }
29
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,aAAa,CAAC;AAE7C,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAe,EACf,SAAiB,EACjB,QAAgB;IAEhB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,EAAE,CAAC;IACjF,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IAE9B,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM;QACnD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,SAAS,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,cAAc,GAAG,UAAU;SAC9B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;SACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,UAAU;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SACxD,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE;SACN,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAExB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,6 +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 * from "./lifecycle.js";
6
+ export type { ApplyProjectionOptions, ApplyProjectionResult, CommitOriginResult, InstallLegacyCompatResult, MigrateOriginResult, OriginRootSource, PlanProjectionOptions, ResolvedOriginRoot, ResolveOriginRootOptions, } from "./origin.js";
7
+ export { applyProjection, commitOriginPaths, defaultOriginRoot, expandUserPath, installLegacyOriginCompatSymlink, isPathInsideRoot, legacyClaudeOriginRoot, materializeEntry, migrateOriginToDefault, planProjection, resolveOriginRoot, resolveUnderOrigin, toAbsolutePath, } from "./origin.js";
5
8
  export * from "./path-encoder.js";
6
9
  export type { HarnessKind, PortableLocationWarn, ResolvedPortableLocation, ScanRoot, ScanRootContext, ScanRootRegistry, ScanRootSpec, } from "./portable-location.js";
7
10
  export { buildScanRoots, decodeFragment, decodePortableLocation, decodePortableLocationResolved, encodeFragment, encodePortableLocation, escapePortableText, HANDLE_PREFIX, resolvePortableLocation, resolvePortableLocationResolved, splitPortableHandle, stableUnclassifiedKey, unescapePortableText, } from "./portable-location.js";
@@ -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,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"}
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,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,6 +2,8 @@ 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 * from "./lifecycle.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";
6
8
  export { buildScanRoots, decodeFragment, decodePortableLocation, decodePortableLocationResolved, encodeFragment, encodePortableLocation, escapePortableText, HANDLE_PREFIX, resolvePortableLocation, resolvePortableLocationResolved, splitPortableHandle, stableUnclassifiedKey, unescapePortableText, } from "./portable-location.js";
7
9
  export * from "./project-mapping.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;AAC/B,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"}
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;AAC/B,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"}
@@ -0,0 +1,9 @@
1
+ import type { EntryLifecycle } from "./types.js";
2
+ /**
3
+ * Resolve lifecycle with a compatibility bridge for existing corpus entries
4
+ * whose retirement was encoded only in the description.
5
+ */
6
+ export declare function resolveEntryLifecycle(lifecycle: unknown, description: string | undefined): EntryLifecycle;
7
+ /** Read only the lifecycle-bearing scalar frontmatter fields from markdown. */
8
+ export declare function parseEntryLifecycle(content: string): EntryLifecycle;
9
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,cAAc,CAIhB;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAqBnE"}
@@ -0,0 +1,38 @@
1
+ import { normalizeFrontmatterScalar, unquoteFrontmatterScalar } from "./frontmatter.js";
2
+ const LEGACY_RETIRED_PREFIX = /^retired(?:\s|\b)/i;
3
+ /**
4
+ * Resolve lifecycle with a compatibility bridge for existing corpus entries
5
+ * whose retirement was encoded only in the description.
6
+ */
7
+ export function resolveEntryLifecycle(lifecycle, description) {
8
+ if (lifecycle === "retired")
9
+ return "retired";
10
+ if (lifecycle === "active")
11
+ return "active";
12
+ return description && LEGACY_RETIRED_PREFIX.test(description.trim()) ? "retired" : "active";
13
+ }
14
+ /** Read only the lifecycle-bearing scalar frontmatter fields from markdown. */
15
+ export function parseEntryLifecycle(content) {
16
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);
17
+ if (!match)
18
+ return "active";
19
+ let lifecycle;
20
+ let description;
21
+ const lines = match[1].split(/\r?\n/);
22
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {
23
+ const line = lines[lineIndex];
24
+ const scalar = line.match(/^([A-Za-z][\w-]*):\s*(.*?)\s*$/);
25
+ if (!scalar)
26
+ continue;
27
+ if (scalar[1] === "status") {
28
+ lifecycle = unquoteFrontmatterScalar(scalar[2]).trim().toLowerCase();
29
+ }
30
+ if (scalar[1] === "description") {
31
+ const parsed = normalizeFrontmatterScalar(lines, lineIndex, scalar[2]);
32
+ description = parsed.value;
33
+ lineIndex = parsed.nextIndex - 1;
34
+ }
35
+ }
36
+ return resolveEntryLifecycle(lifecycle, description);
37
+ }
38
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAGxF,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAkB,EAClB,WAA+B;IAE/B,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,SAAS,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC5C,OAAO,WAAW,IAAI,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9F,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAE5B,IAAI,SAA6B,CAAC;IAClC,IAAI,WAA+B,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3B,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvE,CAAC;QACD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,138 @@
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
+ removed: number;
79
+ skipped: number;
80
+ conflicts: ProjectConflict[];
81
+ };
82
+ /**
83
+ * Apply a projection plan with **partial success**: non-conflicting links are
84
+ * applied; conflicts are reported and never applied (XO-locked).
85
+ *
86
+ * Symlinks are **absolute** (v1).
87
+ */
88
+ export declare function applyProjection(plan: ProjectPlan, _opts?: ApplyProjectionOptions): Promise<ApplyProjectionResult>;
89
+ /**
90
+ * Write one corpus entry under origin.root with per-file lock.
91
+ * Does not commit. Rejects path traversal outside origin.
92
+ */
93
+ export declare function materializeEntry(originRoot: string, input: MaterializeInput): Promise<MaterializeResult>;
94
+ export type CommitOriginResult = "committed" | "no-changes" | "not-a-repo" | `failed: ${string}`;
95
+ /**
96
+ * Stage and commit specific origin-relative paths when origin is a git repo.
97
+ * Does not push.
98
+ */
99
+ export declare function commitOriginPaths(originRoot: string, relPaths: string[], message: string): Promise<CommitOriginResult>;
100
+ export type InstallLegacyCompatResult = "created" | "already" | "conflict" | "skipped-missing-default";
101
+ /**
102
+ * Install one-release backward-compat symlink:
103
+ * `~/.local/share/memex-claude` → `~/.memex` (or custom paths).
104
+ *
105
+ * Fail-closed if legacy path is a real file/dir (non-link).
106
+ */
107
+ export declare function installLegacyOriginCompatSymlink(defaultRoot: string, opts?: {
108
+ legacyPath?: string;
109
+ homeDir?: string;
110
+ }): Promise<InstallLegacyCompatResult>;
111
+ export type MigrateOriginResult = {
112
+ status: "migrated";
113
+ from: string;
114
+ to: string;
115
+ compat: InstallLegacyCompatResult;
116
+ } | {
117
+ status: "already-at-default";
118
+ root: string;
119
+ } | {
120
+ status: "source-missing";
121
+ from: string;
122
+ } | {
123
+ status: "destination-exists";
124
+ to: string;
125
+ } | {
126
+ status: "failed";
127
+ reason: string;
128
+ };
129
+ /**
130
+ * Move an existing origin tree to the product default (`~/.memex`) and
131
+ * optionally install the one-release legacy compat symlink.
132
+ */
133
+ export declare function migrateOriginToDefault(opts?: {
134
+ from?: string;
135
+ homeDir?: string;
136
+ installCompatSymlink?: boolean;
137
+ }): Promise<MigrateOriginResult>;
138
+ //# 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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"}