@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.
Files changed (459) hide show
  1. package/dist/agent/index.js +76 -301
  2. package/dist/cli.js +11 -0
  3. package/dist/designer/data/systems/agentic/DESIGN.md +71 -0
  4. package/dist/designer/data/systems/agentic/components.html +154 -0
  5. package/dist/designer/data/systems/agentic/tokens.css +63 -0
  6. package/dist/designer/data/systems/airbnb/DESIGN.md +393 -0
  7. package/dist/designer/data/systems/airbnb/components.html +1373 -0
  8. package/dist/designer/data/systems/airbnb/tokens.css +261 -0
  9. package/dist/designer/data/systems/airtable/DESIGN.md +92 -0
  10. package/dist/designer/data/systems/airtable/components.html +489 -0
  11. package/dist/designer/data/systems/airtable/tokens.css +261 -0
  12. package/dist/designer/data/systems/ant/DESIGN.md +71 -0
  13. package/dist/designer/data/systems/ant/components.html +154 -0
  14. package/dist/designer/data/systems/ant/tokens.css +63 -0
  15. package/dist/designer/data/systems/apple/DESIGN.md +250 -0
  16. package/dist/designer/data/systems/apple/components.html +749 -0
  17. package/dist/designer/data/systems/apple/tokens.css +286 -0
  18. package/dist/designer/data/systems/application/DESIGN.md +71 -0
  19. package/dist/designer/data/systems/application/components.html +154 -0
  20. package/dist/designer/data/systems/application/tokens.css +63 -0
  21. package/dist/designer/data/systems/arc/DESIGN.md +152 -0
  22. package/dist/designer/data/systems/arc/components.html +432 -0
  23. package/dist/designer/data/systems/arc/tokens.css +137 -0
  24. package/dist/designer/data/systems/artistic/DESIGN.md +71 -0
  25. package/dist/designer/data/systems/artistic/components.html +136 -0
  26. package/dist/designer/data/systems/artistic/tokens.css +63 -0
  27. package/dist/designer/data/systems/atelier-zero/DESIGN.md +316 -0
  28. package/dist/designer/data/systems/atelier-zero/components.html +136 -0
  29. package/dist/designer/data/systems/atelier-zero/tokens.css +63 -0
  30. package/dist/designer/data/systems/bento/DESIGN.md +71 -0
  31. package/dist/designer/data/systems/bento/components.html +136 -0
  32. package/dist/designer/data/systems/bento/tokens.css +63 -0
  33. package/dist/designer/data/systems/binance/DESIGN.md +348 -0
  34. package/dist/designer/data/systems/binance/components.html +550 -0
  35. package/dist/designer/data/systems/binance/tokens.css +255 -0
  36. package/dist/designer/data/systems/bmw/DESIGN.md +183 -0
  37. package/dist/designer/data/systems/bmw/components.html +551 -0
  38. package/dist/designer/data/systems/bmw/tokens.css +179 -0
  39. package/dist/designer/data/systems/bmw-m/DESIGN.md +246 -0
  40. package/dist/designer/data/systems/bmw-m/components.html +342 -0
  41. package/dist/designer/data/systems/bmw-m/tokens.css +64 -0
  42. package/dist/designer/data/systems/bold/DESIGN.md +71 -0
  43. package/dist/designer/data/systems/bold/components.html +136 -0
  44. package/dist/designer/data/systems/bold/tokens.css +63 -0
  45. package/dist/designer/data/systems/brutalism/DESIGN.md +71 -0
  46. package/dist/designer/data/systems/brutalism/components.html +154 -0
  47. package/dist/designer/data/systems/brutalism/tokens.css +63 -0
  48. package/dist/designer/data/systems/bugatti/DESIGN.md +271 -0
  49. package/dist/designer/data/systems/bugatti/components.html +342 -0
  50. package/dist/designer/data/systems/bugatti/tokens.css +64 -0
  51. package/dist/designer/data/systems/cafe/DESIGN.md +71 -0
  52. package/dist/designer/data/systems/cafe/components.html +136 -0
  53. package/dist/designer/data/systems/cafe/tokens.css +63 -0
  54. package/dist/designer/data/systems/cal/DESIGN.md +262 -0
  55. package/dist/designer/data/systems/cal/components.html +376 -0
  56. package/dist/designer/data/systems/cal/tokens.css +265 -0
  57. package/dist/designer/data/systems/canva/DESIGN.md +157 -0
  58. package/dist/designer/data/systems/canva/components.html +461 -0
  59. package/dist/designer/data/systems/canva/tokens.css +147 -0
  60. package/dist/designer/data/systems/cisco/DESIGN.md +201 -0
  61. package/dist/designer/data/systems/cisco/components.html +342 -0
  62. package/dist/designer/data/systems/cisco/tokens.css +64 -0
  63. package/dist/designer/data/systems/claude/DESIGN.md +315 -0
  64. package/dist/designer/data/systems/claude/components.html +483 -0
  65. package/dist/designer/data/systems/claude/tokens.css +130 -0
  66. package/dist/designer/data/systems/clay/DESIGN.md +307 -0
  67. package/dist/designer/data/systems/clay/components.html +136 -0
  68. package/dist/designer/data/systems/clay/tokens.css +63 -0
  69. package/dist/designer/data/systems/claymorphism/DESIGN.md +71 -0
  70. package/dist/designer/data/systems/claymorphism/components.html +136 -0
  71. package/dist/designer/data/systems/claymorphism/tokens.css +63 -0
  72. package/dist/designer/data/systems/clean/DESIGN.md +71 -0
  73. package/dist/designer/data/systems/clean/components.html +136 -0
  74. package/dist/designer/data/systems/clean/tokens.css +63 -0
  75. package/dist/designer/data/systems/clickhouse/DESIGN.md +284 -0
  76. package/dist/designer/data/systems/clickhouse/components.html +506 -0
  77. package/dist/designer/data/systems/clickhouse/tokens.css +135 -0
  78. package/dist/designer/data/systems/cohere/DESIGN.md +269 -0
  79. package/dist/designer/data/systems/cohere/components.html +353 -0
  80. package/dist/designer/data/systems/cohere/tokens.css +126 -0
  81. package/dist/designer/data/systems/coinbase/DESIGN.md +132 -0
  82. package/dist/designer/data/systems/coinbase/components.html +501 -0
  83. package/dist/designer/data/systems/coinbase/tokens.css +257 -0
  84. package/dist/designer/data/systems/colorful/DESIGN.md +71 -0
  85. package/dist/designer/data/systems/colorful/components.html +136 -0
  86. package/dist/designer/data/systems/colorful/tokens.css +63 -0
  87. package/dist/designer/data/systems/composio/DESIGN.md +310 -0
  88. package/dist/designer/data/systems/composio/components.html +342 -0
  89. package/dist/designer/data/systems/composio/tokens.css +64 -0
  90. package/dist/designer/data/systems/contemporary/DESIGN.md +71 -0
  91. package/dist/designer/data/systems/contemporary/components.html +136 -0
  92. package/dist/designer/data/systems/contemporary/tokens.css +63 -0
  93. package/dist/designer/data/systems/corporate/DESIGN.md +71 -0
  94. package/dist/designer/data/systems/corporate/components.html +136 -0
  95. package/dist/designer/data/systems/corporate/tokens.css +63 -0
  96. package/dist/designer/data/systems/cosmic/DESIGN.md +71 -0
  97. package/dist/designer/data/systems/cosmic/components.html +136 -0
  98. package/dist/designer/data/systems/cosmic/tokens.css +63 -0
  99. package/dist/designer/data/systems/creative/DESIGN.md +71 -0
  100. package/dist/designer/data/systems/creative/components.html +136 -0
  101. package/dist/designer/data/systems/creative/tokens.css +63 -0
  102. package/dist/designer/data/systems/cursor/DESIGN.md +312 -0
  103. package/dist/designer/data/systems/cursor/components.html +654 -0
  104. package/dist/designer/data/systems/cursor/tokens.css +218 -0
  105. package/dist/designer/data/systems/dashboard/DESIGN.md +71 -0
  106. package/dist/designer/data/systems/dashboard/components.html +154 -0
  107. package/dist/designer/data/systems/dashboard/tokens.css +63 -0
  108. package/dist/designer/data/systems/default/DESIGN.md +62 -0
  109. package/dist/designer/data/systems/default/components.html +523 -0
  110. package/dist/designer/data/systems/default/tokens.css +200 -0
  111. package/dist/designer/data/systems/discord/DESIGN.md +162 -0
  112. package/dist/designer/data/systems/discord/components.html +359 -0
  113. package/dist/designer/data/systems/discord/tokens.css +125 -0
  114. package/dist/designer/data/systems/dithered/DESIGN.md +71 -0
  115. package/dist/designer/data/systems/dithered/components.html +136 -0
  116. package/dist/designer/data/systems/dithered/tokens.css +63 -0
  117. package/dist/designer/data/systems/doodle/DESIGN.md +71 -0
  118. package/dist/designer/data/systems/doodle/components.html +136 -0
  119. package/dist/designer/data/systems/doodle/tokens.css +63 -0
  120. package/dist/designer/data/systems/dramatic/DESIGN.md +71 -0
  121. package/dist/designer/data/systems/dramatic/components.html +136 -0
  122. package/dist/designer/data/systems/dramatic/tokens.css +63 -0
  123. package/dist/designer/data/systems/duolingo/DESIGN.md +154 -0
  124. package/dist/designer/data/systems/duolingo/components.html +532 -0
  125. package/dist/designer/data/systems/duolingo/tokens.css +130 -0
  126. package/dist/designer/data/systems/editorial/DESIGN.md +71 -0
  127. package/dist/designer/data/systems/editorial/components.html +154 -0
  128. package/dist/designer/data/systems/editorial/tokens.css +63 -0
  129. package/dist/designer/data/systems/elegant/DESIGN.md +71 -0
  130. package/dist/designer/data/systems/elegant/components.html +136 -0
  131. package/dist/designer/data/systems/elegant/tokens.css +63 -0
  132. package/dist/designer/data/systems/elevenlabs/DESIGN.md +268 -0
  133. package/dist/designer/data/systems/elevenlabs/components.html +342 -0
  134. package/dist/designer/data/systems/elevenlabs/tokens.css +127 -0
  135. package/dist/designer/data/systems/energetic/DESIGN.md +72 -0
  136. package/dist/designer/data/systems/energetic/components.html +136 -0
  137. package/dist/designer/data/systems/energetic/tokens.css +63 -0
  138. package/dist/designer/data/systems/enterprise/DESIGN.md +71 -0
  139. package/dist/designer/data/systems/enterprise/components.html +154 -0
  140. package/dist/designer/data/systems/enterprise/tokens.css +63 -0
  141. package/dist/designer/data/systems/expo/DESIGN.md +284 -0
  142. package/dist/designer/data/systems/expo/components.html +342 -0
  143. package/dist/designer/data/systems/expo/tokens.css +64 -0
  144. package/dist/designer/data/systems/expressive/DESIGN.md +71 -0
  145. package/dist/designer/data/systems/expressive/components.html +136 -0
  146. package/dist/designer/data/systems/expressive/tokens.css +63 -0
  147. package/dist/designer/data/systems/fantasy/DESIGN.md +71 -0
  148. package/dist/designer/data/systems/fantasy/components.html +136 -0
  149. package/dist/designer/data/systems/fantasy/tokens.css +63 -0
  150. package/dist/designer/data/systems/ferrari/DESIGN.md +317 -0
  151. package/dist/designer/data/systems/ferrari/components.html +342 -0
  152. package/dist/designer/data/systems/ferrari/tokens.css +64 -0
  153. package/dist/designer/data/systems/figma/DESIGN.md +223 -0
  154. package/dist/designer/data/systems/figma/components.html +344 -0
  155. package/dist/designer/data/systems/figma/tokens.css +126 -0
  156. package/dist/designer/data/systems/flat/DESIGN.md +71 -0
  157. package/dist/designer/data/systems/flat/components.html +136 -0
  158. package/dist/designer/data/systems/flat/tokens.css +63 -0
  159. package/dist/designer/data/systems/framer/DESIGN.md +249 -0
  160. package/dist/designer/data/systems/framer/components.html +438 -0
  161. package/dist/designer/data/systems/framer/tokens.css +238 -0
  162. package/dist/designer/data/systems/friendly/DESIGN.md +71 -0
  163. package/dist/designer/data/systems/friendly/components.html +136 -0
  164. package/dist/designer/data/systems/friendly/tokens.css +63 -0
  165. package/dist/designer/data/systems/futuristic/DESIGN.md +71 -0
  166. package/dist/designer/data/systems/futuristic/components.html +136 -0
  167. package/dist/designer/data/systems/futuristic/tokens.css +63 -0
  168. package/dist/designer/data/systems/github/DESIGN.md +155 -0
  169. package/dist/designer/data/systems/github/components.html +383 -0
  170. package/dist/designer/data/systems/github/tokens.css +125 -0
  171. package/dist/designer/data/systems/glassmorphism/DESIGN.md +71 -0
  172. package/dist/designer/data/systems/glassmorphism/components.html +154 -0
  173. package/dist/designer/data/systems/glassmorphism/tokens.css +63 -0
  174. package/dist/designer/data/systems/gradient/DESIGN.md +71 -0
  175. package/dist/designer/data/systems/gradient/components.html +154 -0
  176. package/dist/designer/data/systems/gradient/tokens.css +63 -0
  177. package/dist/designer/data/systems/hashicorp/DESIGN.md +281 -0
  178. package/dist/designer/data/systems/hashicorp/components.html +502 -0
  179. package/dist/designer/data/systems/hashicorp/tokens.css +272 -0
  180. package/dist/designer/data/systems/hud/DESIGN.md +173 -0
  181. package/dist/designer/data/systems/hud/components.html +136 -0
  182. package/dist/designer/data/systems/hud/tokens.css +63 -0
  183. package/dist/designer/data/systems/huggingface/DESIGN.md +149 -0
  184. package/dist/designer/data/systems/huggingface/components.html +346 -0
  185. package/dist/designer/data/systems/huggingface/tokens.css +125 -0
  186. package/dist/designer/data/systems/ibm/DESIGN.md +335 -0
  187. package/dist/designer/data/systems/ibm/components.html +342 -0
  188. package/dist/designer/data/systems/ibm/tokens.css +64 -0
  189. package/dist/designer/data/systems/intercom/DESIGN.md +149 -0
  190. package/dist/designer/data/systems/intercom/components.html +557 -0
  191. package/dist/designer/data/systems/intercom/tokens.css +150 -0
  192. package/dist/designer/data/systems/kami/DESIGN.md +410 -0
  193. package/dist/designer/data/systems/kami/components.html +601 -0
  194. package/dist/designer/data/systems/kami/tokens.css +272 -0
  195. package/dist/designer/data/systems/kraken/DESIGN.md +128 -0
  196. package/dist/designer/data/systems/kraken/components.html +342 -0
  197. package/dist/designer/data/systems/kraken/tokens.css +64 -0
  198. package/dist/designer/data/systems/lamborghini/DESIGN.md +291 -0
  199. package/dist/designer/data/systems/lamborghini/components.html +342 -0
  200. package/dist/designer/data/systems/lamborghini/tokens.css +64 -0
  201. package/dist/designer/data/systems/levels/DESIGN.md +71 -0
  202. package/dist/designer/data/systems/levels/components.html +154 -0
  203. package/dist/designer/data/systems/levels/tokens.css +63 -0
  204. package/dist/designer/data/systems/linear-app/DESIGN.md +370 -0
  205. package/dist/designer/data/systems/linear-app/components.html +370 -0
  206. package/dist/designer/data/systems/linear-app/tokens.css +130 -0
  207. package/dist/designer/data/systems/lingo/DESIGN.md +71 -0
  208. package/dist/designer/data/systems/lingo/components.html +154 -0
  209. package/dist/designer/data/systems/lingo/tokens.css +63 -0
  210. package/dist/designer/data/systems/loom/DESIGN.md +201 -0
  211. package/dist/designer/data/systems/loom/components.html +446 -0
  212. package/dist/designer/data/systems/loom/tokens.css +138 -0
  213. package/dist/designer/data/systems/lovable/DESIGN.md +301 -0
  214. package/dist/designer/data/systems/lovable/components.html +441 -0
  215. package/dist/designer/data/systems/lovable/tokens.css +258 -0
  216. package/dist/designer/data/systems/luxury/DESIGN.md +71 -0
  217. package/dist/designer/data/systems/luxury/components.html +154 -0
  218. package/dist/designer/data/systems/luxury/tokens.css +63 -0
  219. package/dist/designer/data/systems/mastercard/DESIGN.md +368 -0
  220. package/dist/designer/data/systems/mastercard/components.html +342 -0
  221. package/dist/designer/data/systems/mastercard/tokens.css +64 -0
  222. package/dist/designer/data/systems/material/DESIGN.md +71 -0
  223. package/dist/designer/data/systems/material/components.html +154 -0
  224. package/dist/designer/data/systems/material/tokens.css +63 -0
  225. package/dist/designer/data/systems/meta/DESIGN.md +369 -0
  226. package/dist/designer/data/systems/meta/components.html +398 -0
  227. package/dist/designer/data/systems/meta/tokens.css +263 -0
  228. package/dist/designer/data/systems/minimal/DESIGN.md +71 -0
  229. package/dist/designer/data/systems/minimal/components.html +154 -0
  230. package/dist/designer/data/systems/minimal/tokens.css +63 -0
  231. package/dist/designer/data/systems/minimax/DESIGN.md +260 -0
  232. package/dist/designer/data/systems/minimax/components.html +590 -0
  233. package/dist/designer/data/systems/minimax/tokens.css +148 -0
  234. package/dist/designer/data/systems/mintlify/DESIGN.md +329 -0
  235. package/dist/designer/data/systems/mintlify/components.html +737 -0
  236. package/dist/designer/data/systems/mintlify/tokens.css +256 -0
  237. package/dist/designer/data/systems/miro/DESIGN.md +111 -0
  238. package/dist/designer/data/systems/miro/components.html +342 -0
  239. package/dist/designer/data/systems/miro/tokens.css +64 -0
  240. package/dist/designer/data/systems/mission-control/DESIGN.md +474 -0
  241. package/dist/designer/data/systems/mission-control/components.html +136 -0
  242. package/dist/designer/data/systems/mission-control/tokens.css +63 -0
  243. package/dist/designer/data/systems/mistral-ai/DESIGN.md +264 -0
  244. package/dist/designer/data/systems/mistral-ai/components.html +338 -0
  245. package/dist/designer/data/systems/mistral-ai/tokens.css +125 -0
  246. package/dist/designer/data/systems/modern/DESIGN.md +71 -0
  247. package/dist/designer/data/systems/modern/components.html +154 -0
  248. package/dist/designer/data/systems/modern/tokens.css +63 -0
  249. package/dist/designer/data/systems/mongodb/DESIGN.md +269 -0
  250. package/dist/designer/data/systems/mongodb/components.html +462 -0
  251. package/dist/designer/data/systems/mongodb/tokens.css +176 -0
  252. package/dist/designer/data/systems/mono/DESIGN.md +71 -0
  253. package/dist/designer/data/systems/mono/components.html +136 -0
  254. package/dist/designer/data/systems/mono/tokens.css +63 -0
  255. package/dist/designer/data/systems/neobrutalism/DESIGN.md +71 -0
  256. package/dist/designer/data/systems/neobrutalism/components.html +136 -0
  257. package/dist/designer/data/systems/neobrutalism/tokens.css +63 -0
  258. package/dist/designer/data/systems/neon/DESIGN.md +71 -0
  259. package/dist/designer/data/systems/neon/components.html +136 -0
  260. package/dist/designer/data/systems/neon/tokens.css +63 -0
  261. package/dist/designer/data/systems/neumorphism/DESIGN.md +71 -0
  262. package/dist/designer/data/systems/neumorphism/components.html +136 -0
  263. package/dist/designer/data/systems/neumorphism/tokens.css +63 -0
  264. package/dist/designer/data/systems/nike/DESIGN.md +366 -0
  265. package/dist/designer/data/systems/nike/components.html +512 -0
  266. package/dist/designer/data/systems/nike/tokens.css +304 -0
  267. package/dist/designer/data/systems/notion/DESIGN.md +312 -0
  268. package/dist/designer/data/systems/notion/components.html +413 -0
  269. package/dist/designer/data/systems/notion/tokens.css +130 -0
  270. package/dist/designer/data/systems/nvidia/DESIGN.md +296 -0
  271. package/dist/designer/data/systems/nvidia/components.html +414 -0
  272. package/dist/designer/data/systems/nvidia/tokens.css +133 -0
  273. package/dist/designer/data/systems/ollama/DESIGN.md +270 -0
  274. package/dist/designer/data/systems/ollama/components.html +700 -0
  275. package/dist/designer/data/systems/ollama/tokens.css +242 -0
  276. package/dist/designer/data/systems/openai/DESIGN.md +140 -0
  277. package/dist/designer/data/systems/openai/components.html +382 -0
  278. package/dist/designer/data/systems/openai/tokens.css +133 -0
  279. package/dist/designer/data/systems/opencode-ai/DESIGN.md +284 -0
  280. package/dist/designer/data/systems/opencode-ai/components.html +389 -0
  281. package/dist/designer/data/systems/opencode-ai/tokens.css +126 -0
  282. package/dist/designer/data/systems/pacman/DESIGN.md +71 -0
  283. package/dist/designer/data/systems/pacman/components.html +342 -0
  284. package/dist/designer/data/systems/pacman/tokens.css +64 -0
  285. package/dist/designer/data/systems/paper/DESIGN.md +71 -0
  286. package/dist/designer/data/systems/paper/components.html +136 -0
  287. package/dist/designer/data/systems/paper/tokens.css +63 -0
  288. package/dist/designer/data/systems/perplexity/DESIGN.md +286 -0
  289. package/dist/designer/data/systems/perplexity/components.html +455 -0
  290. package/dist/designer/data/systems/perplexity/tokens.css +151 -0
  291. package/dist/designer/data/systems/perspective/DESIGN.md +71 -0
  292. package/dist/designer/data/systems/perspective/components.html +136 -0
  293. package/dist/designer/data/systems/perspective/tokens.css +63 -0
  294. package/dist/designer/data/systems/pinterest/DESIGN.md +233 -0
  295. package/dist/designer/data/systems/pinterest/components.html +865 -0
  296. package/dist/designer/data/systems/pinterest/tokens.css +262 -0
  297. package/dist/designer/data/systems/playstation/DESIGN.md +367 -0
  298. package/dist/designer/data/systems/playstation/components.html +414 -0
  299. package/dist/designer/data/systems/playstation/tokens.css +150 -0
  300. package/dist/designer/data/systems/posthog/DESIGN.md +259 -0
  301. package/dist/designer/data/systems/posthog/components.html +827 -0
  302. package/dist/designer/data/systems/posthog/tokens.css +272 -0
  303. package/dist/designer/data/systems/premium/DESIGN.md +71 -0
  304. package/dist/designer/data/systems/premium/components.html +154 -0
  305. package/dist/designer/data/systems/premium/tokens.css +63 -0
  306. package/dist/designer/data/systems/professional/DESIGN.md +71 -0
  307. package/dist/designer/data/systems/professional/components.html +136 -0
  308. package/dist/designer/data/systems/professional/tokens.css +63 -0
  309. package/dist/designer/data/systems/publication/DESIGN.md +71 -0
  310. package/dist/designer/data/systems/publication/components.html +154 -0
  311. package/dist/designer/data/systems/publication/tokens.css +63 -0
  312. package/dist/designer/data/systems/raycast/DESIGN.md +271 -0
  313. package/dist/designer/data/systems/raycast/components.html +507 -0
  314. package/dist/designer/data/systems/raycast/tokens.css +143 -0
  315. package/dist/designer/data/systems/refined/DESIGN.md +71 -0
  316. package/dist/designer/data/systems/refined/components.html +136 -0
  317. package/dist/designer/data/systems/refined/tokens.css +63 -0
  318. package/dist/designer/data/systems/renault/DESIGN.md +314 -0
  319. package/dist/designer/data/systems/renault/components.html +154 -0
  320. package/dist/designer/data/systems/renault/tokens.css +63 -0
  321. package/dist/designer/data/systems/replicate/DESIGN.md +264 -0
  322. package/dist/designer/data/systems/replicate/components.html +340 -0
  323. package/dist/designer/data/systems/replicate/tokens.css +125 -0
  324. package/dist/designer/data/systems/resend/DESIGN.md +306 -0
  325. package/dist/designer/data/systems/resend/components.html +839 -0
  326. package/dist/designer/data/systems/resend/tokens.css +353 -0
  327. package/dist/designer/data/systems/retro/DESIGN.md +71 -0
  328. package/dist/designer/data/systems/retro/components.html +136 -0
  329. package/dist/designer/data/systems/retro/tokens.css +63 -0
  330. package/dist/designer/data/systems/revolut/DESIGN.md +188 -0
  331. package/dist/designer/data/systems/revolut/components.html +342 -0
  332. package/dist/designer/data/systems/revolut/tokens.css +64 -0
  333. package/dist/designer/data/systems/runwayml/DESIGN.md +247 -0
  334. package/dist/designer/data/systems/runwayml/components.html +638 -0
  335. package/dist/designer/data/systems/runwayml/tokens.css +204 -0
  336. package/dist/designer/data/systems/sanity/DESIGN.md +360 -0
  337. package/dist/designer/data/systems/sanity/components.html +342 -0
  338. package/dist/designer/data/systems/sanity/tokens.css +64 -0
  339. package/dist/designer/data/systems/sentry/DESIGN.md +265 -0
  340. package/dist/designer/data/systems/sentry/components.html +387 -0
  341. package/dist/designer/data/systems/sentry/tokens.css +219 -0
  342. package/dist/designer/data/systems/shadcn/DESIGN.md +71 -0
  343. package/dist/designer/data/systems/shadcn/components.html +732 -0
  344. package/dist/designer/data/systems/shadcn/tokens.css +255 -0
  345. package/dist/designer/data/systems/shopify/DESIGN.md +353 -0
  346. package/dist/designer/data/systems/shopify/components.html +342 -0
  347. package/dist/designer/data/systems/shopify/tokens.css +141 -0
  348. package/dist/designer/data/systems/simple/DESIGN.md +71 -0
  349. package/dist/designer/data/systems/simple/components.html +136 -0
  350. package/dist/designer/data/systems/simple/tokens.css +63 -0
  351. package/dist/designer/data/systems/skeumorphism/DESIGN.md +71 -0
  352. package/dist/designer/data/systems/skeumorphism/components.html +136 -0
  353. package/dist/designer/data/systems/skeumorphism/tokens.css +63 -0
  354. package/dist/designer/data/systems/slack/DESIGN.md +363 -0
  355. package/dist/designer/data/systems/slack/components.html +387 -0
  356. package/dist/designer/data/systems/slack/tokens.css +127 -0
  357. package/dist/designer/data/systems/sleek/DESIGN.md +71 -0
  358. package/dist/designer/data/systems/sleek/components.html +136 -0
  359. package/dist/designer/data/systems/sleek/tokens.css +63 -0
  360. package/dist/designer/data/systems/spacex/DESIGN.md +197 -0
  361. package/dist/designer/data/systems/spacex/components.html +496 -0
  362. package/dist/designer/data/systems/spacex/tokens.css +154 -0
  363. package/dist/designer/data/systems/spacious/DESIGN.md +71 -0
  364. package/dist/designer/data/systems/spacious/components.html +136 -0
  365. package/dist/designer/data/systems/spacious/tokens.css +63 -0
  366. package/dist/designer/data/systems/spotify/DESIGN.md +249 -0
  367. package/dist/designer/data/systems/spotify/components.html +365 -0
  368. package/dist/designer/data/systems/spotify/tokens.css +127 -0
  369. package/dist/designer/data/systems/starbucks/DESIGN.md +583 -0
  370. package/dist/designer/data/systems/starbucks/components.html +493 -0
  371. package/dist/designer/data/systems/starbucks/tokens.css +182 -0
  372. package/dist/designer/data/systems/storytelling/DESIGN.md +71 -0
  373. package/dist/designer/data/systems/storytelling/components.html +136 -0
  374. package/dist/designer/data/systems/storytelling/tokens.css +63 -0
  375. package/dist/designer/data/systems/stripe/DESIGN.md +325 -0
  376. package/dist/designer/data/systems/stripe/components.html +1018 -0
  377. package/dist/designer/data/systems/stripe/tokens.css +295 -0
  378. package/dist/designer/data/systems/supabase/DESIGN.md +258 -0
  379. package/dist/designer/data/systems/supabase/components.html +741 -0
  380. package/dist/designer/data/systems/supabase/tokens.css +294 -0
  381. package/dist/designer/data/systems/superhuman/DESIGN.md +255 -0
  382. package/dist/designer/data/systems/superhuman/components.html +537 -0
  383. package/dist/designer/data/systems/superhuman/tokens.css +160 -0
  384. package/dist/designer/data/systems/tesla/DESIGN.md +289 -0
  385. package/dist/designer/data/systems/tesla/components.html +724 -0
  386. package/dist/designer/data/systems/tesla/tokens.css +285 -0
  387. package/dist/designer/data/systems/tetris/DESIGN.md +71 -0
  388. package/dist/designer/data/systems/tetris/components.html +342 -0
  389. package/dist/designer/data/systems/tetris/tokens.css +64 -0
  390. package/dist/designer/data/systems/theverge/DESIGN.md +342 -0
  391. package/dist/designer/data/systems/theverge/components.html +342 -0
  392. package/dist/designer/data/systems/theverge/tokens.css +64 -0
  393. package/dist/designer/data/systems/together-ai/DESIGN.md +266 -0
  394. package/dist/designer/data/systems/together-ai/components.html +422 -0
  395. package/dist/designer/data/systems/together-ai/tokens.css +127 -0
  396. package/dist/designer/data/systems/totality-festival/DESIGN.md +206 -0
  397. package/dist/designer/data/systems/totality-festival/components.html +136 -0
  398. package/dist/designer/data/systems/totality-festival/tokens.css +63 -0
  399. package/dist/designer/data/systems/trading-terminal/DESIGN.md +178 -0
  400. package/dist/designer/data/systems/trading-terminal/components.html +154 -0
  401. package/dist/designer/data/systems/trading-terminal/tokens.css +63 -0
  402. package/dist/designer/data/systems/uber/DESIGN.md +298 -0
  403. package/dist/designer/data/systems/uber/components.html +347 -0
  404. package/dist/designer/data/systems/uber/tokens.css +131 -0
  405. package/dist/designer/data/systems/urdu/DESIGN.md +1002 -0
  406. package/dist/designer/data/systems/urdu/components.html +136 -0
  407. package/dist/designer/data/systems/urdu/tokens.css +63 -0
  408. package/dist/designer/data/systems/vercel/DESIGN.md +313 -0
  409. package/dist/designer/data/systems/vercel/components.html +839 -0
  410. package/dist/designer/data/systems/vercel/tokens.css +270 -0
  411. package/dist/designer/data/systems/vibrant/DESIGN.md +71 -0
  412. package/dist/designer/data/systems/vibrant/components.html +136 -0
  413. package/dist/designer/data/systems/vibrant/tokens.css +63 -0
  414. package/dist/designer/data/systems/vintage/DESIGN.md +71 -0
  415. package/dist/designer/data/systems/vintage/components.html +136 -0
  416. package/dist/designer/data/systems/vintage/tokens.css +63 -0
  417. package/dist/designer/data/systems/vodafone/DESIGN.md +426 -0
  418. package/dist/designer/data/systems/vodafone/components.html +342 -0
  419. package/dist/designer/data/systems/vodafone/tokens.css +64 -0
  420. package/dist/designer/data/systems/voltagent/DESIGN.md +326 -0
  421. package/dist/designer/data/systems/voltagent/components.html +154 -0
  422. package/dist/designer/data/systems/voltagent/tokens.css +63 -0
  423. package/dist/designer/data/systems/warm-editorial/DESIGN.md +65 -0
  424. package/dist/designer/data/systems/warm-editorial/components.html +136 -0
  425. package/dist/designer/data/systems/warm-editorial/tokens.css +63 -0
  426. package/dist/designer/data/systems/warp/DESIGN.md +256 -0
  427. package/dist/designer/data/systems/warp/components.html +411 -0
  428. package/dist/designer/data/systems/warp/tokens.css +156 -0
  429. package/dist/designer/data/systems/webex/DESIGN.md +207 -0
  430. package/dist/designer/data/systems/webex/components.html +342 -0
  431. package/dist/designer/data/systems/webex/tokens.css +64 -0
  432. package/dist/designer/data/systems/webflow/DESIGN.md +95 -0
  433. package/dist/designer/data/systems/webflow/components.html +413 -0
  434. package/dist/designer/data/systems/webflow/tokens.css +191 -0
  435. package/dist/designer/data/systems/wechat/DESIGN.md +302 -0
  436. package/dist/designer/data/systems/wechat/components.html +507 -0
  437. package/dist/designer/data/systems/wechat/tokens.css +176 -0
  438. package/dist/designer/data/systems/wired/DESIGN.md +281 -0
  439. package/dist/designer/data/systems/wired/components.html +342 -0
  440. package/dist/designer/data/systems/wired/tokens.css +64 -0
  441. package/dist/designer/data/systems/wise/DESIGN.md +176 -0
  442. package/dist/designer/data/systems/wise/components.html +365 -0
  443. package/dist/designer/data/systems/wise/tokens.css +141 -0
  444. package/dist/designer/data/systems/x-ai/DESIGN.md +260 -0
  445. package/dist/designer/data/systems/x-ai/components.html +460 -0
  446. package/dist/designer/data/systems/x-ai/tokens.css +268 -0
  447. package/dist/designer/data/systems/xiaohongshu/DESIGN.md +402 -0
  448. package/dist/designer/data/systems/xiaohongshu/components.html +865 -0
  449. package/dist/designer/data/systems/xiaohongshu/tokens.css +193 -0
  450. package/dist/designer/data/systems/zapier/DESIGN.md +331 -0
  451. package/dist/designer/data/systems/zapier/components.html +342 -0
  452. package/dist/designer/data/systems/zapier/tokens.css +64 -0
  453. package/dist/designer/guidelines.js +176 -0
  454. package/dist/designer/index.js +236 -0
  455. package/dist/designer/skills.js +1675 -0
  456. package/dist/designer/systems.js +216 -0
  457. package/dist/server/pi-bridge.js +155 -5
  458. package/dist/server/session-stream.js +45 -1
  459. package/package.json +1 -1
@@ -25,8 +25,8 @@ import * as fs from "node:fs";
25
25
  import * as os from "node:os";
26
26
  import * as path from "node:path";
27
27
  import { StringEnum } from "@mariozechner/pi-ai";
28
- import { getMarkdownTheme, withFileMutationQueue, } from "@mariozechner/pi-coding-agent";
29
- import { Container, Markdown, Spacer, Text } from "@mariozechner/pi-tui";
28
+ import { withFileMutationQueue, } from "@mariozechner/pi-coding-agent";
29
+ import { Text } from "@mariozechner/pi-tui";
30
30
  import { Type } from "typebox";
31
31
  import { discoverAgents } from "./agents.js";
32
32
  // ---------------------------------------------------------------------------
@@ -34,7 +34,6 @@ import { discoverAgents } from "./agents.js";
34
34
  // ---------------------------------------------------------------------------
35
35
  const MAX_PARALLEL_TASKS = 8;
36
36
  const MAX_CONCURRENCY = 4;
37
- const COLLAPSED_ITEM_COUNT = 10;
38
37
  // ---------------------------------------------------------------------------
39
38
  // Helpers — formatting
40
39
  // ---------------------------------------------------------------------------
@@ -68,69 +67,6 @@ function formatUsageStats(usage, model) {
68
67
  parts.push(model);
69
68
  return parts.join(" ");
70
69
  }
71
- function formatToolCall(toolName, args, themeFg) {
72
- const shortenPath = (p) => {
73
- const home = os.homedir();
74
- return p.startsWith(home) ? `~${p.slice(home.length)}` : p;
75
- };
76
- switch (toolName) {
77
- case "bash": {
78
- const command = args.command || "...";
79
- const preview = command.length > 60 ? `${command.slice(0, 60)}...` : command;
80
- return themeFg("muted", "$ ") + themeFg("toolOutput", preview);
81
- }
82
- case "read": {
83
- const rawPath = (args.file_path || args.path || "...");
84
- const filePath = shortenPath(rawPath);
85
- const offset = args.offset;
86
- const limit = args.limit;
87
- let text = themeFg("accent", filePath);
88
- if (offset !== undefined || limit !== undefined) {
89
- const startLine = offset ?? 1;
90
- const endLine = limit !== undefined ? startLine + limit - 1 : "";
91
- text += themeFg("warning", `:${startLine}${endLine ? `-${endLine}` : ""}`);
92
- }
93
- return themeFg("muted", "read ") + text;
94
- }
95
- case "write": {
96
- const rawPath = (args.file_path || args.path || "...");
97
- const filePath = shortenPath(rawPath);
98
- const content = (args.content || "");
99
- const lines = content.split("\n").length;
100
- let text = themeFg("muted", "write ") + themeFg("accent", filePath);
101
- if (lines > 1)
102
- text += themeFg("dim", ` (${lines} lines)`);
103
- return text;
104
- }
105
- case "edit": {
106
- const rawPath = (args.file_path || args.path || "...");
107
- return themeFg("muted", "edit ") + themeFg("accent", shortenPath(rawPath));
108
- }
109
- case "ls": {
110
- const rawPath = (args.path || ".");
111
- return themeFg("muted", "ls ") + themeFg("accent", shortenPath(rawPath));
112
- }
113
- case "find": {
114
- const pattern = (args.pattern || "*");
115
- const rawPath = (args.path || ".");
116
- return (themeFg("muted", "find ") +
117
- themeFg("accent", pattern) +
118
- themeFg("dim", ` in ${shortenPath(rawPath)}`));
119
- }
120
- case "grep": {
121
- const pattern = (args.pattern || "");
122
- const rawPath = (args.path || ".");
123
- return (themeFg("muted", "grep ") +
124
- themeFg("accent", `/${pattern}/`) +
125
- themeFg("dim", ` in ${shortenPath(rawPath)}`));
126
- }
127
- default: {
128
- const argsStr = JSON.stringify(args);
129
- const preview = argsStr.length > 50 ? `${argsStr.slice(0, 50)}...` : argsStr;
130
- return themeFg("accent", toolName) + themeFg("dim", ` ${preview}`);
131
- }
132
- }
133
- }
134
70
  // ---------------------------------------------------------------------------
135
71
  // Helpers — message extraction
136
72
  // ---------------------------------------------------------------------------
@@ -146,20 +82,6 @@ function getFinalOutput(messages) {
146
82
  }
147
83
  return "";
148
84
  }
149
- function getDisplayItems(messages) {
150
- const items = [];
151
- for (const msg of messages) {
152
- if (msg.role === "assistant") {
153
- for (const part of msg.content) {
154
- if (part.type === "text")
155
- items.push({ type: "text", text: part.text });
156
- else if (part.type === "toolCall")
157
- items.push({ type: "toolCall", name: part.name, args: part.arguments });
158
- }
159
- }
160
- }
161
- return items;
162
- }
163
85
  // ---------------------------------------------------------------------------
164
86
  // Helpers — concurrency, temp files, binary detection
165
87
  // ---------------------------------------------------------------------------
@@ -471,7 +393,9 @@ export default function subagentExtension(pi) {
471
393
  details: makeDetails("single")([]),
472
394
  };
473
395
  }
474
- // Security: if project-local agents are enabled, confirm with user
396
+ // Security: if project-local agents are enabled, confirm with user.
397
+ // In headless mode (no TUI), project-local agents are silently allowed —
398
+ // the caller is already trusted (it's the coding agent itself).
475
399
  if ((agentScope === "project" || agentScope === "both") &&
476
400
  confirmProjectAgents &&
477
401
  ctx.hasUI) {
@@ -661,148 +585,72 @@ export default function subagentExtension(pi) {
661
585
  details: makeDetails("single")([]),
662
586
  };
663
587
  },
664
- // ── Rendering ─────────────────────────────────────────────────
665
- renderCall(args, theme, _context) {
588
+ // ── Rendering (headless-compatible: plain text strings, no TUI imports) ──
589
+ renderCall(args, _theme, _context) {
666
590
  const scope = args.agentScope ?? "user";
667
591
  if (args.chain && args.chain.length > 0) {
668
- let text = theme.fg("toolTitle", theme.bold("subagent ")) +
669
- theme.fg("accent", `chain (${args.chain.length} steps)`) +
670
- theme.fg("muted", ` [${scope}]`);
592
+ let text = `subagent chain (${args.chain.length} steps) [${scope}]`;
671
593
  for (let i = 0; i < Math.min(args.chain.length, 3); i++) {
672
594
  const step = args.chain[i];
673
595
  const cleanTask = step.task.replace(/\{previous\}/g, "").trim();
674
596
  const preview = cleanTask.length > 40 ? `${cleanTask.slice(0, 40)}...` : cleanTask;
675
- text +=
676
- "\n " +
677
- theme.fg("muted", `${i + 1}.`) +
678
- " " +
679
- theme.fg("accent", step.agent) +
680
- theme.fg("dim", ` ${preview}`);
597
+ text += `\n ${i + 1}. ${step.agent} ${preview}`;
681
598
  }
682
599
  if (args.chain.length > 3)
683
- text += `\n ${theme.fg("muted", `... +${args.chain.length - 3} more`)}`;
684
- return new Text(text, 0, 0);
600
+ text += `\n ... +${args.chain.length - 3} more`;
601
+ return new Text(text);
685
602
  }
686
603
  if (args.tasks && args.tasks.length > 0) {
687
- let text = theme.fg("toolTitle", theme.bold("subagent ")) +
688
- theme.fg("accent", `parallel (${args.tasks.length} tasks)`) +
689
- theme.fg("muted", ` [${scope}]`);
604
+ let text = `subagent parallel (${args.tasks.length} tasks) [${scope}]`;
690
605
  for (const t of args.tasks.slice(0, 3)) {
691
606
  const preview = t.task.length > 40 ? `${t.task.slice(0, 40)}...` : t.task;
692
- text += `\n ${theme.fg("accent", t.agent)}${theme.fg("dim", ` ${preview}`)}`;
607
+ text += `\n ${t.agent} ${preview}`;
693
608
  }
694
609
  if (args.tasks.length > 3)
695
- text += `\n ${theme.fg("muted", `... +${args.tasks.length - 3} more`)}`;
696
- return new Text(text, 0, 0);
610
+ text += `\n ... +${args.tasks.length - 3} more`;
611
+ return new Text(text);
697
612
  }
698
613
  const agentName = args.agent || "...";
699
614
  const preview = args.task
700
- ? args.task.length > 60
701
- ? `${args.task.slice(0, 60)}...`
702
- : args.task
615
+ ? args.task.length > 60 ? `${args.task.slice(0, 60)}...` : args.task
703
616
  : "...";
704
- let text = theme.fg("toolTitle", theme.bold("subagent ")) +
705
- theme.fg("accent", agentName) +
706
- theme.fg("muted", ` [${scope}]`);
707
- text += `\n ${theme.fg("dim", preview)}`;
708
- return new Text(text, 0, 0);
617
+ return new Text(`subagent ${agentName} [${scope}]\n ${preview}`);
709
618
  },
710
- renderResult(result, { expanded }, theme, _context) {
619
+ renderResult(result, _opts, _theme, _context) {
711
620
  const details = result.details;
712
621
  if (!details || details.results.length === 0) {
713
622
  const text = result.content[0];
714
- return new Text(text?.type === "text" ? text.text : "(no output)", 0, 0);
623
+ return new Text(text?.type === "text" ? text.text : "(no output)");
715
624
  }
716
- const mdTheme = getMarkdownTheme();
717
- const renderDisplayItems = (items, limit) => {
718
- const toShow = limit ? items.slice(-limit) : items;
719
- const skipped = limit && items.length > limit ? items.length - limit : 0;
720
- let text = "";
721
- if (skipped > 0)
722
- text += theme.fg("muted", `... ${skipped} earlier items\n`);
723
- for (const item of toShow) {
724
- if (item.type === "text") {
725
- const preview = expanded
726
- ? item.text
727
- : item.text.split("\n").slice(0, 3).join("\n");
728
- text += `${theme.fg("toolOutput", preview)}\n`;
729
- }
730
- else {
731
- text += `${theme.fg("muted", "→ ") + formatToolCall(item.name, item.args, theme.fg.bind(theme))}\n`;
732
- }
733
- }
734
- return text.trimEnd();
735
- };
625
+ const lines = [];
736
626
  if (details.mode === "single" && details.results.length === 1) {
737
627
  const r = details.results[0];
738
- const isError = r.exitCode !== 0 ||
739
- r.stopReason === "error" ||
740
- r.stopReason === "aborted";
741
- const icon = isError
742
- ? theme.fg("error", "✗")
743
- : theme.fg("success", "✓");
744
- const displayItems = getDisplayItems(r.messages);
628
+ const isError = r.exitCode !== 0 || r.stopReason === "error" || r.stopReason === "aborted";
629
+ const icon = isError ? "" : "✓";
745
630
  const finalOutput = getFinalOutput(r.messages);
746
- if (expanded) {
747
- const container = new Container();
748
- let header = `${icon} ${theme.fg("toolTitle", theme.bold(r.agent))}${theme.fg("muted", ` (${r.agentSource})`)}`;
749
- if (isError && r.stopReason)
750
- header += ` ${theme.fg("error", `[${r.stopReason}]`)}`;
751
- container.addChild(new Text(header, 0, 0));
752
- if (isError && r.errorMessage)
753
- container.addChild(new Text(theme.fg("error", `Error: ${r.errorMessage}`), 0, 0));
754
- container.addChild(new Spacer(1));
755
- container.addChild(new Text(theme.fg("muted", "─── Task ───"), 0, 0));
756
- container.addChild(new Text(theme.fg("dim", r.task), 0, 0));
757
- container.addChild(new Spacer(1));
758
- container.addChild(new Text(theme.fg("muted", "─── Output ───"), 0, 0));
759
- if (displayItems.length === 0 && !finalOutput) {
760
- container.addChild(new Text(theme.fg("muted", "(no output)"), 0, 0));
761
- }
762
- else {
763
- for (const item of displayItems) {
764
- if (item.type === "toolCall")
765
- container.addChild(new Text(theme.fg("muted", "→ ") +
766
- formatToolCall(item.name, item.args, theme.fg.bind(theme)), 0, 0));
767
- }
768
- if (finalOutput) {
769
- container.addChild(new Spacer(1));
770
- container.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));
771
- }
772
- }
773
- const usageStr = formatUsageStats(r.usage, r.model);
774
- if (usageStr) {
775
- container.addChild(new Spacer(1));
776
- container.addChild(new Text(theme.fg("dim", usageStr), 0, 0));
777
- }
778
- return container;
779
- }
780
- let text = `${icon} ${theme.fg("toolTitle", theme.bold(r.agent))}${theme.fg("muted", ` (${r.agentSource})`)}`;
781
- if (isError && r.stopReason)
782
- text += ` ${theme.fg("error", `[${r.stopReason}]`)}`;
631
+ lines.push(`${icon} ${r.agent} (${r.agentSource})${isError && r.stopReason ? ` [${r.stopReason}]` : ""}`);
783
632
  if (isError && r.errorMessage)
784
- text += `\n${theme.fg("error", `Error: ${r.errorMessage}`)}`;
785
- else if (displayItems.length === 0)
786
- text += `\n${theme.fg("muted", "(no output)")}`;
633
+ lines.push(`Error: ${r.errorMessage}`);
634
+ lines.push("");
635
+ lines.push("─── Task ───");
636
+ lines.push(r.task);
637
+ lines.push("");
638
+ lines.push("─── Output ───");
639
+ if (!finalOutput) {
640
+ lines.push("(no output)");
641
+ }
787
642
  else {
788
- text += `\n${renderDisplayItems(displayItems, COLLAPSED_ITEM_COUNT)}`;
789
- if (displayItems.length > COLLAPSED_ITEM_COUNT)
790
- text += `\n${theme.fg("muted", "(Ctrl+O to expand)")}`;
643
+ lines.push(finalOutput.trim());
791
644
  }
792
645
  const usageStr = formatUsageStats(r.usage, r.model);
793
- if (usageStr)
794
- text += `\n${theme.fg("dim", usageStr)}`;
795
- return new Text(text, 0, 0);
646
+ if (usageStr) {
647
+ lines.push("");
648
+ lines.push(usageStr);
649
+ }
650
+ return new Text(lines.join("\n"));
796
651
  }
797
652
  const aggregateUsage = (results) => {
798
- const total = {
799
- input: 0,
800
- output: 0,
801
- cacheRead: 0,
802
- cacheWrite: 0,
803
- cost: 0,
804
- turns: 0,
805
- };
653
+ const total = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };
806
654
  for (const r of results) {
807
655
  total.input += r.usage.input;
808
656
  total.output += r.usage.output;
@@ -815,137 +663,64 @@ export default function subagentExtension(pi) {
815
663
  };
816
664
  if (details.mode === "chain") {
817
665
  const successCount = details.results.filter((r) => r.exitCode === 0).length;
818
- const icon = successCount === details.results.length
819
- ? theme.fg("success", "✓")
820
- : theme.fg("error", "✗");
821
- if (expanded) {
822
- const container = new Container();
823
- container.addChild(new Text(icon +
824
- " " +
825
- theme.fg("toolTitle", theme.bold("chain ")) +
826
- theme.fg("accent", `${successCount}/${details.results.length} steps`), 0, 0));
827
- for (const r of details.results) {
828
- const rIcon = r.exitCode === 0
829
- ? theme.fg("success", "✓")
830
- : theme.fg("error", "✗");
831
- const displayItems = getDisplayItems(r.messages);
832
- const finalOutput = getFinalOutput(r.messages);
833
- container.addChild(new Spacer(1));
834
- container.addChild(new Text(`${theme.fg("muted", `─── Step ${r.step}: `) + theme.fg("accent", r.agent)} ${rIcon}`, 0, 0));
835
- container.addChild(new Text(theme.fg("muted", "Task: ") + theme.fg("dim", r.task), 0, 0));
836
- for (const item of displayItems) {
837
- if (item.type === "toolCall") {
838
- container.addChild(new Text(theme.fg("muted", "→ ") +
839
- formatToolCall(item.name, item.args, theme.fg.bind(theme)), 0, 0));
840
- }
841
- }
842
- if (finalOutput) {
843
- container.addChild(new Spacer(1));
844
- container.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));
845
- }
846
- const stepUsage = formatUsageStats(r.usage, r.model);
847
- if (stepUsage)
848
- container.addChild(new Text(theme.fg("dim", stepUsage), 0, 0));
849
- }
850
- const usageStr = formatUsageStats(aggregateUsage(details.results));
851
- if (usageStr) {
852
- container.addChild(new Spacer(1));
853
- container.addChild(new Text(theme.fg("dim", `Total: ${usageStr}`), 0, 0));
854
- }
855
- return container;
856
- }
857
- let text = icon +
858
- " " +
859
- theme.fg("toolTitle", theme.bold("chain ")) +
860
- theme.fg("accent", `${successCount}/${details.results.length} steps`);
666
+ const icon = successCount === details.results.length ? "✓" : "✗";
667
+ lines.push(`${icon} chain ${successCount}/${details.results.length} steps`);
861
668
  for (const r of details.results) {
862
- const rIcon = r.exitCode === 0
863
- ? theme.fg("success", "✓")
864
- : theme.fg("error", "✗");
865
- const displayItems = getDisplayItems(r.messages);
866
- text += `\n\n${theme.fg("muted", `─── Step ${r.step}: `)}${theme.fg("accent", r.agent)} ${rIcon}`;
867
- if (displayItems.length === 0)
868
- text += `\n${theme.fg("muted", "(no output)")}`;
669
+ const rIcon = r.exitCode === 0 ? "✓" : "✗";
670
+ const finalOutput = getFinalOutput(r.messages);
671
+ lines.push("");
672
+ lines.push(`─── Step ${r.step}: ${r.agent} ${rIcon}`);
673
+ lines.push(`Task: ${r.task}`);
674
+ if (finalOutput)
675
+ lines.push(finalOutput.trim());
869
676
  else
870
- text += `\n${renderDisplayItems(displayItems, 5)}`;
677
+ lines.push("(no output)");
678
+ const stepUsage = formatUsageStats(r.usage, r.model);
679
+ if (stepUsage)
680
+ lines.push(stepUsage);
871
681
  }
872
682
  const usageStr = formatUsageStats(aggregateUsage(details.results));
873
- if (usageStr)
874
- text += `\n\n${theme.fg("dim", `Total: ${usageStr}`)}`;
875
- text += `\n${theme.fg("muted", "(Ctrl+O to expand)")}`;
876
- return new Text(text, 0, 0);
683
+ if (usageStr) {
684
+ lines.push("");
685
+ lines.push(`Total: ${usageStr}`);
686
+ }
687
+ return new Text(lines.join("\n"));
877
688
  }
878
689
  if (details.mode === "parallel") {
879
690
  const running = details.results.filter((r) => r.exitCode === -1).length;
880
691
  const successCount = details.results.filter((r) => r.exitCode === 0).length;
881
692
  const failCount = details.results.filter((r) => r.exitCode > 0).length;
882
693
  const isRunning = running > 0;
883
- const icon = isRunning
884
- ? theme.fg("warning", "⏳")
885
- : failCount > 0
886
- ? theme.fg("warning", "◐")
887
- : theme.fg("success", "✓");
694
+ const icon = isRunning ? "⏳" : failCount > 0 ? "◐" : "✓";
888
695
  const status = isRunning
889
696
  ? `${successCount + failCount}/${details.results.length} done, ${running} running`
890
697
  : `${successCount}/${details.results.length} tasks`;
891
- if (expanded && !isRunning) {
892
- const container = new Container();
893
- container.addChild(new Text(`${icon} ${theme.fg("toolTitle", theme.bold("parallel "))}${theme.fg("accent", status)}`, 0, 0));
894
- for (const r of details.results) {
895
- const rIcon = r.exitCode === 0
896
- ? theme.fg("success", "✓")
897
- : theme.fg("error", "✗");
898
- const displayItems = getDisplayItems(r.messages);
899
- const finalOutput = getFinalOutput(r.messages);
900
- container.addChild(new Spacer(1));
901
- container.addChild(new Text(`${theme.fg("muted", "─── ") + theme.fg("accent", r.agent)} ${rIcon}`, 0, 0));
902
- container.addChild(new Text(theme.fg("muted", "Task: ") + theme.fg("dim", r.task), 0, 0));
903
- for (const item of displayItems) {
904
- if (item.type === "toolCall") {
905
- container.addChild(new Text(theme.fg("muted", "→ ") +
906
- formatToolCall(item.name, item.args, theme.fg.bind(theme)), 0, 0));
907
- }
908
- }
909
- if (finalOutput) {
910
- container.addChild(new Spacer(1));
911
- container.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));
912
- }
913
- const taskUsage = formatUsageStats(r.usage, r.model);
914
- if (taskUsage)
915
- container.addChild(new Text(theme.fg("dim", taskUsage), 0, 0));
916
- }
917
- const usageStr = formatUsageStats(aggregateUsage(details.results));
918
- if (usageStr) {
919
- container.addChild(new Spacer(1));
920
- container.addChild(new Text(theme.fg("dim", `Total: ${usageStr}`), 0, 0));
921
- }
922
- return container;
923
- }
924
- let text = `${icon} ${theme.fg("toolTitle", theme.bold("parallel "))}${theme.fg("accent", status)}`;
698
+ lines.push(`${icon} parallel ${status}`);
925
699
  for (const r of details.results) {
926
- const rIcon = r.exitCode === -1
927
- ? theme.fg("warning", "⏳")
928
- : r.exitCode === 0
929
- ? theme.fg("success", "✓")
930
- : theme.fg("error", "✗");
931
- const displayItems = getDisplayItems(r.messages);
932
- text += `\n\n${theme.fg("muted", "─── ")}${theme.fg("accent", r.agent)} ${rIcon}`;
933
- if (displayItems.length === 0)
934
- text += `\n${theme.fg("muted", r.exitCode === -1 ? "(running...)" : "(no output)")}`;
700
+ const rIcon = r.exitCode === -1 ? "⏳" : r.exitCode === 0 ? "✓" : "✗";
701
+ const finalOutput = getFinalOutput(r.messages);
702
+ lines.push("");
703
+ lines.push(`─── ${r.agent} ${rIcon}`);
704
+ lines.push(`Task: ${r.task}`);
705
+ if (finalOutput)
706
+ lines.push(finalOutput.trim());
935
707
  else
936
- text += `\n${renderDisplayItems(displayItems, 5)}`;
708
+ lines.push(r.exitCode === -1 ? "(running...)" : "(no output)");
709
+ const taskUsage = formatUsageStats(r.usage, r.model);
710
+ if (taskUsage)
711
+ lines.push(taskUsage);
937
712
  }
938
713
  if (!isRunning) {
939
714
  const usageStr = formatUsageStats(aggregateUsage(details.results));
940
- if (usageStr)
941
- text += `\n\n${theme.fg("dim", `Total: ${usageStr}`)}`;
715
+ if (usageStr) {
716
+ lines.push("");
717
+ lines.push(`Total: ${usageStr}`);
718
+ }
942
719
  }
943
- if (!expanded)
944
- text += `\n${theme.fg("muted", "(Ctrl+O to expand)")}`;
945
- return new Text(text, 0, 0);
720
+ return new Text(lines.join("\n"));
946
721
  }
947
722
  const text = result.content[0];
948
- return new Text(text?.type === "text" ? text.text : "(no output)", 0, 0);
723
+ return new Text(text?.type === "text" ? text.text : "(no output)");
949
724
  },
950
725
  });
951
726
  }
package/dist/cli.js CHANGED
@@ -112,6 +112,10 @@ function resolveOpenRouterAttributionPath() {
112
112
  function resolveAgentExtensionPath() {
113
113
  return resolveExtensionEntry("agent", "index");
114
114
  }
115
+ /** Absolute path to the bundled designer extension. */
116
+ function resolveDesignerExtensionPath() {
117
+ return resolveExtensionEntry("designer", "index");
118
+ }
115
119
  // ---- Branded helpers ---------------------------------------------------------
116
120
  function printVersion() {
117
121
  process.stdout.write(`spectral ${VERSION} — ${TAGLINE}\n`);
@@ -290,12 +294,19 @@ async function main() {
290
294
  process.stderr.write(`spectral: bundled agent extension not found at ${agentExtPath}. This is a packaging bug.\n`);
291
295
  process.exit(1);
292
296
  }
297
+ // Bundled designer extension for design tasks (prototypes, slide decks, mobile apps, etc.)
298
+ const designerExtPath = resolveDesignerExtensionPath();
299
+ if (!existsSync(designerExtPath)) {
300
+ process.stderr.write(`spectral: bundled designer extension not found at ${designerExtPath}. This is a packaging bug.\n`);
301
+ process.exit(1);
302
+ }
293
303
  const extFlags = [
294
304
  "--extension", aexolExtPath,
295
305
  "--extension", mcpExtPath,
296
306
  "--extension", obsMemPath,
297
307
  "--extension", openrouterAttrPath,
298
308
  "--extension", agentExtPath,
309
+ "--extension", designerExtPath,
299
310
  ];
300
311
  const finalArgs = [...extFlags, ...args];
301
312
  delegateToPi(finalArgs);
@@ -0,0 +1,71 @@
1
+ # Design System Inspired by Agentic
2
+
3
+ > Category: Themed & Unique
4
+ > Conversational AI-first interface with minimal controls, clear outcomes, and delegated task flows for agentic workflows.
5
+
6
+ ## 1. Visual Theme & Atmosphere
7
+
8
+ Conversational AI-first interface with minimal controls, clear outcomes, and delegated task flows for agentic workflows.
9
+
10
+ - **Visual style:** modern, bold
11
+ - **Color stance:** surface/subtle layers
12
+ - **Design intent:** Keep outputs recognizable to this style family while preserving usability and readability.
13
+
14
+ ## 2. Color
15
+
16
+ - **Primary:** `#FF5701` — Token from style foundations.
17
+ - **Secondary:** `#F6F6F1` — Token from style foundations.
18
+ - **Success:** `#16A34A` — Token from style foundations.
19
+ - **Warning:** `#D97706` — Token from style foundations.
20
+ - **Danger:** `#DC2626` — Token from style foundations.
21
+ - **Surface:** `#FFFFFF` — Token from style foundations.
22
+ - **Text:** `#111827` — Token from style foundations.
23
+ - **Neutral:** `#FFFFFF` — Derived from the surface token for official format compatibility.
24
+
25
+ - Favor Primary (#FF5701) for CTA emphasis.
26
+ - Use Surface (#FFFFFF) for large backgrounds and cards.
27
+ - Keep body copy on Text (#111827) for legibility.
28
+
29
+ ## 3. Typography
30
+
31
+ - **Scale:** 14/16/18/24/32/40
32
+ - **Families:** primary=Playfair Display, display=Playfair Display, mono=JetBrains Mono
33
+ - **Weights:** 100, 200, 300, 400, 500, 600, 700, 800, 900
34
+ - Headings should carry the style personality; body text should optimize scanability and contrast.
35
+
36
+ ## 4. Spacing & Grid
37
+
38
+ - **Spacing scale:** 8pt baseline grid
39
+ - Keep vertical rhythm consistent across sections and components.
40
+ - Align columns and modules to a predictable grid; avoid ad-hoc offsets.
41
+
42
+ ## 5. Layout & Composition
43
+
44
+ - Prefer clear content blocks with consistent internal padding.
45
+ - Keep hierarchy obvious: headline → support text → primary action.
46
+ - Use whitespace to separate concerns before adding borders or shadows.
47
+
48
+ ## 6. Components
49
+
50
+ - Buttons: primary action uses `#FF5701`; secondary actions stay neutral.
51
+ - Inputs: strong focus-visible states, clear labels, and predictable error messaging.
52
+ - Cards/sections: use consistent radii, spacing, and elevation strategy across the page.
53
+
54
+ ## 7. Motion & Interaction
55
+
56
+ - Use subtle transitions that emphasize Primary (#FF5701) as the interaction signal.
57
+ - Default to short, purposeful transitions (150–250ms) with stable easing.
58
+ - Ensure hover, focus-visible, active, disabled, and loading states are explicit.
59
+
60
+ ## 8. Voice & Brand
61
+
62
+ - Tone should reflect the visual style: concise, confident, and product-specific.
63
+ - Keep microcopy action-oriented and avoid generic filler language.
64
+ - Preserve the style identity in headlines while keeping UI labels literal and clear.
65
+
66
+ ## 9. Anti-patterns
67
+
68
+ - Do not introduce off-palette colors when an existing token can solve the problem.
69
+ - Do not flatten hierarchy by using the same type size/weight for all text.
70
+ - Do not add decorative effects that reduce readability or accessibility.
71
+ - Do not mix unrelated visual metaphors in the same interface.