@m14i/sith 1.12.0 → 1.13.1
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/README.md +42 -14
- package/dist/components/TerminalUI.d.ts.map +1 -1
- package/dist/index.js +43 -10
- package/dist/package.json +1 -1
- package/docker/nix/nix-config/packages.json +6 -0
- package/docker/nix/nix-scripts/01-banner.sh +0 -12
- package/docker/nix/nix-scripts/05-opencode-cli.sh +0 -13
- package/docker/nix/nix-scripts/06-skills-setup.sh +28 -43
- package/docker/nix/nix-scripts/07-ready.sh +7 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,14 +25,16 @@ npx @m14i/sith@latest
|
|
|
25
25
|
### Quick Start
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
# Interactive
|
|
28
|
+
# Interactive terminal UI (default)
|
|
29
29
|
sith
|
|
30
|
-
#
|
|
30
|
+
# Type your prompt to start OpenCode with that task
|
|
31
|
+
# Or use slash commands: /shell, /config, /help
|
|
31
32
|
|
|
32
|
-
# Direct commands
|
|
33
|
-
sith --it # Launch shell immediately
|
|
33
|
+
# Direct commands
|
|
34
|
+
sith --it # Launch Docker shell immediately
|
|
34
35
|
sith --pull # Pull prebuilt image
|
|
35
36
|
sith --build # Build from scratch
|
|
37
|
+
sith --legacy # Use legacy menu interface
|
|
36
38
|
```
|
|
37
39
|
|
|
38
40
|
### Distribution Options
|
|
@@ -46,12 +48,29 @@ sith --build # Build from scratch
|
|
|
46
48
|
|
|
47
49
|
| Command | Description |
|
|
48
50
|
|---------|-------------|
|
|
49
|
-
| `sith` | Interactive
|
|
50
|
-
| `sith --it` | Launch
|
|
51
|
+
| `sith` | Interactive terminal UI (Claude Code style) |
|
|
52
|
+
| `sith --it` | Launch Docker shell immediately |
|
|
51
53
|
| `sith --pull` | Pull prebuilt image from GHCR |
|
|
52
54
|
| `sith --build` | Build Docker image from scratch |
|
|
55
|
+
| `sith --legacy` | Use legacy menu interface |
|
|
53
56
|
| `sith --help` | Show all available commands |
|
|
54
57
|
|
|
58
|
+
### Terminal UI Usage
|
|
59
|
+
|
|
60
|
+
When you run `sith`, you get an interactive terminal interface:
|
|
61
|
+
|
|
62
|
+
**Prompt input:**
|
|
63
|
+
- Type any text → Starts OpenCode with that prompt using Claude Sonnet 4.6
|
|
64
|
+
- Example: `Fix authentication bug` → OpenCode launches with this task
|
|
65
|
+
|
|
66
|
+
**Slash commands:**
|
|
67
|
+
- `/shell` → Start Docker shell only (no OpenCode)
|
|
68
|
+
- `/config` → Open configuration menu (pull/build options)
|
|
69
|
+
- `/help` → Show available commands
|
|
70
|
+
|
|
71
|
+
**Navigation:**
|
|
72
|
+
- `Ctrl+C` or `Esc` → Exit terminal UI
|
|
73
|
+
|
|
55
74
|
### Prebuilt Image Details
|
|
56
75
|
|
|
57
76
|
**Pull and verify:**
|
|
@@ -78,23 +97,24 @@ cosign verify \
|
|
|
78
97
|
|
|
79
98
|
## Authentication
|
|
80
99
|
|
|
81
|
-
Sith uses **GitHub Copilot
|
|
100
|
+
Sith uses **Claude Sonnet 4.6 via GitHub Copilot** by default. Authentication requires a GitHub token with Copilot access.
|
|
82
101
|
|
|
83
102
|
**Automatic (recommended):**
|
|
84
103
|
If you have GitHub CLI (`gh`) installed and authenticated, Sith automatically fetches your token:
|
|
85
104
|
```bash
|
|
86
|
-
sith
|
|
105
|
+
sith # Auto-detects token via gh auth token
|
|
87
106
|
```
|
|
88
107
|
|
|
89
108
|
**Manual token:**
|
|
90
109
|
If you don't have `gh` CLI or prefer manual setup:
|
|
91
110
|
|
|
92
|
-
1.
|
|
93
|
-
2.
|
|
94
|
-
3.
|
|
111
|
+
1. Ensure you have GitHub Copilot access
|
|
112
|
+
2. Create a token at https://github.com/settings/tokens
|
|
113
|
+
3. Required scopes: `copilot`, `repo`, `read:org`
|
|
114
|
+
4. Export it:
|
|
95
115
|
```bash
|
|
96
116
|
export GITHUB_TOKEN=gho_your_token_here
|
|
97
|
-
sith
|
|
117
|
+
sith
|
|
98
118
|
```
|
|
99
119
|
|
|
100
120
|
**Make it persistent (add to ~/.zshrc or ~/.bashrc):**
|
|
@@ -102,13 +122,21 @@ sith --it
|
|
|
102
122
|
export GITHUB_TOKEN=$(gh auth token)
|
|
103
123
|
```
|
|
104
124
|
|
|
125
|
+
**Inside container:**
|
|
126
|
+
Once OpenCode starts, authenticate with GitHub Copilot:
|
|
127
|
+
```bash
|
|
128
|
+
opencode providers login
|
|
129
|
+
# Follow prompts to authenticate with GitHub
|
|
130
|
+
```
|
|
131
|
+
|
|
105
132
|
## Features
|
|
106
133
|
|
|
134
|
+
- **Claude Code-style UI**: Interactive terminal interface with prompt input and slash commands
|
|
135
|
+
- **OpenCode Integration**: Start coding with a simple text prompt
|
|
136
|
+
- **Model Selection**: Uses Claude Sonnet 4.6 via GitHub Copilot by default
|
|
107
137
|
- **Prebuilt Images**: Pull verified images from GitHub Container Registry
|
|
108
138
|
- **Image Signing**: All images signed with cosign for supply chain security
|
|
109
139
|
- **SBOM Attestation**: Software Bill of Materials included with every image
|
|
110
|
-
- **Interactive Menu**: Navigate with arrow keys, select with Enter
|
|
111
|
-
- **Direct Commands**: Build or shell access without menu
|
|
112
140
|
- **Dockerized Environment**: Consistent setup across machines
|
|
113
141
|
- **Nix Integration**: Full development environment with all tools
|
|
114
142
|
- **CI-Ready**: Standardize builds across local and CI pipelines
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalUI.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/components/TerminalUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TerminalUI.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/components/TerminalUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AA0JrD,wBAAgB,UAAU,IAAI,KAAK,CAAC,YAAY,CAkL/C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
package/dist/index.js
CHANGED
|
@@ -43484,7 +43484,7 @@ function WelcomeScreen() {
|
|
|
43484
43484
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "cyan" }, "Type your prompt to start coding"),
|
|
43485
43485
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "or use slash commands:")),
|
|
43486
43486
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", marginTop: 1, marginLeft: 2 },
|
|
43487
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " /shell - Start
|
|
43487
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " /shell - Start Docker shell"),
|
|
43488
43488
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " /config - Configuration"),
|
|
43489
43489
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " /help - Show help"))));
|
|
43490
43490
|
}
|
|
@@ -43538,7 +43538,22 @@ async function getGitHubToken() {
|
|
|
43538
43538
|
return "";
|
|
43539
43539
|
}
|
|
43540
43540
|
}
|
|
43541
|
-
function
|
|
43541
|
+
function buildDockerShellCommand(githubToken) {
|
|
43542
|
+
return [
|
|
43543
|
+
"run",
|
|
43544
|
+
"--rm",
|
|
43545
|
+
"-it",
|
|
43546
|
+
"-v",
|
|
43547
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
43548
|
+
"-e",
|
|
43549
|
+
`GITHUB_TOKEN=${githubToken}`,
|
|
43550
|
+
"--entrypoint",
|
|
43551
|
+
"nix-shell",
|
|
43552
|
+
_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
43553
|
+
_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
|
|
43554
|
+
];
|
|
43555
|
+
}
|
|
43556
|
+
function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
43542
43557
|
const dockerArgs = [
|
|
43543
43558
|
"run",
|
|
43544
43559
|
"--rm",
|
|
@@ -43578,8 +43593,26 @@ function TerminalUI() {
|
|
|
43578
43593
|
setMessages((previousMessages) => [...previousMessages, newMessage]);
|
|
43579
43594
|
setNextMessageId((previousId) => previousId + 1);
|
|
43580
43595
|
}, [nextMessageId]);
|
|
43581
|
-
const
|
|
43582
|
-
|
|
43596
|
+
const handleDockerShell = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {
|
|
43597
|
+
exit();
|
|
43598
|
+
console.log("🚀 Starting Docker shell...");
|
|
43599
|
+
console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
|
|
43600
|
+
console.log('Press Ctrl+D or type "exit" to leave');
|
|
43601
|
+
console.log();
|
|
43602
|
+
const githubToken = await getGitHubToken();
|
|
43603
|
+
const dockerArgs = buildDockerShellCommand(githubToken);
|
|
43604
|
+
try {
|
|
43605
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_5__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43606
|
+
console.log();
|
|
43607
|
+
console.log("✅ Exited shell");
|
|
43608
|
+
}
|
|
43609
|
+
catch (error) {
|
|
43610
|
+
const errorMessage = error instanceof Error ? error.message : "Failed to start shell";
|
|
43611
|
+
console.error(`❌ ${errorMessage}`);
|
|
43612
|
+
process.exit(1);
|
|
43613
|
+
}
|
|
43614
|
+
}, [exit]);
|
|
43615
|
+
const handleOpenCode = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (prompt) => {
|
|
43583
43616
|
exit();
|
|
43584
43617
|
console.log("🚀 Starting OpenCode...");
|
|
43585
43618
|
console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
|
|
@@ -43588,7 +43621,7 @@ function TerminalUI() {
|
|
|
43588
43621
|
}
|
|
43589
43622
|
console.log();
|
|
43590
43623
|
const githubToken = await getGitHubToken();
|
|
43591
|
-
const dockerArgs =
|
|
43624
|
+
const dockerArgs = buildDockerOpencodeCommand(githubToken, prompt);
|
|
43592
43625
|
try {
|
|
43593
43626
|
await (0,execa__WEBPACK_IMPORTED_MODULE_5__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43594
43627
|
console.log();
|
|
@@ -43607,7 +43640,7 @@ function TerminalUI() {
|
|
|
43607
43640
|
addMessage(userInput, "user");
|
|
43608
43641
|
switch (command.type) {
|
|
43609
43642
|
case "shell":
|
|
43610
|
-
await
|
|
43643
|
+
await handleDockerShell();
|
|
43611
43644
|
break;
|
|
43612
43645
|
case "config":
|
|
43613
43646
|
setShowConfigModal(true);
|
|
@@ -43620,7 +43653,7 @@ function TerminalUI() {
|
|
|
43620
43653
|
}
|
|
43621
43654
|
break;
|
|
43622
43655
|
}
|
|
43623
|
-
}, [addMessage,
|
|
43656
|
+
}, [addMessage, handleDockerShell]);
|
|
43624
43657
|
const handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (value) => {
|
|
43625
43658
|
const trimmedValue = value.trim();
|
|
43626
43659
|
if (!trimmedValue) {
|
|
@@ -43637,9 +43670,9 @@ function TerminalUI() {
|
|
|
43637
43670
|
}
|
|
43638
43671
|
else {
|
|
43639
43672
|
// Regular text input - start OpenCode with this prompt
|
|
43640
|
-
await
|
|
43673
|
+
await handleOpenCode(trimmedValue);
|
|
43641
43674
|
}
|
|
43642
|
-
}, [addMessage,
|
|
43675
|
+
}, [addMessage, handleOpenCode, handleSlashCommand]);
|
|
43643
43676
|
const handleConfigModalClose = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
43644
43677
|
setShowConfigModal(false);
|
|
43645
43678
|
}, []);
|
|
@@ -43853,7 +43886,7 @@ function parseSlashCommand(input) {
|
|
|
43853
43886
|
}
|
|
43854
43887
|
function getAvailableCommands() {
|
|
43855
43888
|
return [
|
|
43856
|
-
{ command: "/shell", description: "
|
|
43889
|
+
{ command: "/shell", description: "Start Docker shell (no OpenCode)" },
|
|
43857
43890
|
{ command: "/config", description: "Open configuration menu" },
|
|
43858
43891
|
{ command: "/help", description: "Show available commands" },
|
|
43859
43892
|
];
|
package/dist/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@m14i/sith","version":"1.
|
|
1
|
+
{"name":"@m14i/sith","version":"1.13.1","description":"Turn your context to the dark side. Standardize and share your OpenCode setup with a fully dockerized environment, designed for seamless collaboration and CI integration.","type":"module","repository":{"type":"git","url":"https://github.com/MerzoukeMansouri/sith.git"},"bin":{"sith":"./dist/index.js"},"scripts":{"build":"ncc build src/index.ts -o dist && rm -rf dist/assets && cp -r assets dist/","dev":"tsx src/index.ts","dev:build":"pnpm build && node dist/index.js","dev:shell":"pnpm build && node dist/index.js shell","typecheck":"tsc --noEmit","clean":"rm -rf dist","prepublishOnly":"pnpm build"},"files":["dist","assets","docker"],"keywords":["opencode","docker","ci","automation","cli","nix"],"author":"","license":"MIT","dependencies":{"@inquirer/prompts":"^5.0.0","chalk":"^5.3.0","commander":"^12.1.0","execa":"^9.0.0","ink":"^7.0.3","ink-text-input":"^6.0.0","react":"^19.2.6","update-notifier":"^7.3.1"},"devDependencies":{"@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@semantic-release/github":"^11.0.1","@semantic-release/npm":"^12.0.1","@types/node":"^20.12.7","@types/react":"^19.2.14","@types/update-notifier":"^6.0.8","@vercel/ncc":"^0.38.1","semantic-release":"^24.2.0","tsx":"^4.7.2","typescript":"^5.4.5"},"engines":{"node":">=18"}}
|
|
@@ -1,14 +1,2 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Banner and version display
|
|
3
|
-
|
|
4
|
-
echo "╔══════════════════════════════════════════════════════════╗"
|
|
5
|
-
echo "║ 🚀 OpenCode CI - Nix Environment (CI/CD Ready) ║"
|
|
6
|
-
echo "╚══════════════════════════════════════════════════════════╝"
|
|
7
|
-
echo ""
|
|
8
|
-
echo "📦 Versions installées:"
|
|
9
|
-
echo " • Bash: $(bash --version | head -n1)"
|
|
10
|
-
echo " • Node.js: $(node --version)"
|
|
11
|
-
echo " • Python: $(python3 --version)"
|
|
12
|
-
echo " • Git: $(git --version | cut -d' ' -f3)"
|
|
13
|
-
echo " • jq: $(jq --version)"
|
|
14
|
-
echo ""
|
|
@@ -3,16 +3,3 @@
|
|
|
3
3
|
|
|
4
4
|
# Configurer le PATH pour OpenCode
|
|
5
5
|
export PATH="$HOME/.opencode/bin:$PATH"
|
|
6
|
-
|
|
7
|
-
if command -v opencode &> /dev/null; then
|
|
8
|
-
OPENCODE_VERSION=$(opencode --version 2>&1 | head -n1 || echo 'ok')
|
|
9
|
-
OPENCODE_PATH=$(command -v opencode)
|
|
10
|
-
echo "✅ OpenCode CLI disponible"
|
|
11
|
-
echo " Version: $OPENCODE_VERSION"
|
|
12
|
-
echo " Chemin: $OPENCODE_PATH"
|
|
13
|
-
else
|
|
14
|
-
echo "⚠️ OpenCode CLI non trouvé"
|
|
15
|
-
echo " Installer: curl -fsSL https://opencode.ai/install | bash"
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
echo ""
|
|
@@ -1,42 +1,28 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Token optimization skills installation (RTK + Caveman)
|
|
3
3
|
|
|
4
|
-
echo "=== Installation des Skills d'Optimisation de Tokens ==="
|
|
5
|
-
echo ""
|
|
6
|
-
|
|
7
4
|
mkdir -p /root/.agents/skills
|
|
8
5
|
|
|
6
|
+
# Track installed skills
|
|
7
|
+
declare -a INSTALLED_SKILLS=()
|
|
8
|
+
|
|
9
9
|
# 1. RTK (Rust Token Killer)
|
|
10
|
-
# NOTE: RTK n'est actuellement pas disponible publiquement
|
|
11
|
-
# Désactivé par défaut - peut être activé si vous avez le binaire
|
|
12
10
|
if [ "${RTK_ENABLED:-false}" = "true" ]; then
|
|
13
|
-
echo "📦 Installation de RTK (Rust Token Killer)..."
|
|
14
|
-
|
|
15
11
|
mkdir -p /root/.agents/skills/rtk/bin
|
|
16
12
|
mkdir -p /root/.agents/skills/rtk/config
|
|
17
|
-
|
|
18
|
-
if [ ! -f /root/.agents/skills/rtk/bin/rtk ]; then
|
|
19
|
-
echo " ⚠️ RTK binaire non disponible publiquement"
|
|
20
|
-
echo " Pour utiliser RTK:"
|
|
21
|
-
echo " 1. Copier votre binaire RTK dans l'image"
|
|
22
|
-
echo " 2. Ou monter: -v /path/to/rtk:/root/.agents/skills/rtk/bin/rtk"
|
|
23
|
-
else
|
|
24
|
-
echo " ✅ RTK déjà installé: $(/root/.agents/skills/rtk/bin/rtk --version 2>&1)"
|
|
25
|
-
fi
|
|
26
|
-
|
|
27
|
-
# Copier la configuration RTK
|
|
13
|
+
|
|
28
14
|
if [ -f /opt/sith/skills/rtk-config.toml ]; then
|
|
29
15
|
cp /opt/sith/skills/rtk-config.toml /root/.agents/skills/rtk/config/config.toml
|
|
30
16
|
mkdir -p /root/.config/rtk
|
|
31
17
|
ln -sf /root/.agents/skills/rtk/config/config.toml /root/.config/rtk/config.toml
|
|
32
|
-
echo " ✅ Configuration RTK prête (binaire requis)"
|
|
33
18
|
fi
|
|
34
|
-
|
|
35
|
-
# Initialiser le hook bash pour RTK
|
|
19
|
+
|
|
36
20
|
if command -v rtk &> /dev/null; then
|
|
21
|
+
RTK_VERSION=$(rtk --version 2>&1 | head -n1 | awk '{print $2}' || echo "unknown")
|
|
22
|
+
INSTALLED_SKILLS+=("RTK|$RTK_VERSION|https://github.com/rust-token-killer/rtk")
|
|
23
|
+
|
|
37
24
|
if [ -f /root/.bashrc ] && ! grep -q "rtk hook" /root/.bashrc; then
|
|
38
25
|
echo 'eval "$(rtk hook bash)"' >> /root/.bashrc
|
|
39
|
-
echo " ✅ RTK hook bash configuré"
|
|
40
26
|
fi
|
|
41
27
|
eval "$(rtk hook bash)" 2>/dev/null || true
|
|
42
28
|
fi
|
|
@@ -44,20 +30,15 @@ fi
|
|
|
44
30
|
|
|
45
31
|
# 2. Caveman (mode ultra)
|
|
46
32
|
if [ "${CAVEMAN_AUTO:-true}" = "true" ]; then
|
|
47
|
-
echo "📦 Installation de Caveman skill (mode ultra)..."
|
|
48
|
-
|
|
49
33
|
mkdir -p /root/.agents/skills
|
|
50
34
|
|
|
51
|
-
# Download Caveman if not present
|
|
52
35
|
if [ ! -d /opt/sith/skills/caveman ]; then
|
|
53
|
-
echo " 📥 Downloading Caveman from GitHub..."
|
|
54
36
|
mkdir -p /opt/sith/skills
|
|
55
37
|
cd /opt/sith/skills
|
|
56
|
-
curl -fsSL https://github.com/JuliusBrussee/caveman/archive/refs/heads/main.zip -o caveman.zip
|
|
57
|
-
unzip -q caveman.zip
|
|
58
|
-
mv caveman-main caveman
|
|
59
|
-
rm caveman.zip
|
|
60
|
-
echo " ✅ Caveman downloaded"
|
|
38
|
+
curl -fsSL https://github.com/JuliusBrussee/caveman/archive/refs/heads/main.zip -o caveman.zip 2>/dev/null
|
|
39
|
+
unzip -q caveman.zip 2>/dev/null
|
|
40
|
+
mv caveman-main caveman 2>/dev/null
|
|
41
|
+
rm caveman.zip 2>/dev/null
|
|
61
42
|
fi
|
|
62
43
|
|
|
63
44
|
if [ -d /opt/sith/skills/caveman ]; then
|
|
@@ -68,9 +49,8 @@ mode=ultra
|
|
|
68
49
|
auto_activate=true
|
|
69
50
|
EOF
|
|
70
51
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
echo " ⚠️ Caveman skill non trouvé - continuant sans Caveman"
|
|
52
|
+
CAVEMAN_VERSION=$(grep -oP '(?<=version: ).*' /root/.agents/skills/caveman/skill.json 2>/dev/null || echo "main")
|
|
53
|
+
INSTALLED_SKILLS+=("Caveman|$CAVEMAN_VERSION|https://github.com/JuliusBrussee/caveman")
|
|
74
54
|
fi
|
|
75
55
|
fi
|
|
76
56
|
|
|
@@ -80,13 +60,18 @@ if [ -f /opt/sith/skills/opencode-skills-config.json ]; then
|
|
|
80
60
|
cp /opt/sith/skills/opencode-skills-config.json /root/.local/share/opencode/skills/config.json
|
|
81
61
|
fi
|
|
82
62
|
|
|
83
|
-
#
|
|
84
|
-
|
|
85
|
-
echo "
|
|
86
|
-
|
|
87
|
-
echo "
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
63
|
+
# Display table if any skills installed
|
|
64
|
+
if [ ${#INSTALLED_SKILLS[@]} -gt 0 ]; then
|
|
65
|
+
echo ""
|
|
66
|
+
echo "┌─────────────────┬──────────┬─────────────────────────────────────────┐"
|
|
67
|
+
echo "│ Skill │ Version │ GitHub │"
|
|
68
|
+
echo "├─────────────────┼──────────┼─────────────────────────────────────────┤"
|
|
69
|
+
|
|
70
|
+
for skill_info in "${INSTALLED_SKILLS[@]}"; do
|
|
71
|
+
IFS='|' read -r name version github <<< "$skill_info"
|
|
72
|
+
printf "│ %-15s │ %-8s │ %-39s │\n" "$name" "$version" "$github"
|
|
73
|
+
done
|
|
74
|
+
|
|
75
|
+
echo "└─────────────────┴──────────┴─────────────────────────────────────────┘"
|
|
76
|
+
echo ""
|
|
91
77
|
fi
|
|
92
|
-
echo ""
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Ready message
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
if command -v catimg &> /dev/null && [ -f /workspace/assets/images/logo.png ]; then
|
|
5
|
+
catimg -w 80 /workspace/assets/images/logo.png 2>/dev/null
|
|
6
|
+
echo ""
|
|
7
|
+
fi
|
|
8
|
+
|
|
9
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
10
|
+
echo " Environment Ready"
|
|
5
11
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
6
12
|
echo ""
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m14i/sith",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.1",
|
|
4
4
|
"description": "Turn your context to the dark side. Standardize and share your OpenCode setup with a fully dockerized environment, designed for seamless collaboration and CI integration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|