openpencil/scripts/publish-beta.sh
Kayshen-X a7d73ebb62 feat(ai): pencil-style agentic design tool-loop, multi-chat tabs, #27 panel restyle
Built-in design generation now runs as an agentic MCP tool-loop (reusing the
agent-rs BuiltInProvider), gated behind OPENPENCIL_DESIGN_AGENT_LOOP / the
Settings experimental toggle; the orchestrator stays the default.

- design-agent system prompt + in-process design toolset (parity-locked with
  the MCP surface) + flag-gated Intent::Design routing
- spawn_agents execution as sequential sub-loops + live creation-mode badges
  (per-agent glow + 'N/M designing...' header)
- new MCP tools: get_guidelines, ToolSearch, get_screenshot, get_editor_state,
  export_nodes, spawn_agents; style-guide local audit
- #27 AI panel restyle: rounded tool cards + green check-rings, gray user
  bubbles, model-pill bottom toolbar, header, empty-state pills, the
  PARALLEL AGENTS (agent_team_size) 1x-6x chip dropdown
- multi-chat tabs: ChatSessions model (Deref-to-active) + tab row UI
  (switch / close / + / Cmd+T) with each run bound to its tab

Large checkpoint commit spanning the working tree (Rust shell crates).
2026-07-02 21:21:06 +08:00

127 lines
3.6 KiB
Bash
Executable file

#!/bin/bash
# Publish all @zseven-w packages to npm with auto-incrementing beta version.
#
# Usage:
# bun run publish:beta # auto-increment beta number
# bun run publish:beta 5 # force beta.5
#
# Publishes: pen-types → pen-core → pen-figma → pen-renderer → pen-sdk → openpencil CLI
# All under the "beta" dist-tag, so `npm install` won't pick them up by default.
# Install with: npm install @zseven-w/openpencil@beta
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
BASE_VERSION=$(jq -r .version "$ROOT/package.json")
FORCE_NUM="${1:-}"
# --- Guard: block beta publish if release version already exists on npm ---
RELEASE_CHECK=$(npm view "@zseven-w/pen-types@${BASE_VERSION}" version 2>/dev/null || true)
if [ -n "$RELEASE_CHECK" ]; then
echo "ERROR: Release version ${BASE_VERSION} already exists on npm."
echo "Publishing a beta for an already-released version creates conflicting dependencies."
echo "Bump the version first (e.g. bun run bump 0.5.2), then publish beta."
exit 1
fi
# Packages in topological order
PACKAGES=(
packages/pen-types
packages/pen-core
packages/pen-figma
packages/pen-renderer
packages/pen-mcp
packages/pen-sdk
apps/cli
)
# --- Determine beta number ---
if [ -n "$FORCE_NUM" ]; then
BETA_NUM="$FORCE_NUM"
else
# Query npm for the latest beta of this base version.
# npm view returns a string (1 version) or array (multiple), or errors (404) if not found.
RAW=$(npm view "@zseven-w/pen-types" versions --json 2>/dev/null || true)
LATEST=$(echo "$RAW" | jq -r --arg base "$BASE_VERSION" '
if type == "object" and .error then empty # npm 404 error object
elif type == "array" then
map(select(type == "string" and startswith($base + "-beta."))) | last // empty
elif type == "string" and startswith($base + "-beta.") then .
else empty
end
' 2>/dev/null || true)
if [ -n "$LATEST" ]; then
PREV_NUM=$(echo "$LATEST" | sed "s/${BASE_VERSION}-beta\.//")
BETA_NUM=$((PREV_NUM + 1))
else
BETA_NUM=0
fi
fi
BETA_VERSION="${BASE_VERSION}-beta.${BETA_NUM}"
echo "Publishing version: $BETA_VERSION"
echo ""
# --- Set beta version in all package.json files ---
MODIFIED_FILES=()
for pkg in "${PACKAGES[@]}"; do
f="$ROOT/$pkg/package.json"
if [ -f "$f" ]; then
# Backup original
cp "$f" "$f.bak"
MODIFIED_FILES+=("$f")
# Set version and replace workspace:* refs
jq --arg v "$BETA_VERSION" '
.version = $v |
if .dependencies then
.dependencies |= with_entries(
if .value == "workspace:*" then .value = $v else . end
)
else . end |
if .devDependencies then
.devDependencies |= with_entries(
if .value == "workspace:*" then .value = $v else . end
)
else . end
' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
fi
done
# --- Restore on exit ---
cleanup() {
echo ""
echo "Restoring original package.json files..."
for f in "${MODIFIED_FILES[@]}"; do
if [ -f "$f.bak" ]; then
mv "$f.bak" "$f"
fi
done
echo "Done."
}
trap cleanup EXIT
# --- Compile CLI ---
echo "Compiling CLI..."
(cd "$ROOT" && bun run cli:compile)
echo ""
# --- Verify CLI ---
node "$ROOT/apps/cli/dist/openpencil-cli.cjs" --version
echo ""
# --- Publish ---
for pkg in "${PACKAGES[@]}"; do
dir="$ROOT/$pkg"
name=$(jq -r .name "$dir/package.json")
echo "Publishing $name@$BETA_VERSION ..."
(cd "$dir" && npm publish --access public --tag beta) || echo " ⚠ Failed (may already exist)"
echo ""
done
echo "================================"
echo "Published: $BETA_VERSION"
echo "Install: npm install @zseven-w/openpencil@beta"
echo "================================"