prjct-cli 0.11.5 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +81 -25
  3. package/bin/dev.js +1 -1
  4. package/bin/generate-views.js +209 -0
  5. package/bin/migrate-to-json.js +742 -0
  6. package/bin/prjct +5 -5
  7. package/bin/serve.js +226 -50
  8. package/core/__tests__/agentic/{memory-system.test.js → memory-system.test.ts} +12 -23
  9. package/core/__tests__/agentic/{plan-mode.test.js → plan-mode.test.ts} +26 -24
  10. package/core/__tests__/agentic/{prompt-builder.test.js → prompt-builder.test.ts} +3 -8
  11. package/core/__tests__/utils/{date-helper.test.js → date-helper.test.ts} +19 -30
  12. package/core/__tests__/utils/{output.test.js → output.test.ts} +12 -24
  13. package/core/agentic/agent-router.ts +137 -0
  14. package/core/agentic/chain-of-thought.ts +228 -0
  15. package/core/agentic/command-executor/command-executor.ts +384 -0
  16. package/core/agentic/command-executor/index.ts +16 -0
  17. package/core/agentic/command-executor/status-signal.ts +38 -0
  18. package/core/agentic/command-executor/types.ts +79 -0
  19. package/core/agentic/command-executor.ts +8 -0
  20. package/core/agentic/{context-builder.js → context-builder.ts} +92 -81
  21. package/core/agentic/context-filter.ts +365 -0
  22. package/core/agentic/ground-truth/index.ts +76 -0
  23. package/core/agentic/ground-truth/types.ts +33 -0
  24. package/core/agentic/ground-truth/utils.ts +48 -0
  25. package/core/agentic/ground-truth/verifiers/analyze.ts +54 -0
  26. package/core/agentic/ground-truth/verifiers/done.ts +75 -0
  27. package/core/agentic/ground-truth/verifiers/feature.ts +70 -0
  28. package/core/agentic/ground-truth/verifiers/index.ts +37 -0
  29. package/core/agentic/ground-truth/verifiers/init.ts +52 -0
  30. package/core/agentic/ground-truth/verifiers/now.ts +57 -0
  31. package/core/agentic/ground-truth/verifiers/ship.ts +85 -0
  32. package/core/agentic/ground-truth/verifiers/spec.ts +45 -0
  33. package/core/agentic/ground-truth/verifiers/sync.ts +47 -0
  34. package/core/agentic/ground-truth/verifiers.ts +6 -0
  35. package/core/agentic/ground-truth.ts +8 -0
  36. package/core/agentic/loop-detector/error-analysis.ts +97 -0
  37. package/core/agentic/loop-detector/hallucination.ts +71 -0
  38. package/core/agentic/loop-detector/index.ts +41 -0
  39. package/core/agentic/loop-detector/loop-detector.ts +222 -0
  40. package/core/agentic/loop-detector/types.ts +66 -0
  41. package/core/agentic/loop-detector.ts +8 -0
  42. package/core/agentic/memory-system/history.ts +53 -0
  43. package/core/agentic/memory-system/index.ts +192 -0
  44. package/core/agentic/memory-system/patterns.ts +156 -0
  45. package/core/agentic/memory-system/semantic-memories.ts +277 -0
  46. package/core/agentic/memory-system/session.ts +21 -0
  47. package/core/agentic/memory-system/types.ts +159 -0
  48. package/core/agentic/memory-system.ts +8 -0
  49. package/core/agentic/parallel-tools.ts +165 -0
  50. package/core/agentic/plan-mode/approval.ts +57 -0
  51. package/core/agentic/plan-mode/constants.ts +44 -0
  52. package/core/agentic/plan-mode/index.ts +28 -0
  53. package/core/agentic/plan-mode/plan-mode.ts +406 -0
  54. package/core/agentic/plan-mode/types.ts +193 -0
  55. package/core/agentic/plan-mode.ts +8 -0
  56. package/core/agentic/prompt-builder.ts +566 -0
  57. package/core/agentic/response-templates.ts +164 -0
  58. package/core/agentic/semantic-compression.ts +273 -0
  59. package/core/agentic/services.ts +206 -0
  60. package/core/agentic/smart-context.ts +476 -0
  61. package/core/agentic/{template-loader.js → template-loader.ts} +27 -16
  62. package/core/agentic/think-blocks.ts +202 -0
  63. package/core/agentic/tool-registry.ts +119 -0
  64. package/core/agentic/validation-rules.ts +313 -0
  65. package/core/agents/index.ts +28 -0
  66. package/core/agents/performance.ts +444 -0
  67. package/core/agents/types.ts +126 -0
  68. package/core/bus/{index.js → index.ts} +57 -61
  69. package/core/command-registry/categories.ts +23 -0
  70. package/core/command-registry/commands.ts +15 -0
  71. package/core/command-registry/core-commands.ts +319 -0
  72. package/core/command-registry/index.ts +158 -0
  73. package/core/command-registry/optional-commands.ts +119 -0
  74. package/core/command-registry/setup-commands.ts +53 -0
  75. package/core/command-registry/types.ts +59 -0
  76. package/core/command-registry.ts +9 -0
  77. package/core/commands/analysis.ts +298 -0
  78. package/core/commands/analytics.ts +288 -0
  79. package/core/commands/base.ts +273 -0
  80. package/core/commands/index.ts +211 -0
  81. package/core/commands/maintenance.ts +226 -0
  82. package/core/commands/planning.ts +311 -0
  83. package/core/commands/setup.ts +309 -0
  84. package/core/commands/shipping.ts +188 -0
  85. package/core/commands/types.ts +183 -0
  86. package/core/commands/workflow.ts +226 -0
  87. package/core/commands.ts +11 -0
  88. package/core/constants/formats.ts +187 -0
  89. package/core/constants/index.ts +7 -0
  90. package/core/{context-sync.js → context-sync.ts} +59 -26
  91. package/core/data/agents-manager.ts +76 -0
  92. package/core/data/analysis-manager.ts +83 -0
  93. package/core/data/base-manager.ts +156 -0
  94. package/core/data/ideas-manager.ts +81 -0
  95. package/core/data/index.ts +32 -0
  96. package/core/data/outcomes-manager.ts +96 -0
  97. package/core/data/project-manager.ts +75 -0
  98. package/core/data/roadmap-manager.ts +118 -0
  99. package/core/data/shipped-manager.ts +65 -0
  100. package/core/data/state-manager.ts +214 -0
  101. package/core/domain/{agent-generator.js → agent-generator.ts} +77 -57
  102. package/core/domain/{agent-loader.js → agent-loader.ts} +65 -56
  103. package/core/domain/{agent-matcher.js → agent-matcher.ts} +51 -24
  104. package/core/domain/{agent-validator.js → agent-validator.ts} +70 -37
  105. package/core/domain/{analyzer.js → analyzer.ts} +91 -85
  106. package/core/domain/{architect-session.js → architect-session.ts} +49 -34
  107. package/core/domain/{architecture-generator.js → architecture-generator.ts} +25 -13
  108. package/core/domain/{context-estimator.js → context-estimator.ts} +57 -36
  109. package/core/domain/{product-standards.js → product-standards.ts} +40 -26
  110. package/core/domain/{smart-cache.js → smart-cache.ts} +39 -30
  111. package/core/domain/{snapshot-manager.js → snapshot-manager.ts} +103 -100
  112. package/core/domain/{task-analyzer.js → task-analyzer.ts} +82 -43
  113. package/core/domain/task-stack/index.ts +19 -0
  114. package/core/domain/task-stack/parser.ts +86 -0
  115. package/core/domain/task-stack/storage.ts +123 -0
  116. package/core/domain/task-stack/task-stack.ts +340 -0
  117. package/core/domain/task-stack/types.ts +51 -0
  118. package/core/domain/task-stack.ts +8 -0
  119. package/core/{index.js → index.ts} +61 -18
  120. package/core/infrastructure/{agent-detector.js → agent-detector.ts} +55 -19
  121. package/core/infrastructure/agents/{claude-agent.js → claude-agent.ts} +61 -21
  122. package/core/infrastructure/{author-detector.js → author-detector.ts} +42 -49
  123. package/core/infrastructure/{capability-installer.js → capability-installer.ts} +51 -27
  124. package/core/infrastructure/{command-installer.js → command-installer/command-installer.ts} +43 -144
  125. package/core/infrastructure/command-installer/global-config.ts +106 -0
  126. package/core/infrastructure/command-installer/index.ts +25 -0
  127. package/core/infrastructure/command-installer/types.ts +41 -0
  128. package/core/infrastructure/command-installer.ts +8 -0
  129. package/core/infrastructure/{config-manager.js → config-manager.ts} +60 -80
  130. package/core/infrastructure/{editors-config.js → editors-config.ts} +33 -31
  131. package/core/infrastructure/legacy-installer-detector/cleanup.ts +216 -0
  132. package/core/infrastructure/legacy-installer-detector/detection.ts +95 -0
  133. package/core/infrastructure/legacy-installer-detector/index.ts +171 -0
  134. package/core/infrastructure/legacy-installer-detector/migration.ts +87 -0
  135. package/core/infrastructure/legacy-installer-detector/types.ts +42 -0
  136. package/core/infrastructure/legacy-installer-detector.ts +7 -0
  137. package/core/infrastructure/migrator/file-operations.ts +125 -0
  138. package/core/infrastructure/migrator/index.ts +288 -0
  139. package/core/infrastructure/migrator/project-scanner.ts +89 -0
  140. package/core/infrastructure/migrator/reports.ts +117 -0
  141. package/core/infrastructure/migrator/types.ts +124 -0
  142. package/core/infrastructure/migrator/validation.ts +94 -0
  143. package/core/infrastructure/migrator/version-migration.ts +117 -0
  144. package/core/infrastructure/migrator.ts +10 -0
  145. package/core/infrastructure/{path-manager.js → path-manager.ts} +51 -91
  146. package/core/infrastructure/session-manager/index.ts +23 -0
  147. package/core/infrastructure/session-manager/migration.ts +88 -0
  148. package/core/infrastructure/session-manager/session-manager.ts +307 -0
  149. package/core/infrastructure/session-manager/types.ts +45 -0
  150. package/core/infrastructure/session-manager.ts +8 -0
  151. package/core/infrastructure/{setup.js → setup.ts} +29 -21
  152. package/core/infrastructure/{update-checker.js → update-checker.ts} +40 -18
  153. package/core/outcomes/analyzer.ts +333 -0
  154. package/core/outcomes/index.ts +34 -0
  155. package/core/outcomes/recorder.ts +194 -0
  156. package/core/outcomes/types.ts +145 -0
  157. package/core/plugin/{hooks.js → hooks.ts} +56 -58
  158. package/core/plugin/{index.js → index.ts} +19 -8
  159. package/core/plugin/{loader.js → loader.ts} +87 -69
  160. package/core/plugin/{registry.js → registry.ts} +49 -45
  161. package/core/plugins/{webhook.js → webhook.ts} +43 -27
  162. package/core/schemas/agents.ts +27 -0
  163. package/core/schemas/analysis.ts +41 -0
  164. package/core/schemas/ideas.ts +83 -0
  165. package/core/schemas/index.ts +73 -0
  166. package/core/schemas/outcomes.ts +22 -0
  167. package/core/schemas/project.ts +26 -0
  168. package/core/schemas/roadmap.ts +90 -0
  169. package/core/schemas/shipped.ts +82 -0
  170. package/core/schemas/state.ts +107 -0
  171. package/core/session/index.ts +17 -0
  172. package/core/session/{metrics.js → metrics.ts} +64 -46
  173. package/core/session/{index.js → session-manager.ts} +51 -117
  174. package/core/session/types.ts +29 -0
  175. package/core/session/utils.ts +57 -0
  176. package/core/state/index.ts +25 -0
  177. package/core/state/manager.ts +376 -0
  178. package/core/state/types.ts +185 -0
  179. package/core/tsconfig.json +22 -0
  180. package/core/types/index.ts +506 -0
  181. package/core/utils/{animations.js → animations.ts} +74 -28
  182. package/core/utils/{branding.js → branding.ts} +29 -4
  183. package/core/utils/{date-helper.js → date-helper.ts} +31 -74
  184. package/core/utils/file-helper.ts +262 -0
  185. package/core/utils/{jsonl-helper.js → jsonl-helper.ts} +71 -107
  186. package/core/utils/{logger.js → logger.ts} +24 -12
  187. package/core/utils/{output.js → output.ts} +25 -13
  188. package/core/utils/{project-capabilities.js → project-capabilities.ts} +31 -18
  189. package/core/utils/{session-helper.js → session-helper.ts} +79 -66
  190. package/core/utils/{version.js → version.ts} +23 -31
  191. package/core/view-generator.ts +536 -0
  192. package/package.json +23 -17
  193. package/packages/shared/.turbo/turbo-build.log +14 -0
  194. package/packages/shared/dist/index.d.ts +8 -613
  195. package/packages/shared/dist/index.d.ts.map +1 -0
  196. package/packages/shared/dist/index.js +4110 -118
  197. package/packages/shared/dist/schemas.d.ts +408 -0
  198. package/packages/shared/dist/schemas.d.ts.map +1 -0
  199. package/packages/shared/dist/types.d.ts +144 -0
  200. package/packages/shared/dist/types.d.ts.map +1 -0
  201. package/packages/shared/dist/unified.d.ts +139 -0
  202. package/packages/shared/dist/unified.d.ts.map +1 -0
  203. package/packages/shared/dist/utils.d.ts +60 -0
  204. package/packages/shared/dist/utils.d.ts.map +1 -0
  205. package/packages/shared/package.json +4 -4
  206. package/packages/shared/src/index.ts +1 -0
  207. package/packages/shared/src/unified.ts +174 -0
  208. package/packages/web/app/api/claude/sessions/route.ts +1 -1
  209. package/packages/web/app/api/claude/status/route.ts +1 -1
  210. package/packages/web/app/api/migrate/route.ts +46 -0
  211. package/packages/web/app/api/projects/[id]/route.ts +1 -1
  212. package/packages/web/app/api/projects/[id]/stats/route.ts +30 -2
  213. package/packages/web/app/api/projects/[id]/status/route.ts +1 -1
  214. package/packages/web/app/api/projects/route.ts +1 -1
  215. package/packages/web/app/api/settings/route.ts +97 -0
  216. package/packages/web/app/api/v2/projects/[id]/unified/route.ts +57 -0
  217. package/packages/web/app/globals.css +38 -0
  218. package/packages/web/app/layout.tsx +10 -2
  219. package/packages/web/app/page.tsx +9 -224
  220. package/packages/web/app/project/[id]/page.tsx +191 -63
  221. package/packages/web/app/project/[id]/stats/loading.tsx +43 -0
  222. package/packages/web/app/project/[id]/stats/page.tsx +204 -163
  223. package/packages/web/app/settings/page.tsx +222 -2
  224. package/packages/web/components/ActivityTimeline/ActivityTimeline.constants.ts +2 -0
  225. package/packages/web/components/ActivityTimeline/ActivityTimeline.tsx +50 -0
  226. package/packages/web/components/ActivityTimeline/ActivityTimeline.types.ts +8 -0
  227. package/packages/web/components/ActivityTimeline/hooks/index.ts +2 -0
  228. package/packages/web/components/ActivityTimeline/hooks/useExpandable.ts +9 -0
  229. package/packages/web/components/ActivityTimeline/hooks/useGroupedEvents.ts +23 -0
  230. package/packages/web/components/ActivityTimeline/index.ts +2 -0
  231. package/packages/web/components/AgentsCard/AgentsCard.tsx +63 -0
  232. package/packages/web/components/AgentsCard/AgentsCard.types.ts +13 -0
  233. package/packages/web/components/AgentsCard/index.ts +2 -0
  234. package/packages/web/components/AppSidebar/AppSidebar.tsx +190 -0
  235. package/packages/web/components/AppSidebar/index.ts +1 -0
  236. package/packages/web/components/BackLink/BackLink.tsx +18 -0
  237. package/packages/web/components/BackLink/BackLink.types.ts +5 -0
  238. package/packages/web/components/BackLink/index.ts +2 -0
  239. package/packages/web/components/BentoCard/BentoCard.constants.ts +16 -0
  240. package/packages/web/components/BentoCard/BentoCard.tsx +47 -0
  241. package/packages/web/components/BentoCard/BentoCard.types.ts +15 -0
  242. package/packages/web/components/BentoCard/index.ts +2 -0
  243. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.constants.ts +9 -0
  244. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.tsx +18 -0
  245. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.types.ts +5 -0
  246. package/packages/web/components/BentoCardSkeleton/index.ts +2 -0
  247. package/packages/web/components/{stats → BentoGrid}/BentoGrid.tsx +4 -8
  248. package/packages/web/components/BentoGrid/BentoGrid.types.ts +4 -0
  249. package/packages/web/components/BentoGrid/index.ts +2 -0
  250. package/packages/web/components/CommandButton/index.ts +1 -0
  251. package/packages/web/components/ConnectionStatus/index.ts +1 -0
  252. package/packages/web/components/DashboardContent/DashboardContent.tsx +254 -0
  253. package/packages/web/components/DashboardContent/index.ts +1 -0
  254. package/packages/web/components/DateGroup/DateGroup.tsx +18 -0
  255. package/packages/web/components/DateGroup/DateGroup.types.ts +6 -0
  256. package/packages/web/components/DateGroup/DateGroup.utils.ts +11 -0
  257. package/packages/web/components/DateGroup/index.ts +2 -0
  258. package/packages/web/components/{stats → EmptyState}/EmptyState.tsx +1 -10
  259. package/packages/web/components/EmptyState/EmptyState.types.ts +10 -0
  260. package/packages/web/components/EmptyState/index.ts +2 -0
  261. package/packages/web/components/EventRow/EventRow.constants.ts +10 -0
  262. package/packages/web/components/EventRow/EventRow.tsx +49 -0
  263. package/packages/web/components/EventRow/EventRow.types.ts +7 -0
  264. package/packages/web/components/EventRow/EventRow.utils.ts +49 -0
  265. package/packages/web/components/EventRow/index.ts +2 -0
  266. package/packages/web/components/ExpandButton/ExpandButton.tsx +18 -0
  267. package/packages/web/components/ExpandButton/ExpandButton.types.ts +6 -0
  268. package/packages/web/components/ExpandButton/index.ts +2 -0
  269. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.tsx +14 -0
  270. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.types.ts +5 -0
  271. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.utils.ts +13 -0
  272. package/packages/web/components/HealthGradientBackground/index.ts +2 -0
  273. package/packages/web/components/HeroSection/HeroSection.tsx +55 -0
  274. package/packages/web/components/HeroSection/HeroSection.types.ts +14 -0
  275. package/packages/web/components/HeroSection/HeroSection.utils.ts +7 -0
  276. package/packages/web/components/HeroSection/hooks/index.ts +2 -0
  277. package/packages/web/components/HeroSection/hooks/useCountUp.ts +45 -0
  278. package/packages/web/components/HeroSection/hooks/useWeeklyActivity.ts +18 -0
  279. package/packages/web/components/HeroSection/index.ts +2 -0
  280. package/packages/web/components/{stats → IdeasCard}/IdeasCard.tsx +3 -14
  281. package/packages/web/components/IdeasCard/IdeasCard.types.ts +9 -0
  282. package/packages/web/components/IdeasCard/index.ts +2 -0
  283. package/packages/web/components/InsightMessage/InsightMessage.tsx +9 -0
  284. package/packages/web/components/InsightMessage/InsightMessage.types.ts +3 -0
  285. package/packages/web/components/InsightMessage/index.ts +2 -0
  286. package/packages/web/components/Logo/index.ts +1 -0
  287. package/packages/web/components/MarkdownContent/index.ts +1 -0
  288. package/packages/web/components/NowCard/NowCard.tsx +93 -0
  289. package/packages/web/components/NowCard/NowCard.types.ts +15 -0
  290. package/packages/web/components/NowCard/index.ts +2 -0
  291. package/packages/web/components/ProgressRing/ProgressRing.constants.ts +20 -0
  292. package/packages/web/components/{stats → ProgressRing}/ProgressRing.tsx +4 -27
  293. package/packages/web/components/ProgressRing/ProgressRing.types.ts +11 -0
  294. package/packages/web/components/ProgressRing/index.ts +2 -0
  295. package/packages/web/components/ProjectAvatar/index.ts +1 -0
  296. package/packages/web/components/Providers/index.ts +1 -0
  297. package/packages/web/components/QueueCard/QueueCard.tsx +72 -0
  298. package/packages/web/components/QueueCard/QueueCard.types.ts +11 -0
  299. package/packages/web/components/QueueCard/QueueCard.utils.ts +12 -0
  300. package/packages/web/components/QueueCard/index.ts +2 -0
  301. package/packages/web/components/{stats → RoadmapCard}/RoadmapCard.tsx +3 -23
  302. package/packages/web/components/RoadmapCard/RoadmapCard.types.ts +15 -0
  303. package/packages/web/components/RoadmapCard/index.ts +2 -0
  304. package/packages/web/components/{stats → ShipsCard}/ShipsCard.tsx +4 -22
  305. package/packages/web/components/ShipsCard/ShipsCard.types.ts +12 -0
  306. package/packages/web/components/ShipsCard/ShipsCard.utils.ts +4 -0
  307. package/packages/web/components/ShipsCard/index.ts +2 -0
  308. package/packages/web/components/{stats → SparklineChart}/SparklineChart.tsx +1 -7
  309. package/packages/web/components/SparklineChart/SparklineChart.types.ts +6 -0
  310. package/packages/web/components/SparklineChart/index.ts +2 -0
  311. package/packages/web/components/StreakCard/StreakCard.constants.ts +2 -0
  312. package/packages/web/components/{stats → StreakCard}/StreakCard.tsx +5 -11
  313. package/packages/web/components/StreakCard/StreakCard.types.ts +4 -0
  314. package/packages/web/components/StreakCard/index.ts +2 -0
  315. package/packages/web/components/TasksCounter/TasksCounter.tsx +14 -0
  316. package/packages/web/components/TasksCounter/TasksCounter.types.ts +3 -0
  317. package/packages/web/components/TasksCounter/index.ts +2 -0
  318. package/packages/web/components/TechStackBadges/index.ts +1 -0
  319. package/packages/web/components/{TerminalTab.tsx → TerminalTabs/TerminalTab.tsx} +11 -0
  320. package/packages/web/components/{TerminalTabs.tsx → TerminalTabs/TerminalTabs.tsx} +29 -28
  321. package/packages/web/components/TerminalTabs/index.ts +1 -0
  322. package/packages/web/components/VelocityBadge/VelocityBadge.tsx +27 -0
  323. package/packages/web/components/VelocityBadge/VelocityBadge.types.ts +3 -0
  324. package/packages/web/components/VelocityBadge/index.ts +2 -0
  325. package/packages/web/components/VelocityCard/VelocityCard.tsx +71 -0
  326. package/packages/web/components/VelocityCard/VelocityCard.types.ts +7 -0
  327. package/packages/web/components/VelocityCard/index.ts +2 -0
  328. package/packages/web/components/WeeklySparkline/WeeklySparkline.tsx +13 -0
  329. package/packages/web/components/WeeklySparkline/WeeklySparkline.types.ts +3 -0
  330. package/packages/web/components/WeeklySparkline/index.ts +2 -0
  331. package/packages/web/components/ui/input.tsx +21 -0
  332. package/packages/web/context/TerminalTabsContext.tsx +46 -1
  333. package/packages/web/hooks/useClaudeTerminal.ts +71 -21
  334. package/packages/web/hooks/useProjectStats.ts +55 -0
  335. package/packages/web/hooks/useProjects.ts +6 -6
  336. package/packages/web/lib/actions/projects.ts +15 -0
  337. package/packages/web/lib/json-loader.ts +630 -0
  338. package/packages/web/lib/services/index.ts +9 -0
  339. package/packages/web/lib/services/migration.server.ts +600 -0
  340. package/packages/web/lib/services/projects.server.ts +52 -0
  341. package/packages/web/lib/services/stats.server.ts +264 -0
  342. package/packages/web/lib/unified-loader.ts +396 -0
  343. package/packages/web/package.json +10 -7
  344. package/packages/web/server.ts +58 -8
  345. package/templates/commands/done.md +76 -32
  346. package/templates/commands/feature.md +121 -47
  347. package/templates/commands/idea.md +81 -8
  348. package/templates/commands/now.md +41 -17
  349. package/templates/commands/ship.md +64 -25
  350. package/templates/commands/sync.md +28 -3
  351. package/core/agentic/agent-router.js +0 -140
  352. package/core/agentic/chain-of-thought.js +0 -578
  353. package/core/agentic/command-executor.js +0 -417
  354. package/core/agentic/context-filter.js +0 -354
  355. package/core/agentic/ground-truth.js +0 -591
  356. package/core/agentic/loop-detector.js +0 -406
  357. package/core/agentic/memory-system.js +0 -845
  358. package/core/agentic/parallel-tools.js +0 -366
  359. package/core/agentic/plan-mode.js +0 -572
  360. package/core/agentic/prompt-builder.js +0 -352
  361. package/core/agentic/response-templates.js +0 -290
  362. package/core/agentic/semantic-compression.js +0 -517
  363. package/core/agentic/think-blocks.js +0 -657
  364. package/core/agentic/tool-registry.js +0 -184
  365. package/core/agentic/validation-rules.js +0 -380
  366. package/core/command-registry.js +0 -698
  367. package/core/commands.js +0 -2237
  368. package/core/domain/task-stack.js +0 -497
  369. package/core/infrastructure/legacy-installer-detector.js +0 -546
  370. package/core/infrastructure/migrator.js +0 -796
  371. package/core/infrastructure/session-manager.js +0 -390
  372. package/core/utils/file-helper.js +0 -329
  373. package/packages/web/app/api/projects/[id]/delete/route.ts +0 -21
  374. package/packages/web/app/api/stats/route.ts +0 -38
  375. package/packages/web/components/AppSidebar.tsx +0 -113
  376. package/packages/web/components/stats/ActivityTimeline.tsx +0 -201
  377. package/packages/web/components/stats/AgentsCard.tsx +0 -56
  378. package/packages/web/components/stats/BentoCard.tsx +0 -88
  379. package/packages/web/components/stats/HeroSection.tsx +0 -172
  380. package/packages/web/components/stats/NowCard.tsx +0 -71
  381. package/packages/web/components/stats/QueueCard.tsx +0 -58
  382. package/packages/web/components/stats/VelocityCard.tsx +0 -60
  383. package/packages/web/components/stats/index.ts +0 -17
  384. package/packages/web/hooks/useStats.ts +0 -28
  385. /package/packages/web/components/{CommandButton.tsx → CommandButton/CommandButton.tsx} +0 -0
  386. /package/packages/web/components/{ConnectionStatus.tsx → ConnectionStatus/ConnectionStatus.tsx} +0 -0
  387. /package/packages/web/components/{Logo.tsx → Logo/Logo.tsx} +0 -0
  388. /package/packages/web/components/{MarkdownContent.tsx → MarkdownContent/MarkdownContent.tsx} +0 -0
  389. /package/packages/web/components/{ProjectAvatar.tsx → ProjectAvatar/ProjectAvatar.tsx} +0 -0
  390. /package/packages/web/components/{providers.tsx → Providers/Providers.tsx} +0 -0
  391. /package/packages/web/components/{TechStackBadges.tsx → TechStackBadges/TechStackBadges.tsx} +0 -0
@@ -0,0 +1,50 @@
1
+ 'use client'
2
+
3
+ import { Activity } from 'lucide-react'
4
+ import { BentoCard } from '@/components/BentoCard'
5
+ import { EmptyState } from '@/components/EmptyState'
6
+ import { DateGroup } from '@/components/DateGroup'
7
+ import { ExpandButton } from '@/components/ExpandButton'
8
+ import { useExpandable, useGroupedEvents } from './hooks'
9
+ import { TIMELINE_COLLAPSED_LIMIT, TIMELINE_EXPANDED_LIMIT } from './ActivityTimeline.constants'
10
+ import type { ActivityTimelineProps } from './ActivityTimeline.types'
11
+
12
+ export function ActivityTimeline({ timeline, className }: ActivityTimelineProps) {
13
+ const { expanded, toggle } = useExpandable(false)
14
+ const limit = expanded ? TIMELINE_EXPANDED_LIMIT : TIMELINE_COLLAPSED_LIMIT
15
+ const { grouped, hasMore } = useGroupedEvents(timeline, limit)
16
+
17
+ return (
18
+ <BentoCard
19
+ size="full"
20
+ title="Recent Activity"
21
+ icon={Activity}
22
+ count={timeline.length > 0 ? `${timeline.length} events` : undefined}
23
+ className={className}
24
+ >
25
+ {timeline.length === 0 ? (
26
+ <EmptyState
27
+ icon={Activity}
28
+ title="No recent activity"
29
+ description="Activity will appear as you work"
30
+ compact
31
+ />
32
+ ) : (
33
+ <div className="space-y-3 sm:space-y-4">
34
+ {Array.from(grouped.entries()).map(([dateKey, events]) => (
35
+ <DateGroup key={dateKey} dateKey={dateKey} events={events} />
36
+ ))}
37
+
38
+ {hasMore && (
39
+ <ExpandButton
40
+ expanded={expanded}
41
+ totalCount={timeline.length}
42
+ collapsedLimit={TIMELINE_COLLAPSED_LIMIT}
43
+ onToggle={toggle}
44
+ />
45
+ )}
46
+ </div>
47
+ )}
48
+ </BentoCard>
49
+ )
50
+ }
@@ -0,0 +1,8 @@
1
+ import type { TimelineEvent } from '@/lib/parse-prjct-files'
2
+
3
+ export type { TimelineEvent }
4
+
5
+ export interface ActivityTimelineProps {
6
+ timeline: TimelineEvent[]
7
+ className?: string
8
+ }
@@ -0,0 +1,2 @@
1
+ export { useExpandable } from './useExpandable'
2
+ export { useGroupedEvents } from './useGroupedEvents'
@@ -0,0 +1,9 @@
1
+ 'use client'
2
+
3
+ import { useState } from 'react'
4
+
5
+ export function useExpandable(initialExpanded: boolean = false) {
6
+ const [expanded, setExpanded] = useState(initialExpanded)
7
+ const toggle = () => setExpanded(prev => !prev)
8
+ return { expanded, toggle }
9
+ }
@@ -0,0 +1,23 @@
1
+ 'use client'
2
+
3
+ import { useMemo } from 'react'
4
+ import type { TimelineEvent } from '../ActivityTimeline.types'
5
+
6
+ export function useGroupedEvents(events: TimelineEvent[], limit: number) {
7
+ return useMemo(() => {
8
+ const displayEvents = events.slice(0, limit)
9
+ const groups = new Map<string, TimelineEvent[]>()
10
+
11
+ displayEvents.forEach(event => {
12
+ if (!event.ts) return
13
+ const dateKey = event.ts.split('T')[0]
14
+ const existing = groups.get(dateKey) ?? []
15
+ groups.set(dateKey, [...existing, event])
16
+ })
17
+
18
+ return {
19
+ grouped: groups,
20
+ hasMore: events.length > limit,
21
+ }
22
+ }, [events, limit])
23
+ }
@@ -0,0 +1,2 @@
1
+ export { ActivityTimeline } from './ActivityTimeline'
2
+ export type { ActivityTimelineProps } from './ActivityTimeline.types'
@@ -0,0 +1,63 @@
1
+ import { BentoCard } from '@/components/BentoCard'
2
+ import { EmptyState } from '@/components/EmptyState'
3
+ import { Bot, Star, TrendingUp } from 'lucide-react'
4
+ import { Badge } from '@/components/ui/badge'
5
+ import { cn } from '@/lib/utils'
6
+ import type { AgentsCardProps } from './AgentsCard.types'
7
+
8
+ export function AgentsCard({ agents, className }: AgentsCardProps) {
9
+ const displayAgents = agents.slice(0, 8)
10
+
11
+ return (
12
+ <BentoCard
13
+ size="1x1"
14
+ title="Agents"
15
+ icon={Bot}
16
+ count={agents.length}
17
+ className={className}
18
+ >
19
+ {agents.length === 0 ? (
20
+ <EmptyState
21
+ icon={Bot}
22
+ title="No agents"
23
+ description="Run /p:sync to generate"
24
+ compact
25
+ />
26
+ ) : (
27
+ <div className="flex flex-wrap gap-1.5">
28
+ {displayAgents.map((agent) => {
29
+ const hasPerformance = agent.successRate !== undefined
30
+ const isTopPerformer = hasPerformance && agent.successRate! >= 80
31
+
32
+ return (
33
+ <Badge
34
+ key={agent.name}
35
+ variant="secondary"
36
+ className={cn(
37
+ "text-xs px-2 py-0.5 font-mono inline-flex items-center gap-1",
38
+ isTopPerformer && "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-500/20"
39
+ )}
40
+ >
41
+ {isTopPerformer && <Star className="h-2.5 w-2.5" />}
42
+ @{agent.name}
43
+ {hasPerformance && (
44
+ <span className="text-[9px] opacity-70">
45
+ {agent.successRate}%
46
+ </span>
47
+ )}
48
+ {agent.improving && (
49
+ <TrendingUp className="h-2.5 w-2.5 text-emerald-500" />
50
+ )}
51
+ </Badge>
52
+ )
53
+ })}
54
+ {agents.length > 8 && (
55
+ <Badge variant="outline" className="text-xs px-2 py-0.5">
56
+ +{agents.length - 8}
57
+ </Badge>
58
+ )}
59
+ </div>
60
+ )}
61
+ </BentoCard>
62
+ )
63
+ }
@@ -0,0 +1,13 @@
1
+ export interface Agent {
2
+ name: string
3
+ description?: string
4
+ successRate?: number
5
+ tasksCompleted?: number
6
+ improving?: boolean
7
+ bestFor?: string[]
8
+ }
9
+
10
+ export interface AgentsCardProps {
11
+ agents: Agent[]
12
+ className?: string
13
+ }
@@ -0,0 +1,2 @@
1
+ export { AgentsCard } from './AgentsCard'
2
+ export type { AgentsCardProps } from './AgentsCard.types'
@@ -0,0 +1,190 @@
1
+ 'use client'
2
+
3
+ import Link from 'next/link'
4
+ import { usePathname } from 'next/navigation'
5
+ import {
6
+ LayoutDashboard,
7
+ Settings,
8
+ HelpCircle,
9
+ Menu,
10
+ PanelLeft,
11
+ } from 'lucide-react'
12
+ import { Logo } from '@/components/Logo'
13
+ import { cn } from '@/lib/utils'
14
+ import { useState, useEffect } from 'react'
15
+ import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet'
16
+ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
17
+
18
+ const navItems = [
19
+ { href: '/', icon: LayoutDashboard, label: 'Dashboard' },
20
+ ]
21
+
22
+ function SidebarContent({
23
+ onNavigate,
24
+ isCollapsed = false,
25
+ onToggleCollapse
26
+ }: {
27
+ onNavigate?: () => void
28
+ isCollapsed?: boolean
29
+ onToggleCollapse?: () => void
30
+ }) {
31
+ const pathname = usePathname()
32
+
33
+ return (
34
+ <>
35
+ {/* Header */}
36
+ <div className={cn(
37
+ "flex h-14 items-center border-b border-border",
38
+ isCollapsed ? "justify-center px-2" : "justify-between px-3"
39
+ )}>
40
+ <Link href="/" onClick={onNavigate}>
41
+ <Logo size="xs" showText={!isCollapsed} rounded />
42
+ </Link>
43
+ {onToggleCollapse && (
44
+ <Tooltip>
45
+ <TooltipTrigger asChild>
46
+ <button
47
+ onClick={onToggleCollapse}
48
+ className="h-8 w-8 rounded-md flex items-center justify-center text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-colors"
49
+ aria-label={isCollapsed ? "Expand sidebar" : "Collapse sidebar"}
50
+ >
51
+ <PanelLeft className="h-4 w-4" />
52
+ </button>
53
+ </TooltipTrigger>
54
+ <TooltipContent side="right">
55
+ {isCollapsed ? "Expand" : "Collapse"}
56
+ </TooltipContent>
57
+ </Tooltip>
58
+ )}
59
+ </div>
60
+
61
+ {/* Nav */}
62
+ <nav className={cn("flex-1 overflow-y-auto py-4", isCollapsed ? "px-2" : "px-3")}>
63
+ <div className="space-y-1">
64
+ {navItems.map(({ href, icon: Icon, label }) => {
65
+ const isActive = pathname === href || (href !== '/' && pathname.startsWith(href))
66
+ const linkContent = (
67
+ <Link
68
+ key={href}
69
+ href={href}
70
+ onClick={onNavigate}
71
+ className={cn(
72
+ 'flex items-center rounded-md transition-colors min-h-[44px]',
73
+ isCollapsed ? 'justify-center px-2' : 'gap-3 px-3',
74
+ 'py-2.5',
75
+ isActive
76
+ ? 'bg-accent text-accent-foreground'
77
+ : 'text-muted-foreground hover:bg-accent hover:text-accent-foreground'
78
+ )}
79
+ >
80
+ <Icon className="h-5 w-5 shrink-0" />
81
+ {!isCollapsed && <span className="text-sm font-medium">{label}</span>}
82
+ </Link>
83
+ )
84
+
85
+ if (isCollapsed) {
86
+ return (
87
+ <Tooltip key={href}>
88
+ <TooltipTrigger asChild>{linkContent}</TooltipTrigger>
89
+ <TooltipContent side="right">{label}</TooltipContent>
90
+ </Tooltip>
91
+ )
92
+ }
93
+ return linkContent
94
+ })}
95
+ </div>
96
+ </nav>
97
+
98
+ {/* Footer */}
99
+ <div className={cn("border-t border-border space-y-1", isCollapsed ? "p-2" : "p-3")}>
100
+ {[
101
+ { href: '/settings', icon: Settings, label: 'Settings' },
102
+ { href: '/help', icon: HelpCircle, label: 'Need help?' }
103
+ ].map(({ href, icon: Icon, label }) => {
104
+ const isActive = pathname === href
105
+ const linkContent = (
106
+ <Link
107
+ key={href}
108
+ href={href}
109
+ onClick={onNavigate}
110
+ className={cn(
111
+ 'flex items-center rounded-md transition-colors min-h-[44px]',
112
+ isCollapsed ? 'justify-center px-2' : 'gap-3 px-3',
113
+ 'py-2.5',
114
+ isActive
115
+ ? 'bg-accent text-accent-foreground'
116
+ : 'text-muted-foreground hover:bg-accent hover:text-accent-foreground'
117
+ )}
118
+ >
119
+ <Icon className="h-5 w-5 shrink-0" />
120
+ {!isCollapsed && <span className="text-sm font-medium">{label}</span>}
121
+ </Link>
122
+ )
123
+
124
+ if (isCollapsed) {
125
+ return (
126
+ <Tooltip key={href}>
127
+ <TooltipTrigger asChild>{linkContent}</TooltipTrigger>
128
+ <TooltipContent side="right">{label}</TooltipContent>
129
+ </Tooltip>
130
+ )
131
+ }
132
+ return linkContent
133
+ })}
134
+ </div>
135
+ </>
136
+ )
137
+ }
138
+
139
+ export function AppSidebar() {
140
+ const [isOpen, setIsOpen] = useState(false)
141
+ const [isMobile, setIsMobile] = useState(false)
142
+ const [isCollapsed, setIsCollapsed] = useState(false)
143
+
144
+ // Detect mobile on mount and resize
145
+ useEffect(() => {
146
+ const checkMobile = () => {
147
+ setIsMobile(window.innerWidth < 768)
148
+ }
149
+ checkMobile()
150
+ window.addEventListener('resize', checkMobile)
151
+ return () => window.removeEventListener('resize', checkMobile)
152
+ }, [])
153
+
154
+ // Mobile: Sheet/Drawer
155
+ if (isMobile) {
156
+ return (
157
+ <Sheet open={isOpen} onOpenChange={setIsOpen}>
158
+ <SheetTrigger asChild>
159
+ <button
160
+ className="fixed top-3 left-3 z-50 h-10 w-10 rounded-lg bg-card border border-border flex items-center justify-center text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-colors shadow-sm"
161
+ aria-label="Open menu"
162
+ >
163
+ <Menu className="h-5 w-5" />
164
+ </button>
165
+ </SheetTrigger>
166
+ <SheetContent side="left" className="w-[280px] p-0 flex flex-col">
167
+ <SidebarContent onNavigate={() => setIsOpen(false)} />
168
+ </SheetContent>
169
+ </Sheet>
170
+ )
171
+ }
172
+
173
+ // Desktop: Collapsible sidebar
174
+ return (
175
+ <aside className={cn(
176
+ "hidden md:flex h-full flex-col border-r border-border bg-card transition-all duration-200",
177
+ isCollapsed ? "w-14" : "w-60"
178
+ )}>
179
+ <SidebarContent
180
+ isCollapsed={isCollapsed}
181
+ onToggleCollapse={() => setIsCollapsed(!isCollapsed)}
182
+ />
183
+ </aside>
184
+ )
185
+ }
186
+
187
+ // Mobile header spacer - use in pages that need top padding for the menu button
188
+ export function MobileHeaderSpacer() {
189
+ return <div className="h-16 md:h-0" />
190
+ }
@@ -0,0 +1 @@
1
+ export { AppSidebar, MobileHeaderSpacer } from './AppSidebar'
@@ -0,0 +1,18 @@
1
+ import Link from 'next/link'
2
+ import { ArrowLeft } from 'lucide-react'
3
+ import { cn } from '@/lib/utils'
4
+ import type { BackLinkProps } from './BackLink.types'
5
+
6
+ export function BackLink({ projectId, projectName, className }: BackLinkProps) {
7
+ return (
8
+ <div className={cn('relative flex', className)}>
9
+ <Link
10
+ href={`/project/${projectId}`}
11
+ className="flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors min-h-[44px]"
12
+ >
13
+ <ArrowLeft className="w-4 h-4" />
14
+ {projectName}
15
+ </Link>
16
+ </div>
17
+ )
18
+ }
@@ -0,0 +1,5 @@
1
+ export interface BackLinkProps {
2
+ projectId: string
3
+ projectName: string
4
+ className?: string
5
+ }
@@ -0,0 +1,2 @@
1
+ export { BackLink } from './BackLink'
2
+ export type { BackLinkProps } from './BackLink.types'
@@ -0,0 +1,16 @@
1
+ import type { AccentColor, BentoSize } from './BentoCard.types'
2
+
3
+ export const BENTO_SIZE_CLASSES: Record<BentoSize, string> = {
4
+ '1x1': 'col-span-1 row-span-1',
5
+ '1x2': 'col-span-1 row-span-2',
6
+ '2x1': 'col-span-1 sm:col-span-2 row-span-1',
7
+ '2x2': 'col-span-1 sm:col-span-2 row-span-2',
8
+ 'full': 'col-span-1 sm:col-span-2 lg:col-span-full',
9
+ }
10
+
11
+ export const ACCENT_STYLES: Record<AccentColor, string> = {
12
+ default: '',
13
+ success: 'border-emerald-500/20 bg-emerald-500/5',
14
+ warning: 'border-amber-500/20 bg-amber-500/5',
15
+ destructive: 'border-destructive/20 bg-destructive/5',
16
+ }
@@ -0,0 +1,47 @@
1
+ import { cn } from '@/lib/utils'
2
+ import { BENTO_SIZE_CLASSES, ACCENT_STYLES } from './BentoCard.constants'
3
+ import type { BentoCardProps } from './BentoCard.types'
4
+
5
+ export function BentoCard({
6
+ size = '1x1',
7
+ title,
8
+ count,
9
+ icon: Icon,
10
+ accentColor = 'default',
11
+ className,
12
+ headerClassName,
13
+ children,
14
+ }: BentoCardProps) {
15
+ return (
16
+ <div
17
+ className={cn(
18
+ 'relative overflow-hidden rounded-xl border bg-card transition-all duration-200',
19
+ 'p-3 sm:p-4',
20
+ 'hover:shadow-md hover:border-foreground/20',
21
+ 'active:scale-[0.99]',
22
+ BENTO_SIZE_CLASSES[size],
23
+ ACCENT_STYLES[accentColor],
24
+ className
25
+ )}
26
+ >
27
+ {(title || count !== undefined || Icon) && (
28
+ <div className={cn('flex items-center justify-between mb-2 sm:mb-3', headerClassName)}>
29
+ <div className="flex items-center gap-2">
30
+ {Icon && <Icon className="h-4 w-4 sm:h-3.5 sm:w-3.5 text-muted-foreground" />}
31
+ {title && (
32
+ <span className="text-[11px] sm:text-[10px] font-bold uppercase tracking-[0.15em] text-muted-foreground">
33
+ {title}
34
+ </span>
35
+ )}
36
+ </div>
37
+ {count !== undefined && (
38
+ <span className="text-sm sm:text-xs font-medium text-muted-foreground tabular-nums">
39
+ {count}
40
+ </span>
41
+ )}
42
+ </div>
43
+ )}
44
+ {children}
45
+ </div>
46
+ )
47
+ }
@@ -0,0 +1,15 @@
1
+ import type { LucideIcon } from 'lucide-react'
2
+
3
+ export type BentoSize = '1x1' | '1x2' | '2x1' | '2x2' | 'full'
4
+ export type AccentColor = 'default' | 'success' | 'warning' | 'destructive'
5
+
6
+ export interface BentoCardProps {
7
+ size?: BentoSize
8
+ title?: string
9
+ count?: number | string
10
+ icon?: LucideIcon
11
+ accentColor?: AccentColor
12
+ className?: string
13
+ headerClassName?: string
14
+ children: React.ReactNode
15
+ }
@@ -0,0 +1,2 @@
1
+ export { BentoCard } from './BentoCard'
2
+ export type { BentoCardProps } from './BentoCard.types'
@@ -0,0 +1,9 @@
1
+ import type { BentoSize } from './BentoCardSkeleton.types'
2
+
3
+ export const BENTO_SIZE_CLASSES: Record<BentoSize, string> = {
4
+ '1x1': 'col-span-1 row-span-1',
5
+ '1x2': 'col-span-1 row-span-2',
6
+ '2x1': 'col-span-1 sm:col-span-2 row-span-1',
7
+ '2x2': 'col-span-1 sm:col-span-2 row-span-2',
8
+ 'full': 'col-span-1 sm:col-span-2 lg:col-span-full',
9
+ }
@@ -0,0 +1,18 @@
1
+ import { cn } from '@/lib/utils'
2
+ import { BENTO_SIZE_CLASSES } from './BentoCardSkeleton.constants'
3
+ import type { BentoCardSkeletonProps } from './BentoCardSkeleton.types'
4
+
5
+ export function BentoCardSkeleton({ size = '1x1' }: BentoCardSkeletonProps) {
6
+ return (
7
+ <div
8
+ className={cn(
9
+ 'rounded-xl border bg-card p-4 animate-pulse',
10
+ BENTO_SIZE_CLASSES[size]
11
+ )}
12
+ >
13
+ <div className="h-3 w-16 bg-muted rounded mb-3" />
14
+ <div className="h-6 w-24 bg-muted rounded mb-2" />
15
+ <div className="h-3 w-full bg-muted rounded" />
16
+ </div>
17
+ )
18
+ }
@@ -0,0 +1,5 @@
1
+ export type BentoSize = '1x1' | '1x2' | '2x1' | '2x2' | 'full'
2
+
3
+ export interface BentoCardSkeletonProps {
4
+ size?: BentoSize
5
+ }
@@ -0,0 +1,2 @@
1
+ export { BentoCardSkeleton } from './BentoCardSkeleton'
2
+ export type { BentoCardSkeletonProps } from './BentoCardSkeleton.types'
@@ -1,18 +1,14 @@
1
- import * as React from 'react'
2
1
  import { cn } from '@/lib/utils'
3
-
4
- interface BentoGridProps {
5
- className?: string
6
- children: React.ReactNode
7
- }
2
+ import type { BentoGridProps } from './BentoGrid.types'
8
3
 
9
4
  export function BentoGrid({ className, children }: BentoGridProps) {
10
5
  return (
11
6
  <div
12
7
  className={cn(
13
- 'grid gap-4',
8
+ 'grid',
9
+ 'gap-3 sm:gap-4',
14
10
  'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',
15
- 'auto-rows-[minmax(140px,auto)]',
11
+ 'auto-rows-[minmax(120px,auto)] sm:auto-rows-[minmax(140px,auto)]',
16
12
  className
17
13
  )}
18
14
  >
@@ -0,0 +1,4 @@
1
+ export interface BentoGridProps {
2
+ children: React.ReactNode
3
+ className?: string
4
+ }
@@ -0,0 +1,2 @@
1
+ export { BentoGrid } from './BentoGrid'
2
+ export type { BentoGridProps } from './BentoGrid.types'
@@ -0,0 +1 @@
1
+ export { CommandButton } from './CommandButton'
@@ -0,0 +1 @@
1
+ export { ConnectionStatus } from './ConnectionStatus'