@pi-harness/pi-harness 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (913) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +31 -7
  3. package/apps/web/dist/assets/index-BoEwZu6r.css +2 -0
  4. package/apps/web/dist/assets/index-alZn4u37.js +20 -0
  5. package/apps/web/dist/assets/markdown-vendor-DUdMWn0M.js +66 -0
  6. package/apps/web/dist/assets/react-vendor-BD7-wQo9.js +9 -0
  7. package/apps/web/dist/icons/app/android-192.png +0 -0
  8. package/apps/web/dist/icons/app/android-512.png +0 -0
  9. package/apps/web/dist/icons/app/app-blue-512.png +0 -0
  10. package/apps/web/dist/icons/app/app-store-1024.png +0 -0
  11. package/apps/web/dist/icons/app/apple-touch-icon-180.png +0 -0
  12. package/apps/web/dist/icons/app/maskable-512.png +0 -0
  13. package/apps/web/dist/icons/favicon/favicon-16.png +0 -0
  14. package/apps/web/dist/icons/favicon/favicon-32.png +0 -0
  15. package/apps/web/dist/icons/favicon/favicon-48.png +0 -0
  16. package/apps/web/dist/icons/png-blue/pi-256.png +0 -0
  17. package/apps/web/dist/icons/png-blue/pi-512.png +0 -0
  18. package/apps/web/dist/icons/png-ink/pi-1024.png +0 -0
  19. package/apps/web/dist/icons/png-ink/pi-128.png +0 -0
  20. package/apps/web/dist/icons/png-ink/pi-16.png +0 -0
  21. package/apps/web/dist/icons/png-ink/pi-24.png +0 -0
  22. package/apps/web/dist/icons/png-ink/pi-256.png +0 -0
  23. package/apps/web/dist/icons/png-ink/pi-32.png +0 -0
  24. package/apps/web/dist/icons/png-ink/pi-48.png +0 -0
  25. package/apps/web/dist/icons/png-ink/pi-512.png +0 -0
  26. package/apps/web/dist/icons/png-ink/pi-64.png +0 -0
  27. package/apps/web/dist/icons/png-white/pi-1024.png +0 -0
  28. package/apps/web/dist/icons/png-white/pi-128.png +0 -0
  29. package/apps/web/dist/icons/png-white/pi-16.png +0 -0
  30. package/apps/web/dist/icons/png-white/pi-24.png +0 -0
  31. package/apps/web/dist/icons/png-white/pi-256.png +0 -0
  32. package/apps/web/dist/icons/png-white/pi-32.png +0 -0
  33. package/apps/web/dist/icons/png-white/pi-48.png +0 -0
  34. package/apps/web/dist/icons/png-white/pi-512.png +0 -0
  35. package/apps/web/dist/icons/png-white/pi-64.png +0 -0
  36. package/apps/web/dist/icons/social/og-1200x630.png +0 -0
  37. package/apps/web/dist/icons/svg/app-icon-blue.svg +13 -0
  38. package/apps/web/dist/icons/svg/app-icon-ink.svg +13 -0
  39. package/apps/web/dist/icons/svg/favicon.svg +10 -0
  40. package/apps/web/dist/icons/svg/lockup-horizontal.svg +13 -0
  41. package/apps/web/dist/icons/svg/mark-blue.svg +10 -0
  42. package/apps/web/dist/icons/svg/mark-compact.svg +10 -0
  43. package/apps/web/dist/icons/svg/mark-ink.svg +10 -0
  44. package/apps/web/dist/icons/svg/mark-white.svg +10 -0
  45. package/apps/web/dist/icons/svg/mark.svg +10 -0
  46. package/apps/web/dist/index.html +18 -6
  47. package/apps/web/dist/manifest.webmanifest +14 -0
  48. package/apps/web/index.html +14 -4
  49. package/apps/web/package.json +11 -9
  50. package/apps/web/profile/cordis.yml +222 -1
  51. package/apps/web/public/icons/app/android-192.png +0 -0
  52. package/apps/web/public/icons/app/android-512.png +0 -0
  53. package/apps/web/public/icons/app/app-blue-512.png +0 -0
  54. package/apps/web/public/icons/app/app-store-1024.png +0 -0
  55. package/apps/web/public/icons/app/apple-touch-icon-180.png +0 -0
  56. package/apps/web/public/icons/app/maskable-512.png +0 -0
  57. package/apps/web/public/icons/favicon/favicon-16.png +0 -0
  58. package/apps/web/public/icons/favicon/favicon-32.png +0 -0
  59. package/apps/web/public/icons/favicon/favicon-48.png +0 -0
  60. package/apps/web/public/icons/png-blue/pi-256.png +0 -0
  61. package/apps/web/public/icons/png-blue/pi-512.png +0 -0
  62. package/apps/web/public/icons/png-ink/pi-1024.png +0 -0
  63. package/apps/web/public/icons/png-ink/pi-128.png +0 -0
  64. package/apps/web/public/icons/png-ink/pi-16.png +0 -0
  65. package/apps/web/public/icons/png-ink/pi-24.png +0 -0
  66. package/apps/web/public/icons/png-ink/pi-256.png +0 -0
  67. package/apps/web/public/icons/png-ink/pi-32.png +0 -0
  68. package/apps/web/public/icons/png-ink/pi-48.png +0 -0
  69. package/apps/web/public/icons/png-ink/pi-512.png +0 -0
  70. package/apps/web/public/icons/png-ink/pi-64.png +0 -0
  71. package/apps/web/public/icons/png-white/pi-1024.png +0 -0
  72. package/apps/web/public/icons/png-white/pi-128.png +0 -0
  73. package/apps/web/public/icons/png-white/pi-16.png +0 -0
  74. package/apps/web/public/icons/png-white/pi-24.png +0 -0
  75. package/apps/web/public/icons/png-white/pi-256.png +0 -0
  76. package/apps/web/public/icons/png-white/pi-32.png +0 -0
  77. package/apps/web/public/icons/png-white/pi-48.png +0 -0
  78. package/apps/web/public/icons/png-white/pi-512.png +0 -0
  79. package/apps/web/public/icons/png-white/pi-64.png +0 -0
  80. package/apps/web/public/icons/social/og-1200x630.png +0 -0
  81. package/apps/web/public/icons/svg/app-icon-blue.svg +13 -0
  82. package/apps/web/public/icons/svg/app-icon-ink.svg +13 -0
  83. package/apps/web/public/icons/svg/favicon.svg +10 -0
  84. package/apps/web/public/icons/svg/lockup-horizontal.svg +13 -0
  85. package/apps/web/public/icons/svg/mark-blue.svg +10 -0
  86. package/apps/web/public/icons/svg/mark-compact.svg +10 -0
  87. package/apps/web/public/icons/svg/mark-ink.svg +10 -0
  88. package/apps/web/public/icons/svg/mark-white.svg +10 -0
  89. package/apps/web/public/icons/svg/mark.svg +10 -0
  90. package/apps/web/public/manifest.webmanifest +14 -0
  91. package/apps/web/server-dist/bin.js +19 -6
  92. package/apps/web/server-dist/bin.js.map +1 -1
  93. package/apps/web/src/command-palette.ts +28 -7
  94. package/apps/web/src/file-diff.ts +15 -10
  95. package/apps/web/src/main.ts +4 -1
  96. package/apps/web/src/runtime.css +17 -4
  97. package/apps/web/src/server/bin.ts +24 -7
  98. package/apps/web/src/style.css +2604 -8
  99. package/apps/web/src/tailwind.css +25 -0
  100. package/apps/web/tsconfig.build.json +5 -1
  101. package/apps/web/tsconfig.json +1 -1
  102. package/apps/web/vite.config.ts +20 -0
  103. package/package.json +29 -17
  104. package/packages/api-gateway/LICENSE +9 -0
  105. package/packages/api-gateway/dist/index.d.ts.map +1 -1
  106. package/packages/api-gateway/dist/index.js +1188 -42
  107. package/packages/api-gateway/dist/index.js.map +1 -1
  108. package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +16 -0
  109. package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +16 -0
  110. package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +16 -0
  111. package/packages/api-gateway/dist/marketplace-entries/official/archify.json +16 -0
  112. package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +16 -0
  113. package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +25 -0
  114. package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +16 -0
  115. package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +16 -0
  116. package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +16 -0
  117. package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +16 -0
  118. package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +16 -0
  119. package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +16 -0
  120. package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +16 -0
  121. package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +16 -0
  122. package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +16 -0
  123. package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +22 -0
  124. package/packages/api-gateway/dist/marketplace-entries/official/context.json +16 -0
  125. package/packages/api-gateway/dist/marketplace-entries/official/cordis-group.json +16 -0
  126. package/packages/api-gateway/dist/marketplace-entries/official/cordis-logger-console.json +16 -0
  127. package/packages/api-gateway/dist/marketplace-entries/official/cordis-timer.json +16 -0
  128. package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +16 -0
  129. package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +16 -0
  130. package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +16 -0
  131. package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +16 -0
  132. package/packages/api-gateway/dist/marketplace-entries/official/genui.json +16 -0
  133. package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +16 -0
  134. package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +16 -0
  135. package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +25 -0
  136. package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +16 -0
  137. package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +16 -0
  138. package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +16 -0
  139. package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +16 -0
  140. package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +16 -0
  141. package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +16 -0
  142. package/packages/api-gateway/dist/marketplace-entries/official/memory.json +16 -0
  143. package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +19 -0
  144. package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +16 -0
  145. package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +16 -0
  146. package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +16 -0
  147. package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +16 -0
  148. package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +16 -0
  149. package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +16 -0
  150. package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +16 -0
  151. package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +16 -0
  152. package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +16 -0
  153. package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +16 -0
  154. package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +16 -0
  155. package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +16 -0
  156. package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +16 -0
  157. package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +16 -0
  158. package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +16 -0
  159. package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +16 -0
  160. package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +22 -0
  161. package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +16 -0
  162. package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +16 -0
  163. package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +16 -0
  164. package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +16 -0
  165. package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +16 -0
  166. package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +16 -0
  167. package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +16 -0
  168. package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +16 -0
  169. package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +16 -0
  170. package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +16 -0
  171. package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +16 -0
  172. package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +16 -0
  173. package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +16 -0
  174. package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +16 -0
  175. package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +16 -0
  176. package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +16 -0
  177. package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +19 -0
  178. package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +16 -0
  179. package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +22 -0
  180. package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +16 -0
  181. package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +16 -0
  182. package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +16 -0
  183. package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +16 -0
  184. package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +16 -0
  185. package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +16 -0
  186. package/packages/api-gateway/dist/marketplace.d.ts +40 -2
  187. package/packages/api-gateway/dist/marketplace.d.ts.map +1 -1
  188. package/packages/api-gateway/dist/marketplace.js +225 -19
  189. package/packages/api-gateway/dist/marketplace.js.map +1 -1
  190. package/packages/api-gateway/dist/workspaces.d.ts +8 -0
  191. package/packages/api-gateway/dist/workspaces.d.ts.map +1 -0
  192. package/packages/api-gateway/dist/workspaces.js +14 -0
  193. package/packages/api-gateway/dist/workspaces.js.map +1 -0
  194. package/packages/api-gateway/package.json +20 -10
  195. package/packages/api-gateway/scripts/copy-marketplace-entries.mjs +13 -0
  196. package/packages/api-gateway/src/index.ts +1258 -61
  197. package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +16 -0
  198. package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +16 -0
  199. package/packages/api-gateway/src/marketplace-entries/official/annotation.json +16 -0
  200. package/packages/api-gateway/src/marketplace-entries/official/archify.json +16 -0
  201. package/packages/api-gateway/src/marketplace-entries/official/at-file.json +16 -0
  202. package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +25 -0
  203. package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +16 -0
  204. package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +16 -0
  205. package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +16 -0
  206. package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +16 -0
  207. package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +16 -0
  208. package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +16 -0
  209. package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +16 -0
  210. package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +16 -0
  211. package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +16 -0
  212. package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +22 -0
  213. package/packages/api-gateway/src/marketplace-entries/official/context.json +16 -0
  214. package/packages/api-gateway/src/marketplace-entries/official/cordis-group.json +16 -0
  215. package/packages/api-gateway/src/marketplace-entries/official/cordis-logger-console.json +16 -0
  216. package/packages/api-gateway/src/marketplace-entries/official/cordis-timer.json +16 -0
  217. package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +16 -0
  218. package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +16 -0
  219. package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +16 -0
  220. package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +16 -0
  221. package/packages/api-gateway/src/marketplace-entries/official/genui.json +16 -0
  222. package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +16 -0
  223. package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +16 -0
  224. package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +25 -0
  225. package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +16 -0
  226. package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +16 -0
  227. package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +16 -0
  228. package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +16 -0
  229. package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +16 -0
  230. package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +16 -0
  231. package/packages/api-gateway/src/marketplace-entries/official/memory.json +16 -0
  232. package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +19 -0
  233. package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +16 -0
  234. package/packages/api-gateway/src/marketplace-entries/official/modlens.json +16 -0
  235. package/packages/api-gateway/src/marketplace-entries/official/module-search.json +16 -0
  236. package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +16 -0
  237. package/packages/api-gateway/src/marketplace-entries/official/openpets.json +16 -0
  238. package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +16 -0
  239. package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +16 -0
  240. package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +16 -0
  241. package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +16 -0
  242. package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +16 -0
  243. package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +16 -0
  244. package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +16 -0
  245. package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +16 -0
  246. package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +16 -0
  247. package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +16 -0
  248. package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +16 -0
  249. package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +22 -0
  250. package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +16 -0
  251. package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +16 -0
  252. package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +16 -0
  253. package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +16 -0
  254. package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +16 -0
  255. package/packages/api-gateway/src/marketplace-entries/official/session-export.json +16 -0
  256. package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +16 -0
  257. package/packages/api-gateway/src/marketplace-entries/official/session-search.json +16 -0
  258. package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +16 -0
  259. package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +16 -0
  260. package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +16 -0
  261. package/packages/api-gateway/src/marketplace-entries/official/synapse.json +16 -0
  262. package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +16 -0
  263. package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +16 -0
  264. package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +16 -0
  265. package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +16 -0
  266. package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +19 -0
  267. package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +16 -0
  268. package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +22 -0
  269. package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +16 -0
  270. package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +16 -0
  271. package/packages/api-gateway/src/marketplace-entries/official/web-research.json +16 -0
  272. package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +16 -0
  273. package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +16 -0
  274. package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +16 -0
  275. package/packages/api-gateway/src/marketplace.ts +267 -22
  276. package/packages/api-gateway/src/workspaces.ts +20 -0
  277. package/packages/api-gateway/test/index.test.ts +483 -33
  278. package/packages/api-gateway/test/marketplace.test.ts +282 -3
  279. package/packages/api-gateway/test/workspaces.test.ts +13 -0
  280. package/packages/api-gateway/tsconfig.build.json +1 -1
  281. package/packages/api-gateway/tsconfig.json +1 -1
  282. package/packages/bundle-web-app/LICENSE +9 -0
  283. package/packages/bundle-web-app/package.json +19 -9
  284. package/packages/bundle-web-app/tsconfig.build.json +1 -1
  285. package/packages/bundle-web-app/tsconfig.json +1 -1
  286. package/packages/cli/LICENSE +9 -0
  287. package/packages/cli/dist/args.d.ts.map +1 -1
  288. package/packages/cli/dist/args.js +16 -9
  289. package/packages/cli/dist/args.js.map +1 -1
  290. package/packages/cli/dist/bin.js +12 -3
  291. package/packages/cli/dist/bin.js.map +1 -1
  292. package/packages/cli/dist/main.d.ts +1 -0
  293. package/packages/cli/dist/main.d.ts.map +1 -1
  294. package/packages/cli/dist/main.js +49 -9
  295. package/packages/cli/dist/main.js.map +1 -1
  296. package/packages/cli/dist/node-stdio.d.ts +3 -1
  297. package/packages/cli/dist/node-stdio.d.ts.map +1 -1
  298. package/packages/cli/dist/node-stdio.js +91 -13
  299. package/packages/cli/dist/node-stdio.js.map +1 -1
  300. package/packages/cli/dist/relaunch.d.ts.map +1 -1
  301. package/packages/cli/dist/relaunch.js +23 -10
  302. package/packages/cli/dist/relaunch.js.map +1 -1
  303. package/packages/cli/package.json +18 -8
  304. package/packages/cli/src/args.ts +16 -10
  305. package/packages/cli/src/bin.ts +12 -3
  306. package/packages/cli/src/main.ts +54 -10
  307. package/packages/cli/src/node-stdio.ts +85 -13
  308. package/packages/cli/src/relaunch.ts +19 -6
  309. package/packages/cli/test/args.test.ts +22 -3
  310. package/packages/cli/test/binary.test.ts +58 -0
  311. package/packages/cli/test/broken-pipe.test.ts +32 -0
  312. package/packages/cli/test/cli.test.ts +57 -8
  313. package/packages/cli/test/node-stdio.test.ts +89 -0
  314. package/packages/cli/test/relaunch.test.ts +30 -2
  315. package/packages/cli/test/stdin-shutdown.test.ts +59 -0
  316. package/packages/cli/tsconfig.build.json +1 -3
  317. package/packages/cli/tsconfig.json +1 -4
  318. package/packages/client-web/LICENSE +9 -0
  319. package/packages/client-web/dist/annotation-ui.d.ts +11 -0
  320. package/packages/client-web/dist/annotation-ui.d.ts.map +1 -0
  321. package/packages/client-web/dist/annotation-ui.js +24 -0
  322. package/packages/client-web/dist/annotation-ui.js.map +1 -0
  323. package/packages/client-web/dist/browser-session-view.d.ts +7 -0
  324. package/packages/client-web/dist/browser-session-view.d.ts.map +1 -0
  325. package/packages/client-web/dist/browser-session-view.js +8 -0
  326. package/packages/client-web/dist/browser-session-view.js.map +1 -0
  327. package/packages/client-web/dist/control-room.d.ts +151 -6
  328. package/packages/client-web/dist/control-room.d.ts.map +1 -1
  329. package/packages/client-web/dist/control-room.js +156 -11
  330. package/packages/client-web/dist/control-room.js.map +1 -1
  331. package/packages/client-web/dist/design-contract.d.ts.map +1 -1
  332. package/packages/client-web/dist/design-contract.js +178 -19
  333. package/packages/client-web/dist/design-contract.js.map +1 -1
  334. package/packages/client-web/dist/index.d.ts +4 -1
  335. package/packages/client-web/dist/index.d.ts.map +1 -1
  336. package/packages/client-web/dist/index.js +11 -3
  337. package/packages/client-web/dist/index.js.map +1 -1
  338. package/packages/client-web/dist/markdown.d.ts +5 -0
  339. package/packages/client-web/dist/markdown.d.ts.map +1 -0
  340. package/packages/client-web/dist/markdown.js +20 -0
  341. package/packages/client-web/dist/markdown.js.map +1 -0
  342. package/packages/client-web/dist/marketplace-catalog.d.ts +3 -0
  343. package/packages/client-web/dist/marketplace-catalog.d.ts.map +1 -0
  344. package/packages/client-web/dist/marketplace-catalog.js +10 -0
  345. package/packages/client-web/dist/marketplace-catalog.js.map +1 -0
  346. package/packages/client-web/dist/marketplace-navigation.d.ts +19 -0
  347. package/packages/client-web/dist/marketplace-navigation.d.ts.map +1 -0
  348. package/packages/client-web/dist/marketplace-navigation.js +31 -0
  349. package/packages/client-web/dist/marketplace-navigation.js.map +1 -0
  350. package/packages/client-web/dist/message-content.d.ts +9 -0
  351. package/packages/client-web/dist/message-content.d.ts.map +1 -0
  352. package/packages/client-web/dist/message-content.js +54 -0
  353. package/packages/client-web/dist/message-content.js.map +1 -0
  354. package/packages/client-web/dist/plugin-navigation.d.ts +3 -0
  355. package/packages/client-web/dist/plugin-navigation.d.ts.map +1 -0
  356. package/packages/client-web/dist/plugin-navigation.js +10 -0
  357. package/packages/client-web/dist/plugin-navigation.js.map +1 -0
  358. package/packages/client-web/dist/plugin-search.d.ts +2 -0
  359. package/packages/client-web/dist/plugin-search.d.ts.map +1 -0
  360. package/packages/client-web/dist/plugin-search.js +7 -0
  361. package/packages/client-web/dist/plugin-search.js.map +1 -0
  362. package/packages/client-web/dist/plugin-stars-view.d.ts +12 -0
  363. package/packages/client-web/dist/plugin-stars-view.d.ts.map +1 -0
  364. package/packages/client-web/dist/plugin-stars-view.js +8 -0
  365. package/packages/client-web/dist/plugin-stars-view.js.map +1 -0
  366. package/packages/client-web/dist/prompt-completion.d.ts +13 -0
  367. package/packages/client-web/dist/prompt-completion.d.ts.map +1 -0
  368. package/packages/client-web/dist/prompt-completion.js +17 -0
  369. package/packages/client-web/dist/prompt-completion.js.map +1 -0
  370. package/packages/client-web/dist/react-room.d.ts +2 -1
  371. package/packages/client-web/dist/react-room.d.ts.map +1 -1
  372. package/packages/client-web/dist/react-room.js +2347 -93
  373. package/packages/client-web/dist/react-room.js.map +1 -1
  374. package/packages/client-web/dist/runtime-events.d.ts +4 -0
  375. package/packages/client-web/dist/runtime-events.d.ts.map +1 -0
  376. package/packages/client-web/dist/runtime-events.js +29 -0
  377. package/packages/client-web/dist/runtime-events.js.map +1 -0
  378. package/packages/client-web/package.json +19 -7
  379. package/packages/client-web/src/annotation-ui.ts +29 -0
  380. package/packages/client-web/src/browser-session-view.ts +13 -0
  381. package/packages/client-web/src/control-room.ts +359 -11
  382. package/packages/client-web/src/design-contract.ts +248 -26
  383. package/packages/client-web/src/index.ts +17 -4
  384. package/packages/client-web/src/markdown.tsx +22 -0
  385. package/packages/client-web/src/marketplace-catalog.ts +10 -0
  386. package/packages/client-web/src/marketplace-navigation.ts +46 -0
  387. package/packages/client-web/src/message-content.ts +51 -0
  388. package/packages/client-web/src/plugin-navigation.ts +9 -0
  389. package/packages/client-web/src/plugin-search.ts +5 -0
  390. package/packages/client-web/src/plugin-stars-view.ts +19 -0
  391. package/packages/client-web/src/prompt-completion.ts +24 -0
  392. package/packages/client-web/src/react-room.tsx +7358 -54
  393. package/packages/client-web/src/runtime-events.ts +29 -0
  394. package/packages/client-web/test/annotation-ui.test.ts +21 -0
  395. package/packages/client-web/test/browser-session-view.test.ts +17 -0
  396. package/packages/client-web/test/design-contract.test.ts +46 -1
  397. package/packages/client-web/test/marketplace-catalog.test.ts +52 -0
  398. package/packages/client-web/test/message-content.test.ts +43 -0
  399. package/packages/client-web/test/plugin-navigation.test.ts +16 -0
  400. package/packages/client-web/test/plugin-search.test.ts +22 -0
  401. package/packages/client-web/test/plugin-stars-view.test.ts +20 -0
  402. package/packages/client-web/test/prompt-completion.test.ts +21 -0
  403. package/packages/client-web/test/runtime-events.test.ts +28 -0
  404. package/packages/client-web/tsconfig.build.json +13 -1
  405. package/packages/client-web/tsconfig.json +11 -1
  406. package/packages/core/LICENSE +9 -0
  407. package/packages/core/dist/boot.d.ts.map +1 -1
  408. package/packages/core/dist/boot.js +42 -3
  409. package/packages/core/dist/boot.js.map +1 -1
  410. package/packages/core/dist/config.d.ts +2 -0
  411. package/packages/core/dist/config.d.ts.map +1 -0
  412. package/packages/core/dist/config.js +8 -0
  413. package/packages/core/dist/config.js.map +1 -0
  414. package/packages/core/dist/http.d.ts +8 -0
  415. package/packages/core/dist/http.d.ts.map +1 -0
  416. package/packages/core/dist/http.js +27 -0
  417. package/packages/core/dist/http.js.map +1 -0
  418. package/packages/core/dist/index.d.ts +2 -0
  419. package/packages/core/dist/index.d.ts.map +1 -1
  420. package/packages/core/dist/index.js +2 -0
  421. package/packages/core/dist/index.js.map +1 -1
  422. package/packages/core/dist/plugins/agent-teams.d.ts +17 -0
  423. package/packages/core/dist/plugins/agent-teams.d.ts.map +1 -0
  424. package/packages/core/dist/plugins/agent-teams.js +298 -0
  425. package/packages/core/dist/plugins/agent-teams.js.map +1 -0
  426. package/packages/core/dist/plugins/anchored-standard.d.ts +14 -0
  427. package/packages/core/dist/plugins/anchored-standard.d.ts.map +1 -0
  428. package/packages/core/dist/plugins/anchored-standard.js +84 -0
  429. package/packages/core/dist/plugins/anchored-standard.js.map +1 -0
  430. package/packages/core/dist/plugins/annotation.d.ts +18 -0
  431. package/packages/core/dist/plugins/annotation.d.ts.map +1 -0
  432. package/packages/core/dist/plugins/annotation.js +94 -0
  433. package/packages/core/dist/plugins/annotation.js.map +1 -0
  434. package/packages/core/dist/plugins/archify.d.ts +23 -0
  435. package/packages/core/dist/plugins/archify.d.ts.map +1 -0
  436. package/packages/core/dist/plugins/archify.js +98 -0
  437. package/packages/core/dist/plugins/archify.js.map +1 -0
  438. package/packages/core/dist/plugins/at-file.d.ts +8 -0
  439. package/packages/core/dist/plugins/at-file.d.ts.map +1 -0
  440. package/packages/core/dist/plugins/at-file.js +52 -0
  441. package/packages/core/dist/plugins/at-file.js.map +1 -0
  442. package/packages/core/dist/plugins/auto-mode.d.ts +15 -0
  443. package/packages/core/dist/plugins/auto-mode.d.ts.map +1 -0
  444. package/packages/core/dist/plugins/auto-mode.js +114 -0
  445. package/packages/core/dist/plugins/auto-mode.js.map +1 -0
  446. package/packages/core/dist/plugins/better-sidebar.d.ts +37 -0
  447. package/packages/core/dist/plugins/better-sidebar.d.ts.map +1 -0
  448. package/packages/core/dist/plugins/better-sidebar.js +89 -0
  449. package/packages/core/dist/plugins/better-sidebar.js.map +1 -0
  450. package/packages/core/dist/plugins/browser-fetch.d.ts +14 -0
  451. package/packages/core/dist/plugins/browser-fetch.d.ts.map +1 -0
  452. package/packages/core/dist/plugins/browser-fetch.js +167 -0
  453. package/packages/core/dist/plugins/browser-fetch.js.map +1 -0
  454. package/packages/core/dist/plugins/browser-session.d.ts +14 -0
  455. package/packages/core/dist/plugins/browser-session.d.ts.map +1 -0
  456. package/packages/core/dist/plugins/browser-session.js +265 -0
  457. package/packages/core/dist/plugins/browser-session.js.map +1 -0
  458. package/packages/core/dist/plugins/canvas-draw.d.ts +8 -0
  459. package/packages/core/dist/plugins/canvas-draw.d.ts.map +1 -0
  460. package/packages/core/dist/plugins/canvas-draw.js +88 -0
  461. package/packages/core/dist/plugins/canvas-draw.js.map +1 -0
  462. package/packages/core/dist/plugins/change-verifier.d.ts +8 -0
  463. package/packages/core/dist/plugins/change-verifier.d.ts.map +1 -0
  464. package/packages/core/dist/plugins/change-verifier.js +67 -0
  465. package/packages/core/dist/plugins/change-verifier.js.map +1 -0
  466. package/packages/core/dist/plugins/cleaner.d.ts +8 -0
  467. package/packages/core/dist/plugins/cleaner.d.ts.map +1 -0
  468. package/packages/core/dist/plugins/cleaner.js +56 -0
  469. package/packages/core/dist/plugins/cleaner.js.map +1 -0
  470. package/packages/core/dist/plugins/cli-notifier.d.ts +15 -0
  471. package/packages/core/dist/plugins/cli-notifier.d.ts.map +1 -0
  472. package/packages/core/dist/plugins/cli-notifier.js +110 -0
  473. package/packages/core/dist/plugins/cli-notifier.js.map +1 -0
  474. package/packages/core/dist/plugins/code2skill.d.ts +8 -0
  475. package/packages/core/dist/plugins/code2skill.d.ts.map +1 -0
  476. package/packages/core/dist/plugins/code2skill.js +95 -0
  477. package/packages/core/dist/plugins/code2skill.js.map +1 -0
  478. package/packages/core/dist/plugins/colleague-skill.d.ts +27 -0
  479. package/packages/core/dist/plugins/colleague-skill.d.ts.map +1 -0
  480. package/packages/core/dist/plugins/colleague-skill.js +99 -0
  481. package/packages/core/dist/plugins/colleague-skill.js.map +1 -0
  482. package/packages/core/dist/plugins/context-doctor.d.ts +30 -0
  483. package/packages/core/dist/plugins/context-doctor.d.ts.map +1 -0
  484. package/packages/core/dist/plugins/context-doctor.js +95 -0
  485. package/packages/core/dist/plugins/context-doctor.js.map +1 -0
  486. package/packages/core/dist/plugins/context.d.ts +8 -0
  487. package/packages/core/dist/plugins/context.d.ts.map +1 -0
  488. package/packages/core/dist/plugins/context.js +87 -0
  489. package/packages/core/dist/plugins/context.js.map +1 -0
  490. package/packages/core/dist/plugins/cost-meter.d.ts +32 -0
  491. package/packages/core/dist/plugins/cost-meter.d.ts.map +1 -0
  492. package/packages/core/dist/plugins/cost-meter.js +204 -0
  493. package/packages/core/dist/plugins/cost-meter.js.map +1 -0
  494. package/packages/core/dist/plugins/dependency-checker.d.ts +27 -0
  495. package/packages/core/dist/plugins/dependency-checker.d.ts.map +1 -0
  496. package/packages/core/dist/plugins/dependency-checker.js +221 -0
  497. package/packages/core/dist/plugins/dependency-checker.js.map +1 -0
  498. package/packages/core/dist/plugins/docker-sandbox.d.ts +8 -0
  499. package/packages/core/dist/plugins/docker-sandbox.d.ts.map +1 -0
  500. package/packages/core/dist/plugins/docker-sandbox.js +102 -0
  501. package/packages/core/dist/plugins/docker-sandbox.js.map +1 -0
  502. package/packages/core/dist/plugins/fail-logger.d.ts +8 -0
  503. package/packages/core/dist/plugins/fail-logger.d.ts.map +1 -0
  504. package/packages/core/dist/plugins/fail-logger.js +51 -0
  505. package/packages/core/dist/plugins/fail-logger.js.map +1 -0
  506. package/packages/core/dist/plugins/genui.d.ts +8 -0
  507. package/packages/core/dist/plugins/genui.d.ts.map +1 -0
  508. package/packages/core/dist/plugins/genui.js +79 -0
  509. package/packages/core/dist/plugins/genui.js.map +1 -0
  510. package/packages/core/dist/plugins/git-time-capsule.d.ts +9 -0
  511. package/packages/core/dist/plugins/git-time-capsule.d.ts.map +1 -0
  512. package/packages/core/dist/plugins/git-time-capsule.js +90 -0
  513. package/packages/core/dist/plugins/git-time-capsule.js.map +1 -0
  514. package/packages/core/dist/plugins/graph-memory.d.ts +16 -0
  515. package/packages/core/dist/plugins/graph-memory.d.ts.map +1 -0
  516. package/packages/core/dist/plugins/graph-memory.js +382 -0
  517. package/packages/core/dist/plugins/graph-memory.js.map +1 -0
  518. package/packages/core/dist/plugins/history-compressor.d.ts +15 -0
  519. package/packages/core/dist/plugins/history-compressor.d.ts.map +1 -0
  520. package/packages/core/dist/plugins/history-compressor.js +80 -0
  521. package/packages/core/dist/plugins/history-compressor.js.map +1 -0
  522. package/packages/core/dist/plugins/hol-guard.d.ts +29 -0
  523. package/packages/core/dist/plugins/hol-guard.d.ts.map +1 -0
  524. package/packages/core/dist/plugins/hol-guard.js +139 -0
  525. package/packages/core/dist/plugins/hol-guard.js.map +1 -0
  526. package/packages/core/dist/plugins/i18n-pair.d.ts +8 -0
  527. package/packages/core/dist/plugins/i18n-pair.d.ts.map +1 -0
  528. package/packages/core/dist/plugins/i18n-pair.js +76 -0
  529. package/packages/core/dist/plugins/i18n-pair.js.map +1 -0
  530. package/packages/core/dist/plugins/image-compressor.d.ts +8 -0
  531. package/packages/core/dist/plugins/image-compressor.d.ts.map +1 -0
  532. package/packages/core/dist/plugins/image-compressor.js +150 -0
  533. package/packages/core/dist/plugins/image-compressor.js.map +1 -0
  534. package/packages/core/dist/plugins/llm-verifier.d.ts +42 -0
  535. package/packages/core/dist/plugins/llm-verifier.d.ts.map +1 -0
  536. package/packages/core/dist/plugins/llm-verifier.js +128 -0
  537. package/packages/core/dist/plugins/llm-verifier.js.map +1 -0
  538. package/packages/core/dist/plugins/mcp-client.d.ts +19 -0
  539. package/packages/core/dist/plugins/mcp-client.d.ts.map +1 -0
  540. package/packages/core/dist/plugins/mcp-client.js +534 -0
  541. package/packages/core/dist/plugins/mcp-client.js.map +1 -0
  542. package/packages/core/dist/plugins/mcp-panel.d.ts +14 -0
  543. package/packages/core/dist/plugins/mcp-panel.d.ts.map +1 -0
  544. package/packages/core/dist/plugins/mcp-panel.js +180 -0
  545. package/packages/core/dist/plugins/mcp-panel.js.map +1 -0
  546. package/packages/core/dist/plugins/memory.d.ts +15 -0
  547. package/packages/core/dist/plugins/memory.d.ts.map +1 -0
  548. package/packages/core/dist/plugins/memory.js +161 -0
  549. package/packages/core/dist/plugins/memory.js.map +1 -0
  550. package/packages/core/dist/plugins/mirage-bridge.d.ts +23 -0
  551. package/packages/core/dist/plugins/mirage-bridge.d.ts.map +1 -0
  552. package/packages/core/dist/plugins/mirage-bridge.js +149 -0
  553. package/packages/core/dist/plugins/mirage-bridge.js.map +1 -0
  554. package/packages/core/dist/plugins/mock-server.d.ts +22 -0
  555. package/packages/core/dist/plugins/mock-server.d.ts.map +1 -0
  556. package/packages/core/dist/plugins/mock-server.js +149 -0
  557. package/packages/core/dist/plugins/mock-server.js.map +1 -0
  558. package/packages/core/dist/plugins/model.d.ts +1 -1
  559. package/packages/core/dist/plugins/model.d.ts.map +1 -1
  560. package/packages/core/dist/plugins/model.js +3 -1
  561. package/packages/core/dist/plugins/model.js.map +1 -1
  562. package/packages/core/dist/plugins/models.d.ts.map +1 -1
  563. package/packages/core/dist/plugins/models.js +5 -2
  564. package/packages/core/dist/plugins/models.js.map +1 -1
  565. package/packages/core/dist/plugins/modlens.d.ts +8 -0
  566. package/packages/core/dist/plugins/modlens.d.ts.map +1 -0
  567. package/packages/core/dist/plugins/modlens.js +63 -0
  568. package/packages/core/dist/plugins/modlens.js.map +1 -0
  569. package/packages/core/dist/plugins/module-search.d.ts +27 -0
  570. package/packages/core/dist/plugins/module-search.d.ts.map +1 -0
  571. package/packages/core/dist/plugins/module-search.js +174 -0
  572. package/packages/core/dist/plugins/module-search.js.map +1 -0
  573. package/packages/core/dist/plugins/obsidian-sync.d.ts +14 -0
  574. package/packages/core/dist/plugins/obsidian-sync.d.ts.map +1 -0
  575. package/packages/core/dist/plugins/obsidian-sync.js +79 -0
  576. package/packages/core/dist/plugins/obsidian-sync.js.map +1 -0
  577. package/packages/core/dist/plugins/openpets.d.ts +14 -0
  578. package/packages/core/dist/plugins/openpets.d.ts.map +1 -0
  579. package/packages/core/dist/plugins/openpets.js +99 -0
  580. package/packages/core/dist/plugins/openpets.js.map +1 -0
  581. package/packages/core/dist/plugins/plan-execute.d.ts +8 -0
  582. package/packages/core/dist/plugins/plan-execute.d.ts.map +1 -0
  583. package/packages/core/dist/plugins/plan-execute.js +70 -0
  584. package/packages/core/dist/plugins/plan-execute.js.map +1 -0
  585. package/packages/core/dist/plugins/plugin-check.d.ts +38 -0
  586. package/packages/core/dist/plugins/plugin-check.d.ts.map +1 -0
  587. package/packages/core/dist/plugins/plugin-check.js +227 -0
  588. package/packages/core/dist/plugins/plugin-check.js.map +1 -0
  589. package/packages/core/dist/plugins/plugin-dev.d.ts +8 -0
  590. package/packages/core/dist/plugins/plugin-dev.d.ts.map +1 -0
  591. package/packages/core/dist/plugins/plugin-dev.js +44 -0
  592. package/packages/core/dist/plugins/plugin-dev.js.map +1 -0
  593. package/packages/core/dist/plugins/plugin-finder.d.ts +16 -0
  594. package/packages/core/dist/plugins/plugin-finder.d.ts.map +1 -0
  595. package/packages/core/dist/plugins/plugin-finder.js +98 -0
  596. package/packages/core/dist/plugins/plugin-finder.js.map +1 -0
  597. package/packages/core/dist/plugins/plugin-radar.d.ts +29 -0
  598. package/packages/core/dist/plugins/plugin-radar.d.ts.map +1 -0
  599. package/packages/core/dist/plugins/plugin-radar.js +146 -0
  600. package/packages/core/dist/plugins/plugin-radar.js.map +1 -0
  601. package/packages/core/dist/plugins/plugin-stars.d.ts +45 -0
  602. package/packages/core/dist/plugins/plugin-stars.d.ts.map +1 -0
  603. package/packages/core/dist/plugins/plugin-stars.js +165 -0
  604. package/packages/core/dist/plugins/plugin-stars.js.map +1 -0
  605. package/packages/core/dist/plugins/prompt-guard.d.ts +8 -0
  606. package/packages/core/dist/plugins/prompt-guard.d.ts.map +1 -0
  607. package/packages/core/dist/plugins/prompt-guard.js +114 -0
  608. package/packages/core/dist/plugins/prompt-guard.js.map +1 -0
  609. package/packages/core/dist/plugins/prompt-library.d.ts +25 -0
  610. package/packages/core/dist/plugins/prompt-library.d.ts.map +1 -0
  611. package/packages/core/dist/plugins/prompt-library.js +142 -0
  612. package/packages/core/dist/plugins/prompt-library.js.map +1 -0
  613. package/packages/core/dist/plugins/readme-gen.d.ts +25 -0
  614. package/packages/core/dist/plugins/readme-gen.d.ts.map +1 -0
  615. package/packages/core/dist/plugins/readme-gen.js +139 -0
  616. package/packages/core/dist/plugins/readme-gen.js.map +1 -0
  617. package/packages/core/dist/plugins/recall-unread.d.ts +24 -0
  618. package/packages/core/dist/plugins/recall-unread.d.ts.map +1 -0
  619. package/packages/core/dist/plugins/recall-unread.js +124 -0
  620. package/packages/core/dist/plugins/recall-unread.js.map +1 -0
  621. package/packages/core/dist/plugins/resources.d.ts +1 -0
  622. package/packages/core/dist/plugins/resources.d.ts.map +1 -1
  623. package/packages/core/dist/plugins/resources.js +31 -22
  624. package/packages/core/dist/plugins/resources.js.map +1 -1
  625. package/packages/core/dist/plugins/reverse-skill.d.ts +23 -0
  626. package/packages/core/dist/plugins/reverse-skill.d.ts.map +1 -0
  627. package/packages/core/dist/plugins/reverse-skill.js +60 -0
  628. package/packages/core/dist/plugins/reverse-skill.js.map +1 -0
  629. package/packages/core/dist/plugins/reviewer-bot.d.ts +14 -0
  630. package/packages/core/dist/plugins/reviewer-bot.d.ts.map +1 -0
  631. package/packages/core/dist/plugins/reviewer-bot.js +133 -0
  632. package/packages/core/dist/plugins/reviewer-bot.js.map +1 -0
  633. package/packages/core/dist/plugins/runtime-doctor.d.ts +33 -0
  634. package/packages/core/dist/plugins/runtime-doctor.d.ts.map +1 -0
  635. package/packages/core/dist/plugins/runtime-doctor.js +114 -0
  636. package/packages/core/dist/plugins/runtime-doctor.js.map +1 -0
  637. package/packages/core/dist/plugins/runtime.d.ts.map +1 -1
  638. package/packages/core/dist/plugins/runtime.js +63 -14
  639. package/packages/core/dist/plugins/runtime.js.map +1 -1
  640. package/packages/core/dist/plugins/secure-audit.d.ts +31 -0
  641. package/packages/core/dist/plugins/secure-audit.d.ts.map +1 -0
  642. package/packages/core/dist/plugins/secure-audit.js +121 -0
  643. package/packages/core/dist/plugins/secure-audit.js.map +1 -0
  644. package/packages/core/dist/plugins/session-bookmarks.d.ts +15 -0
  645. package/packages/core/dist/plugins/session-bookmarks.d.ts.map +1 -0
  646. package/packages/core/dist/plugins/session-bookmarks.js +87 -0
  647. package/packages/core/dist/plugins/session-bookmarks.js.map +1 -0
  648. package/packages/core/dist/plugins/session-bridge.d.ts +44 -0
  649. package/packages/core/dist/plugins/session-bridge.d.ts.map +1 -0
  650. package/packages/core/dist/plugins/session-bridge.js +265 -0
  651. package/packages/core/dist/plugins/session-bridge.js.map +1 -0
  652. package/packages/core/dist/plugins/session-compare.d.ts +33 -0
  653. package/packages/core/dist/plugins/session-compare.d.ts.map +1 -0
  654. package/packages/core/dist/plugins/session-compare.js +150 -0
  655. package/packages/core/dist/plugins/session-compare.js.map +1 -0
  656. package/packages/core/dist/plugins/session-export.d.ts +9 -0
  657. package/packages/core/dist/plugins/session-export.d.ts.map +1 -0
  658. package/packages/core/dist/plugins/session-export.js +93 -0
  659. package/packages/core/dist/plugins/session-export.js.map +1 -0
  660. package/packages/core/dist/plugins/session-insights.d.ts +8 -0
  661. package/packages/core/dist/plugins/session-insights.d.ts.map +1 -0
  662. package/packages/core/dist/plugins/session-insights.js +47 -0
  663. package/packages/core/dist/plugins/session-insights.js.map +1 -0
  664. package/packages/core/dist/plugins/session-search.d.ts +20 -0
  665. package/packages/core/dist/plugins/session-search.d.ts.map +1 -0
  666. package/packages/core/dist/plugins/session-search.js +122 -0
  667. package/packages/core/dist/plugins/session-search.js.map +1 -0
  668. package/packages/core/dist/plugins/session.d.ts.map +1 -1
  669. package/packages/core/dist/plugins/session.js +4 -2
  670. package/packages/core/dist/plugins/session.js.map +1 -1
  671. package/packages/core/dist/plugins/skill-catalog.d.ts +26 -0
  672. package/packages/core/dist/plugins/skill-catalog.d.ts.map +1 -0
  673. package/packages/core/dist/plugins/skill-catalog.js +97 -0
  674. package/packages/core/dist/plugins/skill-catalog.js.map +1 -0
  675. package/packages/core/dist/plugins/skill-guard.d.ts +26 -0
  676. package/packages/core/dist/plugins/skill-guard.d.ts.map +1 -0
  677. package/packages/core/dist/plugins/skill-guard.js +139 -0
  678. package/packages/core/dist/plugins/skill-guard.js.map +1 -0
  679. package/packages/core/dist/plugins/sql-lens.d.ts +8 -0
  680. package/packages/core/dist/plugins/sql-lens.d.ts.map +1 -0
  681. package/packages/core/dist/plugins/sql-lens.js +85 -0
  682. package/packages/core/dist/plugins/sql-lens.js.map +1 -0
  683. package/packages/core/dist/plugins/stdio.d.ts +1 -1
  684. package/packages/core/dist/plugins/stdio.d.ts.map +1 -1
  685. package/packages/core/dist/plugins/stdio.js +3 -1
  686. package/packages/core/dist/plugins/stdio.js.map +1 -1
  687. package/packages/core/dist/plugins/synapse.d.ts +38 -0
  688. package/packages/core/dist/plugins/synapse.d.ts.map +1 -0
  689. package/packages/core/dist/plugins/synapse.js +93 -0
  690. package/packages/core/dist/plugins/synapse.js.map +1 -0
  691. package/packages/core/dist/plugins/tab-manager.d.ts +8 -0
  692. package/packages/core/dist/plugins/tab-manager.d.ts.map +1 -0
  693. package/packages/core/dist/plugins/tab-manager.js +135 -0
  694. package/packages/core/dist/plugins/tab-manager.js.map +1 -0
  695. package/packages/core/dist/plugins/taskboard.d.ts +15 -0
  696. package/packages/core/dist/plugins/taskboard.d.ts.map +1 -0
  697. package/packages/core/dist/plugins/taskboard.js +347 -0
  698. package/packages/core/dist/plugins/taskboard.js.map +1 -0
  699. package/packages/core/dist/plugins/telemetry-blocker.d.ts +8 -0
  700. package/packages/core/dist/plugins/telemetry-blocker.d.ts.map +1 -0
  701. package/packages/core/dist/plugins/telemetry-blocker.js +57 -0
  702. package/packages/core/dist/plugins/telemetry-blocker.js.map +1 -0
  703. package/packages/core/dist/plugins/test-harness.d.ts +8 -0
  704. package/packages/core/dist/plugins/test-harness.d.ts.map +1 -0
  705. package/packages/core/dist/plugins/test-harness.js +64 -0
  706. package/packages/core/dist/plugins/test-harness.js.map +1 -0
  707. package/packages/core/dist/plugins/theme-studio.d.ts +29 -0
  708. package/packages/core/dist/plugins/theme-studio.d.ts.map +1 -0
  709. package/packages/core/dist/plugins/theme-studio.js +141 -0
  710. package/packages/core/dist/plugins/theme-studio.js.map +1 -0
  711. package/packages/core/dist/plugins/token-guard.d.ts +15 -0
  712. package/packages/core/dist/plugins/token-guard.d.ts.map +1 -0
  713. package/packages/core/dist/plugins/token-guard.js +78 -0
  714. package/packages/core/dist/plugins/token-guard.js.map +1 -0
  715. package/packages/core/dist/plugins/tools.d.ts.map +1 -1
  716. package/packages/core/dist/plugins/tools.js +5 -2
  717. package/packages/core/dist/plugins/tools.js.map +1 -1
  718. package/packages/core/dist/plugins/turn-rewind.d.ts +19 -0
  719. package/packages/core/dist/plugins/turn-rewind.d.ts.map +1 -0
  720. package/packages/core/dist/plugins/turn-rewind.js +74 -0
  721. package/packages/core/dist/plugins/turn-rewind.js.map +1 -0
  722. package/packages/core/dist/plugins/undo-savepoint.d.ts +17 -0
  723. package/packages/core/dist/plugins/undo-savepoint.d.ts.map +1 -0
  724. package/packages/core/dist/plugins/undo-savepoint.js +247 -0
  725. package/packages/core/dist/plugins/undo-savepoint.js.map +1 -0
  726. package/packages/core/dist/plugins/vision-toolkit.d.ts +17 -0
  727. package/packages/core/dist/plugins/vision-toolkit.d.ts.map +1 -0
  728. package/packages/core/dist/plugins/vision-toolkit.js +145 -0
  729. package/packages/core/dist/plugins/vision-toolkit.js.map +1 -0
  730. package/packages/core/dist/plugins/web-research.d.ts +17 -0
  731. package/packages/core/dist/plugins/web-research.d.ts.map +1 -0
  732. package/packages/core/dist/plugins/web-research.js +275 -0
  733. package/packages/core/dist/plugins/web-research.js.map +1 -0
  734. package/packages/core/dist/plugins/workspace-navigator.d.ts +36 -0
  735. package/packages/core/dist/plugins/workspace-navigator.d.ts.map +1 -0
  736. package/packages/core/dist/plugins/workspace-navigator.js +150 -0
  737. package/packages/core/dist/plugins/workspace-navigator.js.map +1 -0
  738. package/packages/core/dist/plugins/workspace-search.d.ts +8 -0
  739. package/packages/core/dist/plugins/workspace-search.d.ts.map +1 -0
  740. package/packages/core/dist/plugins/workspace-search.js +134 -0
  741. package/packages/core/dist/plugins/workspace-search.js.map +1 -0
  742. package/packages/core/dist/plugins/yaml-validator.d.ts +8 -0
  743. package/packages/core/dist/plugins/yaml-validator.d.ts.map +1 -0
  744. package/packages/core/dist/plugins/yaml-validator.js +94 -0
  745. package/packages/core/dist/plugins/yaml-validator.js.map +1 -0
  746. package/packages/core/dist/profile.d.ts +1 -0
  747. package/packages/core/dist/profile.d.ts.map +1 -1
  748. package/packages/core/dist/profile.js +3 -0
  749. package/packages/core/dist/profile.js.map +1 -1
  750. package/packages/core/dist/runtime.d.ts.map +1 -1
  751. package/packages/core/dist/runtime.js +13 -4
  752. package/packages/core/dist/runtime.js.map +1 -1
  753. package/packages/core/dist/services.d.ts +55 -0
  754. package/packages/core/dist/services.d.ts.map +1 -1
  755. package/packages/core/dist/services.js +58 -2
  756. package/packages/core/dist/services.js.map +1 -1
  757. package/packages/core/dist/stdio.d.ts +13 -2
  758. package/packages/core/dist/stdio.d.ts.map +1 -1
  759. package/packages/core/dist/stdio.js +75 -9
  760. package/packages/core/dist/stdio.js.map +1 -1
  761. package/packages/core/dist/workspace-path.d.ts +12 -0
  762. package/packages/core/dist/workspace-path.d.ts.map +1 -0
  763. package/packages/core/dist/workspace-path.js +62 -0
  764. package/packages/core/dist/workspace-path.js.map +1 -0
  765. package/packages/core/package.json +18 -8
  766. package/packages/core/profiles/default/cordis.yml +85 -0
  767. package/packages/core/profiles/development/cordis.yml +1 -1
  768. package/packages/core/src/boot.ts +38 -2
  769. package/packages/core/src/config.ts +5 -0
  770. package/packages/core/src/http.ts +32 -0
  771. package/packages/core/src/index.ts +2 -0
  772. package/packages/core/src/plugins/agent-teams.ts +291 -0
  773. package/packages/core/src/plugins/anchored-standard.ts +88 -0
  774. package/packages/core/src/plugins/annotation.ts +106 -0
  775. package/packages/core/src/plugins/archify.ts +124 -0
  776. package/packages/core/src/plugins/at-file.ts +54 -0
  777. package/packages/core/src/plugins/auto-mode.ts +123 -0
  778. package/packages/core/src/plugins/better-sidebar.ts +117 -0
  779. package/packages/core/src/plugins/browser-fetch.ts +171 -0
  780. package/packages/core/src/plugins/browser-session.ts +287 -0
  781. package/packages/core/src/plugins/canvas-draw.ts +90 -0
  782. package/packages/core/src/plugins/change-verifier.ts +79 -0
  783. package/packages/core/src/plugins/cleaner.ts +61 -0
  784. package/packages/core/src/plugins/cli-notifier.ts +125 -0
  785. package/packages/core/src/plugins/code2skill.ts +96 -0
  786. package/packages/core/src/plugins/colleague-skill.ts +122 -0
  787. package/packages/core/src/plugins/context-doctor.ts +117 -0
  788. package/packages/core/src/plugins/context.ts +102 -0
  789. package/packages/core/src/plugins/cost-meter.ts +231 -0
  790. package/packages/core/src/plugins/dependency-checker.ts +241 -0
  791. package/packages/core/src/plugins/docker-sandbox.ts +100 -0
  792. package/packages/core/src/plugins/fail-logger.ts +51 -0
  793. package/packages/core/src/plugins/genui.ts +88 -0
  794. package/packages/core/src/plugins/git-time-capsule.ts +97 -0
  795. package/packages/core/src/plugins/graph-memory.ts +394 -0
  796. package/packages/core/src/plugins/history-compressor.ts +81 -0
  797. package/packages/core/src/plugins/hol-guard.ts +153 -0
  798. package/packages/core/src/plugins/i18n-pair.ts +82 -0
  799. package/packages/core/src/plugins/image-compressor.ts +144 -0
  800. package/packages/core/src/plugins/llm-verifier.ts +164 -0
  801. package/packages/core/src/plugins/mcp-client.ts +559 -0
  802. package/packages/core/src/plugins/mcp-panel.ts +190 -0
  803. package/packages/core/src/plugins/memory.ts +176 -0
  804. package/packages/core/src/plugins/mirage-bridge.ts +179 -0
  805. package/packages/core/src/plugins/mock-server.ts +158 -0
  806. package/packages/core/src/plugins/model.ts +3 -1
  807. package/packages/core/src/plugins/models.ts +5 -2
  808. package/packages/core/src/plugins/modlens.ts +63 -0
  809. package/packages/core/src/plugins/module-search.ts +201 -0
  810. package/packages/core/src/plugins/obsidian-sync.ts +83 -0
  811. package/packages/core/src/plugins/openpets.ts +109 -0
  812. package/packages/core/src/plugins/plan-execute.ts +76 -0
  813. package/packages/core/src/plugins/plugin-check.ts +232 -0
  814. package/packages/core/src/plugins/plugin-dev.ts +47 -0
  815. package/packages/core/src/plugins/plugin-finder.ts +108 -0
  816. package/packages/core/src/plugins/plugin-radar.ts +179 -0
  817. package/packages/core/src/plugins/plugin-stars.ts +205 -0
  818. package/packages/core/src/plugins/prompt-guard.ts +122 -0
  819. package/packages/core/src/plugins/prompt-library.ts +165 -0
  820. package/packages/core/src/plugins/readme-gen.ts +147 -0
  821. package/packages/core/src/plugins/recall-unread.ts +142 -0
  822. package/packages/core/src/plugins/resources.ts +28 -21
  823. package/packages/core/src/plugins/reverse-skill.ts +79 -0
  824. package/packages/core/src/plugins/reviewer-bot.ts +146 -0
  825. package/packages/core/src/plugins/runtime-doctor.ts +137 -0
  826. package/packages/core/src/plugins/runtime.ts +61 -14
  827. package/packages/core/src/plugins/secure-audit.ts +146 -0
  828. package/packages/core/src/plugins/session-bookmarks.ts +89 -0
  829. package/packages/core/src/plugins/session-bridge.ts +299 -0
  830. package/packages/core/src/plugins/session-compare.ts +180 -0
  831. package/packages/core/src/plugins/session-export.ts +99 -0
  832. package/packages/core/src/plugins/session-insights.ts +47 -0
  833. package/packages/core/src/plugins/session-search.ts +126 -0
  834. package/packages/core/src/plugins/session.ts +4 -2
  835. package/packages/core/src/plugins/skill-catalog.ts +117 -0
  836. package/packages/core/src/plugins/skill-guard.ts +152 -0
  837. package/packages/core/src/plugins/sql-lens.ts +92 -0
  838. package/packages/core/src/plugins/stdio.ts +3 -1
  839. package/packages/core/src/plugins/synapse.ts +130 -0
  840. package/packages/core/src/plugins/tab-manager.ts +135 -0
  841. package/packages/core/src/plugins/taskboard.ts +412 -0
  842. package/packages/core/src/plugins/telemetry-blocker.ts +62 -0
  843. package/packages/core/src/plugins/test-harness.ts +67 -0
  844. package/packages/core/src/plugins/theme-studio.ts +165 -0
  845. package/packages/core/src/plugins/token-guard.ts +84 -0
  846. package/packages/core/src/plugins/tools.ts +5 -2
  847. package/packages/core/src/plugins/turn-rewind.ts +86 -0
  848. package/packages/core/src/plugins/undo-savepoint.ts +284 -0
  849. package/packages/core/src/plugins/vision-toolkit.ts +153 -0
  850. package/packages/core/src/plugins/web-research.ts +289 -0
  851. package/packages/core/src/plugins/workspace-navigator.ts +164 -0
  852. package/packages/core/src/plugins/workspace-search.ts +139 -0
  853. package/packages/core/src/plugins/yaml-validator.ts +97 -0
  854. package/packages/core/src/profile.ts +3 -0
  855. package/packages/core/src/runtime.ts +11 -4
  856. package/packages/core/src/services.ts +110 -3
  857. package/packages/core/src/stdio.ts +79 -9
  858. package/packages/core/src/workspace-path.ts +69 -0
  859. package/packages/core/test/agent-teams.test.ts +24 -0
  860. package/packages/core/test/archify.test.ts +33 -0
  861. package/packages/core/test/better-sidebar.test.ts +125 -0
  862. package/packages/core/test/boot.test.ts +49 -6
  863. package/packages/core/test/colleague-skill.test.ts +74 -0
  864. package/packages/core/test/config.test.ts +121 -0
  865. package/packages/core/test/context-doctor.test.ts +32 -0
  866. package/packages/core/test/dependency-checker.test.ts +60 -0
  867. package/packages/core/test/git-time-capsule.test.ts +115 -0
  868. package/packages/core/test/http.test.ts +34 -0
  869. package/packages/core/test/llm-verifier.test.ts +72 -0
  870. package/packages/core/test/mirage-bridge.test.ts +54 -0
  871. package/packages/core/test/module-search.test.ts +78 -0
  872. package/packages/core/test/plugin-check.test.ts +16 -0
  873. package/packages/core/test/plugin-stars.test.ts +55 -0
  874. package/packages/core/test/profiles.integration.test.ts +49 -15
  875. package/packages/core/test/prompt-library.test.ts +56 -0
  876. package/packages/core/test/readme-gen.test.ts +45 -0
  877. package/packages/core/test/recall-unread.test.ts +35 -0
  878. package/packages/core/test/registry.test.ts +48 -0
  879. package/packages/core/test/reverse-skill.test.ts +40 -0
  880. package/packages/core/test/runtime-doctor.test.ts +55 -0
  881. package/packages/core/test/runtime-fixture.ts +4 -4
  882. package/packages/core/test/runtime.test.ts +90 -1
  883. package/packages/core/test/secure-audit.test.ts +16 -0
  884. package/packages/core/test/services.test.ts +2024 -5
  885. package/packages/core/test/session-bookmarks.test.ts +62 -0
  886. package/packages/core/test/session-bridge.test.ts +103 -0
  887. package/packages/core/test/session-compare.test.ts +94 -0
  888. package/packages/core/test/session-export.test.ts +54 -0
  889. package/packages/core/test/session-search.test.ts +30 -0
  890. package/packages/core/test/skill-catalog.test.ts +18 -0
  891. package/packages/core/test/skill-guard.test.ts +21 -0
  892. package/packages/core/test/stdio-args.test.ts +178 -0
  893. package/packages/core/test/theme-studio.test.ts +39 -0
  894. package/packages/core/test/token-guard.test.ts +34 -0
  895. package/packages/core/test/turn-rewind.test.ts +19 -0
  896. package/packages/core/test/vision-toolkit.test.ts +38 -0
  897. package/packages/core/test/workspace-git-status.test.ts +37 -0
  898. package/packages/core/test/workspace-navigator.test.ts +33 -0
  899. package/packages/core/test/workspace-path.test.ts +34 -0
  900. package/packages/core/tsconfig.build.json +1 -3
  901. package/packages/core/tsconfig.json +1 -4
  902. package/packages/host-webserver/LICENSE +9 -0
  903. package/packages/host-webserver/dist/index.js +1 -1
  904. package/packages/host-webserver/dist/index.js.map +1 -1
  905. package/packages/host-webserver/package.json +17 -7
  906. package/packages/host-webserver/src/index.ts +1 -1
  907. package/packages/host-webserver/test/index.test.ts +4 -1
  908. package/packages/host-webserver/tsconfig.build.json +1 -1
  909. package/packages/host-webserver/tsconfig.json +1 -1
  910. package/apps/web/dist/assets/index-Bwqek8LF.js +0 -20
  911. package/apps/web/dist/assets/index-DCHSASjq.css +0 -1
  912. package/packages/api-gateway/dist/marketplace-registry.json +0 -62
  913. package/packages/api-gateway/src/marketplace-registry.json +0 -62
package/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 pi-harness
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -35,7 +35,7 @@ npm run web
35
35
 
36
36
  The web launcher builds the Vite browser bundle, starts the Cordis host, and prints a local URL (by default `http://127.0.0.1:3080`). Set `PI_HARNESS_HOST`, `PI_HARNESS_PORT`, and `PI_AGENT_DIR` to change the bind address, port, or Pi state directory. The browser surface is served by the `@pi-harness/web-app` plugin and talks to `@pi-harness/api-gateway` over `/api/status`, `/api/session`, `/api/sessions`, `/api/session/new`, `/api/session/open`, `/api/models`, `/api/model`, `/api/files`, `/api/prompt`, `/api/abort`, and the `/api/events` Server-Sent Events stream. The launcher refuses non-loopback hosts unless `PI_HARNESS_ALLOW_REMOTE=1` is explicitly set on a trusted network; the API is intended for local use and has no user authentication layer.
37
37
 
38
- The default profile selects `deepseek/deepseek-v4-flash`, stores JSONL sessions under `$PI_AGENT_DIR/sessions`, and loads Pi resources from the current project and agent directory. `PI_AGENT_DIR` defaults to `~/.pi/agent`.
38
+ The default profile selects `everyapi/deepseek-v4-flash`, stores JSONL sessions under `$PI_AGENT_DIR/sessions`, and loads Pi resources from the current project and agent directory. `PI_AGENT_DIR` defaults to `~/.pi/agent`. When the EveryAPI CLI is installed, launch the integrated web surface with `everyapi use pi-harness`; it provisions an isolated Pi agent directory with the EveryAPI provider catalog and starts Pi Harness on its local loopback URL.
39
39
 
40
40
  ## Architecture
41
41
 
@@ -57,6 +57,8 @@ web launcher / CLI launcher
57
57
  └── stdio -> piApplication
58
58
  ```
59
59
 
60
+ An application plugin implements `run(signal?: AbortSignal): Promise<number>`. The signal is aborted when a signal or an exit request ends the run, and a surface that can block must unwind on it; the launcher force-exits one that does not.
61
+
60
62
  Cordis owns module loading, configuration validation, dependency injection, activation ordering, lifecycle effects, rollback, grouping, and development HMR. Pi owns model discovery, project resources, session persistence, tool execution, provider calls, and agent events. There is no parallel plugin registry or lifecycle abstraction.
61
63
 
62
64
  ## CLI
@@ -75,15 +77,25 @@ pih --config ./cordis.yml "Summarize the current directory"
75
77
  pih --profile default --dump-config
76
78
  ```
77
79
 
78
- Launcher options are `--profile`, `--config`, `--dump-config`, `--help`, and `--version`. Remaining arguments are passed unchanged to the active application plugin. The bundled stdio application accepts `--prompt <text>`, a positional prompt, or piped stdin.
80
+ Launcher options are `--profile`, `--config`, `--dump-config`, `--help`, and `--version`. `--profile` and `--config` also accept the inline `--profile=<name>` and `--config=<path>` spellings. The launcher stops recognizing its own options at the first argument that is not one of them, so `pih explain what tar -h prints` sends the whole sentence to the agent instead of printing usage.
81
+
82
+ Remaining arguments are passed unchanged to the active application plugin, including a `--` separator, which the launcher forwards rather than consuming. The bundled stdio application accepts `--prompt <text>`, `--prompt=<text>`, a positional prompt, or piped stdin, and rejects an option-shaped positional prompt unless `--` precedes it:
83
+
84
+ ```sh
85
+ pih -- -v is a version flag, explain it
86
+ ```
79
87
 
80
- The built-in development profile watches the invocation working directory and the launcher automatically supervises a child process with Node's `--expose-internals` flag, which Cordis HMR requires. Cordis performs partial plugin reloads in place and requests a supervised process restart when a framework module changes. Production does not expose Node internals. A custom profile that mounts `@deepseek-ai/cordis-plugin-hmr` must start the CLI entry with `node --expose-internals`.
88
+ `PI_AGENT_DIR` must name an absolute directory. An empty or whitespace-only value is treated as unset, and a relative value is resolved against the invocation directory, so the credential store can never land in the current working directory by accident.
89
+
90
+ The built-in development profile watches the invocation working directory and the launcher automatically supervises a child process with Node's `--expose-internals` flag, which Cordis HMR requires. Cordis performs partial plugin reloads in place and requests a supervised process restart when a framework module changes. The supervisor backs off between restarts and gives up after five restarts in ten seconds so a reload loop cannot fork processes without bound. Production does not expose Node internals.
91
+
92
+ A custom profile that mounts `@deepseek-ai/cordis-plugin-hmr` must start the CLI entry with `node --expose-internals`. Such a process is not supervised, so a Cordis full-reload request writes a diagnostic to stderr and leaves the run in place instead of terminating with a restart exit code that nothing would act on.
81
93
 
82
94
  ## Profiles
83
95
 
84
96
  Profiles are YAML arrays of Cordis Loader entries. Every entry needs a stable `id`, a module `name`, and optional `config`, `inject`, `group`, or `disabled` fields. IDs must be unique across the complete entry tree because Cordis groups share their owning tree's entry store.
85
97
 
86
- Bare module specifiers resolve from the directory containing the profile. Keep project profiles in a package that installs every referenced plugin. Relative specifiers resolve from the same directory.
98
+ Bare module specifiers resolve from the directory containing the profile, so a project profile can name any plugin installed in that project. Relative specifiers resolve from the same directory. Ids must be unique across the complete entry tree, and a collision fails startup rather than silently dropping one of the colliding entries.
87
99
 
88
100
  Pi Harness reads and hot-refreshes profile files but does not persist Loader mutations back into them. This prevents an activation rollback from rewriting a source profile; edit the YAML directly to make changes.
89
101
 
@@ -125,9 +137,17 @@ This uses Cordis injection for deterministic ordering. A late contribution fails
125
137
  ## Failure and security boundaries
126
138
 
127
139
  - A profile can load arbitrary Node.js modules. Treat profile files and plugin packages as executable code.
128
- - Missing modules, invalid configuration, unresolved injections, model lookup failures, and plugin activation failures abort startup and dispose the partial tree.
129
- - The runtime does not fall back to a different model or storage backend.
130
- - Signals cancel startup or abort the active Pi run before the Cordis tree is disposed. Runtime abort and root disposal have a five-second deadline, after which the executable forces the signal-compatible exit code.
140
+ - Project-local Pi resources under the invocation directory's `.pi/` — extensions, settings, and system-prompt overrides — are executable code owned by whoever wrote the repository. They are loaded only when the project is trusted: a decision recorded by Pi's own trust store for that directory, or `trustProject: true` on the `pi-resources` entry. An untrusted project is reported on stderr and its resources are skipped, so `cd`-ing into a cloned repository and running `pih` does not execute its extensions.
141
+ - Extensions under `PI_AGENT_DIR` are user-owned and always load. `session_shutdown` runs before the Pi session is disposed, so an extension's session-scoped resources are released on every exit path.
142
+ - A plugin cannot register a tool whose name belongs to a Pi built-in (`read`, `bash`, `powershell`, `edit`, `write`, `grep`, `find`, `ls`); the collision fails startup instead of silently replacing the built-in in the model's tool table.
143
+ - Missing modules, invalid configuration, unresolved injections, model lookup failures, and plugin activation failures abort startup and dispose the partial tree. Configuration validation rejects unknown keys, so a mistyped `name:` in place of `names:` fails startup instead of silently restoring a default toolset.
144
+ - The runtime does not fall back to a different model or storage backend. A Pi extension that fails to load aborts startup instead of leaving the agent with a silently reduced tool set.
145
+ - The bundled stdio application writes the assistant's answer to stdout and everything else to stderr: one line per tool execution, one per failed tool, and one per provider retry. A run that produces no assistant text, or whose response is truncated by the model's output limit, exits non-zero.
146
+ - A closed stdout (`pih ... | head`) stops output without killing the process, so the Cordis tree is still disposed.
147
+ - Provider traffic goes through the proxy `HTTP_PROXY`, `HTTPS_PROXY` or the `httpProxy` setting names, using Pi's own dispatcher so the harness and `pi` behave identically on a proxied network.
148
+ - An application surface receives an `AbortSignal` and shares the shutdown deadline: one that ignores the signal is force-exited rather than keeping the process alive. Buffered output is flushed before a forced exit, except on a repeated signal, which leaves immediately.
149
+ - Tools an extension registers but the profile does not list are reported on stderr instead of disappearing from the model's tool table.
150
+ - Signals cancel startup or abort the active Pi run before the Cordis tree is disposed. Runtime abort and root disposal have a five-second deadline, after which the executable forces the signal-compatible exit code. A repeated signal during that window forces the exit immediately. A pending prompt read is cancelled too, so a signal never leaves the process alive holding an open stdin pipe, and cancelling the interactive prompt with Ctrl-C exits 130 rather than the usage code 2.
131
151
  - The production profile excludes HMR. Development HMR grants access to Node internal ESM loader APIs only in the relaunched development process.
132
152
  - Existing Pi resources and extensions under `PI_AGENT_DIR` participate in startup and shutdown. Use an isolated agent directory for deterministic tests.
133
153
 
@@ -159,3 +179,7 @@ Before the first release, add the npm automation token as the GitHub Actions sec
159
179
  - `apps/web`: Vite entrypoint and production web launcher
160
180
  - `examples/plugin-hello`: lifecycle-safe external Pi tool plugin
161
181
  - `docs/plans`: accepted architecture and implementation plan
182
+
183
+ ## License
184
+
185
+ MIT. See [LICENSE](./LICENSE).
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-mono:"JetBrains Mono", "SFMono-Regular", Consolas, monospace;--color-white:#fff;--spacing:.25rem;--container-3xl:48rem;--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-semibold:600;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--animate-pulse-soft:pulse-soft 1.4s ease-in-out infinite;--color-ink:#0f1115;--color-muted:#65707b;--color-faint:#687381;--color-line:#0f11151f;--color-soft:#f6f8fa;--color-blue:#3565c5;--color-blue-soft:#edf3fe;--color-green:#14733f;--color-red:#b42318;--color-amber:#f59e0b;--color-empty:#9aa0a6;--color-starter-border:#0f111524}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-fit{height:fit-content}.h-full{height:100%}.max-h-16{max-height:calc(var(--spacing) * 16)}.max-h-28{max-height:calc(var(--spacing) * 28)}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-0{min-height:0}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-20{width:calc(var(--spacing) * 20)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-48{max-width:calc(var(--spacing) * 48)}.max-w-\[65\%\]{max-width:65%}.max-w-\[150px\]{max-width:150px}.min-w-0{min-width:0}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[\#e3e7ee\]>:not(:last-child)){border-color:#e3e7ee}:where(.divide-\[\#eef0f3\]>:not(:last-child)){border-color:#eef0f3}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#9bbcff\]{border-color:#9bbcff}.border-\[\#b8ccf5\]{border-color:#b8ccf5}.border-\[\#b9d0ff\]{border-color:#b9d0ff}.border-\[\#b9e6c9\]{border-color:#b9e6c9}.border-\[\#cdddf8\]{border-color:#cdddf8}.border-\[\#cfe0ff\]{border-color:#cfe0ff}.border-\[\#d9e4f7\]{border-color:#d9e4f7}.border-\[\#dce5f5\]{border-color:#dce5f5}.border-\[\#e3e7ee\]{border-color:#e3e7ee}.border-\[\#e3eaf8\]{border-color:#e3eaf8}.border-\[\#edf0f3\]{border-color:#edf0f3}.border-\[\#eef0f3\]{border-color:#eef0f3}.border-\[\#f0f2f5\]{border-color:#f0f2f5}.border-\[\#f3dfab\]{border-color:#f3dfab}.border-\[\#f4caca\]{border-color:#f4caca}.border-\[\#f4d8a8\]{border-color:#f4d8a8}.border-\[\#f4dfb0\]{border-color:#f4dfb0}.border-\[\#fff0c2\]{border-color:#fff0c2}.bg-\[\#4c83e8\]{background-color:#4c83e8}.bg-\[\#5d8bea\]{background-color:#5d8bea}.bg-\[\#22a06b\]{background-color:#22a06b}.bg-\[\#22c55e\]{background-color:#22c55e}.bg-\[\#32a35a\]{background-color:#32a35a}.bg-\[\#3565c5\]{background-color:#3565c5}.bg-\[\#a0a7b0\]{background-color:#a0a7b0}.bg-\[\#a0a8b2\]{background-color:#a0a8b2}.bg-\[\#c4ccd6\]{background-color:#c4ccd6}.bg-\[\#d7dce2\]{background-color:#d7dce2}.bg-\[\#d64545\]{background-color:#d64545}.bg-\[\#d97706\]{background-color:#d97706}.bg-\[\#dce9ff\]{background-color:#dce9ff}.bg-\[\#dceaff\]{background-color:#dceaff}.bg-\[\#dfe8f7\]{background-color:#dfe8f7}.bg-\[\#dfe8fb\]{background-color:#dfe8fb}.bg-\[\#e0a11a\]{background-color:#e0a11a}.bg-\[\#e4edfd\]{background-color:#e4edfd}.bg-\[\#e6a21a\]{background-color:#e6a21a}.bg-\[\#e6faed\]{background-color:#e6faed}.bg-\[\#e8f8ee\]{background-color:#e8f8ee}.bg-\[\#eaf8f0\]{background-color:#eaf8f0}.bg-\[\#edf3fe\]{background-color:#edf3fe}.bg-\[\#eef0f3\]{background-color:#eef0f3}.bg-\[\#f0edff\]{background-color:#f0edff}.bg-\[\#f0fbf4\]{background-color:#f0fbf4}.bg-\[\#f1f4f9\]{background-color:#f1f4f9}.bg-\[\#f1f6ff\]{background-color:#f1f6ff}.bg-\[\#f2edff\]{background-color:#f2edff}.bg-\[\#f2f3f5\]{background-color:#f2f3f5}.bg-\[\#f4f8ff\]{background-color:#f4f8ff}.bg-\[\#f6f8fa\]{background-color:#f6f8fa}.bg-\[\#f6f8ff\]{background-color:#f6f8ff}.bg-\[\#f7f8fa\]{background-color:#f7f8fa}.bg-\[\#f7faff\]{background-color:#f7faff}.bg-\[\#f8f9fb\]{background-color:#f8f9fb}.bg-\[\#f8f9ff\]{background-color:#f8f9ff}.bg-\[\#f8fafc\]{background-color:#f8fafc}.bg-\[\#fbfcfd\]{background-color:#fbfcfd}.bg-\[\#fef5e7\]{background-color:#fef5e7}.bg-\[\#fff0c7\]{background-color:#fff0c7}.bg-\[\#fff0f0\]{background-color:#fff0f0}.bg-\[\#fff4e5\]{background-color:#fff4e5}.bg-\[\#fff5e7\]{background-color:#fff5e7}.bg-\[\#fff5f5\]{background-color:#fff5f5}.bg-\[\#fff7e8\]{background-color:#fff7e8}.bg-\[\#fff9ed\]{background-color:#fff9ed}.bg-\[\#fffaf0\]{background-color:#fffaf0}.bg-\[\#fffafa\]{background-color:snow}.bg-current{background-color:currentColor}.bg-white{background-color:var(--color-white)}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.bg-white\/70{background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-7{padding:calc(var(--spacing) * 7)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-px{padding-block:1px}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-7{padding-bottom:calc(var(--spacing) * 7)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[17px\]{font-size:17px}.text-\[20px\]{font-size:20px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.03em\]{--tw-tracking:-.03em;letter-spacing:-.03em}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#0f1115\]{color:#0f1115}.text-\[\#3b424b\]{color:#3b424b}.text-\[\#5d6d82\]{color:#5d6d82}.text-\[\#6b4fc3\]{color:#6b4fc3}.text-\[\#6d4bc3\]{color:#6d4bc3}.text-\[\#7f1d1d\]{color:#7f1d1d}.text-\[\#8a5a00\]{color:#8a5a00}.text-\[\#8a6200\]{color:#8a6200}.text-\[\#9a6700\]{color:#9a6700}.text-\[\#315fb8\]{color:#315fb8}.text-\[\#3565c5\]{color:#3565c5}.text-\[\#14733f\]{color:#14733f}.text-\[\#20252b\]{color:#20252b}.text-\[\#30343b\]{color:#30343b}.text-\[\#59636e\]{color:#59636e}.text-\[\#61666b\]{color:#61666b}.text-\[\#65707b\]{color:#65707b}.text-\[\#253044\]{color:#253044}.text-\[\#687381\]{color:#687381}.text-\[\#a15c00\]{color:#a15c00}.text-\[\#b42318\]{color:#b42318}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-\[0_8px_24px_rgba\(27\,39\,64\,0\.04\)\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#1b27400a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.outline-none{--tw-outline-style:none;outline-style:none}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-\[\#bdd0f5\]:hover{border-color:#bdd0f5}.hover\:bg-\[\#fbfdff\]:hover{background-color:#fbfdff}.hover\:underline:hover{text-decoration-line:underline}}@media (width>=40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=64rem){.lg\:grid-cols-\[minmax\(0\,1fr\)_280px\]{grid-template-columns:minmax(0,1fr) 280px}}@media (width>=80rem){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes pulse-soft{50%{opacity:.3}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0;overflow:hidden}body{color:var(--color-ink);-webkit-font-smoothing:antialiased;font:13px/1.5 var(--font-sans);background:#fff}button,input,textarea,select{color:inherit;font:inherit}button{cursor:pointer;background:0 0;border:0}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible,a:focus-visible,[role=button]:focus-visible{outline:2px solid var(--color-blue);outline-offset:2px}button:disabled{cursor:not-allowed;opacity:.55}[hidden]{display:none!important}.app-frame{background:#fff;width:100%;height:100%;display:flex;overflow:hidden}.sidebar{background:var(--color-soft);border-right:1px solid #0000000f;flex-direction:column;flex:0 0 264px;width:264px;min-height:0;display:flex}.brand-row{flex:0 0 48px;align-items:center;gap:9px;height:48px;padding:0 14px;display:flex}.brand-row strong{letter-spacing:-.1px;font-size:13px;font-weight:600}.pi-mark{background:var(--color-ink);border-radius:6px;flex:none;place-items:center;width:22px;height:22px;display:grid;overflow:hidden}.pi-mark.large{border-radius:11px;width:38px;height:38px}.pi-mark img{object-fit:contain;width:82%;height:82%}.version{color:var(--color-faint);font:10px var(--font-mono);margin-left:auto}.sidebar-actions{flex-direction:column;gap:8px;padding:0 10px 10px;display:flex;position:relative}.new-session{color:#fff;background:var(--color-ink);border-radius:8px;justify-content:center;align-items:center;gap:6px;height:32px;font-size:12.5px;font-weight:500;display:flex}.new-session:hover,.send-button:hover{background:#43454a}.workspace-chooser{z-index:60;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0f172a52;place-items:center;padding:40px;display:grid;position:fixed;inset:0}.workspace-chooser-dialog{background:#fff;border:1px solid #0f172a24;border-radius:10px;flex-direction:column;gap:2px;width:100%;max-width:640px;max-height:min(680px,100vh - 96px);padding:14px;display:flex;overflow:auto;box-shadow:0 28px 80px #0f172a42}.workspace-chooser-heading{justify-content:space-between;align-items:center;padding:3px 4px 4px 6px;display:flex}.workspace-chooser-heading strong{font-size:12px}.workspace-chooser-heading button{width:24px;height:24px;color:var(--color-muted);border-radius:6px}.workspace-chooser-dialog>small{color:var(--color-faint);padding:0 6px 8px;font-size:10px}.workspace-pick-directory{text-align:left;border:1px solid var(--color-line);background:#fff;border-radius:8px;justify-content:space-between;align-items:center;padding:9px 8px;display:flex}.workspace-pick-directory:hover{border-color:var(--color-blue);background:var(--color-blue-soft)}.workspace-pick-directory span{font-size:11.5px;font-weight:600}.workspace-pick-directory small{color:var(--color-faint);font-size:10px}.workspace-chooser-divider{color:var(--color-faint);align-items:center;gap:8px;padding:0 6px 5px;font-size:9px;display:flex}.workspace-chooser-divider:before,.workspace-chooser-divider:after{content:"";background:var(--color-line);flex:1;height:1px}.workspace-chooser-empty{color:var(--color-faint);padding:20px 6px;font-size:11px}.workspace-chooser-error{color:#b42318;background:#fff5f5;border:1px solid #b91c1c2e;border-radius:7px;margin:0 6px 7px;padding:8px 9px;font-size:10.5px;line-height:1.45}.workspace-chooser-row{text-align:left;border-radius:7px;align-items:center;gap:8px;min-height:48px;padding:7px 6px;display:flex}.workspace-chooser-row:hover{background:var(--color-blue-soft)}.workspace-chooser-row>span:nth-child(2){flex-direction:column;flex:1;min-width:0;display:flex}.workspace-chooser-row strong,.workspace-chooser-row code{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.workspace-chooser-row strong{font-size:11.5px}.workspace-chooser-row code{color:var(--color-faint);font:9px var(--font-mono);margin-top:2px}.workspace-chooser-row>small{color:var(--color-faint);font:9px var(--font-mono);flex:none}.sidebar-actions input{background:#fff;border:1px solid #0000001a;border-radius:8px;width:100%;height:30px;padding:0 10px;font-size:12px}.sidebar-actions input:focus-visible{border-color:#4176e68c;box-shadow:0 0 0 3px #4176e61f}.sidebar-scroll{flex:1;min-height:0;padding:0 8px 8px;overflow:auto}.session-group{margin-bottom:8px}.group-label{letter-spacing:.04em;color:var(--color-faint);padding:6px 8px 4px;font-size:10px}.session-row{text-align:left;border-radius:8px;align-items:center;gap:7px;width:100%;padding:7px 9px;display:flex}.session-row-wrap{align-items:center;gap:4px;display:flex}.session-row-wrap>input{accent-color:var(--color-blue);margin:0 0 0 6px}.session-list-toolbar{border-bottom:1px solid #0000000f;justify-content:space-between;align-items:center;padding:2px 14px 6px;display:flex}.session-list-title{align-items:baseline;gap:6px;display:flex}.session-list-title strong{font-size:12px;font-weight:600}.session-list-title span{color:var(--color-faint);font:10px var(--font-mono)}.session-list-tools{align-items:center;gap:3px;display:flex}.session-tool-button{height:25px;color:var(--color-muted);border-radius:6px;padding:0 7px;font-size:11px}.session-tool-button:hover,.session-tool-button.active{color:var(--color-blue);background:#e9eef8}.session-tool-button.icon{width:26px;padding:0;font-size:15px}.session-tools-wrap{position:relative}.session-tools-popover{z-index:40;background:#fff;border:1px solid #0000001a;border-radius:9px;flex-direction:column;width:150px;padding:4px;display:flex;position:absolute;top:30px;right:0;box-shadow:0 12px 30px #0f172a29}.session-tools-popover button{text-align:left;border-radius:6px;padding:7px 8px;font-size:11px}.session-tools-popover button:hover{background:var(--color-soft)}.session-row-wrap{position:relative}.session-row-more{pointer-events:none;width:24px;height:24px;color:var(--color-muted);opacity:0;background:#fff;border-radius:6px;font-size:14px;display:block;position:absolute;right:6px}.session-row-wrap:hover .session-row-more,.session-row-wrap:focus-within .session-row-more,.session-row-more:focus-visible{pointer-events:auto;opacity:1}.session-row-more:hover{color:var(--color-blue);background:#e9eef8}.session-row-menu-popover{z-index:45;background:#fff;border:1px solid #0f172a24;border-radius:8px;flex-direction:column;width:142px;padding:4px;display:flex;position:absolute;top:calc(100% - 2px);right:6px;box-shadow:0 10px 24px #0f172a2e}.session-row-menu-popover button{text-align:left;border-radius:5px;padding:6px 8px;font-size:11px}.session-row-menu-popover button:hover{background:var(--color-soft)}.session-row-menu-popover button.danger{color:var(--color-red)}.current-session-row .session-row-more{right:4px}.compact-session-menu{width:190px}.session-dialog-backdrop{z-index:80;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#0f172a47;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.session-dialog{background:#fff;border:1px solid #0f172a24;border-radius:10px;width:100%;max-width:380px;box-shadow:0 24px 70px #0f172a38}.session-dialog-header{justify-content:space-between;align-items:flex-start;gap:18px;padding:16px 17px 10px;display:flex}.session-dialog-header strong,.session-dialog-header small{display:block}.session-dialog-header strong{font-size:14px}.session-dialog-header small{color:var(--color-muted);margin-top:4px;font-size:11px;line-height:1.45}.session-dialog-header button{width:24px;height:24px;color:var(--color-muted);border-radius:6px;font-size:17px}.session-dialog-header button:hover{background:var(--color-soft)}.session-dialog-field{flex-direction:column;gap:5px;padding:5px 17px 15px;font-size:11px;font-weight:600;display:flex}.session-dialog-field input{border:1px solid var(--color-line);border-radius:7px;height:34px;padding:0 9px;font-size:12px;font-weight:400}.session-dialog-field input:focus{border-color:var(--color-blue);box-shadow:0 0 0 3px #4176e61f}.session-dialog-target{text-overflow:ellipsis;white-space:nowrap;color:var(--color-muted);background:var(--color-soft);font:11px var(--font-mono);border-radius:7px;margin:5px 17px 15px;padding:9px;overflow:hidden}.session-dialog-actions{border-top:1px solid #0000000f;justify-content:flex-end;gap:7px;padding:11px 17px 15px;display:flex}.session-dialog-actions button{border:1px solid var(--color-line);border-radius:7px;height:30px;padding:0 11px;font-size:11px}.session-dialog-actions button.primary{border-color:var(--color-ink);color:#fff;background:var(--color-ink)}.session-dialog-actions button.danger{color:var(--color-red);background:#fff5f5;border-color:#b91c1c33}.config-editor{flex-direction:column;min-height:0;display:flex}.toml-toolbar>div{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.toml-toolbar strong{color:var(--color-ink);font-size:12px}.toml-toolbar span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.config-state{color:var(--color-blue);font:10px var(--font-mono);margin:-3px 0 9px}.config-state.error{color:var(--color-red)}.config-source{resize:vertical;white-space:pre;color:#334155;border:1px solid var(--color-line);width:100%;min-height:420px;font:11px/1.7 var(--font-mono);background:#f8fafc;border-radius:10px;margin:0;padding:16px;display:block;overflow:auto}.config-source:focus{border-color:var(--color-blue);box-shadow:0 0 0 3px #4176e61f}.config-source-editor{flex-direction:column;gap:8px;display:flex}.config-source-actions{justify-content:space-between;align-items:center;gap:12px;display:flex}.config-source-actions small{color:var(--color-muted);font-size:10.5px}.config-source-actions button{color:#fff;background:var(--color-ink);border-radius:7px;flex:none;height:30px;padding:0 11px;font-size:11px}.config-sections{grid-template-columns:1fr 1fr;gap:12px;display:grid}.config-section{border:1px solid var(--color-line);background:#fff;border-radius:10px;padding:13px}.config-section:last-child{grid-column:1/-1}.config-section>header{flex-direction:column;gap:2px;margin-bottom:10px;display:flex}.config-section>header strong{font-size:12.5px}.config-section>header small,.config-toggle small{color:var(--color-muted);font-size:10.5px}.config-field{border-bottom:1px solid #0000000d;justify-content:space-between;align-items:center;gap:12px;min-height:35px;font-size:11.5px;display:flex}.config-field:last-child{border-bottom:0}.config-field select{border:1px solid var(--color-line);background:#fff;border-radius:6px;max-width:65%;padding:5px 7px;font-size:11px}.config-toggle{border-bottom:1px solid #0000000d;justify-content:space-between;align-items:center;gap:14px;padding:7px 0;display:flex}.config-toggle:last-child{border-bottom:0}.config-toggle span{flex-direction:column;gap:2px;display:flex}.config-toggle strong{font-size:11.5px}.config-toggle input{width:16px;height:16px;accent-color:var(--color-blue)}.session-batch-bar,.session-pagination{color:var(--color-muted);align-items:center;gap:7px;padding:7px 12px;font-size:11px;display:flex}.session-batch-bar button,.session-pagination button{border:1px solid var(--color-line);background:#fff;border-radius:6px;padding:4px 8px;font-size:11px}.session-batch-bar button.danger{color:var(--color-red)}.session-pagination{justify-content:space-between}.session-row:hover{background:#f1f3f5}.session-row.active{background:#ebeef2}.session-dot{background:#cfd3d6;border-radius:50%;flex:none;width:6px;height:6px}.session-dot.running{animation:var(--animate-pulse-soft);background:var(--color-green)}.session-dot.ok{background:var(--color-green)}.session-dot.warn{background:var(--color-amber)}.session-dot.error{background:var(--color-red)}.session-copy{flex-direction:column;gap:2px;min-width:0;display:flex}.session-copy strong{text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;overflow:hidden}.session-copy small{text-overflow:ellipsis;white-space:nowrap;color:var(--color-faint);font:10px var(--font-mono);overflow:hidden}.runtime-cells{color:var(--color-faint);font:9.5px var(--font-mono);border-top:1px solid #0000000f;flex-wrap:wrap;gap:4px 12px;padding:8px 19px 9px;display:flex}.runtime-cells span{gap:5px;display:flex}.runtime-cells b{font-weight:400}.runtime-cells strong{color:#61666b;font-weight:400}.sidebar-footer{border-top:1px solid #0000000f;flex-direction:column;gap:2px;padding:6px 10px 8px;display:flex}.sidebar-link{text-align:left;border-radius:8px;align-items:center;gap:9px;height:30px;padding:0 9px;font-size:12.5px;display:flex}.compact-new-session{display:none}.sidebar-link:hover{background:#f1f3f5}.sidebar-link span:nth-child(2){flex:1}.sidebar-link b{color:#61666b;font-weight:400;font:10px var(--font-mono);background:#ebeef2;border-radius:20px;padding:1px 6px}.link-glyph{color:var(--color-blue);font:11.5px var(--font-mono)}.main-pane{flex-direction:column;flex:1;min-width:0;display:flex}.main-header{border-bottom:1px solid #0000000f;flex:0 0 48px;align-items:center;gap:12px;height:48px;padding:0 24px;display:flex;position:relative}.refresh-warning{color:#7c5622;background:#fffaf0;border-bottom:1px solid #f3d7aa;flex:none;align-items:center;gap:12px;min-height:42px;padding:8px 24px;font-size:11.5px;display:flex}.refresh-warning span{flex:1;min-width:0}.refresh-warning strong{color:#8a4b12;margin-right:6px}.refresh-warning button{color:#8a4b12;background:#fff;border:1px solid #e8c58c;border-radius:7px;flex:none;min-height:30px;padding:4px 10px}.initial-loading{color:var(--color-muted);font:11.5px var(--font-mono);flex:1;justify-content:center;align-items:center;gap:9px;display:flex}.initial-loading>span{border-top-color:var(--color-blue);border:2px solid #d9e2f4;border-radius:50%;width:14px;height:14px;animation:.8s linear infinite control-room-spin}@keyframes control-room-spin{to{transform:rotate(360deg)}}.active-heading{flex-direction:column;min-width:0;display:flex}.active-heading strong,.active-heading small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.active-heading strong{font-size:13px;font-weight:600}.active-heading small{color:var(--color-faint);font:10px var(--font-mono)}.header-spacer{flex:1}.run-indicator{color:#61666b;font:10.5px var(--font-mono);flex:none;align-items:center;gap:6px;display:flex}.run-indicator .run-dot{width:6px;height:6px;animation:var(--animate-pulse-soft);background:var(--color-green);border-radius:50%}.run-indicator>span:not(.run-dot){white-space:nowrap}.run-indicator button{color:var(--color-red);border:1px solid #ec13133d;border-radius:6px;padding:2px 8px;font-size:11px}.run-indicator.running .run-dot{background:var(--color-blue)}.view-tabs{background:#f1f3f5;border-radius:8px;gap:2px;padding:2px;display:flex}.view-tab{color:var(--color-muted);border-radius:6px;padding:4px 11px;font-size:12px}.view-tab.active{color:var(--color-ink);background:#fff;font-weight:600;box-shadow:0 1px 3px #00000014}.header-divider{background:#00000014;flex:none;width:1px;height:18px}.session-menu,.details-toggle{color:#61666b;background:#fff;border:1px solid #0000001a;border-radius:8px;height:28px}.session-menu{width:28px;font-size:15px;position:relative}.details-toggle{padding:0 9px;font-size:12px}.session-menu:hover,.details-toggle:hover{background:#f1f3f5}.view-host,.view-panel{flex-direction:column;flex:1;min-height:0;display:flex}.chat-scroll{flex:1;min-height:0;padding:20px 24px 4px;overflow-y:auto}.turn{max-width:748px;margin:0 auto 16px;font-size:13.5px;line-height:1.78}.turn.user{justify-content:flex-end;display:flex}.user-bubble{white-space:pre-wrap;background:var(--color-blue-soft);border-radius:10px;max-width:84%;padding:10px 14px}.pending-turn .user-bubble{opacity:.72}.turn-markdown{min-width:0;margin:0;font-size:13.5px;line-height:1.78}.turn-markdown p{white-space:pre-wrap;margin:0 0 10px}.turn-markdown p:last-child{margin-bottom:0}.turn-markdown h1,.turn-markdown h2,.turn-markdown h3,.turn-markdown h4,.turn-markdown h5,.turn-markdown h6{margin:16px 0 8px;font-weight:600;line-height:1.35}.turn-markdown h1{font-size:20px}.turn-markdown h2{font-size:17px}.turn-markdown h3{font-size:15px}.turn-markdown h4,.turn-markdown h5,.turn-markdown h6{font-size:13.5px}.turn-markdown ul,.turn-markdown ol{margin:0 0 10px;padding-left:22px}.turn-markdown li{padding-left:3px}.turn-markdown blockquote{color:#61666b;border-left:2px solid #d9e2f4;margin:0 0 10px;padding-left:12px}.turn-markdown code{font:12px var(--font-mono);background:#f1f3f5;border-radius:4px;padding:1px 4px}.turn-markdown .markdown-code{white-space:pre;color:#e5e7eb;line-height:1.6;font:12px var(--font-mono);background:#111827;border-radius:8px;margin:0 0 12px;padding:12px 14px;overflow:auto}.turn-markdown .markdown-code code{color:inherit;background:0 0;padding:0}.turn-markdown a{color:var(--color-blue);text-underline-offset:2px;text-decoration:underline}.reasoning-head{color:var(--color-muted);align-items:center;gap:6px;padding:0;font-size:11.5px;display:flex}.reasoning-head .caret{color:var(--color-faint);font-size:9px}.reasoning-body{white-space:pre-wrap;color:#61666b;border-left:2px solid #ebeef2;margin:6px 0 0;padding-left:11px;font-size:12.5px;line-height:1.75;display:none}.reasoning[open] .reasoning-body{display:block}.message-reasoning{margin-bottom:10px}.message-reasoning .reasoning-body{margin-top:6px}.visually-hidden{white-space:nowrap;clip:rect(0,0,0,0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.streaming-placeholder{color:var(--color-muted);font-size:12px}.plugin-event{height:30px;color:var(--color-blue);font:11px var(--font-mono);background:#f7faff;border:1px dashed #4176e659;border-radius:8px;align-items:center;gap:8px;padding:0 11px;display:flex}.plugin-event>span:last-child{text-overflow:ellipsis;white-space:nowrap;color:#61666b;font:12px var(--font-sans);overflow:hidden}.plugin-hook{background:#e4edfd;border-radius:4px;padding:1px 6px;color:#687381!important;font:10px var(--font-mono)!important}.tool-card,.approval-card,.subagent-card,.todo-card{border:1px solid var(--color-line);background:#fff;border-radius:10px;overflow:hidden}.tool-head,.subagent-head{text-align:left;background:#fff;align-items:center;gap:9px;width:100%;min-height:34px;padding:7px 11px;display:flex}.tool-head{font:11.5px var(--font-mono)}.tool-glyph{width:12px;color:var(--color-muted)}.tool-target,.subagent-goal{text-overflow:ellipsis;white-space:nowrap;color:var(--color-muted);font-size:11px;overflow:hidden}.tool-head .tool-target,.subagent-goal{flex:1}.tool-stat{color:var(--color-muted)}.tool-detail-link{color:var(--color-blue);font:10.5px var(--font-sans)}.tool-output,.diff-preview,.toml{word-break:break-word;white-space:pre-wrap;color:#61666b;background:var(--color-soft);font:11.5px/1.7 var(--font-mono);border-top:1px solid #0000000f;margin:0;padding:10px 12px}.diff-line{font:11.5px/1.7 var(--font-mono);gap:10px;padding:0 8px;display:flex}.diff-line.added{background:#e6faed}.diff-line.removed{background:#fff0f0}.diff-no{text-align:right;width:30px;color:var(--color-faint)}.diff-sign{width:8px;color:var(--color-green)}.diff-line.removed .diff-sign{color:var(--color-red)}.approval-card{background:#fffaf0;border-color:#f59e0b66;padding:11px 13px}.approval-card pre{background:0 0;border:0;padding:8px 0}.approval-actions{gap:7px;margin-top:4px;display:flex}.approval-actions button{border:1px solid var(--color-line);background:#fff;border-radius:7px;padding:5px 11px;font-size:11.5px}.approval-actions .primary{color:#fff;background:var(--color-ink)}.approval-actions .danger{color:var(--color-red)}.subagent-head{font-size:12.5px}.subagent-glyph{color:#3565c5;font:11px var(--font-mono)}.subagent-preset{color:#687381;font:10.5px var(--font-mono);background:#e4edfd;border-radius:4px;padding:1px 6px}.subagent-duration{color:var(--color-faint);font:10.5px var(--font-mono)}.subagent-body{border-top:1px solid #0000000f;padding:4px 11px 9px;display:block}.subagent-lineage{color:var(--color-faint);font:10px var(--font-mono);padding:6px 0 4px;display:block}.subagent-step{border-left:2px solid #e4edfd;align-items:center;gap:8px;padding:4px 0 4px 10px;display:flex}.subagent-step code{width:42px;color:var(--color-muted);font:10.5px var(--font-mono)}.subagent-step span{text-overflow:ellipsis;white-space:nowrap;color:#61666b;font:11px var(--font-mono);flex:1;overflow:hidden}.subagent-step small{color:var(--color-faint);font:10px var(--font-mono)}.subagent-body p{border-top:1px solid #0000000f;margin:8px 0 0;padding-top:8px}.todo-head{border-bottom:1px solid #0000000f;align-items:center;gap:8px;height:32px;padding:0 11px;display:flex}.todo-head small{color:var(--color-faint);font:10.5px var(--font-mono)}.todo-row{border-bottom:1px solid #0000000a;align-items:flex-start;gap:9px;padding:7px 11px;display:flex}.todo-row.done{color:var(--color-muted);text-decoration:line-through}.todo-mark{color:var(--color-green);font:11px var(--font-mono)}.stats-row{color:var(--color-faint);font:10.5px var(--font-mono);flex-wrap:wrap;gap:14px;display:flex}.composer-wrap{flex:none;padding:8px 24px 14px}.composer-stack{width:100%;max-width:960px;margin:0 auto;position:relative}.context-line{max-width:748px;color:var(--color-faint);font:10.5px var(--font-mono);align-items:center;gap:9px;margin:0 auto 8px;display:flex}.context-line b{color:var(--color-muted);font-weight:400}.context-line button{color:var(--color-blue);padding:0;font-size:11px}.context-bar{background:#ebeef2;border-radius:3px;flex:1;height:4px;display:flex;overflow:hidden}.context-bar i{height:100%}.context-bar.expanded{height:8px}.context-breakdown{max-width:748px;color:var(--color-faint);font:10px var(--font-mono);gap:14px;margin:-2px auto 8px;display:flex}.context-breakdown span{align-items:center;gap:4px;display:inline-flex}.context-breakdown b{color:var(--color-muted);font-weight:400}.composer{background:#fff;border:1px solid #0000001f;border-radius:10px;max-width:748px;margin:0 auto;position:relative;overflow:visible;box-shadow:0 1px 2px #00000008}.composer textarea{resize:none;width:100%;min-height:65px;max-height:180px;color:var(--color-ink);background:0 0;border:0;padding:11px 13px 4px;font-size:13.5px;line-height:1.7;display:block;overflow-y:auto}.composer-tools{align-items:center;gap:6px;padding:6px 8px 8px;display:flex}.composer-tools select,.tool-chip{height:26px;font:11px var(--font-mono);background:#fff;border:1px solid #0000001a;border-radius:7px;padding:0 7px}.tool-chip{font-family:var(--font-sans);color:#61666b;padding:0 9px;font-size:11.5px}.composer-hint{text-align:right;color:#687381;font:10px var(--font-mono);flex:1}.send-button{color:#fff;background:var(--color-ink);border-radius:8px;width:28px;height:28px;font-size:15px}.send-button:disabled{cursor:not-allowed;opacity:.45}.prompt-completion{z-index:30;background:#fff;border:1px solid #0f172a24;border-radius:10px;max-height:300px;padding:7px;position:absolute;bottom:calc(100% + 8px);left:8px;right:8px;overflow:auto;box-shadow:0 14px 36px #0f172a2e}.prompt-completion>small{letter-spacing:.08em;color:var(--color-faint);font:10px var(--font-mono);padding:5px 8px 7px;display:block}.prompt-completion button{text-align:left;border-radius:7px;align-items:baseline;gap:12px;width:100%;min-height:38px;padding:8px;display:flex}.prompt-completion button[aria-selected=true]{color:var(--color-blue);background:var(--color-blue-soft)}.prompt-completion button strong{text-overflow:ellipsis;white-space:nowrap;width:210px;font:11px var(--font-mono);flex:none;overflow:hidden}.prompt-completion button span{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--color-muted);font-size:11px;overflow:hidden}.prompt-completion-empty{color:var(--color-faint);padding:9px 8px;font-size:11px;display:block}.new-session-screen{text-align:center;flex-direction:column;align-items:center;gap:11px;max-width:580px;margin:0 auto;padding:40px 0;display:flex}.new-session-screen h2{margin:0;font-size:16.5px}.new-session-screen p{color:var(--color-muted);margin:0}.workspace-picker{text-align:left;gap:6px;width:100%;margin-top:12px;display:grid}.workspace-row{text-align:left;border:1px solid var(--color-line);background:#fff;border-radius:9px;align-items:center;gap:10px;width:100%;padding:10px 12px;display:flex}.workspace-row:hover{background:var(--color-soft);border-color:#4176e666}.workspace-row code{text-overflow:ellipsis;white-space:nowrap;font:12px var(--font-mono);flex:1;overflow:hidden}.workspace-row small{color:var(--color-faint);font:10px var(--font-mono);margin-top:3px;display:block}.workspace-row .offline{color:#687381}.effective-config{text-align:left;background:var(--color-soft);border:1px solid #00000014;border-radius:10px;flex-wrap:wrap;align-items:center;gap:10px;width:100%;padding:9px 12px;display:flex}.effective-config code{color:var(--color-faint);font:10.5px var(--font-mono)}.effective-config span{color:#61666b;font:10.5px var(--font-mono)}.trajectory-summary{color:var(--color-muted);border-bottom:1px solid var(--color-line);flex:none;padding:12px 24px 10px;font-size:11.5px}.trajectory-summary b{color:var(--color-faint);font-weight:400;font:10.5px var(--font-mono);margin-left:9px}.timeline{gap:3px;height:26px;margin-top:8px;display:flex}.timeline-turn{background:#ebeef2;border-radius:3px;align-items:stretch;padding:0;display:flex;overflow:hidden}.timeline-strip{opacity:.9;width:100%;display:block}.source-filters{border-bottom:1px solid var(--color-line);flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:9px 24px;display:flex}.filter{color:var(--color-muted);border:1px solid #0000001a;border-radius:20px;align-items:center;gap:6px;padding:3px 9px;font-size:11.5px;display:flex}.filter.active{color:var(--color-blue);background:var(--color-blue-soft);border-color:#4176e659}.filter b{color:var(--color-faint);font-weight:400;font:10px var(--font-mono)}.event-count{color:var(--color-faint);font:10.5px var(--font-mono);margin-left:auto}.event-table{flex:1;min-height:0;overflow:auto}.event-head,.event-row{grid-template-columns:78px 132px 1fr 88px 68px;align-items:center;gap:12px;padding:7px 24px;display:grid}.event-head{letter-spacing:.04em;color:var(--color-faint);text-transform:uppercase;background:var(--color-soft);font:10px var(--font-mono);border-bottom:1px solid #0000000f}.event-row{text-align:left;border-bottom:1px solid #0000000a;width:100%;font-size:12px}.event-row:hover{background:var(--color-soft)}.event-row>span,.event-row code{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.event-row>span:first-child,.event-row>span:last-child{color:var(--color-faint);font:10.5px var(--font-mono)}.event-row strong{text-overflow:ellipsis;white-space:nowrap;font-weight:400;overflow:hidden}.event-row>span:nth-child(2){color:#61666b;font:11px var(--font-mono);align-items:center;gap:7px;display:flex}.event-dot{background:var(--color-blue);border-radius:2px;flex:none;width:6px;height:6px}.files-content{flex:1;width:100%;max-width:none;min-height:0;padding:24px;overflow:auto}.files-title{align-items:baseline;gap:10px;margin-bottom:14px;display:flex}.files-title strong{font-size:13px}.files-title span{color:var(--color-faint);font:11px var(--font-mono)}.file-list{border:1px solid var(--color-line);border-radius:10px;overflow:hidden}.file-row{border-bottom:1px solid #0000000a;align-items:center;gap:12px;padding:10px 13px;display:flex}.file-row:last-child{border-bottom:0}.file-row code{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:12px var(--font-mono);flex:1;overflow:hidden}.file-kind{color:#61666b;font:10px var(--font-mono);background:#f1f3f5;border-radius:4px;padding:1px 6px}.file-kind.new{color:#14733f;background:#e6faed}.file-row .add{color:var(--color-green);font:11px var(--font-mono)}.file-row .del{color:var(--color-red);font:11px var(--font-mono)}.diff-button{color:var(--color-blue);font-size:11.5px}.file-actions{align-items:center;gap:8px;margin-top:12px;display:flex}.file-actions input{border:1px solid var(--color-line);background:#fff;border-radius:7px;flex:1;min-width:180px;height:34px;padding:0 10px;font-size:12px}.file-actions input:focus{border-color:var(--color-blue)}.file-actions button{border:1px solid var(--color-line);background:#fff;border-radius:7px;min-height:34px;padding:6px 11px;font-size:11.5px}.file-actions .primary{color:#fff;background:var(--color-ink)}.files-error{color:#8f2b2b;background:#fff8f8;border:1px solid #ec131329;border-radius:8px;margin:12px 0 0;padding:9px 11px;font-size:11.5px}.details-panel{background:#fff;border-left:1px solid #0000001a;flex-direction:column;flex:0 336px;width:336px;min-width:268px;min-height:0;display:flex}.details-panel>header{border-bottom:1px solid #0000000f;flex:0 0 56px;align-items:center;gap:8px;height:56px;padding:0 12px 0 16px;display:flex}.details-panel>header strong{flex:1;font-size:13px}.details-panel>header button{width:32px;height:32px;color:var(--color-muted);border-radius:7px;flex:none;place-items:center;font-size:19px;line-height:1;display:grid}.details-panel>header button:hover{background:var(--color-soft)}.details-body{flex:1;min-height:0;padding:16px;overflow:auto}.detail-stats{grid-template-columns:1fr 1fr;gap:7px;margin-bottom:12px;display:grid}.detail-stats>div{border:1px solid #00000014;border-radius:8px;padding:9px}.detail-stats small,.detail-section>small{letter-spacing:.04em;color:var(--color-faint);font:9.5px var(--font-mono);display:block}.detail-stats b{font-weight:400;font:12.5px var(--font-mono);margin-top:2px;display:block}.detail-section{flex-direction:column;gap:5px;margin-top:14px;display:flex}.detail-plugin{overflow-wrap:anywhere;color:var(--color-blue);font:10.5px var(--font-mono);border:1px solid #00000014;border-radius:8px;padding:6px 9px;display:block}.raw-json{margin:14px 0 0}.plugins-view{min-width:0}.plugins-page{flex-direction:column;flex:1;min-height:0;display:flex}.subnav{min-height:48px;color:var(--color-muted);border-bottom:1px solid var(--color-line);flex:none;align-items:center;gap:12px;padding:8px 24px;font-size:11.5px;display:flex}.subnav>a{color:var(--color-blue);margin-left:auto}.subnav.plugin-detail-subnav{justify-content:flex-start;padding-inline:24px}.subnav.plugin-detail-subnav>a{margin-left:0}.plugin-detail-content{width:100%;max-width:none;margin:0;padding:32px 24px;container-type:inline-size}.plugin-detail-content>header{min-height:207px}@container (width<=600px){.plugin-detail-content>header{min-height:235px}}@container (width<=500px){.plugin-detail-content>header{min-height:299px}}@container (width<=320px){.plugin-detail-content>header{min-height:345px}}.plugin-detail-actions{flex-wrap:wrap;gap:8px;display:flex}.plugin-detail-action{color:#20252b;background:#fff;border:1px solid #0000001a;border-radius:6px;min-height:36px;padding:6px 12px;font-size:12px}.plugin-detail-action:hover{background:#f8faff;border-color:#4176e652}.plugin-detail-action.primary{color:#fff;background:#20252b;border-color:#20252b}.plugin-detail-action.primary:hover{background:#343a42;border-color:#343a42}.plugin-detail-action.danger{color:#b42318;background:#fff5f5;border-color:#f0caca}.plugin-detail-action.danger:hover{background:#ffeded;border-color:#e7abab}.segmented{background:#f1f3f5;border-radius:8px;gap:2px;padding:2px;display:flex}.segmented button{min-height:28px;color:var(--color-muted);border-radius:6px;padding:4px 12px;font-size:12px}.segmented button.active{color:var(--color-ink);background:#fff;font-weight:600;box-shadow:0 1px 3px #00000014}.plugins-scroll{flex:1;padding:16px 24px 24px;overflow:auto}.plugins-toolbar{border-bottom:1px solid var(--color-line);background:#fff;align-items:center;gap:12px;padding:12px 24px;display:flex}.plugins-toolbar input{border:1px solid #0000001f;border-radius:8px;flex:1;min-width:220px;height:38px;padding:0 12px;font-size:12.5px}.plugins-toolbar input:focus{border-color:#4176e68c;box-shadow:0 0 0 3px #4176e61a}.plugins-toolbar>span{color:var(--color-faint);font:10.5px var(--font-mono);flex:none}.plugins-list{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));grid-auto-rows:1fr;gap:16px;width:100%;display:grid}.plugin-card{border:1px solid var(--color-line);background:#fff;border-radius:10px;flex-direction:column;height:100%;min-height:226px;padding:16px;transition:border-color .12s,box-shadow .12s,transform .12s;display:flex}.plugin-card:hover{border-color:#4176e652;transform:translateY(-1px);box-shadow:0 8px 22px #0f11150f}.plugin-card-head{align-items:flex-start;gap:12px;display:flex}.plugin-heading{align-items:flex-start;gap:12px;min-width:0;display:flex}.plugin-actions{flex:none;align-items:center;gap:8px;margin-left:auto;display:flex}.plugin-switch-button{border-radius:7px;flex:0 0 36px;place-items:center;width:36px;height:28px;display:grid}.plugin-switch-button:hover{background:var(--color-soft)}.plugin-icon{color:var(--color-blue);font:14px var(--font-mono);margin-top:2px}.plugin-copy{flex:1;min-width:0}.plugin-card-body{min-width:0}.plugin-title{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.plugin-title strong{font-size:14px;font-weight:600;line-height:1.4}.plugin-state{color:#687381;font:10px var(--font-mono);background:#eef0f3;border-radius:4px;padding:1px 6px}.plugin-state.active{color:#14733f;background:#e6faed}.plugin-package{overflow-wrap:anywhere;color:#61666b;font:10.5px var(--font-mono);margin-top:8px;display:block}.capability,.update,.local{color:#61666b;background:#ebeef2;border-radius:4px;padding:1px 6px;font-size:10px}.update{color:var(--color-blue);background:var(--color-blue-soft)}.local{color:#9a6700;font:10px var(--font-mono);background:#fef5e7}.plugin-description{color:var(--color-muted);margin:8px 0 12px;font-size:13px;line-height:1.6}.hook-list{flex-wrap:wrap;gap:5px;display:flex}.hook-list span{color:var(--color-muted);font:10px var(--font-mono);border:1px solid #00000014;border-radius:4px;padding:1px 6px}.plugin-card-footer{border-top:1px solid #0000000f;justify-content:space-between;align-items:flex-end;gap:12px;min-height:32px;margin-top:auto;padding-top:12px;display:flex}.plugin-card-footer>span{letter-spacing:.04em;color:var(--color-faint);font:10px var(--font-mono)}.plugin-detail-link{min-height:28px;color:var(--color-blue);align-items:center;font-size:11.5px;display:inline-flex}.switch{background:#cfd3d6;border-radius:999px;flex:0 0 36px;width:36px;height:22px;position:relative}.switch.on{background:var(--color-ink)}.switch i{background:#fff;border-radius:50%;width:18px;height:18px;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #0003}.switch.on i{left:16px}.settings-overlay{z-index:40;background:#0000003d;place-items:center;padding:40px;display:grid;position:fixed;inset:0}.global-search{z-index:50;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0f172a52;place-items:start center;padding:12vh 40px 40px;display:grid;position:fixed;inset:0}.global-search-dialog{background:#fff;border:1px solid #0f172a24;border-radius:10px;flex-direction:column;width:100%;max-width:920px;max-height:min(680px,100vh - 96px);display:flex;overflow:hidden;box-shadow:0 28px 80px #0f172a42}.global-search-heading{align-items:baseline;gap:10px;padding:16px 18px 10px;display:flex}.global-search-heading strong{font-size:14px}.global-search-heading small{color:var(--color-muted);font-size:11px}.global-search-dialog>input{width:100%;height:52px;color:var(--color-ink);border-bottom:1px solid var(--color-line);font:14px var(--font-sans);background:#fff;border:0;flex:none;padding:0 18px}.global-search-dialog>input:focus-visible{outline-offset:-3px}.global-search-results{min-height:0;padding:8px 10px 12px;overflow:auto}.global-search-group{padding:0 0 8px}.global-search-group>small{letter-spacing:.08em;color:var(--color-faint);font:10px var(--font-mono);padding:6px 8px 7px;display:block}.global-search-group button{text-align:left;border-radius:8px;align-items:baseline;gap:18px;width:100%;min-height:44px;padding:10px 12px;line-height:1.45;display:flex}.global-search-group button[aria-selected=true]{background:var(--color-blue-soft)}.global-search-group button strong{text-overflow:ellipsis;white-space:nowrap;width:260px;color:var(--color-ink);font:12px var(--font-mono);flex:none;overflow:hidden}.global-search-group button[aria-selected=true] strong{color:var(--color-blue)}.global-search-group button span{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--color-muted);font:12px var(--font-sans);overflow:hidden}.settings-page{background:#f8fafc;flex:1;min-width:0;display:flex}.settings-page .settings-dialog{width:100%;max-width:none;height:100%;max-height:none;box-shadow:none;border-radius:0;flex-direction:column}.settings-top-tabs{border-bottom:1px solid var(--color-line);background:#fff;flex:none;align-items:center;gap:4px;height:48px;padding:0 24px;display:flex}.settings-top-tabs .settings-tab{border-radius:7px;height:30px;padding:0 12px;font-size:12px}.settings-top-tabs .settings-tab.active{color:var(--color-blue);background:var(--color-blue-soft)}.settings-top-tabs .settings-tab b{float:none;margin-left:4px}.settings-back{color:var(--color-blue);background:var(--color-blue-soft);border:1px solid #4176e647;border-radius:7px;padding:4px 9px;font-size:11px}.settings-back:hover{background:#e1ebff}.settings-dialog{background:#fff;border-radius:10px;width:100%;max-width:880px;height:100%;max-height:620px;display:flex;overflow:hidden;box-shadow:0 24px 64px #0000003d}.settings-dialog>aside{background:var(--color-soft);border-right:1px solid #0000000f;flex-direction:column;flex:0 0 184px;gap:2px;width:184px;padding:12px 8px;display:flex}.settings-dialog>aside>strong{padding:4px 9px 10px;font-size:13px}.settings-tab{text-align:left;border-radius:8px;height:30px;padding:0 9px;font-size:12.5px}.settings-tab.active{background:#f1f3f5;font-weight:600}.settings-tab b{float:right;color:#61666b;font-weight:400;font:10px var(--font-mono)}.settings-dialog>section{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.settings-dialog section>header{border-bottom:1px solid #0000000f;justify-content:flex-start;align-items:center;gap:16px;height:52px;padding:0 24px;display:flex}.settings-header-copy{align-items:baseline;gap:10px;min-width:0;display:flex}.settings-header-copy strong{flex:none;font-size:13px}.settings-header-copy small{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--color-muted);font-size:11px;overflow:hidden}.settings-dialog section>header button{color:var(--color-muted);flex:none;font-size:12px}.settings-dialog section>header .settings-back{color:var(--color-blue);background:0 0;border:0;border-radius:0;padding:0;font-size:11px}.settings-body{flex:1;padding:16px 24px 24px;overflow:auto}.settings-intro{border-bottom:1px solid var(--color-line);padding:5px 0 11px}.settings-intro small{color:var(--color-faint);font:9.5px var(--font-mono)}.settings-intro h3{font-weight:500;font:13px var(--font-mono);margin:4px 0}.settings-intro p{color:var(--color-muted);margin:0;font-size:12px}.general-row{border-bottom:1px solid #0000000f;align-items:center;gap:12px;padding:12px 0;display:flex}.general-row>div{flex:1}.general-row strong{font-size:12.5px;display:block}.general-row small{color:var(--color-muted);margin-top:2px;font-size:11.5px;display:block}.setting-status{color:#61666b;font:10.5px var(--font-mono);background:#ebeef2;border-radius:999px;flex:none;padding:3px 8px}.setting-status.on{color:#14733f;background:#eaf8f0}.general-row small.setting-error{color:#b42318}.provider-card{border:1px solid var(--color-line);border-radius:10px;margin-bottom:12px;padding:12px 13px}.provider-add-head{border-top:1px solid var(--color-line);justify-content:space-between;align-items:center;gap:12px;padding:11px 12px 10px;display:flex}.provider-add-head>div{flex-direction:column;gap:2px;display:flex}.provider-add-head strong{font-size:12px}.provider-add-head>button{color:#fff;background:var(--color-ink);border-radius:7px;height:30px;padding:0 11px;font-size:11px}.provider-add-head small,.provider-add-form small{color:var(--color-faint);font-size:10px}.provider-add-form{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:0;display:grid}.provider-add-overlay{z-index:70;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0f172a52;place-items:center;padding:32px;display:grid;position:fixed;inset:0}.provider-add-modal{background:#fff;border:1px solid #0f172a24;border-radius:10px;width:min(100%,640px);max-height:calc(100vh - 64px);padding:18px;overflow:auto;box-shadow:0 28px 80px #0f172a42}.provider-add-modal>header{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.provider-add-modal>header>div{flex-direction:column;gap:3px;display:flex}.provider-add-modal>header strong{font-size:14px}.provider-add-modal>header small{color:var(--color-faint);font-size:10.5px}.provider-add-modal>header button{width:26px;height:26px;color:var(--color-muted);border-radius:7px;font-size:18px}.provider-add-modal .provider-add-form{width:100%;margin:0;padding:0}.provider-add-form label{flex-direction:column;gap:5px;min-width:0;display:flex}.provider-add-form label>span{color:var(--color-muted);font-size:10.5px;font-weight:600}.provider-add-form input,.provider-add-form select,.provider-add-form button{border:1px solid var(--color-line);background:#fff;border-radius:7px;min-width:0;height:32px;padding:0 9px;font-size:11px}.provider-add-form input:focus,.provider-add-form select:focus{border-color:var(--color-blue)}.provider-add-wide,.provider-add-actions{grid-column:1/-1}.provider-add-actions{align-items:center;gap:10px;display:flex}.provider-add-actions button{width:140px}.provider-add-actions small{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.provider-add-form button{border-color:var(--color-ink);color:#fff;background:var(--color-ink)}.provider-head{align-items:center;gap:8px;margin-bottom:10px;display:flex}.provider-dot{color:var(--color-green);font-size:10px}.provider-head strong{font-size:12.5px}.provider-state{color:var(--color-green);font:10.5px var(--font-mono);margin-left:auto}.provider-field{align-items:center;gap:8px;margin-top:7px;display:flex}.provider-field code{color:#61666b;width:66px;font:11px var(--font-mono);flex:0 0 66px}.provider-field input{min-width:0;height:32px;font:11.5px var(--font-mono);background:#fff;border:1px solid #0000001a;border-radius:7px;flex:1;padding:0 9px}.provider-model-value{min-width:0;min-height:32px;font:11.5px var(--font-mono);background:#fff;border:1px solid #0000001a;border-radius:7px;flex:1;align-items:center;gap:7px;padding:4px 8px;display:flex}.provider-model-value>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.provider-models-details{font:10px var(--font-sans);flex:none;margin-left:auto;position:relative}.provider-models-details summary{cursor:pointer;white-space:nowrap;color:var(--color-blue)}.provider-models-details .model-chips{z-index:2;border:1px solid var(--color-line);background:#fff;border-radius:8px;width:280px;max-height:160px;margin:0;padding:8px;position:absolute;top:22px;right:0;overflow:auto;box-shadow:0 8px 24px #0000001f}.provider-footer{align-items:center;gap:8px;margin-top:9px;display:flex}.provider-footer code{color:var(--color-muted);font:10.5px var(--font-mono)}.provider-footer button{border:1px solid var(--color-line);background:#fff;border-radius:7px;padding:4px 9px;font-size:11px}.provider-footer button:disabled{cursor:not-allowed;opacity:.5}.provider-footer .link-button{color:var(--color-blue);border:0;margin-left:auto}.model-chips{flex-wrap:wrap;gap:5px;margin-top:10px;display:flex}.model-chips span{color:var(--color-blue);font:10.5px var(--font-mono);background:#e4edfd;border-radius:4px;padding:1px 7px}.add-provider{text-align:left;color:#61666b;border:1px dashed #00000029;border-radius:10px;align-items:center;gap:9px;width:100%;padding:11px 13px;display:flex}.add-provider small{color:var(--color-faint);font:10.5px var(--font-mono);margin-left:auto}.toml-toolbar{color:var(--color-muted);align-items:center;gap:6px;margin-bottom:10px;font-size:11.5px;display:flex}.toml-toolbar span{flex:1}.toml-toolbar button{border:1px solid var(--color-line);background:#fff;border-radius:7px;padding:4px 9px;font-size:11px}.toml-toolbar button.active{background:#f1f3f5;font-weight:600}.toml-toolbar .primary{color:#fff;background:var(--color-ink)}.toml{color:#61666b;border:1px solid var(--color-line);border-radius:9px;min-height:420px}.session-search{z-index:20;position:relative}.command-palette{background:#fff;border:1px solid #0f172a24;border-radius:10px;max-height:420px;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:auto;box-shadow:0 16px 40px #0f172a2e}.palette-group{padding:8px}.palette-group small{z-index:1;letter-spacing:.08em;color:var(--color-faint);font:10px var(--font-mono);background:#fff;padding:5px 8px 9px;display:block;position:sticky;top:0}.palette-group small span{letter-spacing:0;color:#687381}.palette-group button{text-align:left;width:100%;min-height:44px;line-height:1.45;font:12px var(--font-mono);border-radius:8px;align-items:baseline;gap:14px;padding:10px 12px;display:flex}.palette-group button[aria-selected=true]{color:var(--color-blue);background:var(--color-blue-soft)}.palette-group button code{text-overflow:ellipsis;white-space:nowrap;width:150px;color:var(--color-ink);font:12px var(--font-mono);flex:none;overflow:hidden}.palette-group button[aria-selected=true] code{color:var(--color-blue)}.palette-group button span{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--color-muted);line-height:1.45;font:12px var(--font-sans);overflow:hidden}@media (width<=1100px){.details-panel,.details-toggle{display:none}}@media (width<=1024px){.composer-hint{display:none}}@media (width<=680px),(height<=845px) and (width>=681px) and (width<=760px),(height<=805px) and (width>=761px) and (width<=900px),(height<=747px) and (width>=901px) and (width<=1023px),(height<=664px) and (width>=1024px){.marketplace-page>div{overflow:auto}.marketplace-page .marketplace-scroll{flex:none;overflow:visible}}@media (height<=400px){.sidebar .runtime-cells{display:none}.sidebar .sidebar-footer{padding-top:2px;padding-bottom:2px}.sidebar .sidebar-scroll{padding-bottom:0}}@media (width<=900px){.config-sections{grid-template-columns:minmax(0,1fr)}.config-section:last-child{grid-column:auto}}@media (width<=760px){.sidebar{flex-basis:216px;width:216px}.main-header{gap:7px;padding:0 10px}.active-heading small{max-width:180px}.composer-wrap,.chat-scroll{padding-left:12px;padding-right:12px}.view-tabs{margin-left:auto}.composer-hint{display:none}}@media (width<=680px){.sidebar{flex-basis:54px;width:54px}.brand-row{justify-content:center;padding:0}.brand-row strong,.version,.sidebar-actions,.sidebar-scroll{display:none}.sidebar-footer{align-items:center;padding:6px 5px 8px;display:flex}.sidebar-link{flex:0 0 44px;justify-content:center;width:44px;padding:0}.compact-new-session{display:flex}.sidebar-link>span:nth-child(2),.sidebar-link>b,.sidebar-link>small,.sidebar-link>span:not(.link-glyph),.main-header .active-heading small,.run-indicator{display:none}.view-tab{padding:4px 7px}.details-panel{display:none}.composer-tools{justify-content:flex-end}.palette-group button code{width:132px}.global-search{place-items:center;padding:16px}.global-search-dialog{max-height:calc(100vh - 32px)}.global-search-group button strong{width:132px}.tool-chip{white-space:nowrap;padding-left:6px;padding-right:6px;font-size:10.5px}.plugins-toolbar{flex-wrap:wrap}.plugins-toolbar input{flex-basis:100%;min-width:0}}@media (width<=760px){.settings-overlay{padding:12px}.settings-dialog{max-height:none}}@media (prefers-reduced-motion:reduce){.session-dot.running,.run-indicator .run-dot,.initial-loading>span{animation:none}}.empty-state{text-align:center;color:var(--color-muted);padding:28px 16px;font-size:12px}.settings-plugin-row{color:#61666b;font:11.5px var(--font-mono);border-bottom:1px solid #0000000f;padding:8px 0}.settings-body>p{color:var(--color-muted);font-size:12px}.provider-card input{width:100%;height:32px;font:11.5px var(--font-mono);border:1px solid #0000001a;border-radius:7px;margin-top:7px;padding:0 9px;display:block}.stop-button{color:var(--color-red);border:1px solid #ec13133d;border-radius:6px;padding:2px 8px;font-size:11px}.stop-button:disabled{cursor:not-allowed;opacity:.45}.session-menu-popover{z-index:35;background:#fff;border:1px solid #0000001a;border-radius:10px;width:224px;position:absolute;top:calc(100% - 4px);right:24px;overflow:hidden;box-shadow:0 10px 28px #00000024}.main-header{background:#fff;flex-basis:54px;height:54px}.active-heading{gap:1px}.active-heading small{max-width:440px;color:var(--color-faint)}.runtime-cells{background:#fff;border:1px solid #00000012;border-radius:9px;grid-template-columns:1fr 1fr;gap:5px 10px;margin:4px 8px 6px;padding:9px 10px;display:grid}.runtime-cells span:first-child{grid-column:1/-1;min-width:0}.runtime-cells b{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.session-row.active{background:#fff;border:1px solid #4176e624;box-shadow:0 1px 2px #00000008}.chat-scroll.is-empty{justify-content:center;align-items:center;padding-top:10px;display:flex}.new-session-screen{text-align:left;gap:12px;width:100%;max-width:700px;padding:24px 0 30px}.welcome-kicker{letter-spacing:.11em;color:var(--color-blue);font:10px var(--font-mono)}.welcome-heading{align-items:center;gap:12px;margin-bottom:3px;display:flex}.welcome-heading h2{letter-spacing:-.02em;margin:0;font-size:21px}.welcome-heading p{color:var(--color-muted);margin:4px 0 0;font-size:12.5px}.workspace-picker{margin-top:5px}.workspace-row{border-color:#4176e633;min-height:68px;padding:13px 14px;box-shadow:0 6px 20px #0f11150a}.workspace-row>span:nth-child(2){flex:1;min-width:0}.workspace-status{font:10px var(--font-mono);background:#e6faed;border-radius:5px;flex:none;padding:3px 7px}.workspace-row .live{color:#14733f}.workspace-arrow{color:var(--color-blue);font-size:16px}.effective-config{background:#f7f8fa;gap:9px;min-height:40px;padding:8px 11px}.effective-config .config-label{font-family:var(--font-sans);color:var(--color-muted)}.starter-grid{grid-template-columns:1fr 1fr;gap:9px;width:100%;margin-top:4px;display:grid}.starter-card{text-align:left;border:1px solid var(--color-starter-border);background:#fff;border-radius:10px;min-height:72px;padding:12px 13px;transition:background .12s,border-color .12s,transform .12s}.starter-card:hover{background:#f8faff;border-color:#4176e666;transform:translateY(-1px)}.starter-card strong,.starter-card small{display:block}.starter-card small{color:var(--color-muted);font:10.5px var(--font-mono);margin-top:4px}.composer-wrap{border-top:1px solid #0000000a;padding-top:10px}.context-line{gap:12px;max-width:800px;margin-bottom:7px}.context-label{color:var(--color-muted)}.context-metrics{text-overflow:ellipsis;white-space:nowrap;flex-wrap:wrap;flex:1;gap:10px;min-width:0;display:flex;overflow:hidden}.context-metrics span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.context-bar{display:none}.composer{border-radius:10px;max-width:800px;box-shadow:0 8px 24px #0f11150f}.composer textarea{min-height:74px;padding:13px 15px 5px;font-size:14px}.action-error{z-index:20;color:#8f2b2b;background:#fff8f8;border:1px solid #ec131329;border-radius:9px;flex-direction:column;gap:6px;max-width:800px;margin:0;padding:9px 11px;font-size:11.5px;display:flex;position:absolute;bottom:calc(100% + 8px);right:0;box-shadow:0 8px 24px #0f11151a}.action-error-summary{align-items:baseline;gap:8px;display:flex}.action-error-summary strong{color:#b42318;flex:none;font-size:11.5px}.action-error-summary span{color:#a05b5b}.action-error details{min-width:0}.action-error summary{cursor:pointer;color:#b42318;font-size:10.5px}.action-error code{overflow-wrap:anywhere;white-space:pre-wrap;color:#8f2b2b;max-height:88px;font:10px var(--font-mono);margin-top:5px;display:block;overflow:auto}.marketplace-page{background:#f8fafc;min-height:0}.marketplace-page>div{background:#f8fafc}.marketplace-page .marketplace-grid{align-content:start}.marketplace-toolbar{background:#fff;border-bottom:1px solid #00000014;flex-wrap:wrap;flex:none;align-items:center;gap:12px;padding:12px 24px;display:flex}.marketplace-search{border:1px solid #0000001f;border-radius:8px;flex:1;min-width:220px;height:38px;padding:0 12px;font-size:12.5px}.marketplace-search:focus{border-color:#4176e68c;box-shadow:0 0 0 3px #4176e61a}.marketplace-filter{color:#61666b;background:#fff;border:1px solid #0000001f;border-radius:8px;height:38px;padding:0 12px;font-size:12.5px}.marketplace-count{color:var(--color-faint);font:10.5px var(--font-mono);margin-left:auto}.marketplace-categories{background:#fff;border-bottom:1px solid #00000014;flex-wrap:nowrap;flex:none;gap:4px;min-width:0;padding:8px 24px;display:flex;overflow-x:auto}.marketplace-category{color:#61666b;border-radius:999px;flex:none;align-items:center;gap:6px;min-height:32px;padding:4px 8px;font-size:11px;display:flex}.marketplace-category:hover{background:#f1f4f9}.marketplace-category.active{color:#3565c5;background:#e4edfd;font-weight:500}.marketplace-scroll{flex:1;min-height:0;padding:0 24px 24px;overflow:auto}.marketplace-grid{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));grid-auto-rows:1fr;gap:16px;width:100%;padding-top:16px;display:grid}.marketplace-card{background:#fff;border:1px solid #0000001a;border-radius:10px;flex-direction:column;height:100%;min-height:226px;padding:16px;transition:border-color .12s,box-shadow .12s,transform .12s;display:flex}.marketplace-card:hover{border-color:#4176e652;transform:translateY(-1px);box-shadow:0 8px 22px #0f11150f}.marketplace-card>div:first-child{flex:1}.marketplace-card-mark{color:var(--color-blue);font:14px var(--font-mono)}.marketplace-title{font-size:14px;font-weight:600;line-height:1.4}.marketplace-package{overflow-wrap:anywhere;color:#61666b;font:10.5px var(--font-mono);margin-top:8px;display:block}.marketplace-description{color:var(--color-muted);margin:8px 0 12px;font-size:13px;line-height:1.6}.marketplace-tags{flex-wrap:wrap;gap:5px;display:flex}.marketplace-card-footer{min-height:40px;color:var(--color-faint);font:10.5px var(--font-mono);border-top:1px solid #0000000f;align-items:center;gap:8px;margin-top:auto;padding-top:12px;display:flex}.marketplace-card-footer span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.marketplace-card-footer a{min-height:28px;color:var(--color-blue);font:11px var(--font-sans);flex:none;align-items:center;display:inline-flex}.marketplace-card-footer span+a{margin-left:auto}.marketplace-card-footer button{min-height:28px;color:var(--color-blue);background:var(--color-blue-soft);border:1px solid #4176e64d;border-radius:6px;flex:none;padding:4px 10px;font-size:10.5px}.marketplace-card-footer button:hover{background:#e1ebff}.marketplace-pagination{color:#687381;font:11px var(--font-mono);justify-content:center;align-items:center;gap:12px;margin-top:12px;display:flex}.marketplace-pagination-button{color:#0f1115;min-height:32px;font:11px var(--font-sans);background:#fff;border:1px solid #0000001a;border-radius:6px;padding:4px 12px}.marketplace-pagination-button:hover:not(:disabled){background:#f8faff;border-color:#4176e652}.session-action{text-align:left;border-bottom:1px solid #0000000a;flex-direction:column;gap:1px;width:100%;padding:8px 11px;display:flex}.session-action:hover{background:var(--color-soft)}.session-action strong{font-size:12px}.session-action small{color:var(--color-faint);font-size:10px}.context-bar i:first-child{background:#c7d6f5;width:44%}.context-bar i:nth-child(2){background:#dce7fb;width:33%}.context-bar i:nth-child(3){background:#edf2fd;width:23%}.file-summary{color:var(--color-muted);font:10.5px var(--font-mono);margin:-8px 0 12px}.settings-note{color:var(--color-muted);margin-top:10px;font-size:11px;line-height:1.5;display:block}.extension-list{width:100%}.extension-list .empty-state{border:1px dashed #00000024;border-radius:10px}.subnav>a{white-space:nowrap}.plugin-card .switch{flex:none}.plugin-uninstall{min-height:28px;color:var(--color-red);background:#fff8f8;border:1px solid #b91c1c29;border-radius:6px;align-items:center;padding:3px 8px;font-size:11px;display:inline-flex}.plugin-uninstall:hover{background:#fff1f1;border-color:#b91c1c47}.plugin-action-error{color:var(--color-red);margin:10px 0 0 37px;font-size:11px}.plugin-confirm-backdrop{z-index:60;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0f172a52;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.plugin-confirm-dialog{background:#fff;border:1px solid #0f172a24;border-radius:10px;width:100%;max-width:440px;padding:20px;box-shadow:0 24px 64px #0f172a42}.plugin-confirm-dialog header strong,.plugin-confirm-dialog header small{display:block}.plugin-confirm-dialog header strong{font-size:15px}.plugin-confirm-dialog header small{color:var(--color-muted);margin-top:4px;font-size:12px}.plugin-confirm-dialog>code{overflow-wrap:anywhere;background:var(--color-soft);font:11px var(--font-mono);border-radius:8px;margin-top:16px;padding:10px 11px;display:block}.plugin-confirm-dialog footer{justify-content:flex-end;gap:8px;margin-top:18px;display:flex}.plugin-confirm-dialog footer button{border:1px solid var(--color-line);background:#fff;border-radius:7px;padding:7px 12px;font-size:12px}.plugin-confirm-dialog footer button.danger{color:#b42318;background:#fff5f5;border-color:#b91c1c38}.plugin-confirm-error{color:#b42318;margin:10px 0 0;font-size:11px}.session-menu-popover[hidden]{display:none}.timeline-empty{color:var(--color-faint);font:10px var(--font-mono);padding:5px 8px}.timeline-turn{flex:1;min-width:4px}.timeline-strip{background:var(--color-blue);border-radius:3px;height:100%}.timeline-turn:nth-child(3n) .timeline-strip{background:#93c5fd}.timeline-turn:nth-child(4n) .timeline-strip{background:#f59e0b}.raw-json{border:1px solid var(--color-line);border-radius:8px;overflow:hidden}.raw-json summary{cursor:pointer;color:var(--color-muted);font:10.5px var(--font-mono);padding:7px 9px}.raw-json-body{white-space:pre-wrap;border-top:1px solid var(--color-line);margin:0;padding:9px}.detail-actions{gap:7px;margin-top:14px;display:flex}.detail-actions button{color:#61666b;border:1px solid var(--color-line);background:#fff;border-radius:7px;padding:5px 9px;font-size:11px}.detail-actions button:disabled{cursor:not-allowed;opacity:.5}body{font-size:14px}.sidebar{background:#f6f8fa;border-right-color:#0f11151a;flex-basis:280px;width:280px}.brand-row{flex-basis:56px;height:56px;padding:0 16px}.brand-row strong{font-size:14px}.new-session{height:36px;font-size:13px}.sidebar-actions{gap:9px;padding:0 12px 12px}.sidebar-actions input{height:34px;font-size:12.5px}.sidebar-scroll{padding:0 10px 10px}.group-label{padding:8px 9px 5px;font-size:10.5px}.session-row{padding:9px 10px}.session-copy strong{font-size:13px}.session-copy small{font-size:10.5px}.sidebar-footer{padding:8px 12px 10px}.sidebar-link{height:34px;font-size:13px}.chat-scroll .turn{width:100%;max-width:960px}.main-header{flex-basis:56px;height:56px;padding:0 24px}.active-heading strong{font-size:15px}.active-heading small{font-size:10.5px}.view-tab{padding:5px 12px;font-size:12.5px}.session-menu,.details-toggle{height:30px}.chat-scroll{padding:28px 24px 8px}.new-session-screen{max-width:760px;padding:30px 0 36px}.welcome-heading h2{font-size:24px}.welcome-heading p{font-size:13.5px}.workspace-row{min-height:76px;padding:15px 16px}.workspace-row code{font-size:12.5px}.workspace-row small{font-size:10.5px}.effective-config{min-height:44px;padding:10px 13px}.effective-config span,.effective-config code{font-size:11px}.starter-card{min-height:80px;padding:13px 14px}.starter-card strong{font-size:13px}.starter-card small{font-size:11px}.composer-wrap{width:100%;padding:12px 24px 18px}.context-line,.context-breakdown,.composer,.action-error{width:100%;max-width:none}.context-line{font-size:11px}.composer textarea{min-height:82px;font-size:14.5px}.composer-tools select,.tool-chip{height:30px;font-size:11.5px}.send-button{width:30px;height:30px}@media (width<=900px){.sidebar{flex-basis:216px;width:216px}}@media (width<=760px){.sidebar{flex-basis:216px;width:216px}.main-header{flex-basis:48px;height:48px;padding:0 16px}.chat-scroll,.composer-wrap,.trajectory-summary,.source-filters,.event-head,.event-row,.files-content,.settings-top-tabs,.settings-dialog section>header,.settings-body{padding-left:16px;padding-right:16px}.session-menu-popover{right:16px}.subnav,.plugins-toolbar,.plugins-scroll,.marketplace-toolbar,.marketplace-categories,.marketplace-scroll{padding-left:16px;padding-right:16px}.subnav.plugin-detail-subnav{padding-inline:16px}.plugin-detail-content{padding-left:16px;padding-right:16px}}@media (width<=680px){.sidebar{flex-basis:54px;width:54px}.runtime-cells,.session-list-toolbar{display:none}.main-header{flex-basis:56px;height:56px}.view-tab,.session-menu,.sidebar-link{min-height:44px}.session-menu{flex:none;width:44px}.settings-top-tabs{flex-wrap:wrap;height:auto;min-height:56px;padding-top:6px;padding-bottom:6px}.settings-top-tabs .settings-tab,.settings-back{min-height:44px}.refresh-warning{flex-direction:column;align-items:flex-start;gap:6px;padding:9px 16px}.refresh-warning button{min-width:44px;min-height:44px}.settings-back{align-items:center;display:inline-flex}.filter{min-height:44px}.event-head,.event-row{grid-template-columns:64px 96px minmax(0,1fr)}.event-head>:nth-child(4),.event-head>:nth-child(5),.event-row>:nth-child(4),.event-row>:nth-child(5){display:none}.file-actions{flex-wrap:wrap}.file-actions input{flex-basis:100%;width:100%;min-width:0;height:44px}.file-actions button,.diff-button{min-height:44px}.provider-add-overlay{padding:16px}.provider-add-form{grid-template-columns:minmax(0,1fr)}.provider-add-wide,.provider-add-actions{grid-column:auto}.provider-add-form input,.provider-add-form select,.provider-add-form button,.provider-add-modal>header button{min-height:44px}.provider-add-modal>header button{width:44px}.plugin-panel-card .grid-cols-3,.plugin-panel-card .grid-cols-4,.plugin-panel-card .grid-cols-5{grid-template-columns:repeat(2,minmax(0,1fr))}.provider-add-actions{flex-direction:column;align-items:stretch}.provider-add-actions button{width:100%}.provider-add-actions small{white-space:normal}.workspace-chooser,.global-search,.session-dialog-backdrop,.plugin-confirm-backdrop{padding:16px}.workspace-chooser-heading button,.session-dialog-header button{width:44px;height:44px}.workspace-pick-directory,.workspace-chooser-row,.session-action,.session-tools-popover button,.session-row-menu-popover button,.session-batch-bar button,.session-pagination button,.session-dialog-field input,.session-dialog-actions button,.plugin-confirm-dialog footer button{min-height:44px}.new-session-screen,.workspace-picker,.workspace-row,.workspace-row>span:nth-child(2){min-width:0}.chat-scroll.is-empty{align-items:flex-start}.workspace-row code,.workspace-row small{text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:block;overflow:hidden}.plugin-detail-content>.grid>*{min-width:0}.config-sections{grid-template-columns:minmax(0,1fr)}.config-section:last-child{grid-column:auto}.session-dialog-actions,.plugin-confirm-dialog footer{flex-wrap:wrap}.plugins-list,.marketplace-grid{grid-template-columns:minmax(0,1fr)}.subnav{flex-wrap:wrap}.subnav>span{display:none}.subnav:not(.plugin-detail-subnav)>a{align-items:center;width:100%;min-height:44px;margin-left:0;display:inline-flex}.plugin-detail-content{padding-top:24px;padding-bottom:24px}.marketplace-toolbar>*{min-width:0}.marketplace-search,.marketplace-filter{flex-basis:100%;width:100%}.marketplace-count{width:100%;margin-left:0}.marketplace-card-footer{flex-wrap:wrap}.marketplace-card-footer span{width:100%}.marketplace-card-footer span+a{margin-left:0}.segmented button,.effective-config a,.context-line button,.composer-tools select,.tool-chip,.send-button{min-height:44px}.context-line button,.send-button{min-width:44px}.effective-config a{align-items:center;display:inline-flex}.plugin-detail-link,.plugin-detail-subnav>a,.plugin-detail-action,.plugin-uninstall,.plugins-toolbar input,.marketplace-search,.marketplace-filter,.marketplace-category,.marketplace-card-footer a,.marketplace-card-footer button,.marketplace-pagination-button,.provider-add-head>button,.provider-field input,.provider-model-value,.provider-footer button,.provider-models-details summary,.toml-toolbar button,.config-field select,.config-source-actions button,.add-provider{min-height:44px}.plugin-uninstall,.marketplace-card-footer button,.toml-toolbar button{min-width:44px}.plugin-detail-content aside>a{align-items:center;min-height:44px;display:flex}.plugin-switch-button{flex-basis:44px;width:44px;height:44px}.plugin-detail-subnav>a,.provider-models-details summary{align-items:center;display:inline-flex}.composer-tools select{flex:1;min-width:0}.tool-chip,.send-button{flex:none}.marketplace-contribute{flex-wrap:wrap}.marketplace-contribute>span{width:100%}.marketplace-contribute>a{align-items:center;min-height:44px;margin-left:0;display:inline-flex}}@media (width>=681px) and (width<=900px){.new-session,.sidebar-actions input,.sidebar-link,.session-tool-button,.view-tab,.session-menu,.filter,.refresh-warning button,.settings-top-tabs .settings-tab,.settings-back,.plugin-detail-link,.plugin-detail-subnav>a,.plugin-detail-action,.plugin-uninstall,.plugins-toolbar input,.marketplace-search,.marketplace-filter,.marketplace-category,.marketplace-card-footer a,.marketplace-card-footer button,.marketplace-pagination-button,.provider-add-head>button,.provider-add-form input,.provider-add-form select,.provider-add-form button,.provider-add-modal>header button,.provider-field input,.provider-model-value,.provider-footer button,.provider-models-details summary,.toml-toolbar button,.config-field select,.config-source-actions button,.add-provider,.composer-tools select,.tool-chip,.send-button{min-height:44px}.workspace-chooser-heading button,.session-dialog-header button,.provider-add-modal>header button{width:44px;min-width:44px;height:44px}.workspace-pick-directory,.workspace-chooser-row,.session-action,.session-tools-popover button,.session-row-menu-popover button,.session-batch-bar button,.session-pagination button,.session-dialog-field input,.session-dialog-actions button,.plugin-confirm-dialog footer button{min-height:44px}.session-tool-button.icon,.session-tool-button,.session-menu,.plugin-switch-button,.plugin-uninstall,.marketplace-card-footer button,.toml-toolbar button,.send-button{flex-basis:44px;width:44px;min-width:44px}.segmented button,.subnav>a,.effective-config a,.diff-button,.file-actions input,.file-actions button,.plugin-detail-content aside>a,.marketplace-contribute>a{min-height:44px}.settings-back,.plugin-detail-link,.plugin-detail-subnav>a,.subnav>a,.effective-config a,.diff-button,.plugin-detail-content aside>a,.marketplace-card-footer a,.provider-models-details summary,.marketplace-contribute>a{align-items:center;display:inline-flex}.file-actions input,.file-actions button{height:44px}.settings-top-tabs{height:auto;min-height:56px}.context-line button{min-width:44px;min-height:44px}.plugin-switch-button{height:44px}.session-row-more{pointer-events:auto;opacity:1;width:44px;height:44px;right:2px}.session-row{padding-right:50px}.session-row-wrap>input{flex:none;width:24px;height:24px;margin-left:0}}@media (width<=420px){.plugin-heading{flex-direction:column;align-items:stretch;gap:8px}.plugin-actions{justify-content:flex-start;margin-left:0}}@media (width<=360px){.main-header{gap:4px;padding-left:8px;padding-right:8px}.view-tabs{flex:none}.view-tab{min-width:44px;padding-left:7px;padding-right:7px}.active-heading{min-width:0}.active-heading strong{font-size:14px}.composer-tools{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 44px;display:grid}.composer-tools select{grid-column:1/-1;width:100%}.composer-tools .tool-chip{width:100%;min-width:0}}.status-pill.running{color:var(--color-blue)}.status-pill.running:before{background:var(--color-blue);box-shadow:0 0 8px #4176e673}.palette-group button.active{background:#f1f3f5}.action-error{color:var(--color-red);margin:9px 0 0;font-size:11.5px}.provider-result{color:var(--color-blue);font:10.5px var(--font-mono);margin-top:9px;display:block}