@luisarg/memory-auto 0.1.0 → 0.1.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.
@@ -0,0 +1,38 @@
1
+ # memory-vault (starter)
2
+
3
+ OKF (Obsidian Knowledge Format) memory vault for the DSH memory plugins.
4
+
5
+ This directory is the **public skeleton** of the vault: templates, type registry
6
+ and tag vocabulary. Runtime data (`projects/`, `raw/`, `logs/`, `memory.db`,
7
+ `index.md`, `log.md`) is generated locally and excluded from git (`.gitignore`).
8
+
9
+ ## Structure
10
+
11
+ ```
12
+ memory-vault/
13
+ ├── templates/ # OKF templates per entry type
14
+ ├── type-registry.yaml # type registry (source of truth)
15
+ ├── tag-vocabulary.json # tag normalization
16
+ ├── projects/ # per-project entries (created on first use)
17
+ ├── raw/ # loose Source entries (created on first use)
18
+ ├── logs/ # digest logs (created on first use)
19
+ └── memory.db # SQLite index (FTS5), rebuildable from markdown
20
+ ```
21
+
22
+ `projects/`, `raw/`, `logs/` and `memory.db` are created automatically by
23
+ `memory-vault-server` on first use (`MemoryStore.__init__`).
24
+
25
+ ## Usage
26
+
27
+ Point the server (or the `memory-mcp` / `memory-auto` plugins) at this directory
28
+ with the `MEMORY_PATH` env var (or `DSH_MEMORY_PATH` for the DSH plugins):
29
+
30
+ ```sh
31
+ MEMORY_PATH=./memory-vault uv run --directory ./memory-vault-server python server.py
32
+ ```
33
+
34
+ ## Rebuilding the index
35
+
36
+ The SQLite index is derived from the markdown; if it is missing or corrupted it
37
+ can be rebuilt with the server's `store_*` write tools, which upsert each entry
38
+ from its file.
@@ -0,0 +1,175 @@
1
+ {
2
+ "canonical": {
3
+ "architecture": {
4
+ "aliases": [
5
+ "arch",
6
+ "design",
7
+ "system-design"
8
+ ]
9
+ },
10
+ "python": {
11
+ "aliases": [
12
+ "py",
13
+ "python3"
14
+ ]
15
+ },
16
+ "typescript": {
17
+ "aliases": [
18
+ "ts",
19
+ "typescript"
20
+ ]
21
+ },
22
+ "testing": {
23
+ "aliases": [
24
+ "test",
25
+ "tests",
26
+ "testing"
27
+ ]
28
+ },
29
+ "ci-cd": {
30
+ "aliases": [
31
+ "ci",
32
+ "cd",
33
+ "github-actions",
34
+ "actions"
35
+ ]
36
+ },
37
+ "docker": {
38
+ "aliases": [
39
+ "docker",
40
+ "container"
41
+ ]
42
+ },
43
+ "database": {
44
+ "aliases": [
45
+ "db",
46
+ "sqlite",
47
+ "sql"
48
+ ]
49
+ },
50
+ "cli": {
51
+ "aliases": [
52
+ "command-line",
53
+ "terminal"
54
+ ]
55
+ },
56
+ "performance": {
57
+ "aliases": [
58
+ "perf",
59
+ "optimization"
60
+ ]
61
+ },
62
+ "security": {
63
+ "aliases": [
64
+ "security",
65
+ "auth"
66
+ ]
67
+ },
68
+ "ui-ux": {
69
+ "aliases": [
70
+ "ui",
71
+ "ux",
72
+ "frontend",
73
+ "interface"
74
+ ]
75
+ },
76
+ "refactoring": {
77
+ "aliases": [
78
+ "refactor",
79
+ "cleanup"
80
+ ]
81
+ },
82
+ "llm": {
83
+ "aliases": [
84
+ "ai",
85
+ "openrouter",
86
+ "model"
87
+ ]
88
+ },
89
+ "documentation": {
90
+ "aliases": [
91
+ "docs",
92
+ "readme"
93
+ ]
94
+ },
95
+ "automation": {
96
+ "aliases": [
97
+ "auto",
98
+ "script",
99
+ "makefile"
100
+ ]
101
+ },
102
+ "travel": {
103
+ "aliases": [
104
+ "japan",
105
+ "trip"
106
+ ]
107
+ },
108
+ "cv": {
109
+ "aliases": [
110
+ "curriculum",
111
+ "resume"
112
+ ]
113
+ },
114
+ "debugging": {
115
+ "aliases": [
116
+ "debug",
117
+ "fix",
118
+ "bug"
119
+ ]
120
+ },
121
+ "env-config": {
122
+ "aliases": [
123
+ "env",
124
+ "config",
125
+ "secrets",
126
+ "environment"
127
+ ]
128
+ },
129
+ "migration": {
130
+ "aliases": [
131
+ "migrate",
132
+ "data-migration"
133
+ ]
134
+ },
135
+ "decision": {
136
+ "aliases": []
137
+ },
138
+ "fact": {
139
+ "aliases": []
140
+ },
141
+ "rate-limit": {
142
+ "aliases": []
143
+ },
144
+ "pipeline": {
145
+ "aliases": ["etl", "data-pipeline"]
146
+ },
147
+ "athena": {
148
+ "aliases": ["aws-athena", "s3"]
149
+ },
150
+ "lightgbm": {
151
+ "aliases": ["lgbm", "model-training"]
152
+ },
153
+ "idea": {
154
+ "aliases": ["proposal", "hypothesis"]
155
+ },
156
+ "context": {
157
+ "aliases": ["situation", "constraint"]
158
+ },
159
+ "spike": {
160
+ "aliases": ["prototype", "poc"]
161
+ },
162
+ "feature-engineering": {
163
+ "aliases": ["features", "variables"]
164
+ },
165
+ "dsh": {
166
+ "aliases": ["deepseek-harness", "cordis"]
167
+ },
168
+ "opencode": {
169
+ "aliases": ["second-brain"]
170
+ },
171
+ "obsidian": {
172
+ "aliases": ["vault", "okf"]
173
+ }
174
+ }
175
+ }
@@ -0,0 +1,20 @@
1
+ ---
2
+ type: Context
3
+ title: <% tp.file.title %>
4
+ description: <fill me>
5
+ resource: ""
6
+ tags: []
7
+ timestamp: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
8
+ project: <% tp.user.config.project_name ?? "" %>
9
+ confidence: 0.8
10
+ ---
11
+
12
+ # <% tp.file.title %>
13
+
14
+ ## Situation
15
+
16
+ Estado y constraints en el momento.
17
+
18
+ ## Constraints
19
+
20
+ Qué límites temporales / entorno.
@@ -0,0 +1,13 @@
1
+ ---
2
+ type: Convention
3
+ title: <% tp.file.title %>
4
+ description: <fill me>
5
+ resource: ""
6
+ tags: []
7
+ timestamp: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
8
+ project: <% tp.user.config.project_name ?? "" %>
9
+ ---
10
+
11
+ # <% tp.file.title %>
12
+
13
+ The convention. State the rule, when it applies, and where it is enforced.
@@ -0,0 +1,23 @@
1
+ ---
2
+ type: Decision
3
+ title: <% tp.file.title %>
4
+ description: <fill me>
5
+ resource: ""
6
+ tags: []
7
+ timestamp: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
8
+ project: <% tp.user.config.project_name ?? "" %>
9
+ ---
10
+
11
+ # <% tp.file.title %>
12
+
13
+ ## Context
14
+
15
+ What was the situation that required a decision?
16
+
17
+ ## Decision
18
+
19
+ What was decided?
20
+
21
+ ## Consequences
22
+
23
+ What are the trade-offs, follow-ups, or reversibility notes?
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: Fact
3
+ title: <% tp.file.title %>
4
+ description: <fill me>
5
+ resource: ""
6
+ tags: []
7
+ timestamp: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
8
+ project: <% tp.user.config.project_name ?? "" %>
9
+ confidence: 1.0
10
+ ---
11
+
12
+ # <% tp.file.title %>
13
+
14
+ The fact.
@@ -0,0 +1,28 @@
1
+ ---
2
+ type: Idea
3
+ title: <% tp.file.title %>
4
+ description: <fill me>
5
+ resource: ""
6
+ tags: []
7
+ timestamp: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
8
+ project: <% tp.user.config.project_name ?? "" %>
9
+ confidence: 0.6
10
+ ---
11
+
12
+ # <% tp.file.title %>
13
+
14
+ ## Idea
15
+
16
+ Propuesta / hipótesis no validada.
17
+
18
+ ## Context
19
+
20
+ Situación que motivó la idea.
21
+
22
+ ## Alternatives
23
+
24
+ ¿ qué otras opciones se consideraron?
25
+
26
+ ## Next
27
+
28
+ Cómo validar.
@@ -0,0 +1,23 @@
1
+ ---
2
+ type: Learning
3
+ title: <% tp.file.title %>
4
+ description: <fill me>
5
+ resource: ""
6
+ tags: []
7
+ timestamp: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
8
+ project: <% tp.user.config.project_name ?? "" %>
9
+ ---
10
+
11
+ # <% tp.file.title %>
12
+
13
+ ## Problem
14
+
15
+ What was the symptom or problem?
16
+
17
+ ## Root cause
18
+
19
+ What actually caused it?
20
+
21
+ ## Solution
22
+
23
+ What fixed it, or what would have fixed it sooner?
@@ -0,0 +1,13 @@
1
+ ---
2
+ type: Profile
3
+ title: <% tp.file.title %>
4
+ description: <fill me>
5
+ resource: ""
6
+ tags: []
7
+ timestamp: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
8
+ project: <% tp.user.config.project_name ?? "" %>
9
+ ---
10
+
11
+ # <% tp.file.title %>
12
+
13
+ Synthesized profile for this project. Capture tech stack, architectural patterns, environment, workflow preferences, and known constraints. Profile entries deduplicate by `(project, type)` — saving a new profile overwrites the previous one.
@@ -0,0 +1,21 @@
1
+ ---
2
+ type: Source
3
+ title: <% tp.file.title %>
4
+ description: <fill me>
5
+ resource: ""
6
+ tags: []
7
+ timestamp: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
8
+ source_url: <url>
9
+ source_kind: article
10
+ captured_at: <% tp.date.now("YYYY-MM-DDTHH:mm:ssZ") %>
11
+ ---
12
+
13
+ # <% tp.file.title %>
14
+
15
+ ## Summary
16
+
17
+ Brief summary of the source material.
18
+
19
+ ## Captured content
20
+
21
+ Paste or describe the source content here (for offline or paywalled sources).
@@ -0,0 +1,75 @@
1
+ # Type Registry — single source of truth for all entry types.
2
+ # See openspec/changes/vault-foundation/specs/type-registry/spec.md
3
+
4
+ types:
5
+ - name: Decision
6
+ directory: decisions
7
+ singular: decision
8
+ tool: store_decision
9
+ template: templates/decision.md
10
+ extraction_hint: "Architectural or design choices that were made."
11
+ immutable: false
12
+ project_attached: true
13
+
14
+ - name: Fact
15
+ directory: facts
16
+ singular: fact
17
+ tool: store_fact
18
+ template: templates/fact.md
19
+ extraction_hint: "Stable, verifiable statements about the project (versions, conventions, constraints)."
20
+ immutable: false
21
+ project_attached: true
22
+
23
+ - name: Learning
24
+ directory: learnings
25
+ singular: learning
26
+ tool: store_learning
27
+ template: templates/learning.md
28
+ extraction_hint: "Non-obvious lessons, debugging insights, or solutions found."
29
+ immutable: false
30
+ project_attached: true
31
+
32
+ - name: Convention
33
+ directory: conventions
34
+ singular: convention
35
+ tool: store_convention
36
+ template: templates/convention.md
37
+ extraction_hint: "Style rules, naming patterns, and coding conventions."
38
+ immutable: false
39
+ project_attached: true
40
+
41
+ - name: Profile
42
+ directory: profiles
43
+ singular: profile
44
+ tool: store_profile
45
+ template: templates/profile.md
46
+ extraction_hint: "User profile or tech stack information for a project."
47
+ immutable: false
48
+ project_attached: true
49
+
50
+ - name: Idea
51
+ directory: ideas
52
+ singular: idea
53
+ tool: store_idea
54
+ template: templates/idea.md
55
+ extraction_hint: "Propuesta no validada, hipótesis o alternativa considerada (no implementada aún)."
56
+ immutable: false
57
+ project_attached: true
58
+
59
+ - name: Context
60
+ directory: contexts
61
+ singular: context
62
+ tool: store_context
63
+ template: templates/context.md
64
+ extraction_hint: "Estado situacional, constraints temporales, entorno o presunciones en el momento."
65
+ immutable: false
66
+ project_attached: true
67
+
68
+ - name: Source
69
+ directory: raw
70
+ singular: source
71
+ tool: store_source
72
+ template: templates/source.md
73
+ extraction_hint: null
74
+ immutable: true
75
+ project_attached: false