@rvboris/opencode-mempalace 0.1.0 → 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.
package/README.md CHANGED
@@ -1,72 +1,21 @@
1
1
  # OpenCode MemPalace Plugin
2
2
 
3
- > Persistent memory for OpenCode with hidden retrieval, autosave, and a safe MemPalace wrapper tool.
3
+ OpenCode memory layer with private retrieval and safe autosave.
4
4
 
5
5
  [Русская версия](./README.ru.md)
6
6
 
7
- OpenCode plugin for hidden retrieval and autosave with [MemPalace](https://github.com/milla-jovovich/mempalace) through a local Python adapter.
7
+ ## Why it matters
8
8
 
9
- - OpenCode: https://opencode.ai
10
- - MemPalace: https://github.com/milla-jovovich/mempalace
11
-
12
- ## What it does
13
-
14
- - injects hidden retrieval hints before normal answers
15
- - marks autosave on session lifecycle events
16
- - exposes one safe memory tool: `mempalace_memory`
17
- - routes memory through enforced user/project scopes
18
- - applies privacy filtering before writes
19
- - logs to both OpenCode logs and a local file
20
-
21
- ## Architecture
22
-
23
- ```mermaid
24
- flowchart TD
25
- U[User message] --> OC[OpenCode turn]
26
- OC --> EV[Plugin hooks]
27
- EV --> RET[Hidden retrieval instruction]
28
- EV --> AS[Autosave pending on idle/compaction]
29
- RET --> LLM[Model]
30
- AS --> LLM
31
- LLM --> TOOL[mempalace_memory]
32
- TOOL --> ADAPTER[Python adapter]
33
- ADAPTER --> MP[MemPalace backend]
34
- MP --> ADAPTER
35
- ADAPTER --> TOOL
36
- TOOL --> LLM
37
- ```
38
-
39
- ## Installation
40
-
41
- Add to `opencode.json`:
42
-
43
- ```json
44
- {
45
- "plugin": ["@rvboris/opencode-mempalace"]
46
- }
47
- ```
48
-
49
- OpenCode installs plugin dependencies automatically.
50
-
51
- ## Local development
9
+ Keep OpenCode context-aware without extra prompts.
52
10
 
53
- For source loading:
11
+ - **Finds relevant memory automatically** before normal replies
12
+ - **Saves durable knowledge quietly** in the background
13
+ - **Keeps writes safe** through one controlled tool
14
+ - **Protects sensitive data** before anything is stored
54
15
 
55
- ```jsonc
56
- {
57
- "$schema": "https://opencode.ai/config.json",
58
- "plugin": [
59
- "file:///ABSOLUTE/PATH/TO/mempalace-autosave/plugin/index.ts"
60
- ]
61
- }
62
- ```
16
+ ## Quick start
63
17
 
64
- The plugin itself does not require the MemPalace MCP server. It uses the bundled Python adapter.
65
-
66
- ## Prerequisites
67
-
68
- - Python 3.9+
69
- - MemPalace installed and initialized
18
+ Install MemPalace:
70
19
 
71
20
  ```bash
72
21
  pip install mempalace
@@ -74,94 +23,41 @@ mempalace init <dir>
74
23
  mempalace mine <dir>
75
24
  ```
76
25
 
77
- ## Build
78
-
79
- ```bash
80
- npm run build
81
- ```
82
-
83
- This builds TypeScript into `dist/` and copies the adapter to `dist/bridge/`.
26
+ Add the plugin to `opencode.json`:
84
27
 
85
- ## Configuration
86
-
87
- Environment variables:
88
-
89
- - `MEMPALACE_AUTOSAVE_ENABLED`
90
- - `MEMPALACE_RETRIEVAL_ENABLED`
91
- - `MEMPALACE_KEYWORD_SAVE_ENABLED`
92
- - `MEMPALACE_PRIVACY_REDACTION_ENABLED`
93
- - `MEMPALACE_MAX_INJECTED_ITEMS`
94
- - `MEMPALACE_RETRIEVAL_QUERY_LIMIT`
95
- - `MEMPALACE_AUTOSAVE_LOG_FILE`
96
- - `MEMPALACE_ADAPTER_PYTHON`
97
- - `MEMPALACE_USER_WING_PREFIX`
98
- - `MEMPALACE_PROJECT_WING_PREFIX`
99
-
100
- Optional config file: `~/.config/opencode/mempalace.jsonc`
101
-
102
- ```jsonc
28
+ ```json
103
29
  {
104
- "autosaveEnabled": true,
105
- "retrievalEnabled": true,
106
- "keywordSaveEnabled": true,
107
- "maxInjectedItems": 6,
108
- "retrievalQueryLimit": 5,
109
- "keywordPatterns": ["remember", "save this", "don't forget", "note that"],
110
- "privacyRedactionEnabled": true,
111
- "userWingPrefix": "wing_user",
112
- "projectWingPrefix": "wing_project"
30
+ "plugin": ["@rvboris/opencode-mempalace"]
113
31
  }
114
32
  ```
115
33
 
116
- ## Runtime behavior
117
-
118
- ### Retrieval
119
-
120
- On normal user turns the plugin can inject hidden retrieval guidance so the model searches existing memory before answering.
121
-
122
- ### Autosave
34
+ That is enough to enable memory search, autosave, and `mempalace_memory`.
123
35
 
124
- On `session.idle` and `session.compacted`, the plugin marks autosave as pending. The actual write happens on the next model turn through `mempalace_memory`.
36
+ ## What you get
125
37
 
126
- ### Safe wrapper tool
38
+ - hidden memory lookup before answers
39
+ - autosave on session lifecycle events
40
+ - separate user and project memory
41
+ - one safe memory tool for the model
42
+ - local Python bridge to MemPalace
127
43
 
128
- The model should use only:
44
+ The plugin does **not** require the MemPalace MCP server.
129
45
 
130
- - `mempalace_memory`
46
+ ## The one tool: `mempalace_memory`
131
47
 
132
- Direct mutation tools are blocked:
48
+ This is the only tool the model needs.
133
49
 
134
- - `mempalace_add_drawer`
135
- - `mempalace_kg_add`
136
- - `mempalace_diary_write`
137
- - matching `mcp-router_*` variants
50
+ ### Modes
138
51
 
139
- ## Scope policy
52
+ - **`save`** — store a durable preference, fact, or decision
53
+ - **`search`** — find relevant memory by query
54
+ - **`kg_add`** — add a structured fact to the knowledge graph
55
+ - **`diary_write`** — save a short work note or daily log
56
+ - **`mine_messages`** — internal autosave mode used by the plugin
140
57
 
141
- ### User scope
58
+ ### Examples
142
59
 
143
- - wing: `${MEMPALACE_USER_WING_PREFIX}_profile`
144
- - rooms: `preferences`, `workflow`, `communication`
145
-
146
- Use for:
147
- - response preferences
148
- - personal workflow habits
149
- - cross-project conventions
150
-
151
- ### Project scope
152
-
153
- - wing: `${MEMPALACE_PROJECT_WING_PREFIX}_${slug(projectName)}`
154
- - rooms: `architecture`, `workflow`, `decisions`, `bugs`, `setup`
155
-
156
- Use for:
157
- - repo-specific setup
158
- - architecture decisions
159
- - build/test commands
160
- - bug/solution patterns
161
-
162
- ## Examples
163
-
164
- ### Save a user preference
60
+ Save a user preference:
165
61
 
166
62
  ```text
167
63
  mempalace_memory
@@ -171,60 +67,120 @@ mempalace_memory
171
67
  content: Prefers concise responses and numbered steps.
172
68
  ```
173
69
 
174
- ### Save a project decision
70
+ Save a project decision:
175
71
 
176
72
  ```text
177
73
  mempalace_memory
178
74
  mode: save
179
75
  scope: project
180
76
  room: decisions
181
- content: Use Bun for builds and tests; avoid npm.
77
+ content: Use Bun for builds and tests.
182
78
  ```
183
79
 
184
- ### Add KG fact
80
+ Search memory:
185
81
 
186
82
  ```text
187
83
  mempalace_memory
188
- mode: kg_add
84
+ mode: search
189
85
  scope: project
86
+ room: workflow
87
+ query: build command
88
+ limit: 3
89
+ ```
90
+
91
+ Add a graph fact:
92
+
93
+ ```text
94
+ mempalace_memory
95
+ mode: kg_add
190
96
  subject: my-repo
191
97
  predicate: uses
192
98
  object: bun
193
99
  ```
194
100
 
195
- ### Search memory
101
+ ## Memory areas
196
102
 
197
- ```text
198
- mempalace_memory
199
- mode: search
200
- scope: user
201
- room: preferences
202
- query: user name
203
- limit: 3
103
+ **User memory**
104
+
105
+ - `preferences`
106
+ - `workflow`
107
+ - `communication`
108
+
109
+ Use it for stable cross-project habits and preferences.
110
+
111
+ **Project memory**
112
+
113
+ - `architecture`
114
+ - `workflow`
115
+ - `decisions`
116
+ - `bugs`
117
+ - `setup`
118
+
119
+ Use it for repository-specific knowledge.
120
+
121
+ ## Configuration
122
+
123
+ Optional config file: `~/.config/opencode/mempalace.jsonc`
124
+
125
+ ```jsonc
126
+ {
127
+ "autosaveEnabled": true,
128
+ "retrievalEnabled": true,
129
+ "keywordSaveEnabled": true,
130
+ "maxInjectedItems": 6,
131
+ "retrievalQueryLimit": 5,
132
+ "privacyRedactionEnabled": true
133
+ }
204
134
  ```
205
135
 
136
+ Useful environment variables:
137
+
138
+ - `MEMPALACE_AUTOSAVE_ENABLED`
139
+ - `MEMPALACE_RETRIEVAL_ENABLED`
140
+ - `MEMPALACE_KEYWORD_SAVE_ENABLED`
141
+ - `MEMPALACE_PRIVACY_REDACTION_ENABLED`
142
+ - `MEMPALACE_AUTOSAVE_LOG_FILE`
143
+ - `MEMPALACE_ADAPTER_PYTHON`
144
+
206
145
  ## Privacy
207
146
 
208
- - supports `<private>...</private>` blocks
147
+ - respects `<private>...</private>` blocks
209
148
  - redacts common secrets before writes
210
- - refuses to save fully private content
149
+ - skips fully private content
211
150
 
212
- ## Logging
151
+ ## Project docs
213
152
 
214
- Logs are written to:
153
+ - Release history: [`CHANGELOG.md`](./CHANGELOG.md)
154
+ - Changelog rules: [`CONTRIBUTING.md#changelog`](./CONTRIBUTING.md#changelog)
215
155
 
216
- - OpenCode built-in logger
217
- - file log: `~/.mempalace/opencode_autosave.log`
156
+ ## Local development
218
157
 
219
- For debugging:
158
+ Load from source:
159
+
160
+ ```jsonc
161
+ {
162
+ "$schema": "https://opencode.ai/config.json",
163
+ "plugin": [
164
+ "file:///ABSOLUTE/PATH/TO/mempalace-autosave/plugin/index.ts"
165
+ ]
166
+ }
167
+ ```
168
+
169
+ Build:
170
+
171
+ ```bash
172
+ npm run build
173
+ ```
174
+
175
+ Debug logs:
220
176
 
221
177
  ```bash
222
178
  opencode --log-level DEBUG
223
179
  ```
224
180
 
225
- ## Notes
181
+ File log: `~/.mempalace/opencode_autosave.log`
226
182
 
227
- - no visible autosave chat messages
228
- - no OpenCode tool-to-tool calls
229
- - adapter uses stdin/stdout streaming
230
- - package is publishable as a standard OpenCode plugin
183
+ ## Links
184
+
185
+ - OpenCode: https://opencode.ai
186
+ - MemPalace: https://github.com/milla-jovovich/mempalace
package/README.ru.md CHANGED
@@ -1,72 +1,21 @@
1
1
  # Плагин MemPalace для OpenCode
2
2
 
3
- > Постоянная память для OpenCode: скрытый retrieval, autosave и безопасный wrapper tool для MemPalace.
3
+ Слой памяти для OpenCode: скрытый поиск по памяти и безопасное автосохранение.
4
4
 
5
5
  [English version](./README.md)
6
6
 
7
- Плагин для [OpenCode](https://opencode.ai) со скрытым retrieval и autosave в [MemPalace](https://github.com/milla-jovovich/mempalace) через локальный Python adapter.
7
+ ## Зачем он нужен
8
8
 
9
- - OpenCode: https://opencode.ai
10
- - MemPalace: https://github.com/milla-jovovich/mempalace
9
+ Чтобы OpenCode отвечал с учётом прошлого контекста — без лишних подсказок и без шума в чате.
11
10
 
12
- ## Что делает
13
-
14
- - добавляет скрытые подсказки для retrieval перед обычным ответом
15
- - помечает autosave на событиях жизненного цикла сессии
16
- - дает один безопасный tool: `mempalace_memory`
17
- - направляет память в user/project scope по явным правилам
18
- - применяет privacy-фильтрацию перед записью
19
- - пишет логи в OpenCode и в локальный файл
20
-
21
- ## Схема работы
22
-
23
- ```mermaid
24
- flowchart TD
25
- U[Сообщение пользователя] --> OC[Ход OpenCode]
26
- OC --> EV[Хуки плагина]
27
- EV --> RET[Скрытая retrieval-инструкция]
28
- EV --> AS[Autosave pending на idle/compaction]
29
- RET --> LLM[Модель]
30
- AS --> LLM
31
- LLM --> TOOL[mempalace_memory]
32
- TOOL --> ADAPTER[Python adapter]
33
- ADAPTER --> MP[MemPalace backend]
34
- MP --> ADAPTER
35
- ADAPTER --> TOOL
36
- TOOL --> LLM
37
- ```
11
+ - **Сам ищет нужную память** перед обычным ответом
12
+ - **Тихо сохраняет важное** по ходу работы
13
+ - **Пишет безопасно** через один контролируемый инструмент
14
+ - **Учитывает приватность** перед сохранением
38
15
 
39
- ## Установка
16
+ ## Быстрый старт
40
17
 
41
- Добавь в `opencode.json`:
42
-
43
- ```json
44
- {
45
- "plugin": ["@rvboris/opencode-mempalace"]
46
- }
47
- ```
48
-
49
- OpenCode сам установит зависимости плагина при запуске.
50
-
51
- ## Локальная разработка
52
-
53
- Для загрузки из исходников:
54
-
55
- ```jsonc
56
- {
57
- "$schema": "https://opencode.ai/config.json",
58
- "plugin": [
59
- "file:///ABSOLUTE/PATH/TO/mempalace-autosave/plugin/index.ts"
60
- ]
61
- }
62
- ```
63
-
64
- Самому плагину MemPalace MCP server не нужен — он использует встроенный Python adapter.
65
-
66
- ## Требования
67
-
68
- - Python 3.9+
69
- - установлен и инициализирован MemPalace
18
+ Установи MemPalace:
70
19
 
71
20
  ```bash
72
21
  pip install mempalace
@@ -74,94 +23,41 @@ mempalace init <dir>
74
23
  mempalace mine <dir>
75
24
  ```
76
25
 
77
- ## Сборка
78
-
79
- ```bash
80
- npm run build
81
- ```
82
-
83
- Команда компилирует TypeScript в `dist/` и копирует adapter в `dist/bridge/`.
84
-
85
- ## Конфигурация
26
+ Добавь плагин в `opencode.json`:
86
27
 
87
- Переменные окружения:
88
-
89
- - `MEMPALACE_AUTOSAVE_ENABLED`
90
- - `MEMPALACE_RETRIEVAL_ENABLED`
91
- - `MEMPALACE_KEYWORD_SAVE_ENABLED`
92
- - `MEMPALACE_PRIVACY_REDACTION_ENABLED`
93
- - `MEMPALACE_MAX_INJECTED_ITEMS`
94
- - `MEMPALACE_RETRIEVAL_QUERY_LIMIT`
95
- - `MEMPALACE_AUTOSAVE_LOG_FILE`
96
- - `MEMPALACE_ADAPTER_PYTHON`
97
- - `MEMPALACE_USER_WING_PREFIX`
98
- - `MEMPALACE_PROJECT_WING_PREFIX`
99
-
100
- Дополнительно можно использовать файл `~/.config/opencode/mempalace.jsonc`:
101
-
102
- ```jsonc
28
+ ```json
103
29
  {
104
- "autosaveEnabled": true,
105
- "retrievalEnabled": true,
106
- "keywordSaveEnabled": true,
107
- "maxInjectedItems": 6,
108
- "retrievalQueryLimit": 5,
109
- "keywordPatterns": ["remember", "save this", "don't forget", "note that"],
110
- "privacyRedactionEnabled": true,
111
- "userWingPrefix": "wing_user",
112
- "projectWingPrefix": "wing_project"
30
+ "plugin": ["@rvboris/opencode-mempalace"]
113
31
  }
114
32
  ```
115
33
 
116
- ## Как работает во время сессии
117
-
118
- ### Retrieval
119
-
120
- На обычных пользовательских ходах плагин может подмешивать скрытую retrieval-инструкцию, чтобы модель сначала поискала релевантную память.
121
-
122
- ### Autosave
34
+ Этого достаточно, чтобы включить поиск по памяти, автосохранение и `mempalace_memory`.
123
35
 
124
- На `session.idle` и `session.compacted` плагин ставит autosave в состояние `pending`. Реальная запись делается на следующем ходе модели через `mempalace_memory`.
36
+ ## Что ты получаешь
125
37
 
126
- ### Безопасный wrapper tool
38
+ - скрытый поиск по памяти перед ответом
39
+ - автосохранение на событиях сессии
40
+ - раздельную память для пользователя и проекта
41
+ - один безопасный инструмент для работы с памятью
42
+ - локальную Python-прослойку для MemPalace
127
43
 
128
- Модель должна использовать только:
44
+ Самому плагину **не нужен** сервер MCP от MemPalace.
129
45
 
130
- - `mempalace_memory`
46
+ ## Основной инструмент: `mempalace_memory`
131
47
 
132
- Прямые mutating tools блокируются:
48
+ Это единственный инструмент, который нужен модели.
133
49
 
134
- - `mempalace_add_drawer`
135
- - `mempalace_kg_add`
136
- - `mempalace_diary_write`
137
- - соответствующие `mcp-router_*` варианты
50
+ ### Режимы
138
51
 
139
- ## Политика scope
52
+ - **`save`** — сохранить устойчивый факт, предпочтение или решение
53
+ - **`search`** — найти релевантную память по запросу
54
+ - **`kg_add`** — добавить структурированный факт в граф знаний
55
+ - **`diary_write`** — записать короткую рабочую заметку
56
+ - **`mine_messages`** — внутренний режим автосохранения, который использует сам плагин
140
57
 
141
- ### User scope
58
+ ### Примеры
142
59
 
143
- - wing: `${MEMPALACE_USER_WING_PREFIX}_profile`
144
- - rooms: `preferences`, `workflow`, `communication`
145
-
146
- Используется для:
147
- - предпочтений по ответам
148
- - личных привычек работы
149
- - кросс-проектных соглашений
150
-
151
- ### Project scope
152
-
153
- - wing: `${MEMPALACE_PROJECT_WING_PREFIX}_${slug(projectName)}`
154
- - rooms: `architecture`, `workflow`, `decisions`, `bugs`, `setup`
155
-
156
- Используется для:
157
- - repo-specific setup
158
- - архитектурных решений
159
- - build/test команд
160
- - паттернов баг/решение
161
-
162
- ## Примеры
163
-
164
- ### Сохранить user preference
60
+ Сохранить пользовательское предпочтение:
165
61
 
166
62
  ```text
167
63
  mempalace_memory
@@ -171,60 +67,120 @@ mempalace_memory
171
67
  content: Prefers concise responses and numbered steps.
172
68
  ```
173
69
 
174
- ### Сохранить project decision
70
+ Сохранить проектное решение:
175
71
 
176
72
  ```text
177
73
  mempalace_memory
178
74
  mode: save
179
75
  scope: project
180
76
  room: decisions
181
- content: Use Bun for builds and tests; avoid npm.
77
+ content: Use Bun for builds and tests.
182
78
  ```
183
79
 
184
- ### Добавить KG факт
80
+ Найти память:
185
81
 
186
82
  ```text
187
83
  mempalace_memory
188
- mode: kg_add
84
+ mode: search
189
85
  scope: project
86
+ room: workflow
87
+ query: build command
88
+ limit: 3
89
+ ```
90
+
91
+ Добавить факт в граф знаний:
92
+
93
+ ```text
94
+ mempalace_memory
95
+ mode: kg_add
190
96
  subject: my-repo
191
97
  predicate: uses
192
98
  object: bun
193
99
  ```
194
100
 
195
- ### Поиск в памяти
101
+ ## Области памяти
196
102
 
197
- ```text
198
- mempalace_memory
199
- mode: search
200
- scope: user
201
- room: preferences
202
- query: user name
203
- limit: 3
103
+ **Память пользователя**
104
+
105
+ - `preferences`
106
+ - `workflow`
107
+ - `communication`
108
+
109
+ Подходит для стабильных привычек и предпочтений, которые полезны в любом проекте.
110
+
111
+ **Память проекта**
112
+
113
+ - `architecture`
114
+ - `workflow`
115
+ - `decisions`
116
+ - `bugs`
117
+ - `setup`
118
+
119
+ Подходит для знаний, привязанных к конкретному репозиторию.
120
+
121
+ ## Настройка
122
+
123
+ Необязательный файл конфигурации: `~/.config/opencode/mempalace.jsonc`
124
+
125
+ ```jsonc
126
+ {
127
+ "autosaveEnabled": true,
128
+ "retrievalEnabled": true,
129
+ "keywordSaveEnabled": true,
130
+ "maxInjectedItems": 6,
131
+ "retrievalQueryLimit": 5,
132
+ "privacyRedactionEnabled": true
133
+ }
204
134
  ```
205
135
 
206
- ## Privacy
136
+ Полезные переменные окружения:
137
+
138
+ - `MEMPALACE_AUTOSAVE_ENABLED`
139
+ - `MEMPALACE_RETRIEVAL_ENABLED`
140
+ - `MEMPALACE_KEYWORD_SAVE_ENABLED`
141
+ - `MEMPALACE_PRIVACY_REDACTION_ENABLED`
142
+ - `MEMPALACE_AUTOSAVE_LOG_FILE`
143
+ - `MEMPALACE_ADAPTER_PYTHON`
144
+
145
+ ## Приватность
207
146
 
208
147
  - поддерживаются блоки `<private>...</private>`
209
- - common secrets редактируются перед записью
210
- - полностью private content не сохраняется
148
+ - типовые секреты скрываются перед записью
149
+ - полностью приватное содержимое не сохраняется
150
+
151
+ ## Документация проекта
152
+
153
+ - История изменений: [`CHANGELOG.md`](./CHANGELOG.md)
154
+ - Правила ведения changelog: [`CONTRIBUTING.md#changelog`](./CONTRIBUTING.md#changelog)
155
+
156
+ ## Локальная разработка
157
+
158
+ Загрузка из исходников:
211
159
 
212
- ## Логи
160
+ ```jsonc
161
+ {
162
+ "$schema": "https://opencode.ai/config.json",
163
+ "plugin": [
164
+ "file:///ABSOLUTE/PATH/TO/mempalace-autosave/plugin/index.ts"
165
+ ]
166
+ }
167
+ ```
213
168
 
214
- Логи пишутся в:
169
+ Сборка:
215
170
 
216
- - встроенный лог OpenCode
217
- - файл: `~/.mempalace/opencode_autosave.log`
171
+ ```bash
172
+ npm run build
173
+ ```
218
174
 
219
- Для отладки:
175
+ Журналы отладки:
220
176
 
221
177
  ```bash
222
178
  opencode --log-level DEBUG
223
179
  ```
224
180
 
225
- ## Заметки
181
+ Файл журнала: `~/.mempalace/opencode_autosave.log`
226
182
 
227
- - никаких видимых autosave-сообщений в чате
228
- - никаких OpenCode tool-to-tool вызовов
229
- - adapter использует stdin/stdout streaming
230
- - пакет подготовлен как полноценный publishable OpenCode plugin
183
+ ## Ссылки
184
+
185
+ - OpenCode: https://opencode.ai
186
+ - MemPalace: https://github.com/milla-jovovich/mempalace