opencode-flema-engram-sidebar 0.1.8 → 0.3.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 +137 -16
- package/dist/core.d.ts +4 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +4 -0
- package/dist/core.js.map +1 -0
- package/dist/maintenance/cli.d.ts +21 -0
- package/dist/maintenance/cli.d.ts.map +1 -0
- package/dist/maintenance/cli.js +571 -0
- package/dist/maintenance/cli.js.map +1 -0
- package/dist/maintenance.d.ts +3 -0
- package/dist/maintenance.d.ts.map +1 -0
- package/dist/maintenance.js +4 -0
- package/dist/maintenance.js.map +1 -0
- package/dist/pi.d.ts +34 -0
- package/dist/pi.d.ts.map +1 -0
- package/dist/pi.js +123 -0
- package/dist/pi.js.map +1 -0
- package/dist/schemas/health.d.ts +4 -4
- package/dist/schemas/observation.d.ts +2 -2
- package/dist/schemas/odd-state.d.ts +40 -40
- package/dist/schemas/project.d.ts +2 -2
- package/dist/schemas/session.d.ts +12 -12
- package/dist/sidebar/hooks/use-engram.d.ts +3 -81
- package/dist/sidebar/hooks/use-engram.d.ts.map +1 -1
- package/dist/sidebar/hooks/use-engram.js +21 -432
- package/dist/sidebar/hooks/use-engram.js.map +1 -1
- package/dist/sidebar/plugin.d.ts +63 -2
- package/dist/sidebar/plugin.d.ts.map +1 -1
- package/dist/sidebar/plugin.js +140 -104
- package/dist/sidebar/plugin.js.map +1 -1
- package/dist/viewer/core.d.ts +93 -0
- package/dist/viewer/core.d.ts.map +1 -0
- package/dist/viewer/core.js +455 -0
- package/dist/viewer/core.js.map +1 -0
- package/package.json +17 -2
package/README.md
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
# Flema Engram para OpenCode
|
|
1
|
+
# Flema Engram para OpenCode y Pi
|
|
2
2
|
|
|
3
3
|
[](https://github.com/oniricosistemas/flema-engram/actions/workflows/ci.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/opencode-flema-engram-sidebar)
|
|
5
5
|
[](https://nodejs.org/)
|
|
6
6
|
[](https://github.com/oniricosistemas/flema-engram/blob/main/LICENSE)
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
[Engram](https://github.com/Gentleman-Programming/engram) mientras trabajás dentro de OpenCode.
|
|
8
|
+
Una integración local y de solo lectura que mantiene visible el contexto reciente de
|
|
9
|
+
[Engram](https://github.com/Gentleman-Programming/engram) mientras trabajás dentro de OpenCode o Pi/Gentle Shell.
|
|
10
10
|
|
|
11
11
|
La canción **“Y aún yo te recuerdo”** inspiró artísticamente la idea central: que la
|
|
12
12
|
última memoria guardada siga presente en el contexto de desarrollo. Esta referencia
|
|
13
13
|
es un homenaje a esa inspiración; no implica afiliación, patrocinio ni titularidad
|
|
14
14
|
sobre la obra.
|
|
15
15
|
|
|
16
|
-
> **English summary:** Flema Engram is a local-first, read-only OpenCode
|
|
17
|
-
>
|
|
16
|
+
> **English summary:** Flema Engram is a local-first, read-only OpenCode and Pi
|
|
17
|
+
> integration that surfaces Engram health, project context, recent memories,
|
|
18
18
|
> blockers, and ODD task progress by default. An MCP stdio adapter is included only as an optional
|
|
19
19
|
> integration path.
|
|
20
20
|
|
|
@@ -36,18 +36,58 @@ Configuración mínima:
|
|
|
36
36
|
```json
|
|
37
37
|
{
|
|
38
38
|
"$schema": "https://opencode.ai/tui.json",
|
|
39
|
-
"plugin": ["opencode-flema-engram-sidebar"]
|
|
39
|
+
"plugin": ["opencode-flema-engram-sidebar@0.3.0"]
|
|
40
40
|
}
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Fijá una versión exacta. OpenCode 1.18.x conserva paquetes npm en caché y una entrada
|
|
44
|
+
sin versión o con `@latest` puede seguir resolviendo una release anterior después de
|
|
45
|
+
que npm publique otra. El plugin no puede actualizarse a sí mismo porque OpenCode lo
|
|
46
|
+
resuelve e importa antes de ejecutar su código.
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
Para ubicar el archivo global, ejecutá `opencode debug paths` y abrí `tui.json` dentro
|
|
49
|
+
de la ruta `config`. Una vez guardado, cerrá completamente OpenCode y abrí un proceso
|
|
50
|
+
nuevo para que el plugin se cargue.
|
|
51
|
+
|
|
52
|
+
#### Diagnosticar y actualizar una instalación
|
|
53
|
+
|
|
54
|
+
La CLI de mantenimiento consulta las rutas que informa OpenCode, inspecciona la
|
|
55
|
+
configuración y compara los wrappers de caché con npm sin mostrar opciones del plugin:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
npx --yes --package opencode-flema-engram-sidebar@latest flema-engram doctor
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Previsualizá siempre la actualización. `--dry-run` no cambia archivos:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
npx --yes --package opencode-flema-engram-sidebar@latest \
|
|
65
|
+
flema-engram update --dry-run
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Luego cerrá OpenCode y aplicá el mismo plan:
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
npx --yes --package opencode-flema-engram-sidebar@latest \
|
|
72
|
+
flema-engram update
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
La CLI pide una confirmación, respalda `tui.json`, invoca el instalador oficial con
|
|
76
|
+
la versión npm exacta y un límite de 60 segundos, elimina solamente wrappers obsoletos
|
|
77
|
+
que conservan el mismo manifiesto observado en el preview y verifica el resultado. Si
|
|
78
|
+
el instalador agota ese límite, la CLI lo detiene por la fuerza e informa la ruta
|
|
79
|
+
exacta del backup retenido. Para automatización
|
|
80
|
+
controlada, `flema-engram update --yes` omite únicamente la pregunta: conserva el
|
|
81
|
+
preview, las validaciones y el backup. `--json` produce una salida estructurada.
|
|
82
|
+
|
|
83
|
+
OpenCode 1.18.x no actualiza confiablemente una entrada sin versión o con `@latest`.
|
|
84
|
+
OpenCode 2 dispone además de `opencode plugin check` y `opencode plugin update`; la
|
|
85
|
+
CLI usa la sintaxis nativa correspondiente a la versión detectada.
|
|
46
86
|
|
|
47
87
|
#### Usando `opencode attach`
|
|
48
88
|
Si vas a conectarte a una instancia remota de OpenCode mediante `opencode attach <url>`, el plugin funcionará siempre que:
|
|
49
89
|
- El servicio Engram en la máquina remota sea accesible en el puerto 7437 (por defecto solo escucha en 127.0.0.1; se recomienda crear un puente TCP como se describe en los documentos internos o usar `engram-bridge.service`).
|
|
50
|
-
-
|
|
90
|
+
- Usá una versión exacta del plugin y actualizala explícitamente; `opencode attach` puede reutilizar una copia npm ya resuelta en la caché local.
|
|
51
91
|
- La detección automática usa el host recibido por `opencode attach`; si el puente de Engram usa otra URL, configurá `baseUrl` explícitamente en `tui.json`.
|
|
52
92
|
- Verás en el sidebar la línea `🔌 Target: Local=<host>:7437 | Cloud=<URL>` para confirmar a qué endpoints se está conectando.
|
|
53
93
|
|
|
@@ -56,18 +96,53 @@ Si vas a conectarte a una instancia remota de OpenCode mediante `opencode attach
|
|
|
56
96
|
El sidebar hace una carga inicial, vuelve a consultar cada 30 segundos de forma
|
|
57
97
|
predeterminada y permite refrescar manualmente con <kbd>Alt</kbd>+<kbd>R</kbd>.
|
|
58
98
|
|
|
99
|
+
## Viewer para Pi / Gentle Shell
|
|
100
|
+
|
|
101
|
+
El mismo paquete incluye una extensión Pi de solo lectura. Instalá una versión exacta
|
|
102
|
+
compatible con esta documentación:
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
pi install npm:opencode-flema-engram-sidebar@0.3.0
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
La extensión publica un status breve y un widget compacto debajo del editor. Refresca
|
|
109
|
+
al iniciar, reanudar o recargar una sesión, después de que `mem_save` (o el alias
|
|
110
|
+
`save_memory`) termina correctamente y mediante el comando:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
/engram-refresh
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
No usa polling periódico y no agrega herramientas para escribir memorias. En modos
|
|
117
|
+
sin UI no consulta Engram ni intenta renderizar componentes terminales. En RPC usa
|
|
118
|
+
solamente status y widgets de líneas de texto, sin iniciar una segunda TUI.
|
|
119
|
+
|
|
120
|
+
La resolución del endpoint usa `ENGRAM_URL`, luego `ENGRAM_BASE_URL` y finalmente
|
|
121
|
+
`http://127.0.0.1:7437`. `ENGRAM_PROJECT` puede fijar el candidato de proyecto; de lo
|
|
122
|
+
contrario se valida el nombre del directorio actual contra Engram. Los fallos de
|
|
123
|
+
inicialización se contienen en un estado `Engram unavailable` sin mostrar URLs,
|
|
124
|
+
tokens ni diagnósticos con credenciales.
|
|
125
|
+
|
|
126
|
+
Para desarrollo local, después de compilar el paquete:
|
|
127
|
+
|
|
128
|
+
```sh
|
|
129
|
+
npm run build
|
|
130
|
+
pi --extension ./dist/pi.js
|
|
131
|
+
```
|
|
132
|
+
|
|
59
133
|
## Qué es — y qué no es
|
|
60
134
|
|
|
61
135
|
| Sí es | No es |
|
|
62
136
|
| --- | --- |
|
|
63
|
-
| Un plugin para
|
|
137
|
+
| Un plugin para `sidebar_content` de OpenCode y una extensión Pi | Una TUI independiente |
|
|
64
138
|
| Una vista local y de solo lectura sobre Engram | Un reemplazo de Engram |
|
|
65
139
|
| Project context, activity, and ODD task progress | A memory editor or manager |
|
|
66
140
|
| Un cliente del HTTP local de Engram | Un servicio cloud o de sincronización |
|
|
67
141
|
| Un paquete con un adaptador MCP stdio opcional | Un producto centrado en MCP |
|
|
68
142
|
|
|
69
|
-
|
|
70
|
-
avanzadas y puede ignorarse por completo al usar
|
|
143
|
+
Los viewers de OpenCode y Pi son las integraciones visuales principales. El comando
|
|
144
|
+
MCP existe para integraciones avanzadas y puede ignorarse por completo al usar cualquiera
|
|
145
|
+
de los viewers.
|
|
71
146
|
|
|
72
147
|
## Cómo funciona
|
|
73
148
|
|
|
@@ -108,7 +183,7 @@ Usá la forma `[plugin, options]` solamente cuando necesites opciones:
|
|
|
108
183
|
"$schema": "https://opencode.ai/tui.json",
|
|
109
184
|
"plugin": [
|
|
110
185
|
[
|
|
111
|
-
"opencode-flema-engram-sidebar",
|
|
186
|
+
"opencode-flema-engram-sidebar@0.3.0",
|
|
112
187
|
{
|
|
113
188
|
"enabled": true,
|
|
114
189
|
"project": "mi-proyecto",
|
|
@@ -263,7 +338,7 @@ Si Engram conoce `mi-proyecto`, el sidebar valida ese nombre y carga sus memoria
|
|
|
263
338
|
{
|
|
264
339
|
"$schema": "https://opencode.ai/tui.json",
|
|
265
340
|
"plugin": [
|
|
266
|
-
["opencode-flema-engram-sidebar", { "project": "backend-api" }]
|
|
341
|
+
["opencode-flema-engram-sidebar@0.3.0", { "project": "backend-api" }]
|
|
267
342
|
]
|
|
268
343
|
}
|
|
269
344
|
```
|
|
@@ -277,7 +352,7 @@ Engram. El valor debe coincidir; una configuración incorrecta queda como `unres
|
|
|
277
352
|
{
|
|
278
353
|
"$schema": "https://opencode.ai/tui.json",
|
|
279
354
|
"plugin": [
|
|
280
|
-
["opencode-flema-engram-sidebar", { "pollInterval": 60000 }]
|
|
355
|
+
["opencode-flema-engram-sidebar@0.3.0", { "pollInterval": 60000 }]
|
|
281
356
|
]
|
|
282
357
|
}
|
|
283
358
|
```
|
|
@@ -358,11 +433,57 @@ Preservá el resto de tus plugins y opciones al fusionar la configuración.
|
|
|
358
433
|
- Cerrá y reiniciá OpenCode después de cambiar `tui.json`.
|
|
359
434
|
- Validá el JSON y la ruta del plugin.
|
|
360
435
|
- Confirmá Node.js 22+ y OpenCode 1.18.25+.
|
|
361
|
-
- Para npm, usá
|
|
436
|
+
- Para npm, usá `opencode-flema-engram-sidebar@<version>` con una versión publicada exacta.
|
|
362
437
|
- Para fuente local, ejecutá `npm install` y comprobá que la ruta termine en
|
|
363
438
|
`src/sidebar/plugin.tsx`.
|
|
364
439
|
- Revisá la salida de arranque de OpenCode. El plugin no crea archivos de log propios.
|
|
365
440
|
|
|
441
|
+
### El sidebar muestra una versión anterior
|
|
442
|
+
|
|
443
|
+
1. Cerrá todos los procesos OpenCode.
|
|
444
|
+
2. Ejecutá `opencode debug paths` y anotá las rutas `config` y `cache`.
|
|
445
|
+
3. Confirmá que `config/tui.json` use `opencode-flema-engram-sidebar@<version>`.
|
|
446
|
+
4. Instalá de nuevo esa versión exacta:
|
|
447
|
+
|
|
448
|
+
```sh
|
|
449
|
+
opencode plugin opencode-flema-engram-sidebar@<version> --force --global
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
5. Si el sidebar todavía muestra la release anterior, inspeccioná dentro de
|
|
453
|
+
`cache/packages` los wrappers `opencode-flema-engram-sidebar@*`. Eliminá solamente
|
|
454
|
+
el wrapper obsoleto `opencode-flema-engram-sidebar@latest` después de confirmar que
|
|
455
|
+
su `node_modules/opencode-flema-engram-sidebar/package.json` contiene la versión
|
|
456
|
+
vieja. Conservá el wrapper exacto y repetí el comando anterior.
|
|
457
|
+
6. Abrí un proceso OpenCode nuevo; los procesos existentes no recargan plugins.
|
|
458
|
+
|
|
459
|
+
En PowerShell, reemplazá `<old-version>` por la versión anterior que esperás borrar.
|
|
460
|
+
El comando se niega a eliminar el wrapper si su manifiesto contiene otro valor:
|
|
461
|
+
|
|
462
|
+
```powershell
|
|
463
|
+
$cache = (opencode debug paths | Select-String '^cache\s+').Line -replace '^cache\s+', ''
|
|
464
|
+
$stale = Join-Path $cache 'packages\opencode-flema-engram-sidebar@latest'
|
|
465
|
+
$manifest = Join-Path $stale 'node_modules\opencode-flema-engram-sidebar\package.json'
|
|
466
|
+
$staleVersion = (Get-Content -LiteralPath $manifest -Raw | ConvertFrom-Json).version
|
|
467
|
+
if ($staleVersion -ne '<old-version>') { throw "Refusing to remove wrapper: found $staleVersion" }
|
|
468
|
+
Remove-Item -LiteralPath $stale -Recurse -Force
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
En shells POSIX, reemplazá `<cache>` y `<old-version>` por los valores confirmados:
|
|
472
|
+
|
|
473
|
+
```sh
|
|
474
|
+
stale='<cache>/packages/opencode-flema-engram-sidebar@latest'
|
|
475
|
+
manifest="$stale/node_modules/opencode-flema-engram-sidebar/package.json"
|
|
476
|
+
stale_version="$(node -e 'const fs = require("node:fs"); console.log(JSON.parse(fs.readFileSync(process.argv[1], "utf8")).version)' "$manifest")"
|
|
477
|
+
[ "$stale_version" = '<old-version>' ] || {
|
|
478
|
+
printf 'Refusing to remove wrapper: found %s\n' "$stale_version" >&2
|
|
479
|
+
exit 1
|
|
480
|
+
}
|
|
481
|
+
rm -rf -- "$stale"
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
No borres el directorio completo de caché: puede contener otros plugins, servidores de
|
|
485
|
+
lenguaje y modelos descargados.
|
|
486
|
+
|
|
366
487
|
### OpenCode no encuentra el export del paquete
|
|
367
488
|
|
|
368
489
|
- Confirmá que la versión instalada tiene un export raíz por defecto con `id` y `tui`.
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,GACvB,MAAM,6BAA6B,CAAC"}
|
package/dist/core.js
ADDED
package/dist/core.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,kBAAkB,GAInB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface MaintenanceCommandResult {
|
|
2
|
+
code: number;
|
|
3
|
+
stdout: string;
|
|
4
|
+
stderr: string;
|
|
5
|
+
}
|
|
6
|
+
export interface MaintenanceCommandOptions {
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
}
|
|
9
|
+
export type MaintenanceCommandRunner = (command: string, args: string[], options?: MaintenanceCommandOptions) => Promise<MaintenanceCommandResult>;
|
|
10
|
+
export interface MaintenanceCliDependencies {
|
|
11
|
+
cwd?: string;
|
|
12
|
+
runCommand?: MaintenanceCommandRunner;
|
|
13
|
+
fetchLatestVersion?: () => Promise<string>;
|
|
14
|
+
confirm?: (message: string) => Promise<boolean>;
|
|
15
|
+
now?: () => Date;
|
|
16
|
+
installerTimeoutMs?: number;
|
|
17
|
+
stdout?: (text: string) => void;
|
|
18
|
+
stderr?: (text: string) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function runMaintenanceCli(argv: string[], dependencies?: MaintenanceCliDependencies): Promise<number>;
|
|
21
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/maintenance/cli.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,yBAAyB,KAChC,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAEvC,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AA6dD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,0BAA+B,GAC5C,OAAO,CAAC,MAAM,CAAC,CA6IjB"}
|