alvin-bot 4.18.1 → 4.18.3

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.
@@ -0,0 +1,53 @@
1
+ # AEC Plugin Skills — Installed 22.04.2026
2
+
3
+ 54 Skills aus 3 Claude-Code-Plugins, erstellt von **Abhinav Bhardwaj** (GitHub: `Amanbh997`).
4
+ Installiert via direkte Kopie in `~/.claude/skills/` — Claude Code auto-discovered via SKILL.md frontmatter.
5
+
6
+ Vorher: 89 Skills. Nachher: **143 Skills** (+54).
7
+
8
+ ## Quellen
9
+
10
+ | Plugin | Repo | Skills | Stars |
11
+ |---|---|---|---|
12
+ | **Urban Design** | [Amanbh997/Urban-Design-Skills-Claude](https://github.com/Amanbh997/Urban-Design-Skills-Claude) | 18 | ⭐ 76 |
13
+ | **Architecture** | [Amanbh997/Skills-Architects](https://github.com/Amanbh997/Skills-Architects) | 18 | ⭐ 118 |
14
+ | **Computational Design** | [Amanbh997/Claude-skills-for-Computational-Designers](https://github.com/Amanbh997/Claude-skills-for-Computational-Designers) | 18 | ⭐ 127 |
15
+
16
+ Jedes Plugin: 35.000+ Zeilen, 7 Python-Calculators, 50+ Theorists, 30+ Tools, hunderte numerische Benchmarks.
17
+
18
+ ## Skill-Inventar
19
+
20
+ ### Urban Design (18)
21
+ block-and-density · climate-responsive-design · cost-estimation · design-brief · design-evaluation · masterplan-design · mixed-use-programming · mobility-and-transport · precedent-study · public-space-design · site-analysis · street-design · sustainability-scoring · tod-design · urban-calculator · urban-design-foundations · urban-regeneration · zoning-and-codes
22
+
23
+ ### Architecture (18)
24
+ accessibility-design · acoustic-design · architect-calculator · architect-foundations · building-codes · building-envelope · building-programming · building-services · building-sustainability · building-typology · concept-design · construction-documentation · daylighting-design · design-theory · fire-life-safety · material-selection · spatial-planning · structural-systems
25
+
26
+ ### Computational Design (18)
27
+ algorithmic-patterns · bim-scripting · cd-calculator · cd-foundations · computational-geometry · data-driven-design · design-automation · digital-fabrication · environmental-simulation · facade-computation · generative-design · interoperability · mesh-processing · ml-for-aec · optimization-methods · parametric-modeling · scripting-reference · structural-computation
28
+
29
+ ## Update ziehen
30
+
31
+ ```bash
32
+ cd /tmp && rm -rf aec-skills && mkdir aec-skills && cd aec-skills
33
+ git clone --depth 1 https://github.com/Amanbh997/Urban-Design-Skills-Claude.git
34
+ git clone --depth 1 https://github.com/Amanbh997/Skills-Architects.git
35
+ git clone --depth 1 https://github.com/Amanbh997/Claude-skills-for-Computational-Designers.git
36
+ cp -R Urban-Design-Skills-Claude/skills/* ~/.claude/skills/
37
+ cp -R Skills-Architects/skills/* ~/.claude/skills/
38
+ cp -R Claude-skills-for-Computational-Designers/skills/* ~/.claude/skills/
39
+ ```
40
+
41
+ ## Wie die Skills ausgelöst werden
42
+
43
+ Jeder Skill hat im SKILL.md frontmatter eine `description`-Zeile die spezifische User-Anfragen matcht. Beispiele:
44
+
45
+ - „Design a mixed-use quarter" → Urban Design Plugin (masterplan-design, tod-design, mixed-use-programming, zoning-and-codes, mobility-and-transport …)
46
+ - „Check if this floor plan meets fire code" → Architecture Plugin (fire-life-safety, building-codes, accessibility-design, construction-documentation …)
47
+ - „Generate a parametric facade pattern in Grasshopper" → Computational Design Plugin (parametric-modeling, facade-computation, algorithmic-patterns, digital-fabrication …)
48
+
49
+ Laut Creator: *"Ask Claude to design a mixed-use quarter and all three plugins kick in working together."*
50
+
51
+ ## Quelle
52
+ Reel vom Creator: https://www.instagram.com/reel/DXXhJS2kqAf/
53
+ Uploader: Abhinav Bhardwaj / "Claude for AEC!"
package/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  All notable changes to Alvin Bot are documented here.
4
4
 
5
+ ## [4.18.3] — 2026-04-23
6
+
7
+ ### 🐛 Hotfix: 4.18.2 triggered unwanted failover to Ollama
8
+
9
+ **Bug in 4.18.2:** The empty-stream detector yielded an `error` chunk, which the registry's `queryWithFallback()` interprets as "primary provider failed" and immediately switches to the fallback (Ollama/Gemma 4). User saw `⚡ Claude (Agent SDK) unavailable — switching to Gemma 4 E4B` after every token rotation — the opposite of the intended behavior.
10
+
11
+ **Fix:** yield a `text` chunk instead of `error`. Same user-visible message, same cache-invalidation, but no failover cascade. The next CLI subprocess spawns with the fresh Keychain token automatically, and claude-sdk stays selected.
12
+
13
+ ## [4.18.2] — 2026-04-23
14
+
15
+ ### 🐛 Fix: silent empty-stream after OAuth-token rotation
16
+
17
+ **Problem:** After running `/extra-usage`, `/login`, or any other flow that rotates the Claude OAuth token in the macOS Keychain, the Alvin-Bot silently broke for long-lived sessions. The in-memory Claude SDK client held the old token, the CLI subprocess emitted no text chunks (the 401 was swallowed upstream), the stream terminated normally with zero output tokens, and the user saw the fallback `"(Keine Antwort)"` — with no indication that a token refresh was needed.
18
+
19
+ **Fix** (`src/providers/claude-sdk-provider.ts`): In the `result` branch of the SDK stream loop, detect the empty-stream signature (`accumulatedText === ""` and `outputTokens === 0`). When that fires:
20
+
21
+ 1. Invalidate the `isAvailable()` cache so the next heartbeat probe spawns a fresh CLI subprocess that reads the current Keychain entry.
22
+ 2. Yield an explicit `error` chunk with actionable text so the user sees *"…token rotation — please resend your message"* instead of a silent `"(Keine Antwort)"`.
23
+
24
+ **Applies to:** every token-rotation flow — extra-usage activation, extra-usage expiry, weekly-reset (no rotation → unaffected), manual `claude login`.
25
+
26
+ **Net effect:** Bot self-heals after token changes. A single resend on the user side is enough; no manual restart required.
27
+
5
28
  ## [4.18.1] — 2026-04-20
6
29
 
7
30
  ### 🔒 Privacy-Guard: pre-publish check blocks PII leaks in shipped files
@@ -0,0 +1,81 @@
1
+ # Design Skills — Installed 22.04.2026
2
+
3
+ 19 neue Skills aus 2 Repos + Bestätigung dass Frontend Design bereits via Anthropic Plugin installiert ist.
4
+
5
+ ## Quellen
6
+
7
+ | Skill | Repo | Stars | Status |
8
+ |---|---|---|---|
9
+ | **Impeccable** (18 commands) | [pbakaus/impeccable](https://github.com/pbakaus/impeccable) | ⭐ 21.419 | ✅ Neu installiert |
10
+ | **Design Motion Principles** | [kylezantos/design-motion-principles](https://github.com/kylezantos/design-motion-principles) | ⭐ 293 | ✅ Neu installiert |
11
+ | **Frontend Design** | [anthropics/skills/frontend-design](https://github.com/anthropics/skills) | — | ℹ️ War bereits aktiv (Plugin `frontend-design:frontend-design`) |
12
+
13
+ ## Reel-Quelle
14
+ Marc Cleroux auf Instagram — https://www.instagram.com/reel/DXdVUiOjKUv/ (22.04.2026)
15
+
16
+ ## Impeccable-Commands (18)
17
+
18
+ Vokabular um Claude bei frontend-design zu steuern wenn dir die richtigen Worte fehlen.
19
+
20
+ | Command | Funktion |
21
+ |---|---|
22
+ | `/impeccable` | Core skill mit 18 commands + 7 Referenz-Domänen |
23
+ | `/adapt` | Responsive / Breakpoints / Touch-Targets |
24
+ | `/animate` | Purposeful motion + micro-interactions |
25
+ | `/audit` | Technische Quality Checks (a11y, perf, responsive) + scored report |
26
+ | `/bolder` | Bland → visuell interessanter |
27
+ | `/clarify` | Unklare UX-Copy verbessern |
28
+ | `/colorize` | Strategische Farbe einführen |
29
+ | `/critique` | UX Design Review (Hierarchie, Klarheit, Resonanz) |
30
+ | `/delight` | Joy-Momente, Personality, Memorable Touches |
31
+ | `/distill` | Auf Essenz reduzieren, Complexity weg |
32
+ | `/harden` | Error Handling, Empty States, Onboarding, i18n, Edge Cases |
33
+ | `/layout` | Layout / Spacing / Visual Rhythm fixen |
34
+ | `/optimize` | Performance (Bundle, Rendering, Images) |
35
+ | `/overdrive` | Technisch ambitioniert — Shaders, Spring Physics, 60fps |
36
+ | `/polish` | Final Quality Pass pre-shipping |
37
+ | `/quieter` | Overstimulating Design beruhigen |
38
+ | `/shape` | UX/UI-Plan vor Code |
39
+ | `/typeset` | Typografie fixen |
40
+
41
+ ### 7 Referenz-Domänen in `impeccable`
42
+ typography · color-and-contrast · spatial-design · motion-design · interaction-design · responsive-design · ux-writing
43
+
44
+ ## Design Motion Principles
45
+
46
+ Motion-Audit-Skill basierend auf den Philosophien von:
47
+ - **Emil Kowalski** — iOS-native UI polish
48
+ - **Jakub Krehel** — smooth interaction design
49
+ - **Jhey Tompkins** — creative web animation
50
+
51
+ Use case: *"Audit the hover states and transitions on my landing page"* → strukturierter Motion-Report.
52
+
53
+ ## Installation
54
+
55
+ Geklont + direkt in `~/.claude/skills/` einzeln kopiert (Impeccable folgt dem Pattern aus ihrer README: `cp -r dist/claude-code/.claude/* ~/.claude/`).
56
+
57
+ ## Update ziehen
58
+
59
+ ```bash
60
+ cd /tmp && rm -rf design-skills && mkdir design-skills && cd design-skills
61
+ git clone --depth 1 https://github.com/pbakaus/impeccable.git
62
+ git clone --depth 1 https://github.com/kylezantos/design-motion-principles.git
63
+ cp -R impeccable/.claude/skills/. ~/.claude/skills/
64
+ cp -R design-motion-principles/skills/design-motion-principles ~/.claude/skills/
65
+ ```
66
+
67
+ ## Stand Skills-Inventar (22.04.2026)
68
+ - Vorher: 143 (nach AEC-Installation)
69
+ - Nachher: **162** (+19)
70
+
71
+ ## Nebenbaustelle
72
+ Impeccable bringt zusätzlich eine `.claude/agents/anti-patterns.md` mit — nicht installiert (würde Permission für `~/.claude/agents/` brauchen). Das ist optional: Die 18 Skills funktionieren unabhängig vom Anti-Patterns-Agent. Falls später gewünscht: `cp -R /tmp/design-skills/impeccable/.claude/agents/. ~/.claude/agents/`
73
+
74
+ ## Empfohlene Workflow-Kombination
75
+
76
+ Laut Marc Cleroux im Reel ist das Power-Trio:
77
+ 1. **shape** (plan before code) — Teil von Impeccable
78
+ 2. **frontend-design** (implement mit Geschmack) — schon installiert
79
+ 3. **audit** + **critique** + **polish** (iterieren) — Impeccable
80
+
81
+ Bei jedem neuen Frontend-Build: `/shape` → `/impeccable craft` → `/audit` → `/critique` → `/polish` → shippen.
@@ -309,9 +309,40 @@ export class ClaudeSDKProvider {
309
309
  ? (usage.input_tokens || 0) + (usage.cache_creation_input_tokens || 0) + (usage.cache_read_input_tokens || 0)
310
310
  : 0;
311
311
  const outputTok = usage?.output_tokens || 0;
312
+ // v4.18.3 — Silent-empty-stream detection (replaces 4.18.2 approach).
313
+ //
314
+ // If the stream terminated cleanly but produced ZERO text chunks,
315
+ // something went wrong that the SDK didn't surface as an error.
316
+ // Most common cause: the OAuth token in the Keychain was rotated
317
+ // (e.g. right after /extra-usage or /login) while our in-memory
318
+ // SDK client still held the old one — the CLI subprocess silently
319
+ // gets a 401, emits no text, and we complete with
320
+ // accumulatedText === "".
321
+ //
322
+ // CRITICAL: we must NOT yield an "error" chunk here — the registry's
323
+ // queryWithFallback() treats that as "primary failed" and kicks off
324
+ // a full failover to the next provider (Ollama). That's exactly
325
+ // wrong: the next CLI subprocess would have picked up the fresh
326
+ // token by itself. Instead we:
327
+ // 1. Invalidate the availability cache so the next heartbeat
328
+ // re-probes `claude auth status` with a fresh subprocess.
329
+ // 2. Return a friendly "text" chunk explaining what happened,
330
+ // so the user sees a clear message (not "(Keine Antwort)")
331
+ // and knows to resend — without tripping the failover.
332
+ if (accumulatedText === "" && outputTok === 0) {
333
+ this.invalidateAvailabilityCache();
334
+ const hint = "⚠️ Claude antwortete mit leerem Stream (meist nach /extra-usage, /login oder Token-Refresh). " +
335
+ "Der SDK-Token-Cache wurde geleert — bitte schick die Nachricht einfach nochmal.";
336
+ yield {
337
+ type: "text",
338
+ text: hint,
339
+ delta: hint,
340
+ sessionId: resultMsg.session_id || capturedSessionId,
341
+ };
342
+ }
312
343
  yield {
313
344
  type: "done",
314
- text: accumulatedText,
345
+ text: accumulatedText || "",
315
346
  sessionId: resultMsg.session_id || capturedSessionId,
316
347
  costUsd: "total_cost_usd" in resultMsg ? resultMsg.total_cost_usd : 0,
317
348
  inputTokens: inputTok,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alvin-bot",
3
- "version": "4.18.1",
3
+ "version": "4.18.3",
4
4
  "description": "Alvin Bot \u2014 Your personal AI agent on Telegram, WhatsApp, Discord, Signal, and Web.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",