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,90 @@
1
+ const SYSTEM_PROMPT = `You are a knowledge management assistant for Ori Mnemos, a markdown-native memory system.
2
+ Your job is to enhance a note that is being promoted from inbox to permanent storage.
3
+
4
+ Given a note's title, body, and frontmatter, plus context about the vault's existing notes:
5
+ 1. Suggest a better description (one sentence, max 200 chars, no trailing period)
6
+ 2. Classify the type: idea, decision, learning, insight, blocker, or opportunity
7
+ 3. Suggest wiki-links to existing notes that are relevant
8
+ 4. Suggest project tags if applicable
9
+ 5. Explain your reasoning briefly
10
+
11
+ Respond with valid JSON matching this schema:
12
+ {
13
+ "type": "string (one of: idea, decision, learning, insight, blocker, opportunity)",
14
+ "description": "string (one sentence, max 200 chars)",
15
+ "links": ["string array of existing note titles to link to"],
16
+ "project": ["string array of project tags"],
17
+ "reasoning": "string (brief explanation)"
18
+ }
19
+
20
+ Only include fields where you have a confident suggestion. Omit fields you're unsure about.`;
21
+ export class AnthropicProvider {
22
+ apiKey;
23
+ model;
24
+ constructor(apiKey, model) {
25
+ this.apiKey = apiKey;
26
+ this.model = model;
27
+ }
28
+ async enhance(note, context) {
29
+ const userMessage = [
30
+ `## Note to enhance`,
31
+ `Title: ${note.title}`,
32
+ `Body: ${note.body.slice(0, 2000)}`,
33
+ `Current frontmatter: ${JSON.stringify(note.frontmatter)}`,
34
+ ``,
35
+ `## Vault context`,
36
+ `Existing notes: ${context.existingTitles.slice(0, 50).join(", ")}`,
37
+ `Recent notes: ${context.recentNotes
38
+ .slice(0, 10)
39
+ .map((n) => `${n.title} (${n.type})`)
40
+ .join(", ")}`,
41
+ `Known projects: ${context.projectTags.join(", ")}`,
42
+ ].join("\n");
43
+ try {
44
+ const response = await fetch("https://api.anthropic.com/v1/messages", {
45
+ method: "POST",
46
+ headers: {
47
+ "Content-Type": "application/json",
48
+ "x-api-key": this.apiKey,
49
+ "anthropic-version": "2023-06-01",
50
+ },
51
+ body: JSON.stringify({
52
+ model: this.model,
53
+ max_tokens: 1024,
54
+ system: SYSTEM_PROMPT,
55
+ messages: [{ role: "user", content: userMessage }],
56
+ }),
57
+ });
58
+ if (!response.ok) {
59
+ return {};
60
+ }
61
+ const data = (await response.json());
62
+ const text = data.content?.[0]?.text;
63
+ if (!text)
64
+ return {};
65
+ // Extract JSON from response (may be wrapped in markdown code block)
66
+ const jsonMatch = text.match(/\{[\s\S]*\}/);
67
+ if (!jsonMatch)
68
+ return {};
69
+ const parsed = JSON.parse(jsonMatch[0]);
70
+ // Validate and sanitize
71
+ const result = {};
72
+ if (typeof parsed.type === "string")
73
+ result.type = parsed.type;
74
+ if (typeof parsed.description === "string")
75
+ result.description = parsed.description.slice(0, 200);
76
+ if (Array.isArray(parsed.links))
77
+ result.links = parsed.links;
78
+ if (Array.isArray(parsed.project))
79
+ result.project = parsed.project;
80
+ if (typeof parsed.reasoning === "string")
81
+ result.reasoning = parsed.reasoning;
82
+ return result;
83
+ }
84
+ catch {
85
+ // LLM failures should never block promotion
86
+ return {};
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "ori-memory",
3
+ "version": "0.2.0",
4
+ "description": "The Git of AI memory - open source, markdown-native framework for persistent, shared agent memory without a database",
5
+ "keywords": [
6
+ "ai",
7
+ "agent",
8
+ "memory",
9
+ "markdown",
10
+ "cli",
11
+ "knowledge-graph"
12
+ ],
13
+ "homepage": "https://github.com/aayoawoyemi/OriMnemos",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/aayoawoyemi/OriMnemos.git"
17
+ },
18
+ "license": "Apache-2.0",
19
+ "author": "Aayo Awoyemi",
20
+ "type": "module",
21
+ "bin": {
22
+ "ori": "./dist/index.js"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "scaffold",
27
+ "adapters"
28
+ ],
29
+ "scripts": {
30
+ "build": "tsc",
31
+ "dev": "tsc --watch",
32
+ "test": "vitest run --environment node",
33
+ "test:watch": "vitest --environment node",
34
+ "lint": "tsc --noEmit",
35
+ "smoke:bin": "node dist/index.js --version",
36
+ "pack:check": "npm pack --dry-run --cache .npm-cache",
37
+ "check:v01:test": "npm run test",
38
+ "check:v01": "npm run lint && npm run build && npm run smoke:bin && npm run pack:check"
39
+ },
40
+ "dependencies": {
41
+ "@huggingface/transformers": "^3.8.1",
42
+ "@types/better-sqlite3": "^7.6.13",
43
+ "better-sqlite3": "^12.6.2",
44
+ "chalk": "^5.3.0",
45
+ "commander": "^12.1.0",
46
+ "glob": "^11.0.0",
47
+ "graphology": "^0.26.0",
48
+ "graphology-communities-louvain": "^2.0.2",
49
+ "graphology-metrics": "^2.4.0",
50
+ "yaml": "^2.4.0"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^22.0.0",
54
+ "typescript": "^5.5.0",
55
+ "vitest": "^2.0.0"
56
+ },
57
+ "engines": {
58
+ "node": ">=18.0.0"
59
+ }
60
+ }
package/scaffold/.ori ADDED
@@ -0,0 +1 @@
1
+
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Entry point map for this vault
3
+ type: moc
4
+ ---
5
+
6
+ # index
7
+
8
+ Use this map as the root entry point. Link all major project maps here.
9
+
10
+ ## Project Maps
11
+ - [[project map]]
12
+
13
+ ## Recent Additions
14
+ - [[new note]]
15
+
16
+ ---
17
+
18
+ Areas:
19
+ - [[index]]
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,3 @@
1
+ # Reminders
2
+
3
+ - [ ] 2026-02-19 Example reminder
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,79 @@
1
+ # ori.config.yaml - vault configuration for Ori Mnemos
2
+
3
+ vault:
4
+ version: "0.1"
5
+
6
+ templates:
7
+ default: templates/note.md
8
+ by_type:
9
+ map: templates/map.md
10
+ moc: templates/map.md
11
+ source: templates/source.md
12
+ observation: templates/observation.md
13
+
14
+ vitality:
15
+ model: "actr"
16
+ actr_decay: 0.5
17
+ decay:
18
+ idea: 90
19
+ decision: 30
20
+ learning: 30
21
+ insight: 30
22
+ blocker: 14
23
+ opportunity: 30
24
+ base: 1.0
25
+ metabolic_rates:
26
+ self: 0.1
27
+ notes: 1.0
28
+ ops: 3.0
29
+ structural_boost_per_link: 0.1
30
+ structural_boost_cap: 10
31
+ revival_decay_rate: 0.2
32
+ revival_window_days: 14
33
+ access_saturation_k: 10
34
+
35
+ promote:
36
+ auto: true # ori add auto-promotes to notes/
37
+ require_llm: false # true = only auto-promote when LLM available
38
+ min_confidence: 0.6 # below this, skip auto-promotion and warn
39
+ project_keywords: {} # project_name: [keyword, keyword, ...]
40
+ project_map_routing: {} # project_name: map_note_title
41
+ default_area: "index" # fallback area when no project match
42
+
43
+ llm:
44
+ provider: null # null | "anthropic"
45
+ model: null
46
+ api_key_env: null # env var name containing API key
47
+
48
+ graph:
49
+ pagerank_alpha: 0.85
50
+ bridge_vitality_floor: 0.5
51
+ hub_degree_multiplier: 2.0
52
+
53
+ engine:
54
+ embedding_model: "Xenova/all-MiniLM-L6-v2"
55
+ embedding_dims: 384
56
+ piecewise_bins: 8
57
+ community_dims: 16
58
+ db_path: ".ori/embeddings.db"
59
+
60
+ retrieval:
61
+ default_limit: 10
62
+ candidate_multiplier: 5
63
+ rrf_k: 60
64
+ signal_weights:
65
+ composite: 2.0
66
+ keyword: 1.0
67
+ graph: 1.5
68
+ exploration_budget: 0.10
69
+
70
+ bm25:
71
+ k1: 1.2
72
+ b: 0.75
73
+ title_boost: 3.0
74
+ description_boost: 2.0
75
+
76
+ ips:
77
+ enabled: true
78
+ epsilon: 0.01
79
+ log_path: "ops/access.jsonl"
@@ -0,0 +1,36 @@
1
+ ---
2
+ _schema:
3
+ entity_type: "map"
4
+ applies_to: "notes/*-map.md"
5
+ required:
6
+ - description
7
+ - type
8
+ optional:
9
+ - project
10
+ enums:
11
+ type:
12
+ - moc
13
+ constraints:
14
+ description:
15
+ max_length: 200
16
+ format: "One sentence describing what this map covers"
17
+
18
+ # Template fields
19
+ description: ""
20
+ type: moc
21
+ ---
22
+
23
+ # {map name}
24
+
25
+ {Brief description of what this map covers and why it exists.}
26
+
27
+ ## Key Notes
28
+ {Links to the most important notes in this area}
29
+
30
+ ## Recent Additions
31
+ {Links to recently added notes - keeps the map fresh}
32
+
33
+ ---
34
+
35
+ Areas:
36
+ - [[index]]
@@ -0,0 +1,61 @@
1
+ ---
2
+ _schema:
3
+ entity_type: "note"
4
+ applies_to: "notes/*.md"
5
+ required:
6
+ - description
7
+ - type
8
+ - project
9
+ - status
10
+ - created
11
+ optional:
12
+ - confidence
13
+ - alternatives
14
+ - rationale
15
+ - superseded_by
16
+ - next_step
17
+ - source
18
+ enums:
19
+ type:
20
+ - idea
21
+ - decision
22
+ - learning
23
+ - insight
24
+ - blocker
25
+ - opportunity
26
+ status:
27
+ - inbox
28
+ - active
29
+ - completed
30
+ - superseded
31
+ - archived
32
+ confidence:
33
+ - speculative
34
+ - promising
35
+ - validated
36
+ constraints:
37
+ description:
38
+ max_length: 200
39
+ format: "One sentence adding context beyond the title"
40
+ project:
41
+ format: "Array of project tags"
42
+
43
+ # Template fields
44
+ description: ""
45
+ type: ""
46
+ project: []
47
+ status: active
48
+ created: YYYY-MM-DD
49
+ ---
50
+
51
+ # {prose-as-title: a complete thought that works as a statement}
52
+
53
+ {Content - your reasoning, evidence, context. Transform the material, don't just summarize.}
54
+
55
+ ---
56
+
57
+ Relevant Notes:
58
+ - [[related note]] -- why this connection matters
59
+
60
+ Areas:
61
+ - [[relevant map]]
@@ -0,0 +1,38 @@
1
+ ---
2
+ _schema:
3
+ entity_type: "observation"
4
+ applies_to: "ops/observations/*.md"
5
+ required:
6
+ - description
7
+ - category
8
+ - observed
9
+ - status
10
+ optional: []
11
+ enums:
12
+ category:
13
+ - friction
14
+ - surprise
15
+ - process-gap
16
+ - methodology
17
+ - quality
18
+ status:
19
+ - pending
20
+ - promoted
21
+ - implemented
22
+ - archived
23
+
24
+ # Template fields
25
+ description: ""
26
+ category: ""
27
+ observed: YYYY-MM-DD
28
+ status: pending
29
+ ---
30
+
31
+ # {prose-sentence describing what was observed}
32
+
33
+ {Context - what happened, what was expected, what actually occurred}
34
+
35
+ ---
36
+
37
+ Topics:
38
+ - [[methodology]]
@@ -0,0 +1,45 @@
1
+ ---
2
+ _schema:
3
+ entity_type: "source"
4
+ applies_to: "inbox/*.md"
5
+ required:
6
+ - description
7
+ - source_type
8
+ - status
9
+ - created
10
+ optional:
11
+ - url
12
+ - author
13
+ - research_tool
14
+ - research_query
15
+ enums:
16
+ source_type:
17
+ - article
18
+ - voice-note
19
+ - conversation
20
+ - documentation
21
+ - video
22
+ - tweet
23
+ - raw-idea
24
+ status:
25
+ - unprocessed
26
+ - processing
27
+ - processed
28
+ - skipped
29
+
30
+ # Template fields
31
+ description: ""
32
+ source_type: ""
33
+ status: unprocessed
34
+ created: YYYY-MM-DD
35
+ ---
36
+
37
+ # {source title or description}
38
+
39
+ {Raw content, transcript, or notes from the source}
40
+
41
+ ---
42
+
43
+ Processing Notes:
44
+ - Extracted: {count} notes
45
+ - Key insights: {brief list}