Compare commits
3 Commits
1adbb19572
...
df8ec46018
| Author | SHA1 | Date | |
|---|---|---|---|
| df8ec46018 | |||
| a8d6f3f598 | |||
| 2263e298fd |
+12
-45
@@ -31,7 +31,9 @@ def build_snippets(host: str = DEFAULT_HOST,
|
|||||||
gw = _gw(host)
|
gw = _gw(host)
|
||||||
mc_url = f"http://{host}:{PORT}"
|
mc_url = f"http://{host}:{PORT}"
|
||||||
|
|
||||||
cline = json.dumps({
|
# Kilo Code = aktiver Nachfolger der Roo/Cline-Linie (Roo im April 2026 eingestellt).
|
||||||
|
# Gleiche Provider-Settings-Struktur; Multi-Agent kommt aus dem Tool (Orchestrator-Modus).
|
||||||
|
kilo = json.dumps({
|
||||||
"apiProvider": "openai",
|
"apiProvider": "openai",
|
||||||
"openAiBaseUrl": gw,
|
"openAiBaseUrl": gw,
|
||||||
"openAiApiKey": "local",
|
"openAiApiKey": "local",
|
||||||
@@ -49,39 +51,6 @@ def build_snippets(host: str = DEFAULT_HOST,
|
|||||||
}
|
}
|
||||||
}, indent=2)
|
}, indent=2)
|
||||||
|
|
||||||
cursor = json.dumps({
|
|
||||||
"Base URL": gw,
|
|
||||||
"API Key": "local",
|
|
||||||
"Active Model": "coding"
|
|
||||||
}, indent=2)
|
|
||||||
|
|
||||||
zed = json.dumps({
|
|
||||||
"language_models": {
|
|
||||||
"openai_compatible": {
|
|
||||||
"bosgame": {
|
|
||||||
"api_url": gw,
|
|
||||||
"available_models": [
|
|
||||||
{"name": IDE_MODEL, "display_name": IDE_MODEL, "max_tokens": 131072,
|
|
||||||
"capabilities": {"tools": True}}
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assistant": {
|
|
||||||
"default_model": {
|
|
||||||
"provider": "openai_compatible",
|
|
||||||
"model": IDE_MODEL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, indent=2)
|
|
||||||
|
|
||||||
cont = json.dumps({
|
|
||||||
"models": [
|
|
||||||
{"title": f"Bosgame / {IDE_MODEL}", "provider": "openai", "model": IDE_MODEL,
|
|
||||||
"apiBase": gw, "apiKey": "local"}
|
|
||||||
]
|
|
||||||
}, indent=2)
|
|
||||||
|
|
||||||
# Claude Code spricht das Anthropic-Format; der Gateway ist OpenAI-kompatibel und
|
# Claude Code spricht das Anthropic-Format; der Gateway ist OpenAI-kompatibel und
|
||||||
# bietet KEIN /v1/messages (verifiziert). Daher braucht es einen kleinen Übersetzer
|
# bietet KEIN /v1/messages (verifiziert). Daher braucht es einen kleinen Übersetzer
|
||||||
# (Anthropic ⇄ OpenAI) als Aufsatz. Die env-Vars sind Claude Codes echte Schnittstelle.
|
# (Anthropic ⇄ OpenAI) als Aufsatz. Die env-Vars sind Claude Codes echte Schnittstelle.
|
||||||
@@ -112,20 +81,18 @@ def build_snippets(host: str = DEFAULT_HOST,
|
|||||||
"host": host,
|
"host": host,
|
||||||
"gateway_url": gw,
|
"gateway_url": gw,
|
||||||
"mc_url": mc_url,
|
"mc_url": mc_url,
|
||||||
# Leitung 1 — das MODELL. Alle Snippets zeigen auf den OpenAI-kompatiblen Gateway.
|
# Leitung 1 — das MODELL. Bewusst NUR 3 Tools (Verdikt 03.07.2026): Kilo Code (IDE,
|
||||||
|
# Multi-Agent via Orchestrator-Modus), OpenCode (Terminal), Claude Code (starke Sessions).
|
||||||
|
# Cursor/Zed/Continue/Roo entfernt — Roo eingestellt, Rest von Kilo abgedeckt bzw.
|
||||||
|
# cloud-first. Das Evolution-Radar (AUTONOMIE_PLAN E4) überwacht die Tool-Kategorie.
|
||||||
"tools": {
|
"tools": {
|
||||||
"cline": {"label": "Roo Code / Cline", "lang": "json", "snippet": cline,
|
"kilo": {"label": "Kilo Code", "lang": "json", "snippet": kilo,
|
||||||
"note": "OpenAI-Provider → Gateway. Nur Lane 'coding' — die Box routet intern selbst."},
|
"note": "VS Code/JetBrains. OpenAI-Provider → Gateway; Lane 'coding' routet intern. "
|
||||||
"cursor": {"label": "Cursor", "lang": "json", "snippet": cursor,
|
"Empfohlen: API-Profile je Modus — Code→coding · Architect/Orchestrator→heavy · Ask/Debug→chat."},
|
||||||
"note": "Einstellungen ➔ Models ➔ OpenAI API key + Base URL."},
|
|
||||||
"opencode": {"label": "OpenCode", "lang": "jsonc", "snippet": opencode,
|
"opencode": {"label": "OpenCode", "lang": "jsonc", "snippet": opencode,
|
||||||
"note": "Datei opencode.jsonc, Key 'provider'."},
|
"note": "Terminal-Agent. Datei opencode.jsonc, Key 'provider'."},
|
||||||
"zed": {"label": "Zed", "lang": "json", "snippet": zed,
|
|
||||||
"note": "settings.json → language_models.openai_compatible."},
|
|
||||||
"continue": {"label": "Continue", "lang": "json", "snippet": cont,
|
|
||||||
"note": "~/.continue/config.json (oder config.yaml mit identischen Keys)."},
|
|
||||||
"claude_code": {"label": "Claude Code", "lang": "bash", "snippet": claude_code,
|
"claude_code": {"label": "Claude Code", "lang": "bash", "snippet": claude_code,
|
||||||
"note": "Braucht einen Anthropic⇄OpenAI-Übersetzer vor dem Gateway."},
|
"note": "Für die starken Sessions. Lokal-Betrieb bräuchte einen Anthropic⇄OpenAI-Übersetzer vor dem Gateway; Gedächtnis-Anbindung via Memory-MCP unten."},
|
||||||
},
|
},
|
||||||
# Leitung 2 — das GEDÄCHTNIS. Separater MCP-Server, gilt zusätzlich zu jedem Tool oben.
|
# Leitung 2 — das GEDÄCHTNIS. Separater MCP-Server, gilt zusätzlich zu jedem Tool oben.
|
||||||
"memory": {"label": "Shared Memory (MCP)", "lang": "json", "snippet": memory_mcp,
|
"memory": {"label": "Shared Memory (MCP)", "lang": "json", "snippet": memory_mcp,
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Meldeweg der Box (Autonomie E1): eine Nachricht an den User schicken.
|
||||||
|
# Primär: hermes send → Telegram (nutzt Gateway-Credentials, kein LLM nötig).
|
||||||
|
# Fallback: Logfile + wall (falls Telegram/hermes nicht erreichbar).
|
||||||
|
#
|
||||||
|
# Nutzung: notify.sh "Nachricht" (oder via stdin: echo msg | notify.sh)
|
||||||
|
# notify.sh -s "[Update]" "Text" (Betreffzeile voranstellen)
|
||||||
|
# Exit 0 = zugestellt (Telegram ODER Fallback-Log geschrieben).
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
LOG="${MC_NOTIFY_LOG:-$HOME/mc2-notify.log}"
|
||||||
|
SUBJECT=""
|
||||||
|
|
||||||
|
while getopts ":s:" opt; do
|
||||||
|
case "$opt" in
|
||||||
|
s) SUBJECT="$OPTARG" ;;
|
||||||
|
*) echo "usage: notify.sh [-s subject] <nachricht>" >&2; exit 2 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $((OPTIND - 1))
|
||||||
|
|
||||||
|
MSG="${1:-}"
|
||||||
|
[ -z "$MSG" ] && [ ! -t 0 ] && MSG="$(cat)"
|
||||||
|
if [ -z "$MSG" ]; then
|
||||||
|
echo "usage: notify.sh [-s subject] <nachricht>" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
TS="$(date '+%Y-%m-%d %H:%M:%S')"
|
||||||
|
|
||||||
|
# Primärweg: Telegram via hermes send (Login-Shell-PATH, falls aus Timer/cron aufgerufen).
|
||||||
|
if [ -n "$SUBJECT" ]; then
|
||||||
|
SEND_OUT="$(bash -lc 'hermes send --to telegram --subject "$1" -- "$2"' _ "$SUBJECT" "$MSG" 2>&1)"
|
||||||
|
else
|
||||||
|
SEND_OUT="$(bash -lc 'hermes send --to telegram -- "$1"' _ "$MSG" 2>&1)"
|
||||||
|
fi
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "$TS OK telegram: $MSG" >> "$LOG"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fallback: Logfile + wall — Meldung darf nie verloren gehen.
|
||||||
|
echo "$TS FALLBACK (telegram fehlgeschlagen: $SEND_OUT): $MSG" >> "$LOG"
|
||||||
|
printf '%s\n' "MC2-Meldung: ${SUBJECT:+$SUBJECT }$MSG" | wall 2>/dev/null || true
|
||||||
|
echo "WARN: Telegram fehlgeschlagen, in $LOG protokolliert" >&2
|
||||||
|
exit 0
|
||||||
@@ -96,7 +96,10 @@ Config `delegation:` (max_concurrent_children, max_spawn_depth, eigenes delegati
|
|||||||
„Inventar von `/api/maintenance/updates` + `/v1/models` + Versionsliste einlesen; per web_search
|
„Inventar von `/api/maintenance/updates` + `/v1/models` + Versionsliste einlesen; per web_search
|
||||||
Changelogs/Neuigkeiten zu: llama.cpp, llama-swap, hermes-agent, pocket-tts, onnx-asr/Parakeet,
|
Changelogs/Neuigkeiten zu: llama.cpp, llama-swap, hermes-agent, pocket-tts, onnx-asr/Parakeet,
|
||||||
Silero, smart-turn, Electron, three-vrm + Kategorie-Scan (bessere lokale Coder-/Vision-/TTS-
|
Silero, smart-turn, Electron, three-vrm + Kategorie-Scan (bessere lokale Coder-/Vision-/TTS-
|
||||||
Modelle für Strix Halo 128 GB); gegen [[verdicts]] halten (Verworfenes nicht wieder vorschlagen);
|
Modelle für Strix Halo 128 GB) + **IDE-/Agent-Tool-Kategorie** (Kilo Code, OpenCode, Claude Code
|
||||||
|
— Lehre 03.07.: Roo Code war Stunden nach der Empfehlung als „eingestellt seit April" entlarvt;
|
||||||
|
genau solche Tod-/Nachfolger-Meldungen muss das Radar fangen); gegen [[verdicts]] halten
|
||||||
|
(Verworfenes nicht wieder vorschlagen);
|
||||||
Ergebnis als kurzer deutscher Report → notify.sh".
|
Ergebnis als kurzer deutscher Report → notify.sh".
|
||||||
- Ablage des Prompts versioniert: `deploy/radar-prompt.md`, cron ruft ihn.
|
- Ablage des Prompts versioniert: `deploy/radar-prompt.md`, cron ruft ihn.
|
||||||
- Verifikation: Cron einmal manuell feuern, Telegram-Report prüfen (Qualität grob checken).
|
- Verifikation: Cron einmal manuell feuern, Telegram-Report prüfen (Qualität grob checken).
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
Vendored
+2
-2
@@ -7,8 +7,8 @@
|
|||||||
<link rel="manifest" href="/manifest.webmanifest" />
|
<link rel="manifest" href="/manifest.webmanifest" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
<title>Mission Control 2.0</title>
|
<title>Mission Control 2.0</title>
|
||||||
<script type="module" crossorigin src="/assets/index-CMk0U3JS.js"></script>
|
<script type="module" crossorigin src="/assets/index-DyBEWJ2j.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="/assets/index-DnPDtMyG.css">
|
<link rel="stylesheet" crossorigin href="/assets/index-_Rap01H_.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
@@ -9,12 +9,9 @@ import { cn } from "@/lib/utils"
|
|||||||
|
|
||||||
// Dateiziel je Tool — nur Hinweis im Editor-Kopf, keine Logik.
|
// Dateiziel je Tool — nur Hinweis im Editor-Kopf, keine Logik.
|
||||||
const FILE_NAMES: Record<string, string> = {
|
const FILE_NAMES: Record<string, string> = {
|
||||||
cline: "cline_settings.json",
|
kilo: "Kilo: Einstellungen → API Provider",
|
||||||
cursor: "Settings → Models",
|
|
||||||
opencode: "opencode.jsonc",
|
opencode: "opencode.jsonc",
|
||||||
zed: "settings.json",
|
claude_code: "env / Übersetzer",
|
||||||
continue: "~/.continue/config.json",
|
|
||||||
claude_code: "~/.zshrc / env",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function StatusBadge({ line, loading }: { line?: ConnectLine; loading: boolean }) {
|
function StatusBadge({ line, loading }: { line?: ConnectLine; loading: boolean }) {
|
||||||
@@ -78,7 +75,7 @@ function CodeWindow({
|
|||||||
export function ConnectView() {
|
export function ConnectView() {
|
||||||
const [host, setHost] = useState(localStorage.getItem("mc_host") || "192.168.178.151")
|
const [host, setHost] = useState(localStorage.getItem("mc_host") || "192.168.178.151")
|
||||||
const [mcpPath, setMcpPath] = useState(localStorage.getItem("mc_mcp_path") || "")
|
const [mcpPath, setMcpPath] = useState(localStorage.getItem("mc_mcp_path") || "")
|
||||||
const [active, setActive] = useState("cline")
|
const [active, setActive] = useState("kilo")
|
||||||
const [copied, setCopied] = useState<"model" | "memory" | null>(null)
|
const [copied, setCopied] = useState<"model" | "memory" | null>(null)
|
||||||
|
|
||||||
const params = new URLSearchParams({ host })
|
const params = new URLSearchParams({ host })
|
||||||
|
|||||||
Reference in New Issue
Block a user