-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
124 lines (111 loc) · 6.86 KB
/
Makefile
File metadata and controls
124 lines (111 loc) · 6.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
.PHONY: dev dev-web dev-web-stop docs setup test-privacy install-dev install redis redis-stop mcp-install setup-safeguards install-electron
setup:
@command -v bun >/dev/null 2>&1 || curl -fsSL https://bun.sh/install | bash
npm i -g mintlify
@$$(command -v bun 2>/dev/null || echo "$$HOME/.bun/bin/bun") install
dev:
bun run --cwd packages/opencode --conditions=browser src/index.ts
dev-web:
@trap 'kill 0' INT; \
bun run --cwd packages/opencode --conditions=browser src/index.ts serve --port 4096 & \
bun --cwd packages/app dev -- --port 4444 & \
wait
dev-web-stop:
@fuser -k 4096/tcp 4444/tcp 2>/dev/null || true
docs:
cd packages/docs && mintlify dev --port 3333
install-dev:
@echo '#!/bin/bash' > ~/.local/bin/opencode-dev
@echo 'PKGDIR="$(CURDIR)/packages/opencode"' >> ~/.local/bin/opencode-dev
@echo 'if [ ! -d "$$PKGDIR" ]; then echo "Error: project not found at $$PKGDIR — re-run make install-dev" >&2; exit 1; fi' >> ~/.local/bin/opencode-dev
@echo 'BUN=$$(command -v bun 2>/dev/null || echo "$$HOME/.bun/bin/bun"); [ -x "$$BUN" ] || { echo "Error: bun not found in PATH or ~/.bun/bin" >&2; exit 1; }' >> ~/.local/bin/opencode-dev
@echo 'exec "$$BUN" run --cwd "$$PKGDIR" --conditions=browser src/index.ts "$$@"' >> ~/.local/bin/opencode-dev
@chmod +x ~/.local/bin/opencode-dev
@echo "Installed: opencode-dev → $(CURDIR)/packages/opencode/src/index.ts"
install:
@mkdir -p ~/.local/bin
@echo '#!/bin/bash' > ~/.local/bin/vuhitracode
@echo '# Generated by make install — edit the Makefile install target, not this file.' >> ~/.local/bin/vuhitracode
@echo 'PKGDIR="$(CURDIR)/packages/opencode"' >> ~/.local/bin/vuhitracode
@echo 'if [ ! -d "$$PKGDIR" ]; then echo "Error: project not found at $$PKGDIR — re-run make install" >&2; exit 1; fi' >> ~/.local/bin/vuhitracode
@echo 'BUN=$$(command -v bun 2>/dev/null || echo "$$HOME/.bun/bin/bun"); [ -x "$$BUN" ] || { echo "Error: bun not found in PATH or ~/.bun/bin" >&2; exit 1; }' >> ~/.local/bin/vuhitracode
@echo '# Non-TUI commands must NOT have $$PWD prepended — bun --cwd overrides process.cwd(),' >> ~/.local/bin/vuhitracode
@echo '# so passing $$PWD as a positional arg is needed only for the TUI (project directory).' >> ~/.local/bin/vuhitracode
@echo '# When adding a new top-level command, add it to this list or it will show the help menu.' >> ~/.local/bin/vuhitracode
@echo 'case "$${1:-}" in' >> ~/.local/bin/vuhitracode
@echo ' init|help|version|completion|-h|--help|-v|--version|acp|mcp|attach|run|debug|auth|agent|upgrade|uninstall|serve|web|models|stats|export|import|github|pr|session|db|set|generate|index|indexer)' >> ~/.local/bin/vuhitracode
@echo ' exec env OPENCODE_CLI_NAME=vuhitracode "$$BUN" run --cwd "$$PKGDIR" --conditions=browser src/index.ts "$$@"' >> ~/.local/bin/vuhitracode
@echo ' ;;' >> ~/.local/bin/vuhitracode
@echo ' *)' >> ~/.local/bin/vuhitracode
@echo ' # TUI mode: pass $$PWD as the project directory positional argument' >> ~/.local/bin/vuhitracode
@echo ' exec env OPENCODE_CLI_NAME=vuhitracode "$$BUN" run --cwd "$$PKGDIR" --conditions=browser src/index.ts "$$PWD" "$$@"' >> ~/.local/bin/vuhitracode
@echo ' ;;' >> ~/.local/bin/vuhitracode
@echo 'esac' >> ~/.local/bin/vuhitracode
@chmod +x ~/.local/bin/vuhitracode
@echo "Installed: vuhitracode → ~/.local/bin/vuhitracode"
@sed \
-e 's|PKGDIR=.*|PKGDIR="$(CURDIR)/packages/opencode"|' \
-e 's|WEBDIR=.*|WEBDIR="$(CURDIR)/packages/app"|' \
scripts/vuhitracode-web.sh > ~/.local/bin/vuhitracode-web
@chmod +x ~/.local/bin/vuhitracode-web
@echo "Installed: vuhitracode-web → ~/.local/bin/vuhitracode-web"
test-privacy:
bun test --cwd packages/opencode test/util/faker.test.ts test/tool/read.test.ts
# Redis Stack on port 23790 (non-default to avoid conflicts)
redis:
docker run -d --name redis-stack --network host \
--restart unless-stopped \
-e REDIS_ARGS="--port 23790" \
redis/redis-stack:latest
redis-stop:
docker stop redis-stack && docker rm redis-stack
# Install official GitHub and Context7 MCP servers globally
mcp-install:
@mkdir -p ~/.config/opencode
@echo 'Installing GitHub MCP (OAuth) and Context7 MCP...'
@tmp=$$(mktemp); \
echo '{"$$schema":"https://opencode.ai/config.json","mcp":{"github":{"type":"remote","url":"https://api.githubcopilot.com/mcp/","oauth":{}},"context7":{"type":"remote","url":"https://mcp.context7.com/mcp"}}}' > "$$tmp"; \
if [ -f ~/.config/opencode/opencode.json ]; then \
jq -s '.[0] * .[1]' ~/.config/opencode/opencode.json "$$tmp" > ~/.config/opencode/opencode.json.merged && \
mv ~/.config/opencode/opencode.json.merged ~/.config/opencode/opencode.json; \
else \
mv "$$tmp" ~/.config/opencode/opencode.json; \
fi; \
rm -f "$$tmp"
@echo '✓ MCP servers configured. Run `opencode mcp auth github` to authenticate GitHub (opens browser).'
# Setup language server safeguards (prevent crashes from runaway processes)
setup-safeguards:
@echo "Installing language server safeguards..."
@./scripts/setup-language-server-safeguards.sh
install-electron:
@mkdir -p ~/.local/bin
@sed \
-e 's|PKGDIR=.*|PKGDIR="$(CURDIR)/packages/opencode"|' \
-e 's|WEBDIR=.*|WEBDIR="$(CURDIR)/packages/app"|' \
-e 's|ELECTRONDIR=.*|ELECTRONDIR="$(CURDIR)/packages/electron"|' \
scripts/vuhitracode-electron.sh > ~/.local/bin/vuhitracode-electron
@chmod +x ~/.local/bin/vuhitracode-electron
@echo "Installed: vuhitracode-electron → ~/.local/bin/vuhitracode-electron"
@cp scripts/vuhitracode-electron-launch.sh ~/.local/bin/vuhitracode-electron-launch
@chmod +x ~/.local/bin/vuhitracode-electron-launch
@echo "Installed: vuhitracode-electron-launch → ~/.local/bin/vuhitracode-electron-launch"
@mkdir -p ~/.local/share/applications
@mkdir -p ~/.local/share/icons/hicolor/512x512/apps
@cp scripts/vuhitracode-electron.desktop ~/.local/share/applications/vuhitracode-electron.desktop
@mkdir -p ~/Desktop
@cp scripts/vuhitracode-electron.desktop ~/Desktop/vuhitracode-electron.desktop
@chmod +x ~/Desktop/vuhitracode-electron.desktop
@cp packages/desktop/src-tauri/icons/prod/icon.png ~/.local/share/icons/hicolor/512x512/apps/vuhitracode-electron.png
@update-desktop-database ~/.local/share/applications 2>/dev/null || true
@echo "Installed: desktop shortcut → ~/.local/share/applications/vuhitracode-electron.desktop"
@echo "Installed: desktop icon → ~/Desktop/vuhitracode-electron.desktop"
@echo "Installed: icon → ~/.local/share/icons/hicolor/512x512/apps/vuhitracode-electron.png"
@# Pin to GNOME dash (adds if not already present)
@python3 -c "\
import subprocess, json; \
cur = subprocess.check_output(['gsettings','get','org.gnome.shell','favorite-apps']).decode().strip(); \
favs = json.loads(cur.replace(\"'\",'\"')); \
entry = 'vuhitracode-electron.desktop'; \
(favs.append(entry) if entry not in favs else None); \
subprocess.run(['gsettings','set','org.gnome.shell','favorite-apps', str(favs).replace('\"',\"'\")])" 2>/dev/null || true
@echo "Pinned: vuhitracode-electron.desktop → GNOME dash"