imprnt 0.1.3-edge.48 → 0.1.3-edge.53

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.
Files changed (3) hide show
  1. package/dist/cli.js +20 -7
  2. package/dist/imp.js +20 -7
  3. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -302,7 +302,7 @@ function purgePlugin(projectRoot, name) {
302
302
  var OFFICIAL;
303
303
  var init_install = __esm(() => {
304
304
  init_plugins();
305
- OFFICIAL = ["anti-slop", "character", "whenful", "timemachine", "statusline", "telegram"];
305
+ OFFICIAL = ["anti-slop", "character", "whenful", "timemachine", "statusline", "telegram", "kopeika"];
306
306
  });
307
307
 
308
308
  // scripts/lib/global.ts
@@ -2014,6 +2014,7 @@ var exports_check = {};
2014
2014
  import { readdirSync as readdirSync8, readFileSync as readFileSync13, statSync as statSync8, existsSync as existsSync12, writeFileSync as writeFileSync9 } from "node:fs";
2015
2015
  import { spawnSync as spawnSync3 } from "node:child_process";
2016
2016
  import { join as join14, relative as relative6, dirname as dirname3 } from "node:path";
2017
+ import { homedir as homedir3 } from "node:os";
2017
2018
  function resolves(target) {
2018
2019
  const t = target.trim().replace(/^\.\//, "").replace(/\.md$/, "");
2019
2020
  if (!t)
@@ -2075,7 +2076,7 @@ ${REVIEW_END}
2075
2076
  writeFileSync9(p, next);
2076
2077
  return lines2.length ? "written" : "cleared";
2077
2078
  }
2078
- var args4, vault4, all = false, ENTITY_FOLDERS, DOMAIN_FOLDERS2, LINK, notes, allSlugs, folderOf, byBasename, orphans, disconnected, domainIssues, untagged, review, referencedRaw, tagVocab, hasRealTag = (tags) => tags.some((t) => /[\p{L}\p{N}]/u.test(normalize(tagVocab, t))), hasTagsFile, addedTags, dupPairs, manifest3, rawEntries, norm = (p) => p.replace(/^\.\//, "").replace(/^.*\/raw\//, "raw/").replace(/\.md$/, ""), refNorm, uncovered, REVIEW_BEGIN = "<!-- imprnt-check:begin (regenerated by `imprnt check` - do not edit between the markers) -->", REVIEW_END = "<!-- imprnt-check:end -->", cap = (xs, n = 25) => xs.slice(0, n).concat(xs.length > n ? [` … +${xs.length - n} more`] : []), count, folders, synced, issues;
2079
+ var args4, vault4, all = false, ENTITY_FOLDERS, DOMAIN_FOLDERS2, LINK, notes, allSlugs, folderOf, byBasename, orphans, disconnected, domainIssues, untagged, review, referencedRaw, tagVocab, hasRealTag = (tags) => tags.some((t) => /[\p{L}\p{N}]/u.test(normalize(tagVocab, t))), hasTagsFile, addedTags, dupPairs, manifest3, rawEntries, norm = (p) => p.replace(/^\.\//, "").replace(/^.*\/raw\//, "raw/").replace(/\.md$/, ""), refNorm, uncovered, hostMemoryDir, strayMemory, REVIEW_BEGIN = "<!-- imprnt-check:begin (regenerated by `imprnt check` - do not edit between the markers) -->", REVIEW_END = "<!-- imprnt-check:end -->", cap = (xs, n = 25) => xs.slice(0, n).concat(xs.length > n ? [` … +${xs.length - n} more`] : []), count, folders, synced, issues;
2079
2080
  var init_check = __esm(() => {
2080
2081
  init_roots();
2081
2082
  init_moc();
@@ -2213,6 +2214,10 @@ var init_check = __esm(() => {
2213
2214
  uncovered = [...new Set(rawEntries.map(norm))].filter((r) => !refNorm.has(r)).sort();
2214
2215
  for (const r of uncovered)
2215
2216
  review.push(`- [ ] unclassified snapshot \`${r}\` — no vault note points back`);
2217
+ hostMemoryDir = process.env.IMPRNT_HOST_MEMORY_DIR ?? join14(homedir3(), ".claude", "projects", projectRoot().replace(/[/.]/g, "-"), "memory");
2218
+ strayMemory = existsSync12(hostMemoryDir) ? readdirSync8(hostMemoryDir).filter((f) => f.endsWith(".md") && f !== "MEMORY.md").sort() : [];
2219
+ if (strayMemory.length)
2220
+ review.push(`- [ ] host auto-memory not empty — ${strayMemory.length} note(s) in ${hostMemoryDir}; migrate knowledge → vault notes, behavior → a CLAUDE.local.md fragment, then empty it`);
2216
2221
  console.log(`imprnt check — ${notes.length} notes in ${vault4}
2217
2222
  `);
2218
2223
  if (orphans.length) {
@@ -2264,6 +2269,14 @@ var init_check = __esm(() => {
2264
2269
  } else
2265
2270
  console.log("✓ every raw snapshot has a derived note");
2266
2271
  }
2272
+ if (strayMemory.length) {
2273
+ console.log(`⚠ host auto-memory not empty (${strayMemory.length}) — a second store recall can't see, at ${hostMemoryDir}:`);
2274
+ console.log(cap(strayMemory.map((f) => " " + f)).join(`
2275
+ `));
2276
+ console.log(` migrate knowledge → vault notes, behavior → a CLAUDE.local.md fragment, then empty it.
2277
+ `);
2278
+ } else
2279
+ console.log(`✓ host auto-memory empty (vault is the only store) — checked ${hostMemoryDir}`);
2267
2280
  ({ count, folders } = generateIndex(vault4));
2268
2281
  console.log(`↻ regenerated index.md — ${count} notes across ${folders} folders`);
2269
2282
  synced = syncNeedsReview(review);
@@ -2271,7 +2284,7 @@ var init_check = __esm(() => {
2271
2284
  console.log(`↻ ${review.length} finding(s) → _needs-review.md (run \`imprnt hot\` to see them)`);
2272
2285
  else if (synced === "cleared")
2273
2286
  console.log("↻ cleared resolved findings from _needs-review.md");
2274
- issues = orphans.length + disconnected.length + domainIssues.length + untagged.length + uncovered.length + dupPairs.length;
2287
+ issues = orphans.length + disconnected.length + domainIssues.length + untagged.length + uncovered.length + dupPairs.length + strayMemory.length;
2275
2288
  console.log(issues ? `
2276
2289
  ${issues} thing(s) to look at above.` : `
2277
2290
  clean.`);
@@ -2324,7 +2337,7 @@ var exports_cli = {};
2324
2337
  import { cpSync as cpSync3, mkdirSync as mkdirSync5, existsSync as existsSync13, readFileSync as readFileSync14, lstatSync as lstatSync4, statSync as statSync9, realpathSync as realpathSync2 } from "node:fs";
2325
2338
  import { spawnSync as spawnSync4 } from "node:child_process";
2326
2339
  import { join as join15, dirname as dirname4, resolve as resolve6, basename as basename5 } from "node:path";
2327
- import { homedir as homedir3 } from "node:os";
2340
+ import { homedir as homedir4 } from "node:os";
2328
2341
  import { fileURLToPath } from "node:url";
2329
2342
  import { createInterface } from "node:readline/promises";
2330
2343
  function pluginRoot() {
@@ -2355,7 +2368,7 @@ function requireVaultHome() {
2355
2368
  }
2356
2369
  return home;
2357
2370
  }
2358
- function resolvePath(input, base = process.cwd(), home = homedir3()) {
2371
+ function resolvePath(input, base = process.cwd(), home = homedir4()) {
2359
2372
  let p = input;
2360
2373
  if (p === "~")
2361
2374
  p = home;
@@ -2587,7 +2600,7 @@ enable: imprnt plugin add <name> disable: imprnt plugin rm <name> [--purge]`);
2587
2600
  process.exit(1);
2588
2601
  }
2589
2602
  case "global": {
2590
- const globalDir = process.env.CLAUDE_CONFIG_DIR || join15(homedir3(), ".claude");
2603
+ const globalDir = process.env.CLAUDE_CONFIG_DIR || join15(homedir4(), ".claude");
2591
2604
  const [sub, ...gargs] = rest;
2592
2605
  if (sub === "list") {
2593
2606
  const enabled = listGlobalModules(globalDir);
@@ -2667,7 +2680,7 @@ enable: imprnt plugin add <name> disable: imprnt plugin rm <name> [--purge]`);
2667
2680
  } else if (process.stdin.isTTY && process.stdout.isTTY) {
2668
2681
  const inPlace = isVaultProject(process.cwd());
2669
2682
  const display = inPlace ? process.cwd() : "~/imprnt";
2670
- const fallback = inPlace ? process.cwd() : join15(homedir3(), "imprnt");
2683
+ const fallback = inPlace ? process.cwd() : join15(homedir4(), "imprnt");
2671
2684
  const rl = createInterface({ input: process.stdin, output: process.stdout });
2672
2685
  const answer = (await rl.question(`vault location [${display}]: `)).trim();
2673
2686
  rl.close();
package/dist/imp.js CHANGED
@@ -302,7 +302,7 @@ function purgePlugin(projectRoot, name) {
302
302
  var OFFICIAL;
303
303
  var init_install = __esm(() => {
304
304
  init_plugins();
305
- OFFICIAL = ["anti-slop", "character", "whenful", "timemachine", "statusline", "telegram"];
305
+ OFFICIAL = ["anti-slop", "character", "whenful", "timemachine", "statusline", "telegram", "kopeika"];
306
306
  });
307
307
 
308
308
  // scripts/lib/global.ts
@@ -2014,6 +2014,7 @@ var exports_check = {};
2014
2014
  import { readdirSync as readdirSync8, readFileSync as readFileSync13, statSync as statSync8, existsSync as existsSync12, writeFileSync as writeFileSync9 } from "node:fs";
2015
2015
  import { spawnSync as spawnSync3 } from "node:child_process";
2016
2016
  import { join as join14, relative as relative6, dirname as dirname3 } from "node:path";
2017
+ import { homedir as homedir3 } from "node:os";
2017
2018
  function resolves(target) {
2018
2019
  const t = target.trim().replace(/^\.\//, "").replace(/\.md$/, "");
2019
2020
  if (!t)
@@ -2075,7 +2076,7 @@ ${REVIEW_END}
2075
2076
  writeFileSync9(p, next);
2076
2077
  return lines2.length ? "written" : "cleared";
2077
2078
  }
2078
- var args4, vault4, all = false, ENTITY_FOLDERS, DOMAIN_FOLDERS2, LINK, notes, allSlugs, folderOf, byBasename, orphans, disconnected, domainIssues, untagged, review, referencedRaw, tagVocab, hasRealTag = (tags) => tags.some((t) => /[\p{L}\p{N}]/u.test(normalize(tagVocab, t))), hasTagsFile, addedTags, dupPairs, manifest3, rawEntries, norm = (p) => p.replace(/^\.\//, "").replace(/^.*\/raw\//, "raw/").replace(/\.md$/, ""), refNorm, uncovered, REVIEW_BEGIN = "<!-- imprnt-check:begin (regenerated by `imprnt check` - do not edit between the markers) -->", REVIEW_END = "<!-- imprnt-check:end -->", cap = (xs, n = 25) => xs.slice(0, n).concat(xs.length > n ? [` … +${xs.length - n} more`] : []), count, folders, synced, issues;
2079
+ var args4, vault4, all = false, ENTITY_FOLDERS, DOMAIN_FOLDERS2, LINK, notes, allSlugs, folderOf, byBasename, orphans, disconnected, domainIssues, untagged, review, referencedRaw, tagVocab, hasRealTag = (tags) => tags.some((t) => /[\p{L}\p{N}]/u.test(normalize(tagVocab, t))), hasTagsFile, addedTags, dupPairs, manifest3, rawEntries, norm = (p) => p.replace(/^\.\//, "").replace(/^.*\/raw\//, "raw/").replace(/\.md$/, ""), refNorm, uncovered, hostMemoryDir, strayMemory, REVIEW_BEGIN = "<!-- imprnt-check:begin (regenerated by `imprnt check` - do not edit between the markers) -->", REVIEW_END = "<!-- imprnt-check:end -->", cap = (xs, n = 25) => xs.slice(0, n).concat(xs.length > n ? [` … +${xs.length - n} more`] : []), count, folders, synced, issues;
2079
2080
  var init_check = __esm(() => {
2080
2081
  init_roots();
2081
2082
  init_moc();
@@ -2213,6 +2214,10 @@ var init_check = __esm(() => {
2213
2214
  uncovered = [...new Set(rawEntries.map(norm))].filter((r) => !refNorm.has(r)).sort();
2214
2215
  for (const r of uncovered)
2215
2216
  review.push(`- [ ] unclassified snapshot \`${r}\` — no vault note points back`);
2217
+ hostMemoryDir = process.env.IMPRNT_HOST_MEMORY_DIR ?? join14(homedir3(), ".claude", "projects", projectRoot().replace(/[/.]/g, "-"), "memory");
2218
+ strayMemory = existsSync12(hostMemoryDir) ? readdirSync8(hostMemoryDir).filter((f) => f.endsWith(".md") && f !== "MEMORY.md").sort() : [];
2219
+ if (strayMemory.length)
2220
+ review.push(`- [ ] host auto-memory not empty — ${strayMemory.length} note(s) in ${hostMemoryDir}; migrate knowledge → vault notes, behavior → a CLAUDE.local.md fragment, then empty it`);
2216
2221
  console.log(`imprnt check — ${notes.length} notes in ${vault4}
2217
2222
  `);
2218
2223
  if (orphans.length) {
@@ -2264,6 +2269,14 @@ var init_check = __esm(() => {
2264
2269
  } else
2265
2270
  console.log("✓ every raw snapshot has a derived note");
2266
2271
  }
2272
+ if (strayMemory.length) {
2273
+ console.log(`⚠ host auto-memory not empty (${strayMemory.length}) — a second store recall can't see, at ${hostMemoryDir}:`);
2274
+ console.log(cap(strayMemory.map((f) => " " + f)).join(`
2275
+ `));
2276
+ console.log(` migrate knowledge → vault notes, behavior → a CLAUDE.local.md fragment, then empty it.
2277
+ `);
2278
+ } else
2279
+ console.log(`✓ host auto-memory empty (vault is the only store) — checked ${hostMemoryDir}`);
2267
2280
  ({ count, folders } = generateIndex(vault4));
2268
2281
  console.log(`↻ regenerated index.md — ${count} notes across ${folders} folders`);
2269
2282
  synced = syncNeedsReview(review);
@@ -2271,7 +2284,7 @@ var init_check = __esm(() => {
2271
2284
  console.log(`↻ ${review.length} finding(s) → _needs-review.md (run \`imprnt hot\` to see them)`);
2272
2285
  else if (synced === "cleared")
2273
2286
  console.log("↻ cleared resolved findings from _needs-review.md");
2274
- issues = orphans.length + disconnected.length + domainIssues.length + untagged.length + uncovered.length + dupPairs.length;
2287
+ issues = orphans.length + disconnected.length + domainIssues.length + untagged.length + uncovered.length + dupPairs.length + strayMemory.length;
2275
2288
  console.log(issues ? `
2276
2289
  ${issues} thing(s) to look at above.` : `
2277
2290
  clean.`);
@@ -2324,7 +2337,7 @@ var exports_cli = {};
2324
2337
  import { cpSync as cpSync3, mkdirSync as mkdirSync5, existsSync as existsSync13, readFileSync as readFileSync14, lstatSync as lstatSync4, statSync as statSync9, realpathSync as realpathSync2 } from "node:fs";
2325
2338
  import { spawnSync as spawnSync4 } from "node:child_process";
2326
2339
  import { join as join15, dirname as dirname4, resolve as resolve6, basename as basename5 } from "node:path";
2327
- import { homedir as homedir3 } from "node:os";
2340
+ import { homedir as homedir4 } from "node:os";
2328
2341
  import { fileURLToPath } from "node:url";
2329
2342
  import { createInterface } from "node:readline/promises";
2330
2343
  function pluginRoot() {
@@ -2355,7 +2368,7 @@ function requireVaultHome() {
2355
2368
  }
2356
2369
  return home;
2357
2370
  }
2358
- function resolvePath(input, base = process.cwd(), home = homedir3()) {
2371
+ function resolvePath(input, base = process.cwd(), home = homedir4()) {
2359
2372
  let p = input;
2360
2373
  if (p === "~")
2361
2374
  p = home;
@@ -2587,7 +2600,7 @@ enable: imprnt plugin add <name> disable: imprnt plugin rm <name> [--purge]`);
2587
2600
  process.exit(1);
2588
2601
  }
2589
2602
  case "global": {
2590
- const globalDir = process.env.CLAUDE_CONFIG_DIR || join15(homedir3(), ".claude");
2603
+ const globalDir = process.env.CLAUDE_CONFIG_DIR || join15(homedir4(), ".claude");
2591
2604
  const [sub, ...gargs] = rest;
2592
2605
  if (sub === "list") {
2593
2606
  const enabled = listGlobalModules(globalDir);
@@ -2667,7 +2680,7 @@ enable: imprnt plugin add <name> disable: imprnt plugin rm <name> [--purge]`);
2667
2680
  } else if (process.stdin.isTTY && process.stdout.isTTY) {
2668
2681
  const inPlace = isVaultProject(process.cwd());
2669
2682
  const display = inPlace ? process.cwd() : "~/imprnt";
2670
- const fallback = inPlace ? process.cwd() : join15(homedir3(), "imprnt");
2683
+ const fallback = inPlace ? process.cwd() : join15(homedir4(), "imprnt");
2671
2684
  const rl = createInterface({ input: process.stdin, output: process.stdout });
2672
2685
  const answer = (await rl.question(`vault location [${display}]: `)).trim();
2673
2686
  rl.close();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imprnt",
3
- "version": "0.1.3-edge.48",
3
+ "version": "0.1.3-edge.53",
4
4
  "description": "Deterministic-first, plain-markdown knowledge vault. Code does the bulk transform. The LLM only touches the irreducibly-semantic 20%. Native grep plus BM25 retrieval, zero MCP on the vault.",
5
5
  "type": "module",
6
6
  "bin": {