SolidCraft-MCP 0.1.0 aufnehmen, damit der Skill mit eigenem Installer wie die anderen Crafts ausgeliefert werden kann.

This commit is contained in:
Dominic Gundel committed 2026-10-20 00:26:49 +02:00
1 parent ad0ea86adc
commit f3e49b5d37
21 files changed
+629 -22

No files matched your search

+1
View File
@@ -11,6 +11,7 @@ $ServerKeys = @{
'pdfcraft-mcp' = 'pdfcraft'
'figcraft-mcp' = 'figcraft'
'vectorcraft-mcp' = 'vectorcraft'
'solidcraft-mcp' = 'solidcraft'
}
function Get-McpServerKey([string]$SkillName) {
+1
View File
@@ -18,6 +18,7 @@ SERVER_KEYS = {
"pdfcraft-mcp": "pdfcraft",
"figcraft-mcp": "figcraft",
"vectorcraft-mcp": "vectorcraft",
"solidcraft-mcp": "solidcraft",
}
def skill_names():
+24 -4
View File
@@ -1,4 +1,4 @@
# Checks that the ArtCraft-Launcher CLI is installed and refreshes upstream.json + LICENSES.
# Checks that the skill CLI is installed and refreshes upstream.json + LICENSES.
# Does NOT copy or ship the EXE into the extension package.
# Usage: scripts\fetch-cli.ps1 -Name <skill-name> [-CliPath <path>]
param(
@@ -45,6 +45,13 @@ $defaults = @{
Repo = 'https://github.com/storytold/vectorcraft'
RepoSlug = 'storytold/vectorcraft'
}
'solidcraft-mcp' = @{
ExeName = 'solidcraft-cli.exe'
Default = 'C:\Program Files\SolidCraft\solidcraft-cli.exe'
Repo = 'https://github.com/tangency-labs/solidcraft'
RepoSlug = 'tangency-labs/solidcraft'
Source = 'SolidCraft-Installer'
}
}
if (-not $defaults.ContainsKey($Name)) {
@@ -52,10 +59,17 @@ if (-not $defaults.ContainsKey($Name)) {
exit 1
}
$meta = $defaults[$Name]
$sourceName = 'ArtCraft-Launcher'
if ($meta.ContainsKey('Source') -and $meta.Source) { $sourceName = [string]$meta.Source }
$src = if ($CliPath) { $CliPath } else { $meta.Default }
if (-not (Test-Path -LiteralPath $src)) {
Write-Host "CLI fehlt: $src"
Write-Host "Bitte die App ueber den ArtCraft-Launcher installieren, oder -CliPath angeben."
if ($sourceName -eq 'ArtCraft-Launcher') {
Write-Host "Bitte die App ueber den ArtCraft-Launcher installieren, oder -CliPath angeben."
}
else {
Write-Host "Bitte die App ueber den eigenen Installer installieren, oder -CliPath angeben."
}
exit 1
}
@@ -65,9 +79,15 @@ New-Item -ItemType Directory -Force -Path $serverDir | Out-Null
Get-ChildItem -LiteralPath $serverDir -Filter '*.exe' -ErrorAction SilentlyContinue | Remove-Item -Force
$readme = Join-Path $serverDir 'README.txt'
if (-not (Test-Path $readme)) {
if ($sourceName -eq 'ArtCraft-Launcher') {
$installLine = 'Installiere die App ueber den ArtCraft-Launcher.'
}
else {
$installLine = 'Installiere die App ueber den eigenen Installer.'
}
Write-Text $readme @"
Diese Erweiterung enthaelt keine CLI.
Installiere die App ueber den ArtCraft-Launcher.
$installLine
Erwarteter Pfad: $src
"@
}
@@ -87,7 +107,7 @@ if (-not $ver) {
$hash = (Get-FileHash -LiteralPath $src -Algorithm SHA256).Hash.ToLowerInvariant()
$upstream = @{
source = 'ArtCraft-Launcher'
source = $sourceName
path = $src
exe = $meta.ExeName
version = $ver
+22 -5
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# Checks that the ArtCraft-Launcher CLI is installed and refreshes upstream.json + LICENSES.
# Checks that the skill CLI is installed and refreshes upstream.json + LICENSES.
# Does NOT copy or ship the EXE into the extension package.
# Usage: scripts/fetch-cli.sh <skill-name> [cli-path]
set -euo pipefail
@@ -18,6 +18,7 @@ if [[ ! -f "$ext/manifest.json" ]]; then
exit 1
fi
source_name='ArtCraft-Launcher'
case "$name" in
wordcraft-mcp)
exe_name=wordcraft-cli.exe
@@ -49,6 +50,13 @@ case "$name" in
repo='https://github.com/storytold/vectorcraft'
repo_slug='storytold/vectorcraft'
;;
solidcraft-mcp)
exe_name=solidcraft-cli.exe
default='C:/Program Files/SolidCraft/solidcraft-cli.exe'
repo='https://github.com/tangency-labs/solidcraft'
repo_slug='tangency-labs/solidcraft'
source_name='SolidCraft-Installer'
;;
*)
echo "Kein CLI-Mapping fuer Skill '$name'." >&2
exit 1
@@ -58,16 +66,25 @@ esac
src="${cli_path:-$default}"
if [[ ! -f "$src" ]]; then
echo "CLI fehlt: $src" >&2
echo "Bitte die App ueber den ArtCraft-Launcher installieren, oder Pfad als Argument angeben." >&2
if [[ "$source_name" == ArtCraft-Launcher ]]; then
echo "Bitte die App ueber den ArtCraft-Launcher installieren, oder Pfad als Argument angeben." >&2
else
echo "Bitte die App ueber den eigenen Installer installieren, oder Pfad als Argument angeben." >&2
fi
exit 1
fi
mkdir -p "$ext/server"
rm -f "$ext/server"/*.exe
if [[ ! -f "$ext/server/README.txt" ]]; then
if [[ "$source_name" == ArtCraft-Launcher ]]; then
install_line='Installiere die App ueber den ArtCraft-Launcher.'
else
install_line='Installiere die App ueber den eigenen Installer.'
fi
printf '%s\n' \
'Diese Erweiterung enthaelt keine CLI.' \
'Installiere die App ueber den ArtCraft-Launcher.' \
"$install_line" \
"Erwarteter Pfad: $src" > "$ext/server/README.txt"
fi
@@ -103,7 +120,7 @@ fi
python3 -c "
import json, sys
print(json.dumps({
'source': 'ArtCraft-Launcher',
'source': sys.argv[6],
'path': sys.argv[1],
'exe': sys.argv[2],
'version': sys.argv[3],
@@ -112,7 +129,7 @@ print(json.dumps({
'tag': 'v' + sys.argv[3],
'bundled': False,
}, separators=(',', ':')))
" "$src" "$exe_name" "$ver" "$hash" "$repo" > "$ext/upstream.json"
" "$src" "$exe_name" "$ver" "$hash" "$repo" "$source_name" > "$ext/upstream.json"
printf '\n' >> "$ext/upstream.json" || true
mkdir -p "$ext/LICENSES"
+1
View File
@@ -22,6 +22,7 @@ $ServerKeys = @{
'pdfcraft-mcp' = 'pdfcraft'
'figcraft-mcp' = 'figcraft'
'vectorcraft-mcp' = 'vectorcraft'
'solidcraft-mcp' = 'solidcraft'
}
function Get-McpServerKey([string]$SkillName) {
+1 -1
View File
@@ -40,7 +40,7 @@ trap 'rm -f "$table"' EXIT
import json, base64, sys, urllib.parse, re
man = json.load(open(sys.argv[1], encoding="utf-8"))
name = sys.argv[2]
sk = {"wordcraft-mcp":"wordcraft","gridcraft-mcp":"gridcraft","pdfcraft-mcp":"pdfcraft","figcraft-mcp":"figcraft","vectorcraft-mcp":"vectorcraft"}.get(name)
sk = {"wordcraft-mcp":"wordcraft","gridcraft-mcp":"gridcraft","pdfcraft-mcp":"pdfcraft","figcraft-mcp":"figcraft","vectorcraft-mcp":"vectorcraft","solidcraft-mcp":"solidcraft"}.get(name)
if not sk:
m = re.match(r"^(.+)-mcp$", name)
sk = m.group(1) if m else name