own-rag-cli 0.0.1-snapshot

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.
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ PACKAGE_ROOT="$(dirname "${SCRIPT_DIR}")"
6
+
7
+ LOCAL_BIN_DIR="${HOME}/.local/bin"
8
+ WRAPPER_SRC="${PACKAGE_ROOT}/bin/rag-wrapper.sh"
9
+ WRAPPER_DEST="${LOCAL_BIN_DIR}/rag-wrapper.sh"
10
+ RAG_BIN_DEST="${LOCAL_BIN_DIR}/rag"
11
+ RAG_SETUP_SRC="${PACKAGE_ROOT}/rag-setup.run"
12
+ RAG_SETUP_DEST="${LOCAL_BIN_DIR}/rag-setup.run"
13
+ RAG_SETUP_MACOS_SRC="${PACKAGE_ROOT}/rag-setup-macos.run"
14
+ RAG_SETUP_MACOS_DEST="${LOCAL_BIN_DIR}/rag-setup-macos.run"
15
+ MONITOR_SRC="${PACKAGE_ROOT}/chroma_monitor.sh"
16
+ MONITOR_DEST="${LOCAL_BIN_DIR}/chroma_monitor.sh"
17
+ REMOVE_SRC="${PACKAGE_ROOT}/bin/rag-remove.sh"
18
+ REMOVE_DEST="${LOCAL_BIN_DIR}/rag-remove.sh"
19
+
20
+ COMPOSE_SOURCE="${PACKAGE_ROOT}/bin/docker-compose.yml"
21
+ COMPOSE_DIR="${HOME}/docker-chromadb"
22
+ COMPOSE_TARGET="${COMPOSE_DIR}/docker-compose.yml"
23
+
24
+ ALIAS_LINE="alias rag='~/.local/bin/rag-wrapper.sh'"
25
+
26
+ log_info() { printf "[+] %s\n" "$*"; }
27
+ log_warn() { printf "[!] %s\n" "$*" >&2; }
28
+
29
+ mkdir -p "${LOCAL_BIN_DIR}"
30
+
31
+ if [[ -f "${WRAPPER_SRC}" ]]; then
32
+ cp "${WRAPPER_SRC}" "${WRAPPER_DEST}"
33
+ chmod +x "${WRAPPER_DEST}"
34
+ ln -sf "${WRAPPER_DEST}" "${RAG_BIN_DEST}"
35
+ log_info "Wrapper instalado: ${WRAPPER_DEST}"
36
+ fi
37
+
38
+ if [[ -f "${RAG_SETUP_SRC}" ]]; then
39
+ cp "${RAG_SETUP_SRC}" "${RAG_SETUP_DEST}"
40
+ chmod +x "${RAG_SETUP_DEST}"
41
+ log_info "Instalador Linux copiado: ${RAG_SETUP_DEST}"
42
+ fi
43
+
44
+ if [[ -f "${RAG_SETUP_MACOS_SRC}" ]]; then
45
+ cp "${RAG_SETUP_MACOS_SRC}" "${RAG_SETUP_MACOS_DEST}"
46
+ chmod +x "${RAG_SETUP_MACOS_DEST}"
47
+ log_info "Instalador macOS copiado: ${RAG_SETUP_MACOS_DEST}"
48
+ fi
49
+
50
+ if [[ -f "${MONITOR_SRC}" ]]; then
51
+ cp "${MONITOR_SRC}" "${MONITOR_DEST}"
52
+ chmod +x "${MONITOR_DEST}"
53
+ log_info "Monitor copiado: ${MONITOR_DEST}"
54
+ fi
55
+
56
+ if [[ -f "${REMOVE_SRC}" ]]; then
57
+ cp "${REMOVE_SRC}" "${REMOVE_DEST}"
58
+ chmod +x "${REMOVE_DEST}"
59
+ log_info "Remoção copiada: ${REMOVE_DEST}"
60
+ fi
61
+
62
+ DOCKER_COMPOSE_CMD=""
63
+ if command -v docker >/dev/null 2>&1; then
64
+ if docker compose version >/dev/null 2>&1; then
65
+ DOCKER_COMPOSE_CMD="docker compose"
66
+ elif command -v docker-compose >/dev/null 2>&1; then
67
+ DOCKER_COMPOSE_CMD="docker-compose"
68
+ fi
69
+ fi
70
+
71
+ if [[ -n "${DOCKER_COMPOSE_CMD}" && -f "${COMPOSE_SOURCE}" ]]; then
72
+ mkdir -p "${COMPOSE_DIR}"
73
+ cp "${COMPOSE_SOURCE}" "${COMPOSE_TARGET}"
74
+ if docker info >/dev/null 2>&1; then
75
+ ${DOCKER_COMPOSE_CMD} -f "${COMPOSE_TARGET}" up -d || log_warn "Falha ao subir ChromaDB automaticamente."
76
+ log_info "ChromaDB iniciado com ${DOCKER_COMPOSE_CMD}."
77
+ else
78
+ log_warn "Docker instalado, mas daemon não está ativo. ChromaDB não foi iniciado."
79
+ fi
80
+ else
81
+ log_warn "Docker Compose não encontrado. Pulei o auto-start do ChromaDB."
82
+ fi
83
+
84
+ for rc_file in "${HOME}/.bashrc" "${HOME}/.profile"; do
85
+ touch "${rc_file}"
86
+ if ! grep -qF "${ALIAS_LINE}" "${rc_file}"; then
87
+ printf "\n# own-rag npm install\n%s\n" "${ALIAS_LINE}" >> "${rc_file}"
88
+ log_info "Alias adicionado em ${rc_file}"
89
+ fi
90
+ done
91
+
92
+ if [[ -f "${HOME}/.bashrc" ]]; then
93
+ # shellcheck disable=SC1090
94
+ source "${HOME}/.bashrc" || true
95
+ fi
96
+
97
+ if [[ -f "${HOME}/.profile" ]]; then
98
+ # shellcheck disable=SC1090
99
+ source "${HOME}/.profile" || true
100
+ fi
101
+
102
+ log_info "Postinstall concluído. Use: rag run [path] | rag monitor | rag remove"
@@ -0,0 +1,198 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<'EOF'
6
+ Uso:
7
+ rag remove
8
+ rag remove --force
9
+
10
+ Descrição:
11
+ Remove toda a instalação local do own-rag (venv, banco, docker, binários e configuração MCP).
12
+
13
+ Opções:
14
+ --force, -f pula a confirmação dupla.
15
+ EOF
16
+ }
17
+
18
+ detect_os() {
19
+ case "$(uname -s)" in
20
+ Darwin) echo "macos" ;;
21
+ Linux) echo "linux" ;;
22
+ *) echo "unknown" ;;
23
+ esac
24
+ }
25
+
26
+ log_info() { printf "[+] %s\n" "$*"; }
27
+ log_warn() { printf "[!] %s\n" "$*" >&2; }
28
+
29
+ FORCE=false
30
+ for arg in "$@"; do
31
+ case "$arg" in
32
+ --force|-f) FORCE=true ;;
33
+ --help|-h) usage; exit 0 ;;
34
+ *)
35
+ echo "Opção desconhecida: $arg" >&2
36
+ usage
37
+ exit 1
38
+ ;;
39
+ esac
40
+ done
41
+
42
+ OS_NAME="$(detect_os)"
43
+ if [[ "${OS_NAME}" == "unknown" ]]; then
44
+ echo "[ERRO] Sistema operacional não suportado. Use Linux ou macOS." >&2
45
+ exit 1
46
+ fi
47
+
48
+ if [[ "${FORCE}" != "true" ]]; then
49
+ if [[ ! -t 0 ]]; then
50
+ echo "[ERRO] Terminal não interativo. Use --force para continuar." >&2
51
+ exit 1
52
+ fi
53
+
54
+ echo "[AVISO] Esta ação removerá completamente o own-rag deste computador."
55
+ echo " Isso inclui venv, banco local, binários e configuração MCP."
56
+ read -r -p "Confirma a remoção completa? [s/N] " answer
57
+ answer="$(echo "${answer}" | tr '[:upper:]' '[:lower:]')"
58
+ if [[ "${answer}" != "s" && "${answer}" != "sim" && "${answer}" != "y" && "${answer}" != "yes" ]]; then
59
+ echo "Remoção cancelada."
60
+ exit 0
61
+ fi
62
+
63
+ read -r -p "Digite REMOVER para confirmar definitivamente: " confirm_word
64
+ if [[ "${confirm_word}" != "REMOVER" ]]; then
65
+ echo "Confirmação inválida. Remoção cancelada."
66
+ exit 1
67
+ fi
68
+ fi
69
+
70
+ log_info "Iniciando remoção completa (OS: ${OS_NAME})..."
71
+
72
+ DOCKER_COMPOSE_CMD=""
73
+ if command -v docker >/dev/null 2>&1; then
74
+ if docker compose version >/dev/null 2>&1; then
75
+ DOCKER_COMPOSE_CMD="docker compose"
76
+ elif command -v docker-compose >/dev/null 2>&1; then
77
+ DOCKER_COMPOSE_CMD="docker-compose"
78
+ fi
79
+ fi
80
+
81
+ if [[ -n "${DOCKER_COMPOSE_CMD}" && -f "${HOME}/docker-chromadb/docker-compose.yml" ]]; then
82
+ if docker info >/dev/null 2>&1; then
83
+ (cd "${HOME}/docker-chromadb" && ${DOCKER_COMPOSE_CMD} down -v) || log_warn "Falha ao derrubar docker compose."
84
+ else
85
+ log_warn "Docker encontrado, mas daemon não está ativo; pulando compose down."
86
+ fi
87
+ fi
88
+
89
+ if command -v docker >/dev/null 2>&1; then
90
+ if docker ps -a --format '{{.Names}}' | grep -qx 'chromadb-rag'; then
91
+ docker rm -f chromadb-rag >/dev/null 2>&1 || log_warn "Falha ao remover container chromadb-rag."
92
+ fi
93
+ fi
94
+
95
+ declare -a REMOVE_PATHS=(
96
+ "${HOME}/.rag_venv"
97
+ "${HOME}/.rag_db"
98
+ "${HOME}/docker-chromadb"
99
+ "${HOME}/.cache/my-custom-rag-python"
100
+ "${HOME}/.cache/ny-custom-rag-python"
101
+ "${HOME}/.local/bin/mcp-rag-server"
102
+ "${HOME}/.local/bin/download_model_from_hugginface.py"
103
+ "${HOME}/.local/bin/download_model_from_modelscope.py"
104
+ "${HOME}/.local/bin/rag-wrapper.sh"
105
+ "${HOME}/.local/bin/rag-remove.sh"
106
+ "${HOME}/.local/bin/rag-setup.run"
107
+ "${HOME}/.local/bin/rag-setup-macos.run"
108
+ "${HOME}/.local/bin/chroma_monitor.sh"
109
+ "${HOME}/.local/bin/rag"
110
+ )
111
+
112
+ declare -a FAILED_PATHS=()
113
+
114
+ remove_path() {
115
+ local target="$1"
116
+ if [[ -e "${target}" || -L "${target}" ]]; then
117
+ if rm -rf "${target}" 2>/dev/null; then
118
+ log_info "Removido: ${target}"
119
+ else
120
+ FAILED_PATHS+=("${target}")
121
+ log_warn "Falha ao remover (permissão): ${target}"
122
+ fi
123
+ fi
124
+ }
125
+
126
+ for target in "${REMOVE_PATHS[@]}"; do
127
+ remove_path "${target}"
128
+ done
129
+
130
+ python3 - <<'PY'
131
+ import json
132
+ from pathlib import Path
133
+
134
+ home = Path.home()
135
+ config_paths = [
136
+ home / ".claude.json",
137
+ home / ".cursor" / "mcp.json",
138
+ home / "Library" / "Application Support" / "Cursor" / "User" / "mcp.json",
139
+ ]
140
+ for path in config_paths:
141
+ if not path.exists():
142
+ continue
143
+ try:
144
+ data = json.loads(path.read_text(encoding="utf-8"))
145
+ except Exception:
146
+ continue
147
+ servers = data.get("mcpServers")
148
+ if isinstance(servers, dict) and "rag-codebase" in servers:
149
+ servers.pop("rag-codebase", None)
150
+ try:
151
+ path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
152
+ print(f"[+] MCP removido de: {path}")
153
+ except Exception as exc:
154
+ print(f"[!] Não foi possível atualizar {path}: {exc}")
155
+
156
+ rc_files = [
157
+ home / ".bashrc",
158
+ home / ".profile",
159
+ home / ".zshrc",
160
+ home / ".zprofile",
161
+ ]
162
+ for rc in rc_files:
163
+ if not rc.exists():
164
+ continue
165
+ try:
166
+ lines = rc.read_text(encoding="utf-8").splitlines()
167
+ except Exception:
168
+ continue
169
+
170
+ filtered = [
171
+ line for line in lines
172
+ if "alias rag=" not in line
173
+ and "rag-wrapper.sh" not in line
174
+ and "own-rag npm install" not in line
175
+ ]
176
+ if filtered != lines:
177
+ try:
178
+ rc.write_text("\n".join(filtered).rstrip() + "\n", encoding="utf-8")
179
+ print(f"[+] Limpeza de alias em: {rc}")
180
+ except Exception as exc:
181
+ print(f"[!] Não foi possível limpar {rc}: {exc}")
182
+ PY
183
+
184
+ if command -v npm >/dev/null 2>&1; then
185
+ npm uninstall -g own-rag >/dev/null 2>&1 || true
186
+ fi
187
+
188
+ if [[ ${#FAILED_PATHS[@]} -gt 0 ]]; then
189
+ echo ""
190
+ log_warn "Remoção concluída com pendências de permissão:"
191
+ for path in "${FAILED_PATHS[@]}"; do
192
+ echo " - ${path}"
193
+ done
194
+ log_warn "Execute com sudo para limpar pendências, por exemplo:"
195
+ echo " sudo rm -rf ${FAILED_PATHS[0]}"
196
+ else
197
+ log_info "Remoção completa concluída."
198
+ fi
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ LOCAL_BIN_DIR="${HOME}/.local/bin"
6
+ LOCAL_SETUP_RUN_LINUX="${LOCAL_BIN_DIR}/rag-setup.run"
7
+ LOCAL_SETUP_RUN_MACOS="${LOCAL_BIN_DIR}/rag-setup-macos.run"
8
+ PACKAGE_SETUP_RUN_LINUX="${SCRIPT_DIR}/../rag-setup.run"
9
+ PACKAGE_SETUP_RUN_MACOS="${SCRIPT_DIR}/../rag-setup-macos.run"
10
+ LOCAL_MONITOR_SCRIPT="${LOCAL_BIN_DIR}/chroma_monitor.sh"
11
+ PACKAGE_MONITOR_SCRIPT="${SCRIPT_DIR}/../chroma_monitor.sh"
12
+ LOCAL_REMOVE_SCRIPT="${LOCAL_BIN_DIR}/rag-remove.sh"
13
+ PACKAGE_REMOVE_SCRIPT="${SCRIPT_DIR}/../bin/rag-remove.sh"
14
+
15
+ detect_os() {
16
+ case "$(uname -s)" in
17
+ Darwin) echo "macos" ;;
18
+ Linux) echo "linux" ;;
19
+ *) echo "unknown" ;;
20
+ esac
21
+ }
22
+
23
+ find_setup_runner() {
24
+ local os_name="$1"
25
+ local local_runner=""
26
+ local package_runner=""
27
+
28
+ case "${os_name}" in
29
+ macos)
30
+ local_runner="${LOCAL_SETUP_RUN_MACOS}"
31
+ package_runner="${PACKAGE_SETUP_RUN_MACOS}"
32
+ ;;
33
+ linux)
34
+ local_runner="${LOCAL_SETUP_RUN_LINUX}"
35
+ package_runner="${PACKAGE_SETUP_RUN_LINUX}"
36
+ ;;
37
+ *)
38
+ return 1
39
+ ;;
40
+ esac
41
+
42
+ if [[ -x "${local_runner}" ]]; then
43
+ echo "${local_runner}"
44
+ return 0
45
+ fi
46
+ if [[ -x "${package_runner}" ]]; then
47
+ echo "${package_runner}"
48
+ return 0
49
+ fi
50
+ if [[ -f "${package_runner}" ]]; then
51
+ chmod +x "${package_runner}" || true
52
+ echo "${package_runner}"
53
+ return 0
54
+ fi
55
+ return 1
56
+ }
57
+
58
+ find_monitor_runner() {
59
+ local os_name="$1"
60
+ if [[ "${os_name}" == "unknown" ]]; then
61
+ return 1
62
+ fi
63
+
64
+ if [[ -x "${LOCAL_MONITOR_SCRIPT}" ]]; then
65
+ echo "${LOCAL_MONITOR_SCRIPT}"
66
+ return 0
67
+ fi
68
+ if [[ -x "${PACKAGE_MONITOR_SCRIPT}" ]]; then
69
+ echo "${PACKAGE_MONITOR_SCRIPT}"
70
+ return 0
71
+ fi
72
+ if [[ -f "${PACKAGE_MONITOR_SCRIPT}" ]]; then
73
+ chmod +x "${PACKAGE_MONITOR_SCRIPT}" || true
74
+ echo "${PACKAGE_MONITOR_SCRIPT}"
75
+ return 0
76
+ fi
77
+ return 1
78
+ }
79
+
80
+ find_remove_runner() {
81
+ local os_name="$1"
82
+ if [[ "${os_name}" == "unknown" ]]; then
83
+ return 1
84
+ fi
85
+
86
+ if [[ -x "${LOCAL_REMOVE_SCRIPT}" ]]; then
87
+ echo "${LOCAL_REMOVE_SCRIPT}"
88
+ return 0
89
+ fi
90
+ if [[ -x "${PACKAGE_REMOVE_SCRIPT}" ]]; then
91
+ echo "${PACKAGE_REMOVE_SCRIPT}"
92
+ return 0
93
+ fi
94
+ if [[ -f "${PACKAGE_REMOVE_SCRIPT}" ]]; then
95
+ chmod +x "${PACKAGE_REMOVE_SCRIPT}" || true
96
+ echo "${PACKAGE_REMOVE_SCRIPT}"
97
+ return 0
98
+ fi
99
+ return 1
100
+ }
101
+
102
+ usage() {
103
+ cat <<'EOF'
104
+ Uso:
105
+ rag run [path]
106
+ rag monitor [command]
107
+ rag remove
108
+
109
+ Exemplos:
110
+ rag run .
111
+ rag run /caminho/do/projeto
112
+ rag monitor
113
+ rag monitor full
114
+ rag remove
115
+ EOF
116
+ }
117
+
118
+ if [[ $# -lt 1 ]]; then
119
+ usage
120
+ exit 1
121
+ fi
122
+
123
+ command_name="$1"
124
+ shift || true
125
+ os_name="$(detect_os)"
126
+
127
+ if [[ "${os_name}" == "unknown" ]]; then
128
+ echo "Erro: sistema operacional não suportado por este instalador." >&2
129
+ echo "Suportados: Linux e macOS." >&2
130
+ exit 1
131
+ fi
132
+
133
+ case "${command_name}" in
134
+ run)
135
+ target_path="${1:-}"
136
+ if [[ -z "${target_path}" ]]; then
137
+ printf "⚠️ Pasta não informada. Deseja usar a pasta atual: %s? (s/n)\n" "${PWD}"
138
+ read -r answer
139
+ answer="$(echo "${answer}" | tr '[:upper:]' '[:lower:]')"
140
+ if [[ "${answer}" == "s" || "${answer}" == "sim" || "${answer}" == "y" || "${answer}" == "yes" ]]; then
141
+ target_path="${PWD}"
142
+ else
143
+ echo "Dica: use 'rag run /caminho/do/projeto'."
144
+ exit 1
145
+ fi
146
+ fi
147
+
148
+ if [[ ! -d "${target_path}" ]]; then
149
+ echo "Erro: caminho não encontrado ou não é diretório: ${target_path}" >&2
150
+ exit 1
151
+ fi
152
+
153
+ if ! setup_runner="$(find_setup_runner "${os_name}")"; then
154
+ if [[ "${os_name}" == "macos" ]]; then
155
+ echo "Erro: rag-setup-macos.run não encontrado." >&2
156
+ echo "Esperado em: ${LOCAL_SETUP_RUN_MACOS} ou ${PACKAGE_SETUP_RUN_MACOS}" >&2
157
+ else
158
+ echo "Erro: rag-setup.run não encontrado." >&2
159
+ echo "Esperado em: ${LOCAL_SETUP_RUN_LINUX} ou ${PACKAGE_SETUP_RUN_LINUX}" >&2
160
+ fi
161
+ exit 1
162
+ fi
163
+
164
+ exec "${setup_runner}" "${target_path}"
165
+ ;;
166
+ monitor)
167
+ if ! monitor_runner="$(find_monitor_runner "${os_name}")"; then
168
+ echo "Erro: chroma_monitor.sh não encontrado." >&2
169
+ echo "Esperado em: ${LOCAL_MONITOR_SCRIPT} ou ${PACKAGE_MONITOR_SCRIPT}" >&2
170
+ exit 1
171
+ fi
172
+ exec "${monitor_runner}" "$@"
173
+ ;;
174
+ remove)
175
+ if ! remove_runner="$(find_remove_runner "${os_name}")"; then
176
+ echo "Erro: rag-remove.sh não encontrado." >&2
177
+ echo "Esperado em: ${LOCAL_REMOVE_SCRIPT} ou ${PACKAGE_REMOVE_SCRIPT}" >&2
178
+ exit 1
179
+ fi
180
+ exec "${remove_runner}" "$@"
181
+ ;;
182
+ *)
183
+ usage
184
+ exit 1
185
+ ;;
186
+ esac
@@ -0,0 +1,21 @@
1
+ # Cliente HTTP do ChromaDB (conecta ao servidor Docker)
2
+ chromadb>=0.5.0
3
+
4
+ # Modelo de embeddings local rodando na CPU
5
+ sentence-transformers>=3.0.0
6
+ # Dependência usada por modelos Jina v3 com código remoto
7
+ einops>=0.7.0
8
+ # Evita incompatibilidades conhecidas do Jina v3 com APIs novas do transformers 5.x
9
+ transformers<5
10
+
11
+ # Splitter de texto para chunking inteligente
12
+ langchain-text-splitters>=0.2.0
13
+
14
+ # Barra de progresso visual no terminal
15
+ tqdm>=4.66.0
16
+
17
+ # Monitor de memória em tempo real durante indexação
18
+ psutil>=5.9.0
19
+
20
+ # SDK oficial do MCP (Model Context Protocol) da Anthropic
21
+ mcp>=1.0.0