{"_id":"@allansantos-dev/opencode-memory","_rev":"6-b0e0ee0825172b72b12f3a6fcb4d693a","name":"@allansantos-dev/opencode-memory","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.2":{"name":"@allansantos-dev/opencode-memory","version":"0.1.2","keywords":["opencode","opencode-plugin","memory","recall","graph","curation","knowledge-base"],"license":"MIT","_id":"@allansantos-dev/opencode-memory@0.1.2","maintainers":[{"name":"allansantos-dev","email":"allannascimentodossantos@gmail.com"}],"homepage":"https://github.com/AllanSantos-DV/opencode-memory#readme","bugs":{"url":"https://github.com/AllanSantos-DV/opencode-memory/issues"},"dist":{"shasum":"dcd40634d0dda662c436f6d9e3f2c8a46ab3ed62","tarball":"https://registry.npmjs.org/@allansantos-dev/opencode-memory/-/opencode-memory-0.1.2.tgz","fileCount":27,"integrity":"sha512-OyZzBOKljv5c+TKdDdpCTGwvhudISESlyAXHKRhkJh5PWoTgZzZz6+TXfUFHsDfdBE+zc0z4pf5gwWlrey3Dhg==","signatures":[{"sig":"MEUCIQD9nW3bTwtfBVlltUjm7ZnZV6YnbaN8pf3QEvyJqjEhJgIgRggUqxe+p3ka8cs3Lup541ZHXKymDNKP9fsGmiaxbSM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135603},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"opencode":"^1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f4fec5f81d2e60fd2b38b31a670dc644be45aa32","scripts":{"test":"node --import tsx --test test/*.test.ts && node test/smoke.ts","build":"tsc -p tsconfig.build.json && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --external:@opencode-ai/plugin --external:zod","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"allansantos-dev","email":"allannascimentodossantos@gmail.com"},"repository":{"url":"git+https://github.com/AllanSantos-DV/opencode-memory.git","type":"git"},"_npmVersion":"11.11.0","description":"OpenCode plugin — persistent memory across sessions via mcp-memory-server.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","zod":"^4.1.8","esbuild":"^0.25.12","typescript":"^6.0.3","@types/node":"^26.1.2","@opencode-ai/plugin":"^1.18.21"},"_npmOperationalInternal":{"tmp":"tmp/opencode-memory_0.1.2_1787395699317_0.017529844503224146","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@allansantos-dev/opencode-memory","version":"0.1.5","keywords":["opencode","opencode-plugin","memory","recall","graph","curation","knowledge-base"],"license":"MIT","_id":"@allansantos-dev/opencode-memory@0.1.5","maintainers":[{"name":"allansantos-dev","email":"allannascimentodossantos@gmail.com"}],"homepage":"https://github.com/AllanSantos-DV/opencode-memory#readme","bugs":{"url":"https://github.com/AllanSantos-DV/opencode-memory/issues"},"dist":{"shasum":"aaa6dd166970cff86b418004c07d4671f6284b1d","tarball":"https://registry.npmjs.org/@allansantos-dev/opencode-memory/-/opencode-memory-0.1.5.tgz","fileCount":27,"integrity":"sha512-Yvi66ZqFM3K5buVa8dfzVmqU2biFq0O854FAZIWhXGWdaDff0/8OYxyM+Pmp/SplOJSXa5fy03lk2Xok6/x6rQ==","signatures":[{"sig":"MEQCIFaVk9qYnv4/Bif3edQJwmoaieDcbrovGLI3YAA4tZDFAiAzK4XIOQGbOfBk7ZRecuxnSLU9g/b5jxZnEBBa+RS1SQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135603},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"opencode":"^1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"86161e8b1b6d364ec7be69f0ceae9bbe374f422f","scripts":{"test":"node --import tsx --test test/*.test.ts && node test/smoke.ts","build":"tsc -p tsconfig.build.json && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --external:@opencode-ai/plugin --external:zod","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9809ab46-61f2-488a-9fad-cda43ee8dcce"}},"repository":{"url":"git+https://github.com/AllanSantos-DV/opencode-memory.git","type":"git"},"_npmVersion":"11.12.1","description":"OpenCode plugin — persistent memory across sessions via mcp-memory-server.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","zod":"^4.1.8","esbuild":"^0.25.12","typescript":"^6.0.3","@types/node":"^26.1.2","@opencode-ai/plugin":"^1.18.21"},"_npmOperationalInternal":{"tmp":"tmp/opencode-memory_0.1.5_1787396469617_0.7500400515856169","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@allansantos-dev/opencode-memory","version":"0.1.6","keywords":["opencode","opencode-plugin","memory","recall","graph","curation","knowledge-base"],"license":"MIT","_id":"@allansantos-dev/opencode-memory@0.1.6","maintainers":[{"name":"allansantos-dev","email":"allannascimentodossantos@gmail.com"}],"homepage":"https://github.com/AllanSantos-DV/opencode-memory#readme","bugs":{"url":"https://github.com/AllanSantos-DV/opencode-memory/issues"},"dist":{"shasum":"e4ba6c983b32e2f3d49efc8997145d0a3d993836","tarball":"https://registry.npmjs.org/@allansantos-dev/opencode-memory/-/opencode-memory-0.1.6.tgz","fileCount":27,"integrity":"sha512-cD8S027RuWAZuUsUVyFVNDGOV5e7lurT+dskQFB9j9dzHo8jSVq+m22N4Y8N/44UMkiPvMZNyzq8cxMkhUeWQg==","signatures":[{"sig":"MEYCIQDWRspnc7h4RpDkpkNmZfome61hL54ZYXPXq5qOiwdeZgIhAI/Cnkjd6lXxE8lpzQvgO3mNWo/h1rBVO5+OI/Uo9Js1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137268},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"opencode":"^1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4efc27198f97d0e3030e2a42055e11ca7b3a1f40","scripts":{"test":"node --import tsx --test test/*.test.ts && node test/smoke.ts","build":"tsc -p tsconfig.build.json && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --external:@opencode-ai/plugin --external:zod","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9809ab46-61f2-488a-9fad-cda43ee8dcce"}},"repository":{"url":"git+https://github.com/AllanSantos-DV/opencode-memory.git","type":"git"},"_npmVersion":"11.12.1","description":"OpenCode plugin — persistent memory across sessions via mcp-memory-server.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","zod":"^4.1.8","esbuild":"^0.25.12","typescript":"^6.0.3","@types/node":"^26.1.2","@opencode-ai/plugin":"^1.18.21"},"_npmOperationalInternal":{"tmp":"tmp/opencode-memory_0.1.6_1787439952872_0.9995486916847864","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@allansantos-dev/opencode-memory","version":"0.2.0","keywords":["opencode","opencode-plugin","memory","recall","graph","curation","knowledge-base"],"license":"MIT","_id":"@allansantos-dev/opencode-memory@0.2.0","maintainers":[{"name":"allansantos-dev","email":"allannascimentodossantos@gmail.com"}],"homepage":"https://github.com/AllanSantos-DV/opencode-memory#readme","bugs":{"url":"https://github.com/AllanSantos-DV/opencode-memory/issues"},"dist":{"shasum":"4abcb05bdd0690cbcf7a66f9235eed07d81f135c","tarball":"https://registry.npmjs.org/@allansantos-dev/opencode-memory/-/opencode-memory-0.2.0.tgz","fileCount":28,"integrity":"sha512-io9MmvYFqJrKXLD3QDy3qjzbIeJsnjaXqK8vxHTYzpepvP3NopDV5onQ350tQbtCoJnOeofHxP3cgUNxI9MDWQ==","signatures":[{"sig":"MEUCIQDBPrvhbdUUytKjY1HawBPJRyGCJ8CPXD50XiCxrsQbOwIgbcfEUNuDSfZgnqhcRAMcD37utxI9SmTELsNSi+sG0+M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153236},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"opencode":"^1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c4679c65d8b6c0de79db855a405cd064476167ba","scripts":{"test":"node --import tsx --test test/*.test.ts && node test/smoke.ts","build":"tsc -p tsconfig.build.json && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --external:@opencode-ai/plugin --external:zod","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9809ab46-61f2-488a-9fad-cda43ee8dcce"}},"repository":{"url":"git+https://github.com/AllanSantos-DV/opencode-memory.git","type":"git"},"_npmVersion":"11.12.1","description":"OpenCode plugin — persistent memory across sessions via mcp-memory-server.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","zod":"^4.1.8","esbuild":"^0.25.12","typescript":"^6.0.3","@types/node":"^26.1.2","@opencode-ai/plugin":"^1.18.21"},"_npmOperationalInternal":{"tmp":"tmp/opencode-memory_0.2.0_1787449397430_0.8704414248840286","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@allansantos-dev/opencode-memory","version":"0.3.0","keywords":["opencode","opencode-plugin","memory","recall","graph","curation","knowledge-base"],"license":"MIT","_id":"@allansantos-dev/opencode-memory@0.3.0","maintainers":[{"name":"allansantos-dev","email":"allannascimentodossantos@gmail.com"}],"homepage":"https://github.com/AllanSantos-DV/opencode-memory#readme","bugs":{"url":"https://github.com/AllanSantos-DV/opencode-memory/issues"},"dist":{"shasum":"69965bb84583dc18da6aac9f1ec5b0e4eb0c9ae9","tarball":"https://registry.npmjs.org/@allansantos-dev/opencode-memory/-/opencode-memory-0.3.0.tgz","fileCount":30,"integrity":"sha512-3z5pAoj2aHG2D7CFJxp2YO2gnPpIdbBvP/bgUqnP5JQkePmqad0FhgL/EhFDXRj2kdEasraJK2++58USeW0ZtQ==","signatures":[{"sig":"MEUCIEjMlxOknDWqc1aqYxrCO4Tq8EmpSUNa+6m87LV0SSF4AiEA4JdRMO61THsBh1Mic/2N3WLIfIrs3NoDefqp7QrqRNg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191643},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"opencode":"^1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2c54f5bac8fba82982e84c0ebbe21c2c26323abc","scripts":{"test":"node --import tsx --test test/*.test.ts && node --import tsx test/smoke.ts","build":"tsc -p tsconfig.build.json && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --external:@opencode-ai/plugin --external:zod","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9809ab46-61f2-488a-9fad-cda43ee8dcce"}},"repository":{"url":"git+https://github.com/AllanSantos-DV/opencode-memory.git","type":"git"},"_npmVersion":"11.12.1","description":"OpenCode plugin — persistent memory across sessions via mcp-memory-server.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","zod":"^4.1.8","esbuild":"^0.25.12","typescript":"^6.0.3","@types/node":"^26.1.2","@opencode-ai/plugin":"^1.18.21"},"_npmOperationalInternal":{"tmp":"tmp/opencode-memory_0.3.0_1788488501260_0.3759163826367542","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@allansantos-dev/opencode-memory","version":"0.4.0","description":"OpenCode plugin — persistent memory across sessions via mcp-memory-server.","type":"module","license":"MIT","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/AllanSantos-DV/opencode-memory.git"},"keywords":["opencode","opencode-plugin","memory","recall","graph","curation","knowledge-base"],"engines":{"opencode":"^1.18.0"},"scripts":{"build":"tsc -p tsconfig.build.json && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --external:@opencode-ai/plugin --external:zod","typecheck":"tsc --noEmit","test":"node --import tsx --test test/*.test.ts && node --import tsx test/smoke.ts","prepack":"npm run build"},"devDependencies":{"@opencode-ai/plugin":"^1.18.21","@types/node":"^26.1.2","esbuild":"^0.25.12","tsx":"^4.19.0","typescript":"^6.0.3","zod":"^4.1.8"},"gitHead":"8e5be7e7f6b4a1497838653b2ce9b0777d75c849","_id":"@allansantos-dev/opencode-memory@0.4.0","bugs":{"url":"https://github.com/AllanSantos-DV/opencode-memory/issues"},"homepage":"https://github.com/AllanSantos-DV/opencode-memory#readme","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-FPQrkKdc4KcxVP1qmYuaPWxebRy9KufEfH5Xh9oXxjo/Sz0xgbx90KmV7DiRG9XpMYCy8eKgZLe6oVYIdK1mlg==","shasum":"eded9ae4abf9e2fcf98822be16f1778ac8e4324c","tarball":"https://registry.npmjs.org/@allansantos-dev/opencode-memory/-/opencode-memory-0.4.0.tgz","fileCount":31,"unpackedSize":197539,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDXmt9d+wawpX9qQl3HZC1BcTS1ZAGgwN4fb2C256w9gwIhANjvBkzl/D5w099wd73R0S/2Ecn2y1i1hSl55CjS/bNl"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9809ab46-61f2-488a-9fad-cda43ee8dcce"}},"directories":{},"maintainers":[{"name":"allansantos-dev","email":"allannascimentodossantos@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opencode-memory_0.4.0_1788519729822_0.9354934609961449"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-22T10:48:19.035Z","modified":"2026-09-04T11:02:10.094Z","0.1.2":"2026-08-22T10:48:19.482Z","0.1.5":"2026-08-22T11:01:09.771Z","0.1.6":"2026-08-22T23:05:53.032Z","0.2.0":"2026-08-23T01:43:17.559Z","0.3.0":"2026-09-04T02:21:41.402Z","0.4.0":"2026-09-04T11:02:09.954Z"},"bugs":{"url":"https://github.com/AllanSantos-DV/opencode-memory/issues"},"license":"MIT","homepage":"https://github.com/AllanSantos-DV/opencode-memory#readme","keywords":["opencode","opencode-plugin","memory","recall","graph","curation","knowledge-base"],"repository":{"type":"git","url":"git+https://github.com/AllanSantos-DV/opencode-memory.git"},"description":"OpenCode plugin — persistent memory across sessions via mcp-memory-server.","maintainers":[{"name":"allansantos-dev","email":"allannascimentodossantos@gmail.com"}],"readme":"# opencode-memory\n\n[![npm version](https://img.shields.io/npm/v/@allansantos-dev/opencode-memory)](https://www.npmjs.com/package/@allansantos-dev/opencode-memory)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![opencode](https://img.shields.io/badge/opencode-%5E1.18.0-blue)](https://opencode.ai)\n\nMemória persistente entre sessões para OpenCode — recall semântico, grafo do servidor, dashboard e curadoria automática.\n\n## Pré-requisitos\n\n- `mcp-memory-server` (Java) — provisionado automaticamente via `memory_setup` ou `OPENCODE_MEMORY_DAEMON_URL`\n- Node >=18\n\n## Instalação (npm — recomendado)\n\n```jsonc\n// .config/opencode/opencode.jsonc\n{\n  \"plugin\": [\"@allansantos-dev/opencode-memory\"]\n}\n```\nReinicie o OpenCode. O plugin é instalado via Bun em `~/.cache/opencode/node_modules/` e atualiza com `latest` no restart.\n\n## Primeira execução — configurar o servidor (obrigatório)\n\nO plugin é uma **ponte**: quem faz o trabalho é o servidor Java. Sem servidor, as tools ficam inativas e o agente recebe um alerta com as opções abaixo. **Três caminhos** — local e remote terminam em health check automático (skip apenas marca a preferência):\n\n| Caminho | Comando (pelo agente) | Visual |\n|---------|----------------------|--------|\n| **Baixar & rodar local** | `memory_setup(\"local\")` | Dashboard → Server Setup → *Download & run locally* |\n| **Apontar para servidor rodando** (máquina local ou remoto) | `memory_setup(\"remote\", \"http://host:port\")` | Dashboard → Server Setup → *Point to running server* |\n| **Pular por agora** | `memory_setup(\"skip\")` | Dashboard → Server Setup → *Skip* |\n\n- Sem args (`memory_setup`) retorna o menu com status atual.\n- Caminho local exige Java 21+ ([adoptium.net](https://adoptium.net)) — o plugin baixa o JAR, verifica SHA-256 e inicia o daemon como processo único (port-lock).\n- Precedência de URL: env `OPENCODE_MEMORY_DAEMON_URL` > `~/.opencode-memory/config.json`.\n- Configuração aplica **sem restart** — as tools redescobrem o servidor a cada chamada.\n\n## Instalação (dev — file://)\n\n```jsonc\n{\n  \"plugin\": [\"file:///C:/path/to/opencode-memory/src/index.ts\"]\n}\n```\n\n## Migração file:// → npm\n\nRemova a entrada `file://.../memory/src/index.ts` e substitua por `\"@allansantos-dev/opencode-memory\"` no `opencode.jsonc`.\n\n## Exemplos\n\n```ts\n// Busca semântica\nawait memory_search({ query: \"como funciona o recall?\", topK: 5 })\n// → { results: [{ documentId, score, text }], count }\n\n// Análise de grafo\nawait graph_analyze({ query: \"auth middleware\", refresh: false })\n// → { hubs: [...], contextBundle: { seed, expanded } }\n\n// Salvar skill (PT header + EN body)\nawait memory_save_skill({ name: \"Meu Skill\", description: \"Faz X\", body: \"## What\\n...\" })\n```\n\n## Tools (20)\n\n| Tool | Descrição |\n|------|-----------|\n| `memory_status` | Status do daemon |\n| `memory_search` | Busca semântica |\n| `memory_get` | Documento por ID |\n| `memory_save` | Salva conhecimento |\n| `memory_save_skill` | Salva skill |\n| `memory_list_skills` | Lista skills |\n| `memory_skill_guide` | Guia de skill |\n| `memory_ingestion_guide` | Guia de ingestão |\n| `memory_setup` | Provisiona servidor (`mode=forget` limpa a URL salva) |\n| `memory_dashboard` | Painel visual |\n| `memory_doctor` | Diagnóstico: config, daemon, Java, JAR, dashboard e grafo |\n| `graph_status` | Estado do grafo |\n| `graph_ingest` | Indexa projeto |\n| `graph_reindex` | Alias para graph_ingest |\n| `graph_symbols` | Símbolos (com doc) |\n| `graph_search` | Busca no grafo |\n| `graph_callers` | Chamadores |\n| `graph_references` | Referências |\n| `graph_analyze` | Análise completa |\n| `graph_tag_node` | Tag feedback |\n\n## Segurança do dashboard (ADR-006)\n\nO painel HTTP roda apenas em loopback (`127.0.0.1`) e exige autenticação por token:\n\n- **Bootstrap estilo Jupyter** — `memory_dashboard` retorna `http://127.0.0.1:<port>/?t=<token>`;\n  o query param `?t=` é aceito **apenas** em `GET /` (nunca nas APIs, que são header-only).\n  O SPA o persiste em `sessionStorage` e o remove da barra de endereço via\n  `history.replaceState`.\n- **Header nas APIs** — todas as chamadas `/api/*` (e o próprio shell) exigem o header\n  `X-Memory-Token`; query param nunca é aceito em API.\n- **Host pinning** — requisições com `Host` fora da allowlist loopback são rejeitadas com 403\n  antes da auth (defesa contra DNS rebinding).\n- **Timing-safe + lockout** — comparação de token via SHA-256 + `crypto.timingSafeEqual`;\n  mais de 20 credenciais inválidas em 60s travam apenas as tentativas inválidas — um token\n  válido continua autenticando.\n- **Sem cache** — respostas autenticadas carregam `Cache-Control: no-store`.\n- Sessão expirada? Reabra via tool `memory_dashboard` — a página de lock orienta isso.\n\nDiagnóstico rápido: `memory_doctor` verifica config, daemon, Java, JAR (avisa se há versão\nnova), dashboard vivo/autenticado e estado do grafo.\n\n## Configuração\n\n| Env var | Default | Descrição |\n|---------|---------|-----------|\n| `OPENCODE_MEMORY_DAEMON_URL` | — | URL do daemon |\n| `OPENCODE_MEMORY_INGEST` | `\"0\"` | `\"1\"` para ingestão client-side |\n\n## Arquitetura\n\nCliente puro → REST → `mcp-memory-server` (Java) — curadoria via sub-agente isolado (SDK sessions), recall híbrido (memória vetorial + grafo tier 4). Ver `plan/ADR-001-opencode-memory.md` e `plan/ADR-002-melhorias-graph.v3.md`.\n\n## Vitrine\n\nhttps://allansantos-dv.github.io/opencode-marketplace/ — marketplace de plugins OpenCode.\n\n## Publicação\n\n`node scripts/publish.mjs patch --dry-run` → `node scripts/publish.mjs patch` → tag `vX.Y.Z` → OIDC Trusted Publisher publica no npm.\n","readmeFilename":"README.md"}