ori-memory 0.2.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.
Files changed (125) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +217 -0
  3. package/adapters/claude-code/hooks/capture.mjs +58 -0
  4. package/adapters/claude-code/hooks/orient.mjs +114 -0
  5. package/adapters/claude-code/hooks/validate.mjs +56 -0
  6. package/dist/agents/lock.d.ts +3 -0
  7. package/dist/agents/lock.d.ts.map +1 -0
  8. package/dist/agents/lock.js +11 -0
  9. package/dist/agents/lock.js.map +1 -0
  10. package/dist/agents/protocol.d.ts +6 -0
  11. package/dist/agents/protocol.d.ts.map +1 -0
  12. package/dist/agents/protocol.js +10 -0
  13. package/dist/agents/protocol.js.map +1 -0
  14. package/dist/cli/add.d.ts +12 -0
  15. package/dist/cli/add.d.ts.map +1 -0
  16. package/dist/cli/add.js +88 -0
  17. package/dist/cli/add.js.map +1 -0
  18. package/dist/cli/archive.d.ts +25 -0
  19. package/dist/cli/archive.d.ts.map +1 -0
  20. package/dist/cli/archive.js +69 -0
  21. package/dist/cli/archive.js.map +1 -0
  22. package/dist/cli/bridge.d.ts +19 -0
  23. package/dist/cli/bridge.d.ts.map +1 -0
  24. package/dist/cli/bridge.js +180 -0
  25. package/dist/cli/bridge.js.map +1 -0
  26. package/dist/cli/health.d.ts +7 -0
  27. package/dist/cli/health.d.ts.map +1 -0
  28. package/dist/cli/health.js +66 -0
  29. package/dist/cli/health.js.map +1 -0
  30. package/dist/cli/init.d.ts +9 -0
  31. package/dist/cli/init.d.ts.map +1 -0
  32. package/dist/cli/init.js +44 -0
  33. package/dist/cli/init.js.map +1 -0
  34. package/dist/cli/promote.d.ts +35 -0
  35. package/dist/cli/promote.d.ts.map +1 -0
  36. package/dist/cli/promote.js +182 -0
  37. package/dist/cli/promote.js.map +1 -0
  38. package/dist/cli/query.d.ts +10 -0
  39. package/dist/cli/query.d.ts.map +1 -0
  40. package/dist/cli/query.js +74 -0
  41. package/dist/cli/query.js.map +1 -0
  42. package/dist/cli/serve.d.ts +27 -0
  43. package/dist/cli/serve.d.ts.map +1 -0
  44. package/dist/cli/serve.js +254 -0
  45. package/dist/cli/serve.js.map +1 -0
  46. package/dist/cli/status.d.ts +7 -0
  47. package/dist/cli/status.d.ts.map +1 -0
  48. package/dist/cli/status.js +34 -0
  49. package/dist/cli/status.js.map +1 -0
  50. package/dist/cli/validate.d.ts +9 -0
  51. package/dist/cli/validate.d.ts.map +1 -0
  52. package/dist/cli/validate.js +37 -0
  53. package/dist/cli/validate.js.map +1 -0
  54. package/dist/core/classify.d.ts +13 -0
  55. package/dist/core/classify.d.ts.map +1 -0
  56. package/dist/core/classify.js +126 -0
  57. package/dist/core/classify.js.map +1 -0
  58. package/dist/core/config.d.ts +82 -0
  59. package/dist/core/config.d.ts.map +1 -0
  60. package/dist/core/config.js +183 -0
  61. package/dist/core/config.js.map +1 -0
  62. package/dist/core/frontmatter.d.ts +11 -0
  63. package/dist/core/frontmatter.d.ts.map +1 -0
  64. package/dist/core/frontmatter.js +61 -0
  65. package/dist/core/frontmatter.js.map +1 -0
  66. package/dist/core/graph.d.ts +9 -0
  67. package/dist/core/graph.d.ts.map +1 -0
  68. package/dist/core/graph.js +56 -0
  69. package/dist/core/graph.js.map +1 -0
  70. package/dist/core/importance.d.ts +49 -0
  71. package/dist/core/importance.d.ts.map +1 -0
  72. package/dist/core/importance.js +230 -0
  73. package/dist/core/importance.js.map +1 -0
  74. package/dist/core/intent.d.ts +36 -0
  75. package/dist/core/intent.d.ts.map +1 -0
  76. package/dist/core/intent.js +108 -0
  77. package/dist/core/intent.js.map +1 -0
  78. package/dist/core/linkdetect.d.ts +34 -0
  79. package/dist/core/linkdetect.d.ts.map +1 -0
  80. package/dist/core/linkdetect.js +181 -0
  81. package/dist/core/linkdetect.js.map +1 -0
  82. package/dist/core/llm.d.ts +41 -0
  83. package/dist/core/llm.d.ts.map +1 -0
  84. package/dist/core/llm.js +36 -0
  85. package/dist/core/llm.js.map +1 -0
  86. package/dist/core/promote.d.ts +40 -0
  87. package/dist/core/promote.d.ts.map +1 -0
  88. package/dist/core/promote.js +246 -0
  89. package/dist/core/promote.js.map +1 -0
  90. package/dist/core/ranking.d.ts +33 -0
  91. package/dist/core/ranking.d.ts.map +1 -0
  92. package/dist/core/ranking.js +45 -0
  93. package/dist/core/ranking.js.map +1 -0
  94. package/dist/core/schema.d.ts +16 -0
  95. package/dist/core/schema.d.ts.map +1 -0
  96. package/dist/core/schema.js +76 -0
  97. package/dist/core/schema.js.map +1 -0
  98. package/dist/core/vault.d.ts +16 -0
  99. package/dist/core/vault.d.ts.map +1 -0
  100. package/dist/core/vault.js +52 -0
  101. package/dist/core/vault.js.map +1 -0
  102. package/dist/core/vitality.d.ts +55 -0
  103. package/dist/core/vitality.d.ts.map +1 -0
  104. package/dist/core/vitality.js +95 -0
  105. package/dist/core/vitality.js.map +1 -0
  106. package/dist/index.d.ts +3 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +139 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/providers/anthropic.d.ts +12 -0
  111. package/dist/providers/anthropic.d.ts.map +1 -0
  112. package/dist/providers/anthropic.js +90 -0
  113. package/dist/providers/anthropic.js.map +1 -0
  114. package/package.json +60 -0
  115. package/scaffold/.ori +1 -0
  116. package/scaffold/inbox/.gitkeep +1 -0
  117. package/scaffold/notes/index.md +19 -0
  118. package/scaffold/ops/observations/.gitkeep +1 -0
  119. package/scaffold/ops/reminders.md +3 -0
  120. package/scaffold/ops/sessions/.gitkeep +1 -0
  121. package/scaffold/ori.config.yaml +79 -0
  122. package/scaffold/templates/map.md +36 -0
  123. package/scaffold/templates/note.md +61 -0
  124. package/scaffold/templates/observation.md +38 -0
  125. package/scaffold/templates/source.md +45 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Rank notes by graph importance (PageRank scores).
3
+ */
4
+ export function rankByImportance(notes, pagerankScores, limit) {
5
+ const scored = notes.map((title) => ({
6
+ title,
7
+ score: pagerankScores.get(title) ?? 0,
8
+ signals: { graph: pagerankScores.get(title) ?? 0 },
9
+ }));
10
+ scored.sort((a, b) => b.score - a.score);
11
+ return limit ? scored.slice(0, limit) : scored;
12
+ }
13
+ /**
14
+ * Find notes that are fading (below vitality threshold).
15
+ * Sorted ascending — most fading first.
16
+ */
17
+ export function rankByFading(notes, vitalityScores, threshold = 0.3) {
18
+ const fading = [];
19
+ for (const title of notes) {
20
+ const vitality = vitalityScores.get(title) ?? 0;
21
+ if (vitality < threshold) {
22
+ fading.push({
23
+ title,
24
+ score: vitality,
25
+ signals: { composite: vitality },
26
+ });
27
+ }
28
+ }
29
+ // Sort ascending — lowest vitality first (most fading)
30
+ fading.sort((a, b) => a.score - b.score);
31
+ return fading;
32
+ }
33
+ /**
34
+ * Rank notes by vitality score (descending).
35
+ */
36
+ export function rankByVitality(notes, vitalityScores, limit) {
37
+ const scored = notes.map((title) => ({
38
+ title,
39
+ score: vitalityScores.get(title) ?? 0,
40
+ signals: { composite: vitalityScores.get(title) ?? 0 },
41
+ }));
42
+ scored.sort((a, b) => b.score - a.score);
43
+ return limit ? scored.slice(0, limit) : scored;
44
+ }
45
+ //# sourceMappingURL=ranking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking.js","sourceRoot":"","sources":["../../src/core/ranking.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAe,EACf,cAAmC,EACnC,KAAc;IAEd,MAAM,MAAM,GAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,KAAK;QACL,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QACrC,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;KACnD,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAe,EACf,cAAmC,EACnC,YAAoB,GAAG;IAEvB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,QAAQ,GAAG,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK;gBACL,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;aACjC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAe,EACf,cAAmC,EACnC,KAAc;IAEd,MAAM,MAAM,GAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,KAAK;QACL,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QACrC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;KACvD,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type TemplateSchema = {
2
+ entity_type?: string;
3
+ applies_to?: string;
4
+ required?: string[];
5
+ optional?: string[];
6
+ enums?: Record<string, string[]>;
7
+ constraints?: Record<string, Record<string, unknown>>;
8
+ };
9
+ export type ValidationResult = {
10
+ valid: boolean;
11
+ errors: string[];
12
+ warnings: string[];
13
+ };
14
+ export declare function loadTemplateSchema(templatePath: string): Promise<TemplateSchema>;
15
+ export declare function validateNoteAgainstSchema(notePath: string, templatePath: string): Promise<ValidationResult>;
16
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AASF,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CAUzB;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA6D3B"}
@@ -0,0 +1,76 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { parseFrontmatter } from "./frontmatter.js";
3
+ function isBlank(value) {
4
+ if (value === null || value === undefined)
5
+ return true;
6
+ if (typeof value === "string")
7
+ return value.trim().length === 0;
8
+ if (Array.isArray(value))
9
+ return value.length === 0;
10
+ return false;
11
+ }
12
+ export async function loadTemplateSchema(templatePath) {
13
+ const content = await fs.readFile(templatePath, "utf8");
14
+ const parsed = parseFrontmatter(content);
15
+ if (!parsed.data || typeof parsed.data !== "object") {
16
+ return {};
17
+ }
18
+ const schema = parsed.data["_schema"];
19
+ return schema ?? {};
20
+ }
21
+ export async function validateNoteAgainstSchema(notePath, templatePath) {
22
+ const errors = [];
23
+ const warnings = [];
24
+ const noteContent = await fs.readFile(notePath, "utf8");
25
+ const noteParsed = parseFrontmatter(noteContent);
26
+ if (!noteParsed.data) {
27
+ return {
28
+ valid: false,
29
+ errors: ["Missing YAML frontmatter"],
30
+ warnings,
31
+ };
32
+ }
33
+ const schema = await loadTemplateSchema(templatePath);
34
+ const noteData = noteParsed.data;
35
+ const required = schema.required ?? [];
36
+ for (const field of required) {
37
+ if (!(field in noteData) || isBlank(noteData[field])) {
38
+ errors.push(`Missing required field: ${field}`);
39
+ }
40
+ }
41
+ const enums = schema.enums ?? {};
42
+ for (const [field, allowed] of Object.entries(enums)) {
43
+ if (field in noteData && !isBlank(noteData[field])) {
44
+ const value = noteData[field];
45
+ if (Array.isArray(value)) {
46
+ const invalid = value.filter((entry) => typeof entry === "string" && !allowed.includes(entry));
47
+ if (invalid.length > 0) {
48
+ errors.push(`Invalid ${field} values: ${invalid.join(", ")}`);
49
+ }
50
+ }
51
+ else if (typeof value === "string") {
52
+ if (!allowed.includes(value)) {
53
+ errors.push(`Invalid ${field} value: ${value}`);
54
+ }
55
+ }
56
+ }
57
+ }
58
+ const constraints = schema.constraints ?? {};
59
+ const descriptionConstraint = constraints["description"];
60
+ const description = noteData["description"];
61
+ if (typeof description === "string") {
62
+ const maxLen = descriptionConstraint?.["max_length"];
63
+ if (typeof maxLen === "number" && description.length > maxLen) {
64
+ errors.push(`Description exceeds max length (${maxLen})`);
65
+ }
66
+ if (description.trim().endsWith(".")) {
67
+ warnings.push("Description should not end with a period");
68
+ }
69
+ }
70
+ return {
71
+ valid: errors.length === 0,
72
+ errors,
73
+ warnings,
74
+ };
75
+ }
76
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type VaultPaths = {
2
+ root: string;
3
+ marker: string;
4
+ config: string;
5
+ notes: string;
6
+ inbox: string;
7
+ templates: string;
8
+ ops: string;
9
+ opsSessions: string;
10
+ opsObservations: string;
11
+ };
12
+ export declare function isVaultRoot(dir: string): Promise<boolean>;
13
+ export declare function findVaultRoot(startDir: string): Promise<string>;
14
+ export declare function getVaultPaths(root: string): VaultPaths;
15
+ export declare function listNoteTitles(notesDir: string): Promise<string[]>;
16
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/core/vault.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAarE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAYtD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUxE"}
@@ -0,0 +1,52 @@
1
+ import { promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ export async function isVaultRoot(dir) {
4
+ try {
5
+ await fs.access(path.join(dir, ".ori"));
6
+ return true;
7
+ }
8
+ catch {
9
+ return false;
10
+ }
11
+ }
12
+ export async function findVaultRoot(startDir) {
13
+ let current = path.resolve(startDir);
14
+ // Walk up to filesystem root
15
+ while (true) {
16
+ if (await isVaultRoot(current)) {
17
+ return current;
18
+ }
19
+ const parent = path.dirname(current);
20
+ if (parent === current) {
21
+ throw new Error("No .ori marker found in parent directories");
22
+ }
23
+ current = parent;
24
+ }
25
+ }
26
+ export function getVaultPaths(root) {
27
+ return {
28
+ root,
29
+ marker: path.join(root, ".ori"),
30
+ config: path.join(root, "ori.config.yaml"),
31
+ notes: path.join(root, "notes"),
32
+ inbox: path.join(root, "inbox"),
33
+ templates: path.join(root, "templates"),
34
+ ops: path.join(root, "ops"),
35
+ opsSessions: path.join(root, "ops", "sessions"),
36
+ opsObservations: path.join(root, "ops", "observations"),
37
+ };
38
+ }
39
+ export async function listNoteTitles(notesDir) {
40
+ try {
41
+ const entries = await fs.readdir(notesDir, { withFileTypes: true });
42
+ return entries
43
+ .filter((entry) => entry.isFile() && entry.name.endsWith(".md"))
44
+ .map((entry) => entry.name.replace(/\.md$/, ""));
45
+ }
46
+ catch (err) {
47
+ if (err.code === "ENOENT")
48
+ return [];
49
+ throw err;
50
+ }
51
+ }
52
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/core/vault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAc7B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,6BAA6B;IAC7B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC;QAC1C,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QAC/B,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QAC/B,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QACvC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;QAC/C,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC/D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAChE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,55 @@
1
+ export type VitalityParams = {
2
+ base: number;
3
+ decayDays: number;
4
+ };
5
+ export declare function daysBetween(a: Date, b: Date): number;
6
+ export declare function computeVitality(params: VitalityParams, lastAccessed: Date, now: Date): number;
7
+ /**
8
+ * ACT-R base-level activation: B_i = ln(n/(1-d)) - d*ln(L)
9
+ * Normalized to 0-1 via sigmoid.
10
+ *
11
+ * @param accessCount - number of times the note was accessed (n)
12
+ * @param lifetimeDays - days since note creation (L)
13
+ * @param d - decay parameter, default 0.5
14
+ * @returns vitality score 0-1
15
+ */
16
+ export declare function computeVitalityACTR(accessCount: number, lifetimeDays: number, d?: number): number;
17
+ /**
18
+ * Structural stability boost from incoming links.
19
+ * Each link adds ~10% to effective stability, capped at 2x.
20
+ */
21
+ export declare function computeStructuralBoost(inDegree: number): number;
22
+ /**
23
+ * Revival spike when a dormant note gets a new connection.
24
+ * Decays exponentially over 14 days.
25
+ */
26
+ export declare function computeRevivalBoost(daysSinceNewConnection: number | undefined): number;
27
+ /**
28
+ * Access frequency saturation with diminishing returns.
29
+ * 10 accesses → ~63%, 20 → ~86%, 30 → ~95%.
30
+ */
31
+ export declare function computeAccessSaturation(accessCount: number, k?: number): number;
32
+ export type VitalityFullParams = {
33
+ accessCount: number;
34
+ created: string;
35
+ lastAccessed?: string;
36
+ noteTitle: string;
37
+ inDegree: number;
38
+ bridges: Set<string>;
39
+ metabolicRate?: number;
40
+ daysSinceNewConnection?: number;
41
+ actrDecay?: number;
42
+ accessSaturationK?: number;
43
+ bridgeFloor?: number;
44
+ };
45
+ /**
46
+ * Full vitality computation combining:
47
+ * 1. ACT-R base vitality
48
+ * 2. Metabolic rate (space-dependent decay multiplier)
49
+ * 3. Structural stability boost (well-linked notes decay slower)
50
+ * 4. Access frequency saturation
51
+ * 5. Revival spike for dormant notes gaining new connections
52
+ * 6. Bridge protection floor
53
+ */
54
+ export declare function computeVitalityFull(params: VitalityFullParams): number;
55
+ //# sourceMappingURL=vitality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitality.d.ts","sourceRoot":"","sources":["../../src/core/vitality.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAGpD;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,IAAI,EAClB,GAAG,EAAE,IAAI,GACR,MAAM,CAOR;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,CAAC,GAAE,MAAY,GACd,MAAM,CASR;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,sBAAsB,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAItF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,GAAE,MAAW,GAAG,MAAM,CAGnF;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CA2CtE"}
@@ -0,0 +1,95 @@
1
+ export function daysBetween(a, b) {
2
+ const ms = Math.abs(b.getTime() - a.getTime());
3
+ return ms / (1000 * 60 * 60 * 24);
4
+ }
5
+ export function computeVitality(params, lastAccessed, now) {
6
+ if (params.decayDays <= 0) {
7
+ return params.base;
8
+ }
9
+ const t = daysBetween(lastAccessed, now);
10
+ const v = params.base * Math.exp(-t / params.decayDays);
11
+ return Math.max(0, Math.min(params.base, v));
12
+ }
13
+ /**
14
+ * ACT-R base-level activation: B_i = ln(n/(1-d)) - d*ln(L)
15
+ * Normalized to 0-1 via sigmoid.
16
+ *
17
+ * @param accessCount - number of times the note was accessed (n)
18
+ * @param lifetimeDays - days since note creation (L)
19
+ * @param d - decay parameter, default 0.5
20
+ * @returns vitality score 0-1
21
+ */
22
+ export function computeVitalityACTR(accessCount, lifetimeDays, d = 0.5) {
23
+ if (accessCount <= 0)
24
+ return 0.5; // cold start baseline
25
+ if (lifetimeDays <= 0)
26
+ return 1.0; // brand new note
27
+ // Clamp d to (0, 0.99) to keep (1 - d) positive
28
+ const dClamped = Math.max(0.01, Math.min(d, 0.99));
29
+ const B = Math.log(accessCount / (1 - dClamped)) - dClamped * Math.log(lifetimeDays);
30
+ // Sigmoid normalization to [0, 1]
31
+ return 1 / (1 + Math.exp(-B));
32
+ }
33
+ /**
34
+ * Structural stability boost from incoming links.
35
+ * Each link adds ~10% to effective stability, capped at 2x.
36
+ */
37
+ export function computeStructuralBoost(inDegree) {
38
+ return 1 + 0.1 * Math.min(inDegree, 10);
39
+ }
40
+ /**
41
+ * Revival spike when a dormant note gets a new connection.
42
+ * Decays exponentially over 14 days.
43
+ */
44
+ export function computeRevivalBoost(daysSinceNewConnection) {
45
+ if (daysSinceNewConnection === undefined || daysSinceNewConnection < 0)
46
+ return 0;
47
+ if (daysSinceNewConnection >= 14)
48
+ return 0;
49
+ return Math.exp(-0.2 * daysSinceNewConnection);
50
+ }
51
+ /**
52
+ * Access frequency saturation with diminishing returns.
53
+ * 10 accesses → ~63%, 20 → ~86%, 30 → ~95%.
54
+ */
55
+ export function computeAccessSaturation(accessCount, k = 10) {
56
+ if (accessCount <= 0)
57
+ return 0;
58
+ return 1 - Math.exp(-accessCount / k);
59
+ }
60
+ /**
61
+ * Full vitality computation combining:
62
+ * 1. ACT-R base vitality
63
+ * 2. Metabolic rate (space-dependent decay multiplier)
64
+ * 3. Structural stability boost (well-linked notes decay slower)
65
+ * 4. Access frequency saturation
66
+ * 5. Revival spike for dormant notes gaining new connections
67
+ * 6. Bridge protection floor
68
+ */
69
+ export function computeVitalityFull(params) {
70
+ const { accessCount, created, noteTitle, inDegree, bridges, metabolicRate = 1.0, daysSinceNewConnection, actrDecay = 0.5, accessSaturationK = 10, bridgeFloor = 0.5, } = params;
71
+ const createdDate = new Date(created);
72
+ const now = new Date();
73
+ const lifetimeDays = daysBetween(createdDate, now);
74
+ // 1. ACT-R base with metabolic-adjusted decay
75
+ const effectiveDecay = actrDecay * metabolicRate;
76
+ let vitality = computeVitalityACTR(accessCount, lifetimeDays, effectiveDecay);
77
+ // 2. Structural stability boost (stretches the effective half-life)
78
+ const structuralBoost = computeStructuralBoost(inDegree);
79
+ // Apply boost: higher boost = higher vitality (multiply and re-normalize)
80
+ vitality = vitality * structuralBoost;
81
+ // 3. Access saturation modulation
82
+ const saturation = computeAccessSaturation(accessCount, accessSaturationK);
83
+ // Blend: base vitality + saturation contribution
84
+ vitality = vitality * (0.5 + 0.5 * saturation);
85
+ // 4. Revival spike
86
+ const revival = computeRevivalBoost(daysSinceNewConnection);
87
+ vitality = vitality + revival * 0.2; // Revival adds up to 20% boost
88
+ // 5. Bridge protection floor
89
+ if (bridges.has(noteTitle)) {
90
+ vitality = Math.max(vitality, bridgeFloor);
91
+ }
92
+ // 6. Clamp to [0, 1]
93
+ return Math.max(0, Math.min(1, vitality));
94
+ }
95
+ //# sourceMappingURL=vitality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitality.js","sourceRoot":"","sources":["../../src/core/vitality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { runInit } from "./cli/init.js";
4
+ import { runStatus } from "./cli/status.js";
5
+ import { runHealth } from "./cli/health.js";
6
+ import { runQueryBacklinks, runQueryDangling, runQueryOrphans, runQueryCrossProject, } from "./cli/query.js";
7
+ import { runValidate } from "./cli/validate.js";
8
+ import { runAdd } from "./cli/add.js";
9
+ import { runPromote } from "./cli/promote.js";
10
+ import { runArchive } from "./cli/archive.js";
11
+ import { runBridgeClaudeCode, runBridgeClaudeCodeGlobal } from "./cli/bridge.js";
12
+ import { runServeMcp } from "./cli/serve.js";
13
+ const program = new Command();
14
+ program
15
+ .name("ori")
16
+ .description("Ori Mnemos - markdown-native cognitive harness for persistent agent memory")
17
+ .version("0.2.0");
18
+ program
19
+ .command("init")
20
+ .argument("[dir]", "target directory", ".")
21
+ .action(async (dir) => {
22
+ const result = await runInit({ targetDir: dir });
23
+ console.log(JSON.stringify({ success: true, data: result, warnings: [] }));
24
+ });
25
+ program
26
+ .command("status")
27
+ .action(async () => {
28
+ const result = await runStatus(process.cwd());
29
+ console.log(JSON.stringify(result));
30
+ });
31
+ program
32
+ .command("health")
33
+ .action(async () => {
34
+ const result = await runHealth(process.cwd());
35
+ console.log(JSON.stringify(result));
36
+ });
37
+ program
38
+ .command("query")
39
+ .argument("<kind>", "orphans | dangling | backlinks | cross-project")
40
+ .argument("[note]", "note title for backlinks")
41
+ .action(async (kind, note) => {
42
+ let result;
43
+ switch (kind) {
44
+ case "orphans":
45
+ result = await runQueryOrphans(process.cwd());
46
+ break;
47
+ case "dangling":
48
+ result = await runQueryDangling(process.cwd());
49
+ break;
50
+ case "backlinks":
51
+ if (!note) {
52
+ throw new Error("backlinks requires a note title");
53
+ }
54
+ result = await runQueryBacklinks(process.cwd(), note);
55
+ break;
56
+ case "cross-project":
57
+ result = await runQueryCrossProject(process.cwd());
58
+ break;
59
+ default:
60
+ throw new Error(`Unknown query kind: ${kind}`);
61
+ }
62
+ console.log(JSON.stringify(result));
63
+ });
64
+ program
65
+ .command("validate")
66
+ .argument("<note>", "path to note")
67
+ .action(async (note) => {
68
+ const result = await runValidate({ notePath: note });
69
+ console.log(JSON.stringify(result));
70
+ });
71
+ program
72
+ .command("add")
73
+ .argument("<title>", "note title")
74
+ .option("-t, --type <type>", "note type", "insight")
75
+ .action(async (title, options) => {
76
+ const result = await runAdd({ startDir: process.cwd(), title, type: options.type });
77
+ console.log(JSON.stringify(result));
78
+ });
79
+ program
80
+ .command("promote")
81
+ .argument("[note]", "inbox note filename or slug")
82
+ .option("--all", "promote all inbox notes")
83
+ .option("--dry-run", "preview without making changes")
84
+ .option("--no-auto", "skip LLM enhancement even if configured")
85
+ .option("-t, --type <type>", "override type classification")
86
+ .option("-d, --description <desc>", "override description")
87
+ .option("-l, --links <links...>", "additional wiki-links")
88
+ .option("-p, --project <projects...>", "project tags")
89
+ .action(async (note, options) => {
90
+ const result = await runPromote({
91
+ startDir: process.cwd(),
92
+ noteName: note,
93
+ all: options.all,
94
+ dryRun: options.dryRun,
95
+ noAuto: options.noAuto,
96
+ type: options.type,
97
+ description: options.description,
98
+ links: options.links,
99
+ project: options.project,
100
+ });
101
+ console.log(JSON.stringify(result));
102
+ });
103
+ program
104
+ .command("archive")
105
+ .option("--dry-run", "preview without making changes")
106
+ .action(async (options) => {
107
+ const result = await runArchive({
108
+ startDir: process.cwd(),
109
+ dryRun: options.dryRun,
110
+ });
111
+ console.log(JSON.stringify(result));
112
+ });
113
+ program
114
+ .command("bridge")
115
+ .argument("<target>", "claude-code")
116
+ .option("--global", "install hooks to ~/.claude/settings.json (all projects)")
117
+ .action(async (target, options) => {
118
+ if (target !== "claude-code") {
119
+ throw new Error(`Unknown bridge target: ${target}`);
120
+ }
121
+ const result = options.global
122
+ ? await runBridgeClaudeCodeGlobal()
123
+ : await runBridgeClaudeCode(process.cwd());
124
+ console.log(JSON.stringify(result));
125
+ });
126
+ program
127
+ .command("serve")
128
+ .option("--mcp", "run MCP server")
129
+ .action(async (options) => {
130
+ if (!options.mcp) {
131
+ throw new Error("Only MCP server is supported: use --mcp");
132
+ }
133
+ await runServeMcp(process.cwd());
134
+ });
135
+ program.parseAsync(process.argv).catch((err) => {
136
+ console.error(String(err));
137
+ process.exit(1);
138
+ });
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { LlmProvider, VaultContext, EnhancementSuggestions } from "../core/llm.js";
2
+ export declare class AnthropicProvider implements LlmProvider {
3
+ private apiKey;
4
+ private model;
5
+ constructor(apiKey: string, model: string);
6
+ enhance(note: {
7
+ title: string;
8
+ body: string;
9
+ frontmatter: Record<string, unknown>;
10
+ }, context: VaultContext): Promise<EnhancementSuggestions>;
11
+ }
12
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AAuBxB,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKnC,OAAO,CACX,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,EACD,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,CAAC;CAmEnC"}