@aexol/spectral 0.7.0 → 0.7.1
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/dist/agent/index.js +76 -301
- package/dist/cli.js +11 -0
- package/dist/designer/data/systems/agentic/DESIGN.md +71 -0
- package/dist/designer/data/systems/agentic/components.html +154 -0
- package/dist/designer/data/systems/agentic/tokens.css +63 -0
- package/dist/designer/data/systems/airbnb/DESIGN.md +393 -0
- package/dist/designer/data/systems/airbnb/components.html +1373 -0
- package/dist/designer/data/systems/airbnb/tokens.css +261 -0
- package/dist/designer/data/systems/airtable/DESIGN.md +92 -0
- package/dist/designer/data/systems/airtable/components.html +489 -0
- package/dist/designer/data/systems/airtable/tokens.css +261 -0
- package/dist/designer/data/systems/ant/DESIGN.md +71 -0
- package/dist/designer/data/systems/ant/components.html +154 -0
- package/dist/designer/data/systems/ant/tokens.css +63 -0
- package/dist/designer/data/systems/apple/DESIGN.md +250 -0
- package/dist/designer/data/systems/apple/components.html +749 -0
- package/dist/designer/data/systems/apple/tokens.css +286 -0
- package/dist/designer/data/systems/application/DESIGN.md +71 -0
- package/dist/designer/data/systems/application/components.html +154 -0
- package/dist/designer/data/systems/application/tokens.css +63 -0
- package/dist/designer/data/systems/arc/DESIGN.md +152 -0
- package/dist/designer/data/systems/arc/components.html +432 -0
- package/dist/designer/data/systems/arc/tokens.css +137 -0
- package/dist/designer/data/systems/artistic/DESIGN.md +71 -0
- package/dist/designer/data/systems/artistic/components.html +136 -0
- package/dist/designer/data/systems/artistic/tokens.css +63 -0
- package/dist/designer/data/systems/atelier-zero/DESIGN.md +316 -0
- package/dist/designer/data/systems/atelier-zero/components.html +136 -0
- package/dist/designer/data/systems/atelier-zero/tokens.css +63 -0
- package/dist/designer/data/systems/bento/DESIGN.md +71 -0
- package/dist/designer/data/systems/bento/components.html +136 -0
- package/dist/designer/data/systems/bento/tokens.css +63 -0
- package/dist/designer/data/systems/binance/DESIGN.md +348 -0
- package/dist/designer/data/systems/binance/components.html +550 -0
- package/dist/designer/data/systems/binance/tokens.css +255 -0
- package/dist/designer/data/systems/bmw/DESIGN.md +183 -0
- package/dist/designer/data/systems/bmw/components.html +551 -0
- package/dist/designer/data/systems/bmw/tokens.css +179 -0
- package/dist/designer/data/systems/bmw-m/DESIGN.md +246 -0
- package/dist/designer/data/systems/bmw-m/components.html +342 -0
- package/dist/designer/data/systems/bmw-m/tokens.css +64 -0
- package/dist/designer/data/systems/bold/DESIGN.md +71 -0
- package/dist/designer/data/systems/bold/components.html +136 -0
- package/dist/designer/data/systems/bold/tokens.css +63 -0
- package/dist/designer/data/systems/brutalism/DESIGN.md +71 -0
- package/dist/designer/data/systems/brutalism/components.html +154 -0
- package/dist/designer/data/systems/brutalism/tokens.css +63 -0
- package/dist/designer/data/systems/bugatti/DESIGN.md +271 -0
- package/dist/designer/data/systems/bugatti/components.html +342 -0
- package/dist/designer/data/systems/bugatti/tokens.css +64 -0
- package/dist/designer/data/systems/cafe/DESIGN.md +71 -0
- package/dist/designer/data/systems/cafe/components.html +136 -0
- package/dist/designer/data/systems/cafe/tokens.css +63 -0
- package/dist/designer/data/systems/cal/DESIGN.md +262 -0
- package/dist/designer/data/systems/cal/components.html +376 -0
- package/dist/designer/data/systems/cal/tokens.css +265 -0
- package/dist/designer/data/systems/canva/DESIGN.md +157 -0
- package/dist/designer/data/systems/canva/components.html +461 -0
- package/dist/designer/data/systems/canva/tokens.css +147 -0
- package/dist/designer/data/systems/cisco/DESIGN.md +201 -0
- package/dist/designer/data/systems/cisco/components.html +342 -0
- package/dist/designer/data/systems/cisco/tokens.css +64 -0
- package/dist/designer/data/systems/claude/DESIGN.md +315 -0
- package/dist/designer/data/systems/claude/components.html +483 -0
- package/dist/designer/data/systems/claude/tokens.css +130 -0
- package/dist/designer/data/systems/clay/DESIGN.md +307 -0
- package/dist/designer/data/systems/clay/components.html +136 -0
- package/dist/designer/data/systems/clay/tokens.css +63 -0
- package/dist/designer/data/systems/claymorphism/DESIGN.md +71 -0
- package/dist/designer/data/systems/claymorphism/components.html +136 -0
- package/dist/designer/data/systems/claymorphism/tokens.css +63 -0
- package/dist/designer/data/systems/clean/DESIGN.md +71 -0
- package/dist/designer/data/systems/clean/components.html +136 -0
- package/dist/designer/data/systems/clean/tokens.css +63 -0
- package/dist/designer/data/systems/clickhouse/DESIGN.md +284 -0
- package/dist/designer/data/systems/clickhouse/components.html +506 -0
- package/dist/designer/data/systems/clickhouse/tokens.css +135 -0
- package/dist/designer/data/systems/cohere/DESIGN.md +269 -0
- package/dist/designer/data/systems/cohere/components.html +353 -0
- package/dist/designer/data/systems/cohere/tokens.css +126 -0
- package/dist/designer/data/systems/coinbase/DESIGN.md +132 -0
- package/dist/designer/data/systems/coinbase/components.html +501 -0
- package/dist/designer/data/systems/coinbase/tokens.css +257 -0
- package/dist/designer/data/systems/colorful/DESIGN.md +71 -0
- package/dist/designer/data/systems/colorful/components.html +136 -0
- package/dist/designer/data/systems/colorful/tokens.css +63 -0
- package/dist/designer/data/systems/composio/DESIGN.md +310 -0
- package/dist/designer/data/systems/composio/components.html +342 -0
- package/dist/designer/data/systems/composio/tokens.css +64 -0
- package/dist/designer/data/systems/contemporary/DESIGN.md +71 -0
- package/dist/designer/data/systems/contemporary/components.html +136 -0
- package/dist/designer/data/systems/contemporary/tokens.css +63 -0
- package/dist/designer/data/systems/corporate/DESIGN.md +71 -0
- package/dist/designer/data/systems/corporate/components.html +136 -0
- package/dist/designer/data/systems/corporate/tokens.css +63 -0
- package/dist/designer/data/systems/cosmic/DESIGN.md +71 -0
- package/dist/designer/data/systems/cosmic/components.html +136 -0
- package/dist/designer/data/systems/cosmic/tokens.css +63 -0
- package/dist/designer/data/systems/creative/DESIGN.md +71 -0
- package/dist/designer/data/systems/creative/components.html +136 -0
- package/dist/designer/data/systems/creative/tokens.css +63 -0
- package/dist/designer/data/systems/cursor/DESIGN.md +312 -0
- package/dist/designer/data/systems/cursor/components.html +654 -0
- package/dist/designer/data/systems/cursor/tokens.css +218 -0
- package/dist/designer/data/systems/dashboard/DESIGN.md +71 -0
- package/dist/designer/data/systems/dashboard/components.html +154 -0
- package/dist/designer/data/systems/dashboard/tokens.css +63 -0
- package/dist/designer/data/systems/default/DESIGN.md +62 -0
- package/dist/designer/data/systems/default/components.html +523 -0
- package/dist/designer/data/systems/default/tokens.css +200 -0
- package/dist/designer/data/systems/discord/DESIGN.md +162 -0
- package/dist/designer/data/systems/discord/components.html +359 -0
- package/dist/designer/data/systems/discord/tokens.css +125 -0
- package/dist/designer/data/systems/dithered/DESIGN.md +71 -0
- package/dist/designer/data/systems/dithered/components.html +136 -0
- package/dist/designer/data/systems/dithered/tokens.css +63 -0
- package/dist/designer/data/systems/doodle/DESIGN.md +71 -0
- package/dist/designer/data/systems/doodle/components.html +136 -0
- package/dist/designer/data/systems/doodle/tokens.css +63 -0
- package/dist/designer/data/systems/dramatic/DESIGN.md +71 -0
- package/dist/designer/data/systems/dramatic/components.html +136 -0
- package/dist/designer/data/systems/dramatic/tokens.css +63 -0
- package/dist/designer/data/systems/duolingo/DESIGN.md +154 -0
- package/dist/designer/data/systems/duolingo/components.html +532 -0
- package/dist/designer/data/systems/duolingo/tokens.css +130 -0
- package/dist/designer/data/systems/editorial/DESIGN.md +71 -0
- package/dist/designer/data/systems/editorial/components.html +154 -0
- package/dist/designer/data/systems/editorial/tokens.css +63 -0
- package/dist/designer/data/systems/elegant/DESIGN.md +71 -0
- package/dist/designer/data/systems/elegant/components.html +136 -0
- package/dist/designer/data/systems/elegant/tokens.css +63 -0
- package/dist/designer/data/systems/elevenlabs/DESIGN.md +268 -0
- package/dist/designer/data/systems/elevenlabs/components.html +342 -0
- package/dist/designer/data/systems/elevenlabs/tokens.css +127 -0
- package/dist/designer/data/systems/energetic/DESIGN.md +72 -0
- package/dist/designer/data/systems/energetic/components.html +136 -0
- package/dist/designer/data/systems/energetic/tokens.css +63 -0
- package/dist/designer/data/systems/enterprise/DESIGN.md +71 -0
- package/dist/designer/data/systems/enterprise/components.html +154 -0
- package/dist/designer/data/systems/enterprise/tokens.css +63 -0
- package/dist/designer/data/systems/expo/DESIGN.md +284 -0
- package/dist/designer/data/systems/expo/components.html +342 -0
- package/dist/designer/data/systems/expo/tokens.css +64 -0
- package/dist/designer/data/systems/expressive/DESIGN.md +71 -0
- package/dist/designer/data/systems/expressive/components.html +136 -0
- package/dist/designer/data/systems/expressive/tokens.css +63 -0
- package/dist/designer/data/systems/fantasy/DESIGN.md +71 -0
- package/dist/designer/data/systems/fantasy/components.html +136 -0
- package/dist/designer/data/systems/fantasy/tokens.css +63 -0
- package/dist/designer/data/systems/ferrari/DESIGN.md +317 -0
- package/dist/designer/data/systems/ferrari/components.html +342 -0
- package/dist/designer/data/systems/ferrari/tokens.css +64 -0
- package/dist/designer/data/systems/figma/DESIGN.md +223 -0
- package/dist/designer/data/systems/figma/components.html +344 -0
- package/dist/designer/data/systems/figma/tokens.css +126 -0
- package/dist/designer/data/systems/flat/DESIGN.md +71 -0
- package/dist/designer/data/systems/flat/components.html +136 -0
- package/dist/designer/data/systems/flat/tokens.css +63 -0
- package/dist/designer/data/systems/framer/DESIGN.md +249 -0
- package/dist/designer/data/systems/framer/components.html +438 -0
- package/dist/designer/data/systems/framer/tokens.css +238 -0
- package/dist/designer/data/systems/friendly/DESIGN.md +71 -0
- package/dist/designer/data/systems/friendly/components.html +136 -0
- package/dist/designer/data/systems/friendly/tokens.css +63 -0
- package/dist/designer/data/systems/futuristic/DESIGN.md +71 -0
- package/dist/designer/data/systems/futuristic/components.html +136 -0
- package/dist/designer/data/systems/futuristic/tokens.css +63 -0
- package/dist/designer/data/systems/github/DESIGN.md +155 -0
- package/dist/designer/data/systems/github/components.html +383 -0
- package/dist/designer/data/systems/github/tokens.css +125 -0
- package/dist/designer/data/systems/glassmorphism/DESIGN.md +71 -0
- package/dist/designer/data/systems/glassmorphism/components.html +154 -0
- package/dist/designer/data/systems/glassmorphism/tokens.css +63 -0
- package/dist/designer/data/systems/gradient/DESIGN.md +71 -0
- package/dist/designer/data/systems/gradient/components.html +154 -0
- package/dist/designer/data/systems/gradient/tokens.css +63 -0
- package/dist/designer/data/systems/hashicorp/DESIGN.md +281 -0
- package/dist/designer/data/systems/hashicorp/components.html +502 -0
- package/dist/designer/data/systems/hashicorp/tokens.css +272 -0
- package/dist/designer/data/systems/hud/DESIGN.md +173 -0
- package/dist/designer/data/systems/hud/components.html +136 -0
- package/dist/designer/data/systems/hud/tokens.css +63 -0
- package/dist/designer/data/systems/huggingface/DESIGN.md +149 -0
- package/dist/designer/data/systems/huggingface/components.html +346 -0
- package/dist/designer/data/systems/huggingface/tokens.css +125 -0
- package/dist/designer/data/systems/ibm/DESIGN.md +335 -0
- package/dist/designer/data/systems/ibm/components.html +342 -0
- package/dist/designer/data/systems/ibm/tokens.css +64 -0
- package/dist/designer/data/systems/intercom/DESIGN.md +149 -0
- package/dist/designer/data/systems/intercom/components.html +557 -0
- package/dist/designer/data/systems/intercom/tokens.css +150 -0
- package/dist/designer/data/systems/kami/DESIGN.md +410 -0
- package/dist/designer/data/systems/kami/components.html +601 -0
- package/dist/designer/data/systems/kami/tokens.css +272 -0
- package/dist/designer/data/systems/kraken/DESIGN.md +128 -0
- package/dist/designer/data/systems/kraken/components.html +342 -0
- package/dist/designer/data/systems/kraken/tokens.css +64 -0
- package/dist/designer/data/systems/lamborghini/DESIGN.md +291 -0
- package/dist/designer/data/systems/lamborghini/components.html +342 -0
- package/dist/designer/data/systems/lamborghini/tokens.css +64 -0
- package/dist/designer/data/systems/levels/DESIGN.md +71 -0
- package/dist/designer/data/systems/levels/components.html +154 -0
- package/dist/designer/data/systems/levels/tokens.css +63 -0
- package/dist/designer/data/systems/linear-app/DESIGN.md +370 -0
- package/dist/designer/data/systems/linear-app/components.html +370 -0
- package/dist/designer/data/systems/linear-app/tokens.css +130 -0
- package/dist/designer/data/systems/lingo/DESIGN.md +71 -0
- package/dist/designer/data/systems/lingo/components.html +154 -0
- package/dist/designer/data/systems/lingo/tokens.css +63 -0
- package/dist/designer/data/systems/loom/DESIGN.md +201 -0
- package/dist/designer/data/systems/loom/components.html +446 -0
- package/dist/designer/data/systems/loom/tokens.css +138 -0
- package/dist/designer/data/systems/lovable/DESIGN.md +301 -0
- package/dist/designer/data/systems/lovable/components.html +441 -0
- package/dist/designer/data/systems/lovable/tokens.css +258 -0
- package/dist/designer/data/systems/luxury/DESIGN.md +71 -0
- package/dist/designer/data/systems/luxury/components.html +154 -0
- package/dist/designer/data/systems/luxury/tokens.css +63 -0
- package/dist/designer/data/systems/mastercard/DESIGN.md +368 -0
- package/dist/designer/data/systems/mastercard/components.html +342 -0
- package/dist/designer/data/systems/mastercard/tokens.css +64 -0
- package/dist/designer/data/systems/material/DESIGN.md +71 -0
- package/dist/designer/data/systems/material/components.html +154 -0
- package/dist/designer/data/systems/material/tokens.css +63 -0
- package/dist/designer/data/systems/meta/DESIGN.md +369 -0
- package/dist/designer/data/systems/meta/components.html +398 -0
- package/dist/designer/data/systems/meta/tokens.css +263 -0
- package/dist/designer/data/systems/minimal/DESIGN.md +71 -0
- package/dist/designer/data/systems/minimal/components.html +154 -0
- package/dist/designer/data/systems/minimal/tokens.css +63 -0
- package/dist/designer/data/systems/minimax/DESIGN.md +260 -0
- package/dist/designer/data/systems/minimax/components.html +590 -0
- package/dist/designer/data/systems/minimax/tokens.css +148 -0
- package/dist/designer/data/systems/mintlify/DESIGN.md +329 -0
- package/dist/designer/data/systems/mintlify/components.html +737 -0
- package/dist/designer/data/systems/mintlify/tokens.css +256 -0
- package/dist/designer/data/systems/miro/DESIGN.md +111 -0
- package/dist/designer/data/systems/miro/components.html +342 -0
- package/dist/designer/data/systems/miro/tokens.css +64 -0
- package/dist/designer/data/systems/mission-control/DESIGN.md +474 -0
- package/dist/designer/data/systems/mission-control/components.html +136 -0
- package/dist/designer/data/systems/mission-control/tokens.css +63 -0
- package/dist/designer/data/systems/mistral-ai/DESIGN.md +264 -0
- package/dist/designer/data/systems/mistral-ai/components.html +338 -0
- package/dist/designer/data/systems/mistral-ai/tokens.css +125 -0
- package/dist/designer/data/systems/modern/DESIGN.md +71 -0
- package/dist/designer/data/systems/modern/components.html +154 -0
- package/dist/designer/data/systems/modern/tokens.css +63 -0
- package/dist/designer/data/systems/mongodb/DESIGN.md +269 -0
- package/dist/designer/data/systems/mongodb/components.html +462 -0
- package/dist/designer/data/systems/mongodb/tokens.css +176 -0
- package/dist/designer/data/systems/mono/DESIGN.md +71 -0
- package/dist/designer/data/systems/mono/components.html +136 -0
- package/dist/designer/data/systems/mono/tokens.css +63 -0
- package/dist/designer/data/systems/neobrutalism/DESIGN.md +71 -0
- package/dist/designer/data/systems/neobrutalism/components.html +136 -0
- package/dist/designer/data/systems/neobrutalism/tokens.css +63 -0
- package/dist/designer/data/systems/neon/DESIGN.md +71 -0
- package/dist/designer/data/systems/neon/components.html +136 -0
- package/dist/designer/data/systems/neon/tokens.css +63 -0
- package/dist/designer/data/systems/neumorphism/DESIGN.md +71 -0
- package/dist/designer/data/systems/neumorphism/components.html +136 -0
- package/dist/designer/data/systems/neumorphism/tokens.css +63 -0
- package/dist/designer/data/systems/nike/DESIGN.md +366 -0
- package/dist/designer/data/systems/nike/components.html +512 -0
- package/dist/designer/data/systems/nike/tokens.css +304 -0
- package/dist/designer/data/systems/notion/DESIGN.md +312 -0
- package/dist/designer/data/systems/notion/components.html +413 -0
- package/dist/designer/data/systems/notion/tokens.css +130 -0
- package/dist/designer/data/systems/nvidia/DESIGN.md +296 -0
- package/dist/designer/data/systems/nvidia/components.html +414 -0
- package/dist/designer/data/systems/nvidia/tokens.css +133 -0
- package/dist/designer/data/systems/ollama/DESIGN.md +270 -0
- package/dist/designer/data/systems/ollama/components.html +700 -0
- package/dist/designer/data/systems/ollama/tokens.css +242 -0
- package/dist/designer/data/systems/openai/DESIGN.md +140 -0
- package/dist/designer/data/systems/openai/components.html +382 -0
- package/dist/designer/data/systems/openai/tokens.css +133 -0
- package/dist/designer/data/systems/opencode-ai/DESIGN.md +284 -0
- package/dist/designer/data/systems/opencode-ai/components.html +389 -0
- package/dist/designer/data/systems/opencode-ai/tokens.css +126 -0
- package/dist/designer/data/systems/pacman/DESIGN.md +71 -0
- package/dist/designer/data/systems/pacman/components.html +342 -0
- package/dist/designer/data/systems/pacman/tokens.css +64 -0
- package/dist/designer/data/systems/paper/DESIGN.md +71 -0
- package/dist/designer/data/systems/paper/components.html +136 -0
- package/dist/designer/data/systems/paper/tokens.css +63 -0
- package/dist/designer/data/systems/perplexity/DESIGN.md +286 -0
- package/dist/designer/data/systems/perplexity/components.html +455 -0
- package/dist/designer/data/systems/perplexity/tokens.css +151 -0
- package/dist/designer/data/systems/perspective/DESIGN.md +71 -0
- package/dist/designer/data/systems/perspective/components.html +136 -0
- package/dist/designer/data/systems/perspective/tokens.css +63 -0
- package/dist/designer/data/systems/pinterest/DESIGN.md +233 -0
- package/dist/designer/data/systems/pinterest/components.html +865 -0
- package/dist/designer/data/systems/pinterest/tokens.css +262 -0
- package/dist/designer/data/systems/playstation/DESIGN.md +367 -0
- package/dist/designer/data/systems/playstation/components.html +414 -0
- package/dist/designer/data/systems/playstation/tokens.css +150 -0
- package/dist/designer/data/systems/posthog/DESIGN.md +259 -0
- package/dist/designer/data/systems/posthog/components.html +827 -0
- package/dist/designer/data/systems/posthog/tokens.css +272 -0
- package/dist/designer/data/systems/premium/DESIGN.md +71 -0
- package/dist/designer/data/systems/premium/components.html +154 -0
- package/dist/designer/data/systems/premium/tokens.css +63 -0
- package/dist/designer/data/systems/professional/DESIGN.md +71 -0
- package/dist/designer/data/systems/professional/components.html +136 -0
- package/dist/designer/data/systems/professional/tokens.css +63 -0
- package/dist/designer/data/systems/publication/DESIGN.md +71 -0
- package/dist/designer/data/systems/publication/components.html +154 -0
- package/dist/designer/data/systems/publication/tokens.css +63 -0
- package/dist/designer/data/systems/raycast/DESIGN.md +271 -0
- package/dist/designer/data/systems/raycast/components.html +507 -0
- package/dist/designer/data/systems/raycast/tokens.css +143 -0
- package/dist/designer/data/systems/refined/DESIGN.md +71 -0
- package/dist/designer/data/systems/refined/components.html +136 -0
- package/dist/designer/data/systems/refined/tokens.css +63 -0
- package/dist/designer/data/systems/renault/DESIGN.md +314 -0
- package/dist/designer/data/systems/renault/components.html +154 -0
- package/dist/designer/data/systems/renault/tokens.css +63 -0
- package/dist/designer/data/systems/replicate/DESIGN.md +264 -0
- package/dist/designer/data/systems/replicate/components.html +340 -0
- package/dist/designer/data/systems/replicate/tokens.css +125 -0
- package/dist/designer/data/systems/resend/DESIGN.md +306 -0
- package/dist/designer/data/systems/resend/components.html +839 -0
- package/dist/designer/data/systems/resend/tokens.css +353 -0
- package/dist/designer/data/systems/retro/DESIGN.md +71 -0
- package/dist/designer/data/systems/retro/components.html +136 -0
- package/dist/designer/data/systems/retro/tokens.css +63 -0
- package/dist/designer/data/systems/revolut/DESIGN.md +188 -0
- package/dist/designer/data/systems/revolut/components.html +342 -0
- package/dist/designer/data/systems/revolut/tokens.css +64 -0
- package/dist/designer/data/systems/runwayml/DESIGN.md +247 -0
- package/dist/designer/data/systems/runwayml/components.html +638 -0
- package/dist/designer/data/systems/runwayml/tokens.css +204 -0
- package/dist/designer/data/systems/sanity/DESIGN.md +360 -0
- package/dist/designer/data/systems/sanity/components.html +342 -0
- package/dist/designer/data/systems/sanity/tokens.css +64 -0
- package/dist/designer/data/systems/sentry/DESIGN.md +265 -0
- package/dist/designer/data/systems/sentry/components.html +387 -0
- package/dist/designer/data/systems/sentry/tokens.css +219 -0
- package/dist/designer/data/systems/shadcn/DESIGN.md +71 -0
- package/dist/designer/data/systems/shadcn/components.html +732 -0
- package/dist/designer/data/systems/shadcn/tokens.css +255 -0
- package/dist/designer/data/systems/shopify/DESIGN.md +353 -0
- package/dist/designer/data/systems/shopify/components.html +342 -0
- package/dist/designer/data/systems/shopify/tokens.css +141 -0
- package/dist/designer/data/systems/simple/DESIGN.md +71 -0
- package/dist/designer/data/systems/simple/components.html +136 -0
- package/dist/designer/data/systems/simple/tokens.css +63 -0
- package/dist/designer/data/systems/skeumorphism/DESIGN.md +71 -0
- package/dist/designer/data/systems/skeumorphism/components.html +136 -0
- package/dist/designer/data/systems/skeumorphism/tokens.css +63 -0
- package/dist/designer/data/systems/slack/DESIGN.md +363 -0
- package/dist/designer/data/systems/slack/components.html +387 -0
- package/dist/designer/data/systems/slack/tokens.css +127 -0
- package/dist/designer/data/systems/sleek/DESIGN.md +71 -0
- package/dist/designer/data/systems/sleek/components.html +136 -0
- package/dist/designer/data/systems/sleek/tokens.css +63 -0
- package/dist/designer/data/systems/spacex/DESIGN.md +197 -0
- package/dist/designer/data/systems/spacex/components.html +496 -0
- package/dist/designer/data/systems/spacex/tokens.css +154 -0
- package/dist/designer/data/systems/spacious/DESIGN.md +71 -0
- package/dist/designer/data/systems/spacious/components.html +136 -0
- package/dist/designer/data/systems/spacious/tokens.css +63 -0
- package/dist/designer/data/systems/spotify/DESIGN.md +249 -0
- package/dist/designer/data/systems/spotify/components.html +365 -0
- package/dist/designer/data/systems/spotify/tokens.css +127 -0
- package/dist/designer/data/systems/starbucks/DESIGN.md +583 -0
- package/dist/designer/data/systems/starbucks/components.html +493 -0
- package/dist/designer/data/systems/starbucks/tokens.css +182 -0
- package/dist/designer/data/systems/storytelling/DESIGN.md +71 -0
- package/dist/designer/data/systems/storytelling/components.html +136 -0
- package/dist/designer/data/systems/storytelling/tokens.css +63 -0
- package/dist/designer/data/systems/stripe/DESIGN.md +325 -0
- package/dist/designer/data/systems/stripe/components.html +1018 -0
- package/dist/designer/data/systems/stripe/tokens.css +295 -0
- package/dist/designer/data/systems/supabase/DESIGN.md +258 -0
- package/dist/designer/data/systems/supabase/components.html +741 -0
- package/dist/designer/data/systems/supabase/tokens.css +294 -0
- package/dist/designer/data/systems/superhuman/DESIGN.md +255 -0
- package/dist/designer/data/systems/superhuman/components.html +537 -0
- package/dist/designer/data/systems/superhuman/tokens.css +160 -0
- package/dist/designer/data/systems/tesla/DESIGN.md +289 -0
- package/dist/designer/data/systems/tesla/components.html +724 -0
- package/dist/designer/data/systems/tesla/tokens.css +285 -0
- package/dist/designer/data/systems/tetris/DESIGN.md +71 -0
- package/dist/designer/data/systems/tetris/components.html +342 -0
- package/dist/designer/data/systems/tetris/tokens.css +64 -0
- package/dist/designer/data/systems/theverge/DESIGN.md +342 -0
- package/dist/designer/data/systems/theverge/components.html +342 -0
- package/dist/designer/data/systems/theverge/tokens.css +64 -0
- package/dist/designer/data/systems/together-ai/DESIGN.md +266 -0
- package/dist/designer/data/systems/together-ai/components.html +422 -0
- package/dist/designer/data/systems/together-ai/tokens.css +127 -0
- package/dist/designer/data/systems/totality-festival/DESIGN.md +206 -0
- package/dist/designer/data/systems/totality-festival/components.html +136 -0
- package/dist/designer/data/systems/totality-festival/tokens.css +63 -0
- package/dist/designer/data/systems/trading-terminal/DESIGN.md +178 -0
- package/dist/designer/data/systems/trading-terminal/components.html +154 -0
- package/dist/designer/data/systems/trading-terminal/tokens.css +63 -0
- package/dist/designer/data/systems/uber/DESIGN.md +298 -0
- package/dist/designer/data/systems/uber/components.html +347 -0
- package/dist/designer/data/systems/uber/tokens.css +131 -0
- package/dist/designer/data/systems/urdu/DESIGN.md +1002 -0
- package/dist/designer/data/systems/urdu/components.html +136 -0
- package/dist/designer/data/systems/urdu/tokens.css +63 -0
- package/dist/designer/data/systems/vercel/DESIGN.md +313 -0
- package/dist/designer/data/systems/vercel/components.html +839 -0
- package/dist/designer/data/systems/vercel/tokens.css +270 -0
- package/dist/designer/data/systems/vibrant/DESIGN.md +71 -0
- package/dist/designer/data/systems/vibrant/components.html +136 -0
- package/dist/designer/data/systems/vibrant/tokens.css +63 -0
- package/dist/designer/data/systems/vintage/DESIGN.md +71 -0
- package/dist/designer/data/systems/vintage/components.html +136 -0
- package/dist/designer/data/systems/vintage/tokens.css +63 -0
- package/dist/designer/data/systems/vodafone/DESIGN.md +426 -0
- package/dist/designer/data/systems/vodafone/components.html +342 -0
- package/dist/designer/data/systems/vodafone/tokens.css +64 -0
- package/dist/designer/data/systems/voltagent/DESIGN.md +326 -0
- package/dist/designer/data/systems/voltagent/components.html +154 -0
- package/dist/designer/data/systems/voltagent/tokens.css +63 -0
- package/dist/designer/data/systems/warm-editorial/DESIGN.md +65 -0
- package/dist/designer/data/systems/warm-editorial/components.html +136 -0
- package/dist/designer/data/systems/warm-editorial/tokens.css +63 -0
- package/dist/designer/data/systems/warp/DESIGN.md +256 -0
- package/dist/designer/data/systems/warp/components.html +411 -0
- package/dist/designer/data/systems/warp/tokens.css +156 -0
- package/dist/designer/data/systems/webex/DESIGN.md +207 -0
- package/dist/designer/data/systems/webex/components.html +342 -0
- package/dist/designer/data/systems/webex/tokens.css +64 -0
- package/dist/designer/data/systems/webflow/DESIGN.md +95 -0
- package/dist/designer/data/systems/webflow/components.html +413 -0
- package/dist/designer/data/systems/webflow/tokens.css +191 -0
- package/dist/designer/data/systems/wechat/DESIGN.md +302 -0
- package/dist/designer/data/systems/wechat/components.html +507 -0
- package/dist/designer/data/systems/wechat/tokens.css +176 -0
- package/dist/designer/data/systems/wired/DESIGN.md +281 -0
- package/dist/designer/data/systems/wired/components.html +342 -0
- package/dist/designer/data/systems/wired/tokens.css +64 -0
- package/dist/designer/data/systems/wise/DESIGN.md +176 -0
- package/dist/designer/data/systems/wise/components.html +365 -0
- package/dist/designer/data/systems/wise/tokens.css +141 -0
- package/dist/designer/data/systems/x-ai/DESIGN.md +260 -0
- package/dist/designer/data/systems/x-ai/components.html +460 -0
- package/dist/designer/data/systems/x-ai/tokens.css +268 -0
- package/dist/designer/data/systems/xiaohongshu/DESIGN.md +402 -0
- package/dist/designer/data/systems/xiaohongshu/components.html +865 -0
- package/dist/designer/data/systems/xiaohongshu/tokens.css +193 -0
- package/dist/designer/data/systems/zapier/DESIGN.md +331 -0
- package/dist/designer/data/systems/zapier/components.html +342 -0
- package/dist/designer/data/systems/zapier/tokens.css +64 -0
- package/dist/designer/guidelines.js +176 -0
- package/dist/designer/index.js +236 -0
- package/dist/designer/skills.js +1675 -0
- package/dist/designer/systems.js +216 -0
- package/dist/server/pi-bridge.js +155 -5
- package/dist/server/session-stream.js +45 -1
- package/package.json +1 -1
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design System Registry — 150+ Curated Systems from Open Design
|
|
3
|
+
*
|
|
4
|
+
* Design systems are stored as DESIGN.md + tokens.css files under
|
|
5
|
+
* data/systems/<name>/. At import time, we scan the directory and
|
|
6
|
+
* parse each system's metadata (name, category, description) from
|
|
7
|
+
* the DESIGN.md frontmatter. Full content is lazily loaded on first
|
|
8
|
+
* access and cached.
|
|
9
|
+
*
|
|
10
|
+
* The tool interface remains the same as the original systems.ts:
|
|
11
|
+
* findSystem(name) → DesignSystem | undefined
|
|
12
|
+
* formatSystemForLLM(system) → string
|
|
13
|
+
* listSystemsForLLM() → string
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
16
|
+
import { dirname, resolve } from "node:path";
|
|
17
|
+
import { fileURLToPath } from "node:url";
|
|
18
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Discovery — build the registry from data/systems/
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
/** The directory containing design system data. We try multiple paths to
|
|
23
|
+
* handle both dev (src/) and production (dist/) layouts. */
|
|
24
|
+
function discoverDataDir() {
|
|
25
|
+
// Production: __dirname is dist/designer/, data is dist/designer/data/systems/
|
|
26
|
+
const prodPath = resolve(__dirname, "data", "systems");
|
|
27
|
+
if (existsSync(prodPath))
|
|
28
|
+
return prodPath;
|
|
29
|
+
// Both dev (src/designer/) and production (dist/designer/) layouts resolve the same way
|
|
30
|
+
return prodPath;
|
|
31
|
+
}
|
|
32
|
+
function parseCategory(line) {
|
|
33
|
+
const m = /Category:\s*(.+)/i.exec(line);
|
|
34
|
+
return m ? m[1].trim() : "Uncategorised";
|
|
35
|
+
}
|
|
36
|
+
function parseName(h1) {
|
|
37
|
+
return h1
|
|
38
|
+
.replace(/^#\s*Design System Inspired by\s*/i, "")
|
|
39
|
+
.replace(/^#\s*/i, "")
|
|
40
|
+
.trim();
|
|
41
|
+
}
|
|
42
|
+
function parseDescription(lines) {
|
|
43
|
+
// Take the first non-empty, non-heading, non-bracket line after the header
|
|
44
|
+
for (const line of lines) {
|
|
45
|
+
const trimmed = line.trim();
|
|
46
|
+
if (!trimmed || trimmed.startsWith("#") || trimmed.startsWith(">"))
|
|
47
|
+
continue;
|
|
48
|
+
// Take up to 120 chars for the description
|
|
49
|
+
return trimmed.length > 120 ? trimmed.slice(0, 117) + "..." : trimmed;
|
|
50
|
+
}
|
|
51
|
+
return "Design system from the Open Design registry.";
|
|
52
|
+
}
|
|
53
|
+
function buildRegistry() {
|
|
54
|
+
const map = new Map();
|
|
55
|
+
const baseDir = discoverDataDir();
|
|
56
|
+
if (!existsSync(baseDir)) {
|
|
57
|
+
process.stderr.write(`[designer] Design system data directory not found at ${baseDir}\n`);
|
|
58
|
+
return map;
|
|
59
|
+
}
|
|
60
|
+
let entries;
|
|
61
|
+
try {
|
|
62
|
+
entries = readdirSync(baseDir, { withFileTypes: true })
|
|
63
|
+
.filter((d) => d.isDirectory())
|
|
64
|
+
.map((d) => d.name);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
process.stderr.write(`[designer] Cannot read design system directory ${baseDir}\n`);
|
|
68
|
+
return map;
|
|
69
|
+
}
|
|
70
|
+
for (const name of entries) {
|
|
71
|
+
const dir = resolve(baseDir, name);
|
|
72
|
+
const mdPath = resolve(dir, "DESIGN.md");
|
|
73
|
+
const cssPath = resolve(dir, "tokens.css");
|
|
74
|
+
if (!existsSync(mdPath))
|
|
75
|
+
continue;
|
|
76
|
+
let designMd;
|
|
77
|
+
try {
|
|
78
|
+
designMd = readFileSync(mdPath, "utf-8");
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const mdLines = designMd.split("\n");
|
|
84
|
+
// Extract metadata from the first heading lines
|
|
85
|
+
let h1Line = "";
|
|
86
|
+
let categoryLine = "";
|
|
87
|
+
const bodyLines = [];
|
|
88
|
+
for (const line of mdLines) {
|
|
89
|
+
const t = line.trim();
|
|
90
|
+
if (!h1Line && t.startsWith("# "))
|
|
91
|
+
h1Line = t;
|
|
92
|
+
else if (!categoryLine && t.startsWith("> Category:"))
|
|
93
|
+
categoryLine = t;
|
|
94
|
+
else
|
|
95
|
+
bodyLines.push(line);
|
|
96
|
+
}
|
|
97
|
+
const parsedName = parseName(h1Line || `# ${name}`);
|
|
98
|
+
const category = parseCategory(categoryLine);
|
|
99
|
+
const description = parseDescription(bodyLines);
|
|
100
|
+
let tokensCss = "";
|
|
101
|
+
if (existsSync(cssPath)) {
|
|
102
|
+
try {
|
|
103
|
+
tokensCss = readFileSync(cssPath, "utf-8");
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// tokens optional
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
let componentsHtml = "";
|
|
110
|
+
const compPath = resolve(dir, "components.html");
|
|
111
|
+
if (existsSync(compPath)) {
|
|
112
|
+
try {
|
|
113
|
+
componentsHtml = readFileSync(compPath, "utf-8");
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// components optional
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
map.set(parsedName.toLowerCase(), {
|
|
120
|
+
name: parsedName,
|
|
121
|
+
category,
|
|
122
|
+
description,
|
|
123
|
+
designMd,
|
|
124
|
+
tokensCss,
|
|
125
|
+
componentsHtml,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
return map;
|
|
129
|
+
}
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
// Registry singleton
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
let _registry = null;
|
|
134
|
+
function registry() {
|
|
135
|
+
if (!_registry)
|
|
136
|
+
_registry = buildRegistry();
|
|
137
|
+
return _registry;
|
|
138
|
+
}
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Lookup
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
export function findSystem(name) {
|
|
143
|
+
const lower = name.toLowerCase().trim();
|
|
144
|
+
const reg = registry();
|
|
145
|
+
// Exact match
|
|
146
|
+
if (reg.has(lower))
|
|
147
|
+
return reg.get(lower);
|
|
148
|
+
// Prefix / fuzzy match
|
|
149
|
+
for (const [key, sys] of reg) {
|
|
150
|
+
if (key.startsWith(lower) || key.includes(lower))
|
|
151
|
+
return sys;
|
|
152
|
+
}
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
// LLM formatters
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
/**
|
|
159
|
+
* Format a single design system for the LLM.
|
|
160
|
+
* Concatenates the DESIGN.md and tokens.css for a complete picture.
|
|
161
|
+
*/
|
|
162
|
+
export function formatSystemForLLM(system) {
|
|
163
|
+
const parts = [system.designMd];
|
|
164
|
+
if (system.tokensCss) {
|
|
165
|
+
parts.push("\n---\n## CSS Custom Properties (tokens.css)\n");
|
|
166
|
+
parts.push("```css");
|
|
167
|
+
parts.push(system.tokensCss);
|
|
168
|
+
parts.push("```");
|
|
169
|
+
}
|
|
170
|
+
if (system.componentsHtml) {
|
|
171
|
+
parts.push("\n---\n## Component Examples (components.html)\n");
|
|
172
|
+
parts.push(system.componentsHtml);
|
|
173
|
+
}
|
|
174
|
+
parts.push("\n---\n", "## How to Use This System\n", "1. Copy the `:root { ... }` block from tokens.css into your `<style>` block.", "2. Reference tokens as `var(--bg)`, `var(--fg)`, `var(--accent)`, `var(--font-body)`, etc.", "3. Follow the component styling guidelines from the DESIGN.md sections.", "4. Use the component examples as concrete starting points — adapt colors and fonts to the active design system.", "5. Apply typography rules: font families, sizes, and line-heights from the tokens.");
|
|
175
|
+
return parts.join("\n");
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* List all available design systems as a compact markdown table for the LLM.
|
|
179
|
+
*/
|
|
180
|
+
export function listSystemsForLLM() {
|
|
181
|
+
const reg = registry();
|
|
182
|
+
const all = [...reg.values()];
|
|
183
|
+
// Group by category
|
|
184
|
+
const byCategory = new Map();
|
|
185
|
+
for (const sys of all) {
|
|
186
|
+
const cat = sys.category;
|
|
187
|
+
if (!byCategory.has(cat))
|
|
188
|
+
byCategory.set(cat, []);
|
|
189
|
+
byCategory.get(cat).push(sys);
|
|
190
|
+
}
|
|
191
|
+
const lines = [
|
|
192
|
+
`# Available Design Systems (${all.length} total)`,
|
|
193
|
+
"",
|
|
194
|
+
"Grouped by category. Use `designer_get_system` with the system **name** to load full tokens and guidelines.",
|
|
195
|
+
"",
|
|
196
|
+
];
|
|
197
|
+
for (const [category, systems] of [...byCategory].sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
198
|
+
systems.sort((a, b) => a.name.localeCompare(b.name));
|
|
199
|
+
lines.push(`## ${category}`);
|
|
200
|
+
lines.push("");
|
|
201
|
+
for (const s of systems) {
|
|
202
|
+
lines.push(`- **${s.name}** — ${s.description}`);
|
|
203
|
+
}
|
|
204
|
+
lines.push("");
|
|
205
|
+
}
|
|
206
|
+
// Quick-select list at the end
|
|
207
|
+
lines.push("---");
|
|
208
|
+
lines.push("");
|
|
209
|
+
lines.push("Quick reference (all system names, one per line):");
|
|
210
|
+
lines.push("");
|
|
211
|
+
const sorted = [...all].sort((a, b) => a.name.localeCompare(b.name));
|
|
212
|
+
for (const s of sorted) {
|
|
213
|
+
lines.push(`- ${s.name}`);
|
|
214
|
+
}
|
|
215
|
+
return lines.join("\n");
|
|
216
|
+
}
|
package/dist/server/pi-bridge.js
CHANGED
|
@@ -51,10 +51,12 @@
|
|
|
51
51
|
import { createJiti } from "@mariozechner/jiti";
|
|
52
52
|
import { AuthStorage, createAgentSession, DefaultResourceLoader, ModelRegistry, SessionManager, } from "@mariozechner/pi-coding-agent";
|
|
53
53
|
import { randomUUID } from "node:crypto";
|
|
54
|
-
import { existsSync } from "node:fs";
|
|
55
|
-
import { dirname, resolve } from "node:path";
|
|
54
|
+
import { existsSync, statSync } from "node:fs";
|
|
55
|
+
import { dirname, join, resolve } from "node:path";
|
|
56
56
|
import { fileURLToPath } from "node:url";
|
|
57
57
|
import aexolMcpExtension from "../extensions/aexol-mcp.js";
|
|
58
|
+
import subagentExt from "../agent/index.js";
|
|
59
|
+
import designerExtension from "../designer/index.js";
|
|
58
60
|
import observationalMemory from "../memory/index.js";
|
|
59
61
|
import { Runtime } from "../memory/runtime.js";
|
|
60
62
|
import { OBSERVATIONAL_MEMORY_CONTEXT_CUSTOM_TYPE, OBSERVATIONAL_MEMORY_SNAPSHOT_CUSTOM_TYPE, } from "../memory/types.js";
|
|
@@ -73,6 +75,37 @@ import { fetchAllowedModels as defaultFetchAllowedModels, } from "../relay/model
|
|
|
73
75
|
const SPECTRAL_PROXY_ANTHROPIC = "spectral-proxy-anthropic";
|
|
74
76
|
const SPECTRAL_PROXY_OPENAI = "spectral-proxy-openai";
|
|
75
77
|
const SPECTRAL_PROXY_USER_MODEL = "spectral-proxy-user-model";
|
|
78
|
+
/**
|
|
79
|
+
* Walk ancestor directories from `cwd` up to the filesystem root, collecting
|
|
80
|
+
* any existing skill directories at the given relative paths (e.g.
|
|
81
|
+
* `.opencode/skills` or `.aexol/skills`).
|
|
82
|
+
*
|
|
83
|
+
* Directories are returned in order from the deepest ancestor to `cwd` so
|
|
84
|
+
* project-local skills override ancestor-level ones when there are name
|
|
85
|
+
* collisions (pi's skill loader keeps the first found).
|
|
86
|
+
*/
|
|
87
|
+
function collectAncestorSkillDirs(cwd, relativePaths) {
|
|
88
|
+
const found = [];
|
|
89
|
+
let dir = resolve(cwd);
|
|
90
|
+
while (true) {
|
|
91
|
+
for (const rel of relativePaths) {
|
|
92
|
+
const candidate = join(dir, rel);
|
|
93
|
+
try {
|
|
94
|
+
if (existsSync(candidate) && statSync(candidate).isDirectory()) {
|
|
95
|
+
found.push(candidate);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// skip permission errors etc.
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const parent = dirname(dir);
|
|
103
|
+
if (parent === dir)
|
|
104
|
+
break;
|
|
105
|
+
dir = parent;
|
|
106
|
+
}
|
|
107
|
+
return found;
|
|
108
|
+
}
|
|
76
109
|
/**
|
|
77
110
|
* Concatenate text from an `AssistantMessage.content` array. Returns the
|
|
78
111
|
* empty string when no text blocks are present (tool-only turns) or when
|
|
@@ -356,7 +389,7 @@ export class PiBridge {
|
|
|
356
389
|
async start() {
|
|
357
390
|
if (this.disposed)
|
|
358
391
|
throw new Error("PiBridge already disposed");
|
|
359
|
-
const extensionFactories = [aexolMcpExtension, async (pi) => { observationalMemory(pi); }];
|
|
392
|
+
const extensionFactories = [aexolMcpExtension, async (pi) => { subagentExt(pi); }, async (pi) => { designerExtension(pi); }, async (pi) => { observationalMemory(pi); }];
|
|
360
393
|
// Load pi-mcp-adapter via jiti so tsc never crawls its .ts files in
|
|
361
394
|
// node_modules. The static `import` was causing tsc to type-check
|
|
362
395
|
// pi-mcp-adapter's source and fail the build on its type errors.
|
|
@@ -380,15 +413,22 @@ export class PiBridge {
|
|
|
380
413
|
// ResourceLoader with extensions wired in via factories.
|
|
381
414
|
// Each factory's signature `(pi: ExtensionAPI) => Promise<void>` matches
|
|
382
415
|
// the ExtensionFactory type exactly, so we can pass them directly.
|
|
416
|
+
//
|
|
417
|
+
// Skill discovery: pi's defaults scan ~/.pi/agent/skills/ (user),
|
|
418
|
+
// .pi/skills/ (project via CONFIG_DIR_NAME), and .agents/skills/
|
|
419
|
+
// (ancestor-walked). We additionally walk ancestors for
|
|
420
|
+
// .opencode/skills and .aexol/skills so OpenCode/Codex/Aexol skills
|
|
421
|
+
// work out of the box.
|
|
422
|
+
const extraSkillPaths = collectAncestorSkillDirs(this.opts.cwd, [".opencode/skills", ".aexol/skills"]);
|
|
383
423
|
const resourceLoader = new DefaultResourceLoader({
|
|
384
424
|
cwd: this.opts.cwd,
|
|
385
425
|
agentDir: this.opts.agentDir ?? `${process.env.HOME ?? ""}/.pi/agent`,
|
|
386
426
|
extensionFactories,
|
|
387
|
-
// Skip on-disk extension/skill discovery so the server is self-contained.
|
|
388
427
|
noExtensions: false,
|
|
389
|
-
noSkills:
|
|
428
|
+
noSkills: false,
|
|
390
429
|
noPromptTemplates: true,
|
|
391
430
|
noThemes: true,
|
|
431
|
+
additionalSkillPaths: extraSkillPaths,
|
|
392
432
|
});
|
|
393
433
|
await resourceLoader.reload();
|
|
394
434
|
// In-memory session: SQLite is our source of truth.
|
|
@@ -1029,6 +1069,27 @@ export class PiBridge {
|
|
|
1029
1069
|
return;
|
|
1030
1070
|
}
|
|
1031
1071
|
case "tool_execution_start": {
|
|
1072
|
+
// Emit subagent_start for subagent tool invocations (Option B frontend panels).
|
|
1073
|
+
if (ev.toolName === "subagent") {
|
|
1074
|
+
const args = ev.args;
|
|
1075
|
+
const mode = args?.chain?.length > 0 ? "chain"
|
|
1076
|
+
: args?.tasks?.length > 0 ? "parallel"
|
|
1077
|
+
: "single";
|
|
1078
|
+
const se = {
|
|
1079
|
+
type: "subagent_start",
|
|
1080
|
+
toolCallId: ev.toolCallId,
|
|
1081
|
+
mode,
|
|
1082
|
+
agent: typeof args?.agent === "string" ? args.agent : undefined,
|
|
1083
|
+
task: typeof args?.task === "string" ? args.task : undefined,
|
|
1084
|
+
taskCount: mode === "chain"
|
|
1085
|
+
? args?.chain?.length
|
|
1086
|
+
: mode === "parallel"
|
|
1087
|
+
? args?.tasks?.length
|
|
1088
|
+
: undefined,
|
|
1089
|
+
totalSteps: mode === "chain" ? args?.chain?.length : undefined,
|
|
1090
|
+
};
|
|
1091
|
+
this.emitAndBuffer(se);
|
|
1092
|
+
}
|
|
1032
1093
|
this.emitAndBuffer({
|
|
1033
1094
|
type: "tool_call",
|
|
1034
1095
|
messageId: this.pending?.messageId ?? "",
|
|
@@ -1038,7 +1099,96 @@ export class PiBridge {
|
|
|
1038
1099
|
});
|
|
1039
1100
|
return;
|
|
1040
1101
|
}
|
|
1102
|
+
case "tool_execution_update": {
|
|
1103
|
+
// Emit subagent_progress for subagent tool updates.
|
|
1104
|
+
if (ev.toolName === "subagent") {
|
|
1105
|
+
const partialResult = ev.partialResult;
|
|
1106
|
+
const details = partialResult?.details;
|
|
1107
|
+
if (details?.results) {
|
|
1108
|
+
const mode = (details.mode ?? "single");
|
|
1109
|
+
const total = details.results.length;
|
|
1110
|
+
const done = details.results.filter(r => r.exitCode !== undefined && r.exitCode !== -1).length;
|
|
1111
|
+
const running = total - done;
|
|
1112
|
+
const currentAgent = details.results.find(r => r.exitCode === -1 || r.exitCode === undefined)?.agent;
|
|
1113
|
+
const se = {
|
|
1114
|
+
type: "subagent_progress",
|
|
1115
|
+
toolCallId: ev.toolCallId,
|
|
1116
|
+
mode,
|
|
1117
|
+
completedCount: done,
|
|
1118
|
+
totalCount: total,
|
|
1119
|
+
currentStep: mode === "chain" ? details.results[details.results.length - 1]?.step : undefined,
|
|
1120
|
+
currentAgent,
|
|
1121
|
+
message: mode === "parallel"
|
|
1122
|
+
? `Parallel: ${done}/${total} done, ${running} running`
|
|
1123
|
+
: mode === "chain"
|
|
1124
|
+
? `Chain: step ${details.results.length}/${total}`
|
|
1125
|
+
: `Running ${currentAgent ?? "subagent"}...`,
|
|
1126
|
+
};
|
|
1127
|
+
try {
|
|
1128
|
+
this.opts.emit(se);
|
|
1129
|
+
}
|
|
1130
|
+
catch { /* best-effort */ }
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
return;
|
|
1134
|
+
}
|
|
1041
1135
|
case "tool_execution_end": {
|
|
1136
|
+
// Emit subagent_end for subagent tool completions.
|
|
1137
|
+
if (ev.toolName === "subagent") {
|
|
1138
|
+
const result = ev.result;
|
|
1139
|
+
const details = result?.details;
|
|
1140
|
+
if (details?.results && details.results.length > 0) {
|
|
1141
|
+
const mode = (details.mode ?? "single");
|
|
1142
|
+
const getOutput = (msgs) => {
|
|
1143
|
+
if (!msgs)
|
|
1144
|
+
return "(no output)";
|
|
1145
|
+
for (let i = msgs.length - 1; i >= 0; i--) {
|
|
1146
|
+
if (msgs[i].role === "assistant") {
|
|
1147
|
+
for (const part of msgs[i].content) {
|
|
1148
|
+
if (part.type === "text" && part.text)
|
|
1149
|
+
return part.text;
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
return "(no output)";
|
|
1154
|
+
};
|
|
1155
|
+
const results = details.results.map(r => ({
|
|
1156
|
+
agent: r.agent,
|
|
1157
|
+
agentSource: r.agentSource ?? "unknown",
|
|
1158
|
+
task: r.task,
|
|
1159
|
+
exitCode: r.exitCode,
|
|
1160
|
+
output: getOutput(r.messages),
|
|
1161
|
+
model: r.model,
|
|
1162
|
+
errorMessage: r.errorMessage,
|
|
1163
|
+
stopReason: r.stopReason,
|
|
1164
|
+
step: r.step,
|
|
1165
|
+
usage: {
|
|
1166
|
+
inputTokens: r.usage?.input ?? 0,
|
|
1167
|
+
outputTokens: r.usage?.output ?? 0,
|
|
1168
|
+
cacheReadTokens: r.usage?.cacheRead ?? 0,
|
|
1169
|
+
cacheWriteTokens: r.usage?.cacheWrite ?? 0,
|
|
1170
|
+
cost: r.usage?.cost ?? 0,
|
|
1171
|
+
turns: r.usage?.turns ?? 0,
|
|
1172
|
+
},
|
|
1173
|
+
}));
|
|
1174
|
+
const totalUsage = results.reduce((acc, r) => ({
|
|
1175
|
+
inputTokens: acc.inputTokens + r.usage.inputTokens,
|
|
1176
|
+
outputTokens: acc.outputTokens + r.usage.outputTokens,
|
|
1177
|
+
cacheReadTokens: acc.cacheReadTokens + r.usage.cacheReadTokens,
|
|
1178
|
+
cacheWriteTokens: acc.cacheWriteTokens + r.usage.cacheWriteTokens,
|
|
1179
|
+
cost: acc.cost + r.usage.cost,
|
|
1180
|
+
turns: acc.turns + r.usage.turns,
|
|
1181
|
+
}), { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, cost: 0, turns: 0 });
|
|
1182
|
+
const se = {
|
|
1183
|
+
type: "subagent_end",
|
|
1184
|
+
toolCallId: ev.toolCallId,
|
|
1185
|
+
mode,
|
|
1186
|
+
results,
|
|
1187
|
+
totalUsage,
|
|
1188
|
+
};
|
|
1189
|
+
this.emitAndBuffer(se);
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1042
1192
|
this.emitAndBuffer({
|
|
1043
1193
|
type: "tool_result",
|
|
1044
1194
|
messageId: this.pending?.messageId ?? "",
|
|
@@ -1130,8 +1130,30 @@ export class SessionStreamManager {
|
|
|
1130
1130
|
}
|
|
1131
1131
|
// Track compaction lifecycle so prompt() can block new messages while
|
|
1132
1132
|
// compaction is running.
|
|
1133
|
+
//
|
|
1134
|
+
// Persist synthetic system messages so historic session replay (reconnect,
|
|
1135
|
+
// page refresh) shows compaction events in the message timeline. These are
|
|
1136
|
+
// broadcast live to connected subscribers AND persisted, so both live and
|
|
1137
|
+
// historic sessions see them.
|
|
1133
1138
|
if (event.type === "compaction_start") {
|
|
1134
1139
|
stream.compacting = true;
|
|
1140
|
+
const reasonLabel = event.reason === "manual"
|
|
1141
|
+
? "Manual compaction"
|
|
1142
|
+
: event.reason === "overflow"
|
|
1143
|
+
? "Context overflow"
|
|
1144
|
+
: "Context threshold";
|
|
1145
|
+
const sysMsg = `${reasonLabel} — compacting conversation context…`;
|
|
1146
|
+
try {
|
|
1147
|
+
this.store.appendMessage(stream.sessionId, {
|
|
1148
|
+
role: "system",
|
|
1149
|
+
content: sysMsg,
|
|
1150
|
+
eventsJsonl: "",
|
|
1151
|
+
createdAt: Date.now(),
|
|
1152
|
+
});
|
|
1153
|
+
}
|
|
1154
|
+
catch {
|
|
1155
|
+
// best-effort; never block the stream on persistence
|
|
1156
|
+
}
|
|
1135
1157
|
}
|
|
1136
1158
|
if (event.type === "compaction_end") {
|
|
1137
1159
|
stream.compacting = false;
|
|
@@ -1139,6 +1161,25 @@ export class SessionStreamManager {
|
|
|
1139
1161
|
prunePersistedHistoryAfterCompaction(this.store, stream.sessionId, stream.bridge);
|
|
1140
1162
|
}
|
|
1141
1163
|
persistObservationalMemorySnapshot(this.store, stream.sessionId, stream.bridge);
|
|
1164
|
+
const tokensMsg = typeof event.tokensBefore === "number"
|
|
1165
|
+
? ` (from ~${event.tokensBefore.toLocaleString()} tokens)`
|
|
1166
|
+
: "";
|
|
1167
|
+
const sysMsg = event.aborted
|
|
1168
|
+
? "Compaction aborted."
|
|
1169
|
+
: event.summary
|
|
1170
|
+
? `Compaction complete${tokensMsg}. Summary: ${event.summary}`
|
|
1171
|
+
: `Compaction complete${tokensMsg}.`;
|
|
1172
|
+
try {
|
|
1173
|
+
this.store.appendMessage(stream.sessionId, {
|
|
1174
|
+
role: "system",
|
|
1175
|
+
content: sysMsg,
|
|
1176
|
+
eventsJsonl: "",
|
|
1177
|
+
createdAt: Date.now(),
|
|
1178
|
+
});
|
|
1179
|
+
}
|
|
1180
|
+
catch {
|
|
1181
|
+
// best-effort
|
|
1182
|
+
}
|
|
1142
1183
|
}
|
|
1143
1184
|
this.broadcast(stream, event);
|
|
1144
1185
|
if (event.type === "agent_end") {
|
|
@@ -1378,7 +1419,10 @@ function isReplayable(event) {
|
|
|
1378
1419
|
event.type === "tool_result" ||
|
|
1379
1420
|
event.type === "message_end" ||
|
|
1380
1421
|
event.type === "token_usage" ||
|
|
1381
|
-
event.type === "error"
|
|
1422
|
+
event.type === "error" ||
|
|
1423
|
+
event.type === "subagent_start" ||
|
|
1424
|
+
event.type === "subagent_progress" ||
|
|
1425
|
+
event.type === "subagent_end");
|
|
1382
1426
|
}
|
|
1383
1427
|
function snapshotTurn(turn) {
|
|
1384
1428
|
// Defensive copy of the events array so the snapshot can't be mutated by
|