@viadee/opencode-installation 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +28 -2
- package/install.ps1 +97 -0
- package/install.sh +145 -0
- package/package.json +19 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 viadee Unternehmensberatung AG
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# viadee OpenCode Installation
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Installer scripts for **viadee OpenCode**, the viadee sbx kit that runs OpenCode
|
|
4
|
+
in a Docker Sandbox with LiteLLM, websearch and OCR preconfigured. They are
|
|
5
|
+
published to npm with every kit release only so they can be downloaded without
|
|
6
|
+
authentication through jsDelivr; the package has no JavaScript entry point.
|
|
7
|
+
|
|
8
|
+
## Einrichtung
|
|
9
|
+
|
|
10
|
+
macOS / Linux:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
curl -fsSL https://cdn.jsdelivr.net/npm/@viadee/opencode-installation/install.sh | bash
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Windows (PowerShell):
|
|
17
|
+
|
|
18
|
+
```powershell
|
|
19
|
+
irm https://cdn.jsdelivr.net/npm/@viadee/opencode-installation/install.ps1 | iex
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Das Skript installiert bei Bedarf sbx (Homebrew bzw. winget), schaltet die
|
|
23
|
+
Telemetrie ab, meldet bei Docker an, erlaubt die viadee-Images, initialisiert
|
|
24
|
+
die Netzwerk-Policy `balanced`, fragt den LiteLLM-Key ab, erklärt auf Wunsch
|
|
25
|
+
eigene Keys pro Projekt (`sbx secret set litellm --sandbox <projekt>`) und
|
|
26
|
+
richtet den Kurzbefehl `sbx run opencode` ein. Jeder Schritt ist wiederholbar.
|
|
27
|
+
|
|
28
|
+
Anleitung und Problembehebung:
|
|
29
|
+
[viadee OpenCode in Confluence](https://viadee.atlassian.net/wiki/spaces/APT/pages/3080093832).
|
package/install.ps1
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Richtet viadee OpenCode (ein sbx-Kit) unter Windows ein.
|
|
2
|
+
#
|
|
3
|
+
# irm https://cdn.jsdelivr.net/npm/@viadee/opencode-installation/install.ps1 | iex
|
|
4
|
+
#
|
|
5
|
+
# Jeder Schritt ist wiederholbar; bereits erledigte Schritte werden uebersprungen.
|
|
6
|
+
# Bewusst nur ASCII: Windows PowerShell 5.1 dekodiert per irm geladene Skripte
|
|
7
|
+
# ohne Zeichensatzangabe nicht als UTF-8.
|
|
8
|
+
# Laeuft als Skriptblock, damit `return` bei `irm | iex` nicht das Fenster schliesst.
|
|
9
|
+
& {
|
|
10
|
+
$ErrorActionPreference = 'Continue'
|
|
11
|
+
$Image = 'ghcr.io/viadee-internal/viadee-opencode-kit:latest'
|
|
12
|
+
$DocsUrl = 'https://viadee.atlassian.net/wiki/spaces/APT/pages/3080093832'
|
|
13
|
+
|
|
14
|
+
function Write-Step([string] $Text) { Write-Host "`n==> $Text" -ForegroundColor Cyan }
|
|
15
|
+
function Write-Info([string] $Text) { Write-Host " $Text" }
|
|
16
|
+
function Confirm-Step([string] $Question) {
|
|
17
|
+
$reply = Read-Host "$Question [J/n]"
|
|
18
|
+
return -not ($reply -match '^[nN]')
|
|
19
|
+
}
|
|
20
|
+
# Wie Confirm-Step, aber ohne Eingabe gilt Nein.
|
|
21
|
+
function Confirm-Optional([string] $Question) {
|
|
22
|
+
$reply = Read-Host "$Question [j/N]"
|
|
23
|
+
return $reply -match '^[jJyY]'
|
|
24
|
+
}
|
|
25
|
+
function Assert-Success([string] $Command) {
|
|
26
|
+
if ($LASTEXITCODE -ne 0) { throw "$Command ist fehlgeschlagen (Exit-Code $LASTEXITCODE)." }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
Write-Host "viadee OpenCode - Einrichtung`nAnleitung: $DocsUrl"
|
|
30
|
+
|
|
31
|
+
Write-Step 'Docker Sandbox (sbx)'
|
|
32
|
+
if (Get-Command sbx -ErrorAction SilentlyContinue) {
|
|
33
|
+
Write-Info 'sbx ist bereits installiert.'
|
|
34
|
+
} else {
|
|
35
|
+
if (-not (Get-Command winget -ErrorAction SilentlyContinue)) {
|
|
36
|
+
Write-Info "winget fehlt. Bitte sbx installieren und das Skript erneut ausfuehren: $DocsUrl"
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
winget install -h Docker.sbx
|
|
40
|
+
Assert-Success 'winget install Docker.sbx'
|
|
41
|
+
$env:Path = [Environment]::GetEnvironmentVariable('Path', 'Machine') + ';' + [Environment]::GetEnvironmentVariable('Path', 'User')
|
|
42
|
+
if (-not (Get-Command sbx -ErrorAction SilentlyContinue)) {
|
|
43
|
+
Write-Info 'sbx wurde installiert. Bitte eine neue PowerShell oeffnen und das Skript erneut ausfuehren.'
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
Write-Step 'Telemetrie an Docker abschalten'
|
|
49
|
+
[Environment]::SetEnvironmentVariable('SBX_NO_TELEMETRY', '1', 'User')
|
|
50
|
+
$env:SBX_NO_TELEMETRY = '1'
|
|
51
|
+
Write-Info 'Fuer den eigenen Benutzer gesetzt.'
|
|
52
|
+
|
|
53
|
+
Write-Step 'Bei Docker anmelden'
|
|
54
|
+
if (Confirm-Step 'sbx login ausfuehren? (ueberspringen mit n, falls bereits angemeldet)') {
|
|
55
|
+
sbx login
|
|
56
|
+
Assert-Success 'sbx login'
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
Write-Step 'Images aus dem viadee-GitHub erlauben'
|
|
60
|
+
$current = (sbx settings get kit.allowedSources 2>&1 | Out-String).Trim()
|
|
61
|
+
if ($current.Contains('"docker.io/"') -and $current.Contains('"ghcr.io/viadee-internal/"')) {
|
|
62
|
+
Write-Info 'Bereits erlaubt.'
|
|
63
|
+
} else {
|
|
64
|
+
if ($current) { Write-Info "Bisheriger Wert wird ersetzt: $current" }
|
|
65
|
+
# --% uebergibt den JSON-Wert unveraendert; ohne entfernt Windows PowerShell die Anfuehrungszeichen.
|
|
66
|
+
sbx --% settings set kit.allowedSources "[\"docker.io/\",\"ghcr.io/viadee-internal/\"]"
|
|
67
|
+
Assert-Success 'sbx settings set kit.allowedSources'
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
Write-Step 'Netzwerk-Policy festlegen (balanced)'
|
|
71
|
+
sbx policy init balanced
|
|
72
|
+
if ($LASTEXITCODE -ne 0) { Write-Info 'Die Policy ist bereits eingerichtet; uebersprungen.' }
|
|
73
|
+
|
|
74
|
+
Write-Step 'LiteLLM-Key hinterlegen'
|
|
75
|
+
Write-Info 'Der Key bleibt auf diesem Rechner; die Sandbox sieht ihn nie.'
|
|
76
|
+
if (Confirm-Step 'Key jetzt hinterlegen oder ersetzen? (ueberspringen mit n, falls bereits hinterlegt)') {
|
|
77
|
+
sbx secret set litellm
|
|
78
|
+
Assert-Success 'sbx secret set litellm'
|
|
79
|
+
}
|
|
80
|
+
if (Confirm-Optional 'Nutzt du je nach Projekt verschiedene LiteLLM-Keys (Projektnummern)?') {
|
|
81
|
+
Write-Info 'Der Key oben gilt fuer alle Projekte. Fuer ein Projekt mit eigener Projektnummer'
|
|
82
|
+
Write-Info 'einmalig einen eigenen Key fuer dessen Sandbox hinterlegen:'
|
|
83
|
+
Write-Info ''
|
|
84
|
+
Write-Info ' sbx secret set litellm --sandbox mein-projekt'
|
|
85
|
+
Write-Info ''
|
|
86
|
+
Write-Info 'Der Name muss zum Start passen: sbx run --name mein-projekt opencode'
|
|
87
|
+
Write-Info 'Aendern mit --force, entfernen mit: sbx secret rm litellm --sandbox mein-projekt'
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
Write-Step 'Kurzbefehl einrichten'
|
|
91
|
+
sbx settings set kit.shortcuts.opencode $Image
|
|
92
|
+
Assert-Success 'sbx settings set kit.shortcuts.opencode'
|
|
93
|
+
Write-Info 'sbx run opencode startet jetzt viadee OpenCode.'
|
|
94
|
+
|
|
95
|
+
Write-Host "`nFertig. Im Projektordner starten mit:`n`n sbx run --name mein-projekt opencode`n"
|
|
96
|
+
Write-Host "Ohne Kurzbefehl: sbx run --name mein-projekt $Image"
|
|
97
|
+
}
|
package/install.sh
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Richtet viadee OpenCode (ein sbx-Kit) auf macOS und Linux ein.
|
|
3
|
+
#
|
|
4
|
+
# curl -fsSL https://cdn.jsdelivr.net/npm/@viadee/opencode-installation/install.sh | bash
|
|
5
|
+
#
|
|
6
|
+
# Jeder Schritt ist wiederholbar; bereits erledigte Schritte werden übersprungen.
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
IMAGE="ghcr.io/viadee-internal/viadee-opencode-kit:latest"
|
|
10
|
+
ALLOWED_SOURCES='["docker.io/","ghcr.io/viadee-internal/"]'
|
|
11
|
+
DOCS_URL="https://viadee.atlassian.net/wiki/spaces/APT/pages/3080093832"
|
|
12
|
+
|
|
13
|
+
step() { printf '\n==> %s\n' "$1"; }
|
|
14
|
+
info() { printf ' %s\n' "$1"; }
|
|
15
|
+
|
|
16
|
+
# Bei `curl | bash` ist stdin das Skript selbst; Eingaben kommen vom Terminal.
|
|
17
|
+
if (exec </dev/tty) 2>/dev/null; then
|
|
18
|
+
exec 3</dev/tty
|
|
19
|
+
else
|
|
20
|
+
exec 3<&0
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
confirm() {
|
|
24
|
+
local reply=""
|
|
25
|
+
printf '%s [J/n] ' "$1"
|
|
26
|
+
read -r reply <&3 || true
|
|
27
|
+
case "$reply" in
|
|
28
|
+
[nN]*) return 1 ;;
|
|
29
|
+
*) return 0 ;;
|
|
30
|
+
esac
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Wie confirm, aber ohne Eingabe gilt Nein.
|
|
34
|
+
confirm_no() {
|
|
35
|
+
local reply=""
|
|
36
|
+
printf '%s [j/N] ' "$1"
|
|
37
|
+
read -r reply <&3 || true
|
|
38
|
+
case "$reply" in
|
|
39
|
+
[jJyY]*) return 0 ;;
|
|
40
|
+
*) return 1 ;;
|
|
41
|
+
esac
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
shell_profile() {
|
|
45
|
+
case "$(basename "${SHELL:-}")" in
|
|
46
|
+
zsh) echo "$HOME/.zshrc" ;;
|
|
47
|
+
bash) if [ "$(uname -s)" = "Darwin" ]; then echo "$HOME/.bash_profile"; else echo "$HOME/.bashrc"; fi ;;
|
|
48
|
+
*) echo "$HOME/.profile" ;;
|
|
49
|
+
esac
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
install_sbx() {
|
|
53
|
+
step "Docker Sandbox (sbx)"
|
|
54
|
+
if command -v sbx >/dev/null 2>&1; then
|
|
55
|
+
info "sbx ist bereits installiert."
|
|
56
|
+
return
|
|
57
|
+
fi
|
|
58
|
+
if [ "$(uname -s)" = "Darwin" ] && command -v brew >/dev/null 2>&1; then
|
|
59
|
+
brew install docker/tap/sbx
|
|
60
|
+
else
|
|
61
|
+
info "sbx ist nicht installiert. Bitte sbx installieren und das Skript erneut ausführen:"
|
|
62
|
+
info "$DOCS_URL"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
disable_telemetry() {
|
|
68
|
+
step "Telemetrie an Docker abschalten"
|
|
69
|
+
export SBX_NO_TELEMETRY=1
|
|
70
|
+
local profile
|
|
71
|
+
profile="$(shell_profile)"
|
|
72
|
+
if [ -f "$profile" ] && grep -q 'SBX_NO_TELEMETRY' "$profile"; then
|
|
73
|
+
info "Bereits in $profile gesetzt."
|
|
74
|
+
else
|
|
75
|
+
printf '\n# viadee OpenCode: keine Telemetrie an Docker senden\nexport SBX_NO_TELEMETRY=1\n' >>"$profile"
|
|
76
|
+
info "In $profile eingetragen."
|
|
77
|
+
fi
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
docker_login() {
|
|
81
|
+
step "Bei Docker anmelden"
|
|
82
|
+
if confirm "sbx login ausführen? (überspringen mit n, falls bereits angemeldet)"; then
|
|
83
|
+
sbx login <&3
|
|
84
|
+
fi
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
allow_sources() {
|
|
88
|
+
step "Images aus dem viadee-GitHub erlauben"
|
|
89
|
+
local current
|
|
90
|
+
current="$(sbx settings get kit.allowedSources 2>/dev/null || true)"
|
|
91
|
+
if [[ "$current" == *'"docker.io/"'* && "$current" == *'"ghcr.io/viadee-internal/"'* ]]; then
|
|
92
|
+
info "Bereits erlaubt."
|
|
93
|
+
return
|
|
94
|
+
fi
|
|
95
|
+
if [ -n "$current" ]; then
|
|
96
|
+
info "Bisheriger Wert wird ersetzt: $current"
|
|
97
|
+
fi
|
|
98
|
+
sbx settings set kit.allowedSources "$ALLOWED_SOURCES"
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
init_policy() {
|
|
102
|
+
step "Netzwerk-Policy festlegen (balanced)"
|
|
103
|
+
if ! sbx policy init balanced; then
|
|
104
|
+
info "Die Policy ist bereits eingerichtet; übersprungen."
|
|
105
|
+
fi
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
store_key() {
|
|
109
|
+
step "LiteLLM-Key hinterlegen"
|
|
110
|
+
info "Der Key bleibt auf diesem Rechner; die Sandbox sieht ihn nie."
|
|
111
|
+
if confirm "Key jetzt hinterlegen oder ersetzen? (überspringen mit n, falls bereits hinterlegt)"; then
|
|
112
|
+
sbx secret set litellm <&3
|
|
113
|
+
fi
|
|
114
|
+
if confirm_no "Nutzt du je nach Projekt verschiedene LiteLLM-Keys (Projektnummern)?"; then
|
|
115
|
+
info "Der Key oben gilt für alle Projekte. Für ein Projekt mit eigener Projektnummer"
|
|
116
|
+
info "einmalig einen eigenen Key für dessen Sandbox hinterlegen:"
|
|
117
|
+
info ""
|
|
118
|
+
info " sbx secret set litellm --sandbox mein-projekt"
|
|
119
|
+
info ""
|
|
120
|
+
info "Der Name muss zum Start passen: sbx run --name mein-projekt opencode"
|
|
121
|
+
info "Ändern mit --force, entfernen mit: sbx secret rm litellm --sandbox mein-projekt"
|
|
122
|
+
fi
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
set_shortcut() {
|
|
126
|
+
step "Kurzbefehl einrichten"
|
|
127
|
+
sbx settings set kit.shortcuts.opencode "$IMAGE"
|
|
128
|
+
info "sbx run opencode startet jetzt viadee OpenCode."
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
main() {
|
|
132
|
+
printf 'viadee OpenCode – Einrichtung\nAnleitung: %s\n' "$DOCS_URL"
|
|
133
|
+
install_sbx
|
|
134
|
+
disable_telemetry
|
|
135
|
+
docker_login
|
|
136
|
+
allow_sources
|
|
137
|
+
init_policy
|
|
138
|
+
store_key
|
|
139
|
+
set_shortcut
|
|
140
|
+
printf '\nFertig. Im Projektordner starten mit:\n\n sbx run --name mein-projekt opencode\n\n'
|
|
141
|
+
printf 'Ohne Kurzbefehl: sbx run --name mein-projekt %s\n' "$IMAGE"
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
# Erst nach dem vollständigen Download ausführen (wichtig bei `curl | bash`).
|
|
145
|
+
main "$@"
|
package/package.json
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viadee/opencode-installation",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Installer scripts that set up viadee OpenCode, the viadee sbx kit for OpenCode",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/viadee-internal/viadee-opencode-kit.git",
|
|
8
|
+
"directory": "installer"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://viadee.atlassian.net/wiki/spaces/APT/pages/3080093832",
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"install.sh",
|
|
16
|
+
"install.ps1",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"license": "MIT"
|
|
21
|
+
}
|