dsh-workspace-memories 1.2.1 → 1.2.2

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
@@ -26,6 +26,7 @@ This plugin closes that gap with a small, explicit memory loop whose default sto
26
26
  | Browse / create / edit / delete memory files | **Workspace Memory** sidebar panel (switch workspaces or the global scope via the selector) |
27
27
  | Ask the agent to remember something | Any session: "remember: …" → the agent calls `save_workspace_memory` |
28
28
  | Automatic recall | Every session gets the **global** memory (all workspaces) followed by its **workspace** memory injected into its system prompt |
29
+ | Localized UI | The panel follows the app language in all eight DSH languages (中文 / English / 日本語 / Español / Français / Deutsch / Русский / Português), falling back to English for missing keys |
29
30
 
30
31
  Works in every built-in agent preset (Standard, PTC, Minimal, Creator): the tool is registered in the root composition, and global tools are visible to all presets unless a custom preset opts out with a `tools.restrict` allow list — add `save_workspace_memory` to that list if so.
31
32
 
@@ -33,6 +34,8 @@ Works in every built-in agent preset (Standard, PTC, Minimal, Creator): the tool
33
34
 
34
35
  The panel selector's top entry, **🌐 Global — every workspace**, addresses one cross-project memory directory at `~/.dsh/workspace-memory/_global/`. It is seeded once with a blank `preferences.md` template (persona, style, communication, formatting) and never overwritten after that. Global memory sorts **before** workspace memory in the prompt, so project notes read as overrides of personal preferences.
35
36
 
37
+ Too lazy to fill four blank sections by hand? Just tell any session **"帮我配置全局偏好"** ("help me set up my global preferences") — the agent interviews you question by question and writes the file itself via `save_workspace_memory` with `scope: "global"`.
38
+
36
39
  ## Installation
37
40
 
38
41
  The package is plain JavaScript with no build step, so every install channel works:
@@ -85,9 +88,10 @@ dsh-workspace-memories/ # this plugin
85
88
  ├── cordis.patch.yml # plugin row declaration
86
89
  ├── index.js # host: /api routes + prompt injection + the save tool
87
90
  ├── client.js # browser: sidebar entry + management panel
88
- ├── locale/ # panel copy (en, zh)
91
+ ├── locale/ # panel copy + plugin-page meta, all eight DSH languages
89
92
  ├── icon.svg
90
- └── selftest.mjs # host-logic self-test: node selftest.mjs
93
+ ├── selftest.mjs # host-logic self-test: node selftest.mjs
94
+ └── scripts/i18n-test.mjs # client dictionary check (8 languages, key sets, placeholders)
91
95
  ```
92
96
 
93
97
  Safety constraints: the browser panel can only address registered workspaces by `workspaceId` (no arbitrary host paths); file names are strictly validated (no path separators, `..`, whitespace, or control characters); one file is capped at 1 MiB; prompt injection truncates each file to 32K characters and caps at 20 files.
@@ -95,7 +99,7 @@ Safety constraints: the browser panel can only address registered workspaces by
95
99
  ## Development
96
100
 
97
101
  - Install with a `link:` dependency (local-path install does this): editing `client.js` hot-reloads in the page via the client HMR receiver; editing `index.js` (host code) requires a DSH restart to load the new module generation.
98
- - Run the self-test: `node selftest.mjs` (mocks the plugin context; covers routes, prompt rendering, tool writes, and validation failures).
102
+ - Run the self-test: `node selftest.mjs` (mocks the plugin context; covers routes, prompt rendering, tool writes, and validation failures); `node scripts/i18n-test.mjs` checks the eight-language dictionaries (key sets, placeholders).
99
103
  - Runtime checks: host entry `include:workspace-memory` should be `active`; the client slot `sidebar.panellist` should list a `workspace-memory` occupant; `save_workspace_memory` should appear in the tool list.
100
104
 
101
105
  ## License
package/README.zh.md CHANGED
@@ -26,6 +26,7 @@ DSH 的 Agent 跨会话是无状态的:一个会话"学到"的东西——项
26
26
  | 浏览 / 新建 / 编辑 / 删除记忆文件 | 侧栏「工作区记忆」面板(可切换工作区或全局范围) |
27
27
  | 让 Agent 记住事情 | 任意会话直接说「记住:…」→ Agent 调用 `save_workspace_memory` |
28
28
  | 记忆自动生效 | 每个会话的系统提示先携带**全局**记忆(所有工作区通用),再携带**工作区**记忆 |
29
+ | 界面多语言 | 面板跟随应用语言,完整支持 DSH 八国语言(中/英/日/西/法/德/俄/葡),缺键回退英文 |
29
30
 
30
31
  所有内置 Agent 预设(标准、PTC、极简、创造)均可用:工具注册在根组合,全局工具默认对所有预设可见。唯一例外是自定义预设使用 `tools.restrict` 白名单(`allow: [...]`)的情况——把 `save_workspace_memory` 加进白名单即可。
31
32
 
@@ -33,6 +34,8 @@ DSH 的 Agent 跨会话是无状态的:一个会话"学到"的东西——项
33
34
 
34
35
  面板下拉里第一项「🌐 全局(所有工作区通用)」对应跨项目记忆目录 `~/.dsh/workspace-memory/_global/`。首次使用时自动种入一份空白模板 `preferences.md`(人格、风格、沟通、格式四节,带注释提示),此后绝不覆盖用户修改。注入顺序上全局记忆排在工作区记忆**前面**,工作区里的项目笔记即是对个人偏好的覆盖。
35
36
 
37
+ 懒得自己填?在任意会话直接说「**帮我配置全局偏好**」——Agent 会逐个问你几个问题,然后用 `save_workspace_memory`(`scope: "global"`)自动写好。
38
+
36
39
  ## 安装
37
40
 
38
41
  本包为纯 JavaScript、无构建步骤,所有安装渠道都可用:
@@ -83,9 +86,10 @@ dsh-workspace-memories/ # 本插件
83
86
  ├── cordis.patch.yml # 插件行声明
84
87
  ├── index.js # 宿主:/api 路由 + 记忆注入 + 写记忆工具
85
88
  ├── client.js # 浏览器:侧栏入口 + 管理面板
86
- ├── locale/ # 面板文案(中/英)
89
+ ├── locale/ # 面板文案 + 插件页 meta,八国语言齐全
87
90
  ├── icon.svg
88
- └── selftest.mjs # 宿主逻辑自测:node selftest.mjs
91
+ ├── selftest.mjs # 宿主逻辑自测:node selftest.mjs
92
+ └── scripts/i18n-test.mjs # 客户端字典校验(8 语言键集 / 占位符一致)
89
93
  ```
90
94
 
91
95
  安全约束:浏览器面板只能按 `workspaceId` 操作已注册工作区(无法触达任意宿主路径);文件名严格校验(拒绝路径分隔符、`..`、空白与控制字符);单文件上限 1 MiB;注入提示时单文件截取前 32K 字符、最多 20 个文件。
@@ -93,7 +97,7 @@ dsh-workspace-memories/ # 本插件
93
97
  ## 开发与调试
94
98
 
95
99
  - 以 `link:` 方式安装时(本地路径安装即是):改 `client.js`(界面)经客户端 HMR 即时生效;改 `index.js`(宿主)需重启 DSH 加载新模块。
96
- - 自测:`node selftest.mjs`(模拟插件上下文,覆盖路由、注入渲染、工具写入与校验失败)。
100
+ - 自测:`node selftest.mjs`(模拟插件上下文,覆盖路由、注入渲染、工具写入与校验失败);`node scripts/i18n-test.mjs`(八国语言键集与占位符一致性)。
97
101
  - 运行时检查:宿主条目 `include:workspace-memory` 应为 `active`;客户端 slot `sidebar.panellist` 应有 `workspace-memory` 占用项;`save_workspace_memory` 应出现在工具列表中。
98
102
 
99
103
  ## 许可证
package/client.js CHANGED
@@ -79,7 +79,190 @@ window.__ModuleLoader__.load({
79
79
  'error.generic': '操作失败。',
80
80
  }
81
81
 
82
- const fallback = (key) => en[key] || key
82
+ const ja = {
83
+ 'panel.title': 'ワークスペースメモリ',
84
+ 'panel.subtitle': 'ワークスペースごとのメモリファイル。デフォルトでは DSH データディレクトリに保存され、プロジェクトフォルダーの外にあるため、サーバー設定などの機密ローカル情報が誤ってコミットされることはありません。このワークスペースのすべてのセッションに注入されます。',
85
+ 'workspace.label': 'メモリの範囲',
86
+ 'workspace.none': 'ワークスペースはまだ登録されていません。',
87
+ 'workspace.global': '🌐 グローバル(すべてのワークスペース)',
88
+ 'action.refresh': '更新',
89
+ 'action.new': '新規ファイル',
90
+ 'action.save': '保存',
91
+ 'action.delete': '削除',
92
+ 'action.confirmDelete': '削除を確認',
93
+ 'action.cancel': 'キャンセル',
94
+ 'action.create': '作成',
95
+ 'list.loading': '読み込み中…',
96
+ 'list.empty': 'メモリファイルはまだありません',
97
+ 'list.emptyHint': '.md ファイルを作成して、このワークスペースのメモ、規約、決定事項を記録しましょう。',
98
+ 'list.error': 'メモリファイルの読み込みに失敗しました。',
99
+ 'new.nameLabel': 'ファイル名',
100
+ 'new.placeholder': '例: architecture.md',
101
+ 'new.invalid': '英字、数字、ドット、アンダースコア、ハイフンが使用できます。.md 拡張子がない場合は自動で付加されます。',
102
+ 'editor.hint': '左側のメモリファイルを選択するか、新規作成してください。',
103
+ 'editor.placeholder': 'Markdown でメモリの内容を書きます…',
104
+ 'editor.dirty': '未保存の変更があります',
105
+ 'editor.readonlyMissing': 'このファイルはディスク上に存在しなくなりました。',
106
+ 'notice.saved': '保存しました。',
107
+ 'notice.created': '作成しました。',
108
+ 'notice.deleted': '削除しました。',
109
+ 'error.generic': '操作に失敗しました。',
110
+ }
111
+
112
+ const es = {
113
+ 'panel.title': 'Memoria del espacio de trabajo',
114
+ 'panel.subtitle': 'Archivos de memoria por espacio de trabajo, guardados por defecto en el directorio de datos de DSH — fuera de la carpeta del proyecto, por lo que las configuraciones de servidor y otras notas locales sensibles nunca se confirman por error. Se inyectan en cada sesión del espacio de trabajo.',
115
+ 'workspace.label': 'Ámbito de la memoria',
116
+ 'workspace.none': 'Aún no hay ningún espacio de trabajo registrado.',
117
+ 'workspace.global': '🌐 Global — todos los espacios de trabajo',
118
+ 'action.refresh': 'Actualizar',
119
+ 'action.new': 'Nuevo archivo',
120
+ 'action.save': 'Guardar',
121
+ 'action.delete': 'Eliminar',
122
+ 'action.confirmDelete': 'Confirmar eliminación',
123
+ 'action.cancel': 'Cancelar',
124
+ 'action.create': 'Crear',
125
+ 'list.loading': 'Cargando…',
126
+ 'list.empty': 'Aún no hay archivos de memoria',
127
+ 'list.emptyHint': 'Crea un archivo .md para guardar notas, convenciones y decisiones de este espacio de trabajo.',
128
+ 'list.error': 'No se pudieron cargar los archivos de memoria.',
129
+ 'new.nameLabel': 'Nombre del archivo',
130
+ 'new.placeholder': 'p. ej., architecture.md',
131
+ 'new.invalid': 'Se admiten letras, números, punto, guion bajo y guion; la extensión .md se añade automáticamente si falta.',
132
+ 'editor.hint': 'Selecciona un archivo de memoria a la izquierda o crea uno nuevo.',
133
+ 'editor.placeholder': 'Escribe el contenido de la memoria en Markdown…',
134
+ 'editor.dirty': 'Cambios sin guardar',
135
+ 'editor.readonlyMissing': 'Este archivo ya no existe en el disco.',
136
+ 'notice.saved': 'Guardado.',
137
+ 'notice.created': 'Creado.',
138
+ 'notice.deleted': 'Eliminado.',
139
+ 'error.generic': 'La operación falló.',
140
+ }
141
+
142
+ const fr = {
143
+ 'panel.title': 'Mémoire de l’espace de travail',
144
+ 'panel.subtitle': 'Fichiers de mémoire par espace de travail, stockés par défaut dans le répertoire de données de DSH — en dehors du dossier du projet, afin que les configurations serveur et autres notes locales sensibles ne soient jamais validées par erreur. Ils sont injectés dans chaque session de l’espace de travail.',
145
+ 'workspace.label': 'Portée de la mémoire',
146
+ 'workspace.none': 'Aucun espace de travail n’est encore enregistré.',
147
+ 'workspace.global': '🌐 Global — tous les espaces de travail',
148
+ 'action.refresh': 'Actualiser',
149
+ 'action.new': 'Nouveau fichier',
150
+ 'action.save': 'Enregistrer',
151
+ 'action.delete': 'Supprimer',
152
+ 'action.confirmDelete': 'Confirmer la suppression',
153
+ 'action.cancel': 'Annuler',
154
+ 'action.create': 'Créer',
155
+ 'list.loading': 'Chargement…',
156
+ 'list.empty': 'Aucun fichier de mémoire pour le moment',
157
+ 'list.emptyHint': 'Créez un fichier .md pour conserver les notes, conventions et décisions de cet espace de travail.',
158
+ 'list.error': 'Échec du chargement des fichiers de mémoire.',
159
+ 'new.nameLabel': 'Nom du fichier',
160
+ 'new.placeholder': 'p. ex. architecture.md',
161
+ 'new.invalid': 'Lettres, chiffres, point, tiret bas et tiret admis ; l’extension .md est ajoutée automatiquement si elle manque.',
162
+ 'editor.hint': 'Sélectionnez un fichier de mémoire à gauche, ou créez-en un nouveau.',
163
+ 'editor.placeholder': 'Rédigez le contenu de la mémoire en Markdown…',
164
+ 'editor.dirty': 'Modifications non enregistrées',
165
+ 'editor.readonlyMissing': 'Ce fichier n’existe plus sur le disque.',
166
+ 'notice.saved': 'Enregistré.',
167
+ 'notice.created': 'Créé.',
168
+ 'notice.deleted': 'Supprimé.',
169
+ 'error.generic': 'L’opération a échoué.',
170
+ }
171
+
172
+ const de = {
173
+ 'panel.title': 'Arbeitsbereichs-Speicher',
174
+ 'panel.subtitle': 'Speicherdateien pro Arbeitsbereich, standardmäßig im DSH-Datenverzeichnis gespeichert — außerhalb des Projektordners, sodass Serverkonfigurationen und andere lokale sensible Notizen nie versehentlich committet werden. Sie werden in jede Session des Arbeitsbereichs injiziert.',
175
+ 'workspace.label': 'Speicherbereich',
176
+ 'workspace.none': 'Es ist noch kein Arbeitsbereich registriert.',
177
+ 'workspace.global': '🌐 Global — alle Arbeitsbereiche',
178
+ 'action.refresh': 'Aktualisieren',
179
+ 'action.new': 'Neue Datei',
180
+ 'action.save': 'Speichern',
181
+ 'action.delete': 'Löschen',
182
+ 'action.confirmDelete': 'Löschung bestätigen',
183
+ 'action.cancel': 'Abbrechen',
184
+ 'action.create': 'Erstellen',
185
+ 'list.loading': 'Wird geladen…',
186
+ 'list.empty': 'Noch keine Speicherdateien',
187
+ 'list.emptyHint': 'Erstellen Sie eine .md-Datei, um Notizen, Konventionen und Entscheidungen für diesen Arbeitsbereich festzuhalten.',
188
+ 'list.error': 'Speicherdateien konnten nicht geladen werden.',
189
+ 'new.nameLabel': 'Dateiname',
190
+ 'new.placeholder': 'z. B. architecture.md',
191
+ 'new.invalid': 'Buchstaben, Ziffern, Punkt, Unterstrich und Bindestrich sind erlaubt; die Erweiterung .md wird bei Bedarf automatisch ergänzt.',
192
+ 'editor.hint': 'Wählen Sie links eine Speicherdatei aus oder erstellen Sie eine neue.',
193
+ 'editor.placeholder': 'Speicherinhalt in Markdown schreiben…',
194
+ 'editor.dirty': 'Ungespeicherte Änderungen',
195
+ 'editor.readonlyMissing': 'Diese Datei existiert nicht mehr auf dem Datenträger.',
196
+ 'notice.saved': 'Gespeichert.',
197
+ 'notice.created': 'Erstellt.',
198
+ 'notice.deleted': 'Gelöscht.',
199
+ 'error.generic': 'Vorgang fehlgeschlagen.',
200
+ }
201
+
202
+ const ru = {
203
+ 'panel.title': 'Память рабочей области',
204
+ 'panel.subtitle': 'Файлы памяти для каждой рабочей области по умолчанию хранятся в каталоге данных DSH — вне папки проекта, поэтому конфигурации серверов и другие локальные заметки никогда не попадут в коммит по ошибке. Они инъецируются в каждую сессию рабочей области.',
205
+ 'workspace.label': 'Область памяти',
206
+ 'workspace.none': 'Пока не зарегистрировано ни одной рабочей области.',
207
+ 'workspace.global': '🌐 Глобально — все рабочие области',
208
+ 'action.refresh': 'Обновить',
209
+ 'action.new': 'Новый файл',
210
+ 'action.save': 'Сохранить',
211
+ 'action.delete': 'Удалить',
212
+ 'action.confirmDelete': 'Подтвердить удаление',
213
+ 'action.cancel': 'Отмена',
214
+ 'action.create': 'Создать',
215
+ 'list.loading': 'Загрузка…',
216
+ 'list.empty': 'Файлов памяти пока нет',
217
+ 'list.emptyHint': 'Создайте .md-файл, чтобы хранить заметки, соглашения и решения для этой рабочей области.',
218
+ 'list.error': 'Не удалось загрузить файлы памяти.',
219
+ 'new.nameLabel': 'Имя файла',
220
+ 'new.placeholder': 'например, architecture.md',
221
+ 'new.invalid': 'Допускаются буквы, цифры, точка, подчёркивание и дефис; расширение .md добавляется автоматически, если оно отсутствует.',
222
+ 'editor.hint': 'Выберите файл памяти слева или создайте новый.',
223
+ 'editor.placeholder': 'Запишите содержимое памяти в Markdown…',
224
+ 'editor.dirty': 'Есть несохранённые изменения',
225
+ 'editor.readonlyMissing': 'Этот файл больше не существует на диске.',
226
+ 'notice.saved': 'Сохранено.',
227
+ 'notice.created': 'Создано.',
228
+ 'notice.deleted': 'Удалено.',
229
+ 'error.generic': 'Операция не удалась.',
230
+ }
231
+
232
+ const pt = {
233
+ 'panel.title': 'Memória do espaço de trabalho',
234
+ 'panel.subtitle': 'Arquivos de memória por espaço de trabalho, salvos por padrão no diretório de dados do DSH — fora da pasta do projeto, para que configurações de servidor e outras notas locais sensíveis nunca sejam commitadas por engano. São injetados em cada sessão do espaço de trabalho.',
235
+ 'workspace.label': 'Escopo da memória',
236
+ 'workspace.none': 'Nenhum espaço de trabalho registrado ainda.',
237
+ 'workspace.global': '🌐 Global — todos os espaços de trabalho',
238
+ 'action.refresh': 'Atualizar',
239
+ 'action.new': 'Novo arquivo',
240
+ 'action.save': 'Salvar',
241
+ 'action.delete': 'Excluir',
242
+ 'action.confirmDelete': 'Confirmar exclusão',
243
+ 'action.cancel': 'Cancelar',
244
+ 'action.create': 'Criar',
245
+ 'list.loading': 'Carregando…',
246
+ 'list.empty': 'Ainda não há arquivos de memória',
247
+ 'list.emptyHint': 'Crie um arquivo .md para guardar anotações, convenções e decisões deste espaço de trabalho.',
248
+ 'list.error': 'Falha ao carregar os arquivos de memória.',
249
+ 'new.nameLabel': 'Nome do arquivo',
250
+ 'new.placeholder': 'ex.: architecture.md',
251
+ 'new.invalid': 'Use letras, dígitos, ponto, sublinhado ou hífen; a extensão .md é adicionada automaticamente quando ausente.',
252
+ 'editor.hint': 'Selecione um arquivo de memória à esquerda ou crie um novo.',
253
+ 'editor.placeholder': 'Escreva o conteúdo da memória em Markdown…',
254
+ 'editor.dirty': 'Alterações não salvas',
255
+ 'editor.readonlyMissing': 'Este arquivo não existe mais no disco.',
256
+ 'notice.saved': 'Salvo.',
257
+ 'notice.created': 'Criado.',
258
+ 'notice.deleted': 'Excluído.',
259
+ 'error.generic': 'A operação falhou.',
260
+ }
261
+
262
+ /** All eight DSH languages, registered with the host locale runtime. */
263
+ const DICT = { zh, en, ja, es, fr, de, ru, pt }
264
+
265
+ const fallback = (key) => en[key] || zh[key] || key
83
266
 
84
267
  /**
85
268
  * Call one Host-half route and unwrap its envelope.
@@ -233,10 +416,28 @@ window.__ModuleLoader__.load({
233
416
  * @param {{ t?: (key: string) => string }} props - framework props; `t` is bound to this plugin's namespace.
234
417
  */
235
418
  function WorkspaceMemoryPanel(props) {
236
- const t = typeof props.t === 'function' ? props.t : fallback
237
419
  const injected = props.__ctx
238
420
  const workspacesStore = injected.workspaces && injected.workspaces.list
239
421
  const sessionsStore = injected.sessions && injected.sessions.list
422
+ const localeRuntime = injected.locale
423
+
424
+ // Re-render whenever the active UI language changes so every label
425
+ // re-resolves against the new locale (regional tags like zh-CN are
426
+ // normalized by the host runtime's own fallback chain: active → en).
427
+ const localeRevision = useSyncExternalStore(
428
+ localeRuntime && typeof localeRuntime.subscribe === 'function'
429
+ ? localeRuntime.subscribe.bind(localeRuntime)
430
+ : () => () => {},
431
+ localeRuntime && typeof localeRuntime.getSnapshot === 'function'
432
+ ? () => localeRuntime.getSnapshot()
433
+ : () => null,
434
+ )
435
+ const t = (key) => {
436
+ void localeRevision
437
+ if (typeof props.t === 'function') return props.t(key)
438
+ if (localeRuntime && typeof localeRuntime.translate === 'function') return localeRuntime.translate(NS, key)
439
+ return fallback(key)
440
+ }
240
441
 
241
442
  const workspaceSnapshot = useSyncExternalStore(
242
443
  workspacesStore ? workspacesStore.subscribe.bind(workspacesStore) : () => () => {},
@@ -546,7 +747,7 @@ window.__ModuleLoader__.load({
546
747
  return {
547
748
  inject: ['slots', 'locale', 'workspaces', 'sessions'],
548
749
  apply(ctx) {
549
- ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'workspace-memory: dictionaries')
750
+ ctx.effect(() => ctx.locale.register(NS, DICT), 'workspace-memory: dictionaries')
550
751
  const t = ctx.locale.bind(NS)
551
752
  // The slot system injects registered components rather than passing the
552
753
  // plugin context, so the panel reads its stores through one prop.
package/locale/de.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Arbeitsbereichs-Speicher",
4
+ "description": "Fügt ein Seitenleisten-Panel hinzu, das die Speicherdateien jedes Arbeitsbereichs auflistet und verwaltet. Die Dateien werden standardmäßig im DSH-Datenverzeichnis gespeichert und ergänzen Dateien wie AGENTS.md."
5
+ }
6
+ }
package/locale/es.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Memoria del espacio de trabajo",
4
+ "description": "Añade un panel lateral que enumera y gestiona los archivos de memoria adjuntos a cada espacio de trabajo, guardados por defecto en el directorio de datos de DSH como complemento de archivos como AGENTS.md."
5
+ }
6
+ }
package/locale/fr.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Mémoire de l’espace de travail",
4
+ "description": "Ajoute un panneau latéral qui liste et gère les fichiers de mémoire attachés à chaque espace de travail, stockés par défaut dans le répertoire de données de DSH en complément de fichiers comme AGENTS.md."
5
+ }
6
+ }
package/locale/ja.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "ワークスペースメモリ",
4
+ "description": "サイドバーパネルを追加し、各ワークスペースに紐づくメモリファイルを一覧・管理します。ファイルは既定で DSH データディレクトリに保存され、AGENTS.md などのファイルを補完します。"
5
+ }
6
+ }
package/locale/pt.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Memória do espaço de trabalho",
4
+ "description": "Adiciona um painel lateral que lista e gerencia os arquivos de memória anexados a cada espaço de trabalho, salvos por padrão no diretório de dados do DSH como complemento de arquivos como o AGENTS.md."
5
+ }
6
+ }
package/locale/ru.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Память рабочей области",
4
+ "description": "Добавляет панель боковой колонки со списком файлов памяти каждой рабочей области и управлением ими. Файлы по умолчанию хранятся в каталоге данных DSH и дополняют такие файлы, как AGENTS.md."
5
+ }
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-workspace-memories",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "Per-workspace persistent memory for DeepSeek Harness: a sidebar panel to manage Markdown memory files, automatic injection into every session of the workspace, and an agent tool to save new memories",
5
5
  "type": "module",
6
6
  "license": "MIT",