shadok-ai 0.2.53 → 0.2.55
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 +24 -0
- package/package.json +1 -1
- package/public/index.html +3 -5
package/README.md
CHANGED
|
@@ -122,6 +122,30 @@ from the board group's creator, so an instance that already has an owner never
|
|
|
122
122
|
hands itself to whoever messages next — a bot username is public, and a DM is a
|
|
123
123
|
shell.
|
|
124
124
|
|
|
125
|
+
### Running in Docker
|
|
126
|
+
|
|
127
|
+
The repo ships an official `Dockerfile`:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
docker build -t shadok-ai .
|
|
131
|
+
docker run -d --name shadok-ai --restart unless-stopped \
|
|
132
|
+
-p 127.0.0.1:3789:3789 \
|
|
133
|
+
-v shadok-data:/root/.shadok-ai \
|
|
134
|
+
-v shadok-claude:/root/.claude \
|
|
135
|
+
-v shadok-workspace:/workspace \
|
|
136
|
+
-e SHADOK_HOST=0.0.0.0 -e SHADOK_GUI_PASSWORD=change-me \
|
|
137
|
+
shadok-ai
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
The image bundles **Claude Code**, **shadok-ai** and a **headless browser**
|
|
141
|
+
(Playwright Chromium, at `PLAYWRIGHT_BROWSERS_PATH=/opt/playwright-browsers`) so
|
|
142
|
+
an agent can screenshot or drive the web with no first-run download; `git`, `gh`,
|
|
143
|
+
`tmux`, `jq` and a C toolchain are there for agents' own work. The three volumes
|
|
144
|
+
are what survive `docker restart` **and** `docker rm`+recreate: `~/.shadok-ai`
|
|
145
|
+
(vault, profiles, channels, crons, SSH identity), `~/.claude` (credentials,
|
|
146
|
+
transcripts), `/workspace` (agents' files). A fresh container needs a one-time
|
|
147
|
+
Claude login: `docker exec -it shadok-ai claude`.
|
|
148
|
+
|
|
125
149
|
### Exposing it beyond this machine
|
|
126
150
|
|
|
127
151
|
The cockpit runs arbitrary commands on the host by design, so it binds
|
package/package.json
CHANGED
package/public/index.html
CHANGED
|
@@ -1367,7 +1367,6 @@
|
|
|
1367
1367
|
<div class="hdr-tools">
|
|
1368
1368
|
<button id="secretsBtn" class="icon" title="Repo secrets (injected as env)">🔑</button>
|
|
1369
1369
|
<button id="profilesBtn" class="icon" title="Agent profiles (role + guardrails + secrets)">👤</button>
|
|
1370
|
-
<button id="cronBtn" class="icon" title="Scheduled prompts for this agent (monitoring / reporting)">⏰</button>
|
|
1371
1370
|
<button id="telegramBtn" class="icon" title="Configure the Telegram bot (token, on/off, allowed chats)"><svg viewBox="0 0 24 24" width="15" height="15" style="vertical-align:-2px" aria-hidden="true"><path fill="#26A5E4" d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg></button>
|
|
1372
1371
|
<button id="muteNotif" class="icon" title="Mute the notification sound">🔔</button>
|
|
1373
1372
|
<div class="more-wrap">
|
|
@@ -2979,13 +2978,13 @@
|
|
|
2979
2978
|
screenEl.textContent = "";
|
|
2980
2979
|
// Programmer ou arrêter n'a pas de cible : mieux vaut des boutons éteints
|
|
2981
2980
|
// qu'une popin qui parle d'un agent inexistant.
|
|
2982
|
-
$("
|
|
2981
|
+
$("chanCron").disabled = true;
|
|
2983
2982
|
$("chanStop").disabled = true;
|
|
2984
2983
|
$("emptyState").classList.add("visible");
|
|
2985
2984
|
return;
|
|
2986
2985
|
}
|
|
2987
2986
|
$("emptyState").classList.remove("visible");
|
|
2988
|
-
$("
|
|
2987
|
+
$("chanCron").disabled = !t.sessionId;
|
|
2989
2988
|
$("chanStop").disabled = false;
|
|
2990
2989
|
$("led").className = "led " +
|
|
2991
2990
|
({ setup: "", connecting: "busy", ready: "on", busy: "busy", dead: "off" }[t.status]);
|
|
@@ -4592,7 +4591,7 @@
|
|
|
4592
4591
|
active.termOn = !active.termOn;
|
|
4593
4592
|
syncTerm();
|
|
4594
4593
|
});
|
|
4595
|
-
$("chanCron").addEventListener("click", () => $("
|
|
4594
|
+
$("chanCron").addEventListener("click", () => { $("cronOverlay").hidden = false; renderCrons(); });
|
|
4596
4595
|
$("chanStop").addEventListener("click", () => {
|
|
4597
4596
|
sendTo(active, { type: "stop" });
|
|
4598
4597
|
});
|
|
@@ -4860,7 +4859,6 @@
|
|
|
4860
4859
|
$("cronDailyFields").hidden = !daily;
|
|
4861
4860
|
$("cronIntervalFields").hidden = daily;
|
|
4862
4861
|
});
|
|
4863
|
-
$("cronBtn").addEventListener("click", () => { $("cronOverlay").hidden = false; renderCrons(); });
|
|
4864
4862
|
$("cronClose").addEventListener("click", () => { $("cronOverlay").hidden = true; });
|
|
4865
4863
|
$("cronOverlay").addEventListener("click", (e) => { if (e.target === $("cronOverlay")) $("cronOverlay").hidden = true; });
|
|
4866
4864
|
$("cronAdd").addEventListener("submit", async (e) => {
|