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.
Files changed (3) hide show
  1. package/install.sh +127 -0
  2. package/package.json +1 -1
  3. 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.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"