zepapagaio 0.1.1 → 0.1.3
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/install.sh +127 -0
- package/package.json +1 -1
- package/uninstall.sh +1 -1
package/install.sh
CHANGED
|
@@ -75,6 +75,57 @@ check_deps() {
|
|
|
75
75
|
ok "Deps ok: docker, docker compose, uv, claude, git, curl, python3, flock"
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
# ─────────── obsidian check ───────────
|
|
79
|
+
check_obsidian() {
|
|
80
|
+
local found=false
|
|
81
|
+
|
|
82
|
+
# Checa se Obsidian tá instalado (Flatpak, Snap, AppImage, nativo, macOS)
|
|
83
|
+
if command -v obsidian >/dev/null 2>&1; then
|
|
84
|
+
found=true
|
|
85
|
+
elif flatpak list 2>/dev/null | grep -qi obsidian; then
|
|
86
|
+
found=true
|
|
87
|
+
elif snap list 2>/dev/null | grep -qi obsidian; then
|
|
88
|
+
found=true
|
|
89
|
+
elif [ -d "/Applications/Obsidian.app" ] 2>/dev/null; then
|
|
90
|
+
found=true
|
|
91
|
+
elif [ -d "$HOME/Applications/Obsidian.app" ] 2>/dev/null; then
|
|
92
|
+
found=true
|
|
93
|
+
elif ls "$HOME"/.local/bin/Obsidian*.AppImage >/dev/null 2>&1; then
|
|
94
|
+
found=true
|
|
95
|
+
elif ls /opt/Obsidian*/obsidian >/dev/null 2>&1; then
|
|
96
|
+
found=true
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
if $found; then
|
|
100
|
+
ok "Obsidian detectado"
|
|
101
|
+
else
|
|
102
|
+
warn "Obsidian não detectado no sistema."
|
|
103
|
+
say ""
|
|
104
|
+
say " O Zé funciona sem o Obsidian — o vault é só uma pasta de .md e o"
|
|
105
|
+
say " RAG + Graph leem direto do disco. Mas ${BOLD}com${RESET} o Obsidian você ganha:"
|
|
106
|
+
say ""
|
|
107
|
+
say " • Editor visual das suas notas de memória"
|
|
108
|
+
say " • Grafo nativo pra visualizar conexões"
|
|
109
|
+
say " • Plugin Local REST API → integração MCP (busca, append, patch)"
|
|
110
|
+
say ""
|
|
111
|
+
say " ${BOLD}Instalar Obsidian (grátis):${RESET}"
|
|
112
|
+
say " Linux (Flatpak) → flatpak install flathub md.obsidian.Obsidian"
|
|
113
|
+
say " Linux (AppImage) → https://obsidian.md/download"
|
|
114
|
+
say " Linux (Snap) → sudo snap install obsidian --classic"
|
|
115
|
+
say " macOS → brew install --cask obsidian"
|
|
116
|
+
say ""
|
|
117
|
+
say " ${DIM}Depois de instalar, abra o Obsidian e aponte pro vault que você${RESET}"
|
|
118
|
+
say " ${DIM}vai informar no próximo passo. Pra MCP funcionar, instale também${RESET}"
|
|
119
|
+
say " ${DIM}o plugin 'Local REST API' dentro do Obsidian (Community plugins).${RESET}"
|
|
120
|
+
say ""
|
|
121
|
+
if ! confirm "Continuar sem Obsidian?" s; then
|
|
122
|
+
say ""
|
|
123
|
+
say "Beleza! Instala o Obsidian e roda o Zé de novo. Até já! 🦜"
|
|
124
|
+
exit 0
|
|
125
|
+
fi
|
|
126
|
+
fi
|
|
127
|
+
}
|
|
128
|
+
|
|
78
129
|
# ─────────── prompts ───────────
|
|
79
130
|
ask() {
|
|
80
131
|
local __var=$1 pergunta=$2 default=${3:-}
|
|
@@ -135,6 +186,8 @@ banner
|
|
|
135
186
|
hr
|
|
136
187
|
check_deps
|
|
137
188
|
hr
|
|
189
|
+
check_obsidian
|
|
190
|
+
hr
|
|
138
191
|
|
|
139
192
|
# 1. vault path
|
|
140
193
|
default_vault="$HOME/cofre/ai"
|
|
@@ -412,6 +465,73 @@ claude mcp add vault-rag --scope user -- \
|
|
|
412
465
|
|| fail "Falha ao registrar MCP vault-rag"
|
|
413
466
|
ok "MCP vault-rag registrado"
|
|
414
467
|
|
|
468
|
+
# ───────── componente: obsidian MCP (opcional) ─────────
|
|
469
|
+
hr
|
|
470
|
+
info "Configurando MCP obsidian (integração direta com Obsidian)..."
|
|
471
|
+
|
|
472
|
+
# Checa se Obsidian já está com o plugin Local REST API rodando
|
|
473
|
+
OBSIDIAN_MCP_INSTALLED=false
|
|
474
|
+
if curl -sk https://127.0.0.1:27124 >/dev/null 2>&1; then
|
|
475
|
+
ok "Plugin Local REST API detectado (porta 27124)"
|
|
476
|
+
|
|
477
|
+
say ""
|
|
478
|
+
say " O MCP obsidian precisa da ${BOLD}API key${RESET} do plugin Local REST API."
|
|
479
|
+
say " ${DIM}Abra o Obsidian → Settings → Community plugins → Local REST API → copie a API Key.${RESET}"
|
|
480
|
+
say ""
|
|
481
|
+
|
|
482
|
+
if [ -n "${OBSIDIAN_API_KEY:-}" ]; then
|
|
483
|
+
info "Usando OBSIDIAN_API_KEY do ambiente"
|
|
484
|
+
elif [ -f "$CONFIG_ENV" ] && grep -q '^OBSIDIAN_API_KEY=' "$CONFIG_ENV" 2>/dev/null; then
|
|
485
|
+
EXISTING_OBS_KEY="$(grep '^OBSIDIAN_API_KEY=' "$CONFIG_ENV" | cut -d= -f2- | tr -d '"')"
|
|
486
|
+
if [ -n "$EXISTING_OBS_KEY" ]; then
|
|
487
|
+
warn "Já tem OBSIDIAN_API_KEY em $CONFIG_ENV (****${EXISTING_OBS_KEY: -4})"
|
|
488
|
+
if confirm "Reusar a existente?" s; then
|
|
489
|
+
OBSIDIAN_API_KEY="$EXISTING_OBS_KEY"
|
|
490
|
+
else
|
|
491
|
+
ask OBSIDIAN_API_KEY "Cola a API Key do Local REST API" ""
|
|
492
|
+
fi
|
|
493
|
+
else
|
|
494
|
+
ask OBSIDIAN_API_KEY "Cola a API Key do Local REST API" ""
|
|
495
|
+
fi
|
|
496
|
+
else
|
|
497
|
+
ask OBSIDIAN_API_KEY "Cola a API Key do Local REST API" ""
|
|
498
|
+
fi
|
|
499
|
+
|
|
500
|
+
if [ -n "${OBSIDIAN_API_KEY:-}" ]; then
|
|
501
|
+
# Salva no config env
|
|
502
|
+
if grep -q '^OBSIDIAN_API_KEY=' "$CONFIG_ENV" 2>/dev/null; then
|
|
503
|
+
sed -i "s|^OBSIDIAN_API_KEY=.*|OBSIDIAN_API_KEY=\"$OBSIDIAN_API_KEY\"|" "$CONFIG_ENV"
|
|
504
|
+
else
|
|
505
|
+
echo "OBSIDIAN_API_KEY=\"$OBSIDIAN_API_KEY\"" >> "$CONFIG_ENV"
|
|
506
|
+
fi
|
|
507
|
+
|
|
508
|
+
if claude mcp list 2>/dev/null | grep -q '^obsidian:'; then
|
|
509
|
+
warn "MCP obsidian já existia — removendo e recriando"
|
|
510
|
+
claude mcp remove obsidian 2>/dev/null || true
|
|
511
|
+
fi
|
|
512
|
+
claude mcp add obsidian --scope user \
|
|
513
|
+
-e "OBSIDIAN_API_KEY=$OBSIDIAN_API_KEY" \
|
|
514
|
+
-e "OBSIDIAN_HOST=127.0.0.1" \
|
|
515
|
+
-e "OBSIDIAN_PORT=27124" \
|
|
516
|
+
-- uvx mcp-obsidian \
|
|
517
|
+
|| fail "Falha ao registrar MCP obsidian"
|
|
518
|
+
OBSIDIAN_MCP_INSTALLED=true
|
|
519
|
+
ok "MCP obsidian registrado"
|
|
520
|
+
else
|
|
521
|
+
warn "API key não informada — pulando MCP obsidian"
|
|
522
|
+
say " ${DIM}Você pode registrar depois com: ze doctor (ele orienta)${RESET}"
|
|
523
|
+
fi
|
|
524
|
+
else
|
|
525
|
+
warn "Plugin Local REST API não detectado (porta 27124 fechada)"
|
|
526
|
+
say ""
|
|
527
|
+
say " ${DIM}O MCP obsidian dá ao Claude poder de ler/escrever direto no vault${RESET}"
|
|
528
|
+
say " ${DIM}via Obsidian. Pra ativar depois:${RESET}"
|
|
529
|
+
say " ${DIM}1. Abra o Obsidian → Settings → Community plugins${RESET}"
|
|
530
|
+
say " ${DIM}2. Instale e ative 'Local REST API'${RESET}"
|
|
531
|
+
say " ${DIM}3. Rode: ze doctor (ele detecta e orienta)${RESET}"
|
|
532
|
+
say ""
|
|
533
|
+
fi
|
|
534
|
+
|
|
415
535
|
# ───────── componente: autocommit ─────────
|
|
416
536
|
hr
|
|
417
537
|
info "Instalando componente: ${BOLD}autocommit${RESET}"
|
|
@@ -559,3 +679,10 @@ fi
|
|
|
559
679
|
say " • Desinstalar (se precisar): ${BOLD}./uninstall.sh${RESET}"
|
|
560
680
|
say " • Problemas? ${BLUE}docs/troubleshooting.md${RESET}"
|
|
561
681
|
say ""
|
|
682
|
+
|
|
683
|
+
# ───────── ping anônimo (conta instalações) ─────────
|
|
684
|
+
# Silencioso, em background, sem bloquear. Só conta IP único.
|
|
685
|
+
# Nenhum dado pessoal é enviado além do IP (que o servidor já vê em qualquer request).
|
|
686
|
+
curl -sf -X POST https://zepapagaio.com/api/ping \
|
|
687
|
+
-H "Content-Type: application/json" \
|
|
688
|
+
--max-time 5 >/dev/null 2>&1 &
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zepapagaio",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Zé Papagaio — memória persistente pro seu Claude Code. Instala vault + RAG + knowledge graph + cache + storage + multimodal rodando 100% local em containers. Beta aberto em https://zepapagaio.com",
|
|
5
5
|
"bin": {
|
|
6
6
|
"zepapagaio": "bin/zepapagaio.js"
|
package/uninstall.sh
CHANGED
|
@@ -43,7 +43,7 @@ done
|
|
|
43
43
|
|
|
44
44
|
# 2. remover MCPs do Claude
|
|
45
45
|
if command -v claude >/dev/null 2>&1; then
|
|
46
|
-
for mcp_name in vault-graph vault-rag; do
|
|
46
|
+
for mcp_name in vault-graph vault-rag obsidian; do
|
|
47
47
|
if claude mcp list 2>/dev/null | grep -q "^$mcp_name:"; then
|
|
48
48
|
claude mcp remove "$mcp_name" >/dev/null 2>&1 || true
|
|
49
49
|
ok "MCP $mcp_name removido"
|