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,536 @@
1
+ /**
2
+ * View Generator
3
+ *
4
+ * Generates MD views from JSON data files.
5
+ * JSON is the source of truth, MD is the generated view for Claude.
6
+ *
7
+ * Flow: JSON (data/) → Generator → MD (views/)
8
+ */
9
+
10
+ import fs from 'fs/promises'
11
+ import path from 'path'
12
+ import {
13
+ StateJson,
14
+ QueueJson,
15
+ IdeasJson,
16
+ RoadmapJson,
17
+ ShippedJson,
18
+ ProjectSchema,
19
+ DEFAULT_STATE,
20
+ DEFAULT_QUEUE,
21
+ DEFAULT_IDEAS,
22
+ DEFAULT_ROADMAP,
23
+ DEFAULT_SHIPPED,
24
+ getProjectPath,
25
+ getDataPath,
26
+ getViewsPath,
27
+ } from './schemas'
28
+
29
+ // ============================================
30
+ // HELPERS
31
+ // ============================================
32
+
33
+ async function readJson<T>(filePath: string, defaultValue: T): Promise<T> {
34
+ try {
35
+ const content = await fs.readFile(filePath, 'utf-8')
36
+ return JSON.parse(content) as T
37
+ } catch {
38
+ return defaultValue
39
+ }
40
+ }
41
+
42
+ async function writeFile(filePath: string, content: string): Promise<void> {
43
+ const dir = path.dirname(filePath)
44
+ await fs.mkdir(dir, { recursive: true })
45
+ await fs.writeFile(filePath, content, 'utf-8')
46
+ }
47
+
48
+ function formatDate(isoString: string): string {
49
+ if (!isoString) return 'Unknown'
50
+ const date = new Date(isoString)
51
+ return date.toLocaleDateString('en-US', {
52
+ year: 'numeric',
53
+ month: 'short',
54
+ day: 'numeric',
55
+ })
56
+ }
57
+
58
+ function formatDateTime(isoString: string): string {
59
+ if (!isoString) return 'Unknown'
60
+ const date = new Date(isoString)
61
+ return date.toLocaleString('en-US', {
62
+ year: 'numeric',
63
+ month: 'short',
64
+ day: 'numeric',
65
+ hour: '2-digit',
66
+ minute: '2-digit',
67
+ })
68
+ }
69
+
70
+ function formatDuration(ms: number): string {
71
+ const seconds = Math.floor(ms / 1000)
72
+ const minutes = Math.floor(seconds / 60)
73
+ const hours = Math.floor(minutes / 60)
74
+ const days = Math.floor(hours / 24)
75
+
76
+ if (days > 0) return `${days}d ${hours % 24}h`
77
+ if (hours > 0) return `${hours}h ${minutes % 60}m`
78
+ if (minutes > 0) return `${minutes}m`
79
+ return `${seconds}s`
80
+ }
81
+
82
+ function timeAgo(isoString: string): string {
83
+ if (!isoString) return ''
84
+ const ms = Date.now() - new Date(isoString).getTime()
85
+ return formatDuration(ms) + ' ago'
86
+ }
87
+
88
+ // ============================================
89
+ // VIEW GENERATORS
90
+ // ============================================
91
+
92
+ /**
93
+ * Generate now.md from state.json
94
+ */
95
+ export function generateNowView(state: StateJson): string {
96
+ if (!state.currentTask) {
97
+ return `# NOW
98
+
99
+ No current task. Use \`/p:now <task>\` to start.
100
+
101
+ ---
102
+ **Quick Actions:**
103
+ - \`/p:now "task description"\` - Start a new task
104
+ - \`/p:next\` - View priority queue
105
+ - \`/p:feature\` - Plan a new feature
106
+ `
107
+ }
108
+
109
+ const { description, startedAt, sessionId, featureId } = state.currentTask
110
+ const elapsed = timeAgo(startedAt)
111
+
112
+ let content = `# NOW
113
+
114
+ **${description}**
115
+
116
+ | Info | Value |
117
+ |------|-------|
118
+ | Started | ${formatDateTime(startedAt)} (${elapsed}) |
119
+ | Session | \`${sessionId}\` |`
120
+
121
+ if (featureId) {
122
+ content += `
123
+ | Feature | \`${featureId}\` |`
124
+ }
125
+
126
+ content += `
127
+
128
+ ---
129
+ **Actions:**
130
+ - \`/p:done\` - Complete this task
131
+ - \`/p:pause\` - Pause and switch to something else
132
+ `
133
+
134
+ return content
135
+ }
136
+
137
+ /**
138
+ * Generate next.md from queue.json
139
+ */
140
+ export function generateQueueView(queue: QueueJson): string {
141
+ const pending = queue.tasks.filter(t => !t.completed)
142
+ const completed = queue.tasks.filter(t => t.completed)
143
+
144
+ if (pending.length === 0 && completed.length === 0) {
145
+ return `# Priority Queue
146
+
147
+ No tasks in queue. Use \`/p:feature\` to add tasks.
148
+
149
+ ---
150
+ **Quick Actions:**
151
+ - \`/p:feature "description"\` - Add a new feature with tasks
152
+ - \`/p:idea "text"\` - Capture a quick idea
153
+ `
154
+ }
155
+
156
+ let content = `# Priority Queue
157
+
158
+ > ${pending.length} pending task${pending.length !== 1 ? 's' : ''}
159
+ `
160
+
161
+ // Group by priority
162
+ const critical = pending.filter(t => t.priority === 'critical')
163
+ const high = pending.filter(t => t.priority === 'high')
164
+ const medium = pending.filter(t => t.priority === 'medium')
165
+ const low = pending.filter(t => t.priority === 'low')
166
+
167
+ if (critical.length > 0) {
168
+ content += `
169
+ ## 🔴 Critical
170
+
171
+ ${critical.map(t => `- [ ] ${t.description}${t.featureId ? ` *(${t.featureId})*` : ''}`).join('\n')}
172
+ `
173
+ }
174
+
175
+ if (high.length > 0) {
176
+ content += `
177
+ ## 🟠 High
178
+
179
+ ${high.map(t => `- [ ] ${t.description}${t.featureId ? ` *(${t.featureId})*` : ''}`).join('\n')}
180
+ `
181
+ }
182
+
183
+ if (medium.length > 0) {
184
+ content += `
185
+ ## 🟡 Medium
186
+
187
+ ${medium.map(t => `- [ ] ${t.description}${t.featureId ? ` *(${t.featureId})*` : ''}`).join('\n')}
188
+ `
189
+ }
190
+
191
+ if (low.length > 0) {
192
+ content += `
193
+ ## 🟢 Low
194
+
195
+ ${low.map(t => `- [ ] ${t.description}${t.featureId ? ` *(${t.featureId})*` : ''}`).join('\n')}
196
+ `
197
+ }
198
+
199
+ if (completed.length > 0) {
200
+ content += `
201
+ ---
202
+
203
+ ## ✅ Recently Completed
204
+
205
+ ${completed.slice(0, 5).map(t => `- [x] ${t.description}`).join('\n')}
206
+ `
207
+ }
208
+
209
+ content += `
210
+ ---
211
+ *Updated: ${formatDateTime(queue.lastUpdated)}*
212
+ `
213
+
214
+ return content
215
+ }
216
+
217
+ /**
218
+ * Generate ideas.md from ideas.json
219
+ */
220
+ export function generateIdeasView(ideas: IdeasJson): string {
221
+ const pending = ideas.ideas.filter(i => i.status === 'pending')
222
+ const reviewing = ideas.ideas.filter(i => i.status === 'reviewing')
223
+ const converted = ideas.ideas.filter(i => i.status === 'converted')
224
+ const archived = ideas.ideas.filter(i => i.status === 'archived')
225
+
226
+ if (ideas.ideas.length === 0) {
227
+ return `# Ideas
228
+
229
+ No ideas captured yet. Use \`/p:idea "text"\` to capture one.
230
+
231
+ ---
232
+ **Quick Actions:**
233
+ - \`/p:idea "your idea"\` - Capture a new idea
234
+ - \`/p:feature\` - Convert an idea to a feature
235
+ `
236
+ }
237
+
238
+ let content = `# Ideas
239
+
240
+ > ${pending.length} pending | ${reviewing.length} reviewing | ${converted.length} converted
241
+ `
242
+
243
+ if (pending.length > 0) {
244
+ content += `
245
+ ## 💡 Pending
246
+
247
+ ${pending.map(i => {
248
+ const tags = i.tags.length > 0 ? ` [${i.tags.join(', ')}]` : ''
249
+ // Support both addedAt (new schema) and createdAt (legacy)
250
+ const addedDate = i.addedAt || (i as unknown as { createdAt?: string }).createdAt || ''
251
+ return `- **${i.text}**${tags}
252
+ *Added: ${formatDate(addedDate)}*`
253
+ }).join('\n\n')}
254
+ `
255
+ }
256
+
257
+ if (reviewing.length > 0) {
258
+ content += `
259
+ ## 🔍 Under Review
260
+
261
+ ${reviewing.map(i => `- **${i.text}**`).join('\n')}
262
+ `
263
+ }
264
+
265
+ if (converted.length > 0) {
266
+ content += `
267
+ ## ✅ Converted to Features
268
+
269
+ ${converted.slice(0, 5).map(i => `- ~~${i.text}~~ → \`${i.convertedTo}\``).join('\n')}
270
+ `
271
+ }
272
+
273
+ content += `
274
+ ---
275
+ *Updated: ${formatDateTime(ideas.lastUpdated)}*
276
+ `
277
+
278
+ return content
279
+ }
280
+
281
+ /**
282
+ * Generate roadmap.md from roadmap.json
283
+ */
284
+ export function generateRoadmapView(roadmap: RoadmapJson): string {
285
+ const active = roadmap.features.filter(f => f.status === 'active')
286
+ const planned = roadmap.features.filter(f => f.status === 'planned')
287
+ const completed = roadmap.features.filter(f => f.status === 'completed')
288
+ const shipped = roadmap.features.filter(f => f.status === 'shipped')
289
+
290
+ if (roadmap.features.length === 0 && roadmap.backlog.length === 0) {
291
+ return `# Roadmap
292
+
293
+ No features planned yet. Use \`/p:feature "description"\` to add one.
294
+
295
+ ---
296
+ **Quick Actions:**
297
+ - \`/p:feature "feature name"\` - Plan a new feature
298
+ - \`/p:idea\` - Capture ideas for later
299
+ `
300
+ }
301
+
302
+ let content = `# Roadmap
303
+
304
+ > ${active.length} active | ${planned.length} planned | ${shipped.length} shipped
305
+ `
306
+
307
+ if (active.length > 0) {
308
+ content += `
309
+ ## 🚀 Active
310
+
311
+ ${active.map(f => {
312
+ const completedTasks = f.tasks.filter(t => t.completed).length
313
+ const totalTasks = f.tasks.length
314
+ const progress = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0
315
+
316
+ return `### ${f.name}
317
+
318
+ - **Impact**: ${f.impact} | **Effort**: ${f.effort || 'TBD'}
319
+ - **Progress**: ${progress}% (${completedTasks}/${totalTasks} tasks)
320
+
321
+ **Tasks:**
322
+ ${f.tasks.map(t => `- [${t.completed ? 'x' : ' '}] ${t.description}`).join('\n')}
323
+ `
324
+ }).join('\n')}
325
+ `
326
+ }
327
+
328
+ if (planned.length > 0) {
329
+ content += `
330
+ ## 📋 Planned
331
+
332
+ ${planned.map(f => `- **${f.name}** - Impact: ${f.impact}, Effort: ${f.effort || 'TBD'}`).join('\n')}
333
+ `
334
+ }
335
+
336
+ if (shipped.length > 0) {
337
+ content += `
338
+ ## ✅ Recently Shipped
339
+
340
+ ${shipped.slice(0, 5).map(f => `- **${f.name}**${f.version ? ` (${f.version})` : ''} - ${formatDate(f.shippedAt || '')}`).join('\n')}
341
+ `
342
+ }
343
+
344
+ if (roadmap.backlog.length > 0) {
345
+ content += `
346
+ ## 📝 Backlog
347
+
348
+ ${roadmap.backlog.map(item => `- ${item}`).join('\n')}
349
+ `
350
+ }
351
+
352
+ content += `
353
+ ---
354
+ *Updated: ${formatDateTime(roadmap.lastUpdated)}*
355
+ `
356
+
357
+ return content
358
+ }
359
+
360
+ /**
361
+ * Generate shipped.md from shipped.json
362
+ */
363
+ export function generateShippedView(shipped: ShippedJson): string {
364
+ if (shipped.items.length === 0) {
365
+ return `# Shipped
366
+
367
+ Nothing shipped yet. Use \`/p:ship "feature"\` after completing work.
368
+
369
+ ---
370
+ **Quick Actions:**
371
+ - \`/p:now\` - Start working on something
372
+ - \`/p:ship "feature name"\` - Ship your work
373
+ `
374
+ }
375
+
376
+ // Group by date (YYYY-MM-DD)
377
+ const byDate = new Map<string, typeof shipped.items>()
378
+ for (const item of shipped.items) {
379
+ const date = item.shippedAt.split('T')[0]
380
+ if (!byDate.has(date)) byDate.set(date, [])
381
+ byDate.get(date)!.push(item)
382
+ }
383
+
384
+ let content = `# Shipped
385
+
386
+ > ${shipped.items.length} item${shipped.items.length !== 1 ? 's' : ''} shipped
387
+ `
388
+
389
+ // Sort dates descending
390
+ const sortedDates = Array.from(byDate.keys()).sort().reverse()
391
+
392
+ for (const date of sortedDates.slice(0, 10)) {
393
+ const items = byDate.get(date)!
394
+ content += `
395
+ ## ${formatDate(date + 'T00:00:00Z')}
396
+
397
+ ${items.map(item => {
398
+ let entry = `- ✅ **${item.name}**`
399
+ if (item.version) entry += ` (${item.version})`
400
+ entry += `\n - Type: ${item.type}`
401
+
402
+ if (item.changes && item.changes.length > 0) {
403
+ entry += `\n - Changes:`
404
+ for (const change of item.changes.slice(0, 3)) {
405
+ // Handle both string and ShipChange object formats
406
+ const desc = typeof change === 'string' ? change : change.description
407
+ entry += `\n - ${desc}`
408
+ }
409
+ }
410
+
411
+ // Support both new (qualityMetrics) and legacy (metrics) formats
412
+ const qm = item.qualityMetrics || (item as unknown as { metrics?: { lintStatus: string; testStatus: string } }).metrics
413
+ if (qm) {
414
+ entry += `\n - Lint: ${qm.lintStatus} | Tests: ${qm.testStatus}`
415
+ }
416
+
417
+ // Add duration if available
418
+ if (item.duration) {
419
+ const dur = item.duration
420
+ const durStr = dur.hours > 0 ? `${dur.hours}h ${dur.minutes}m` : `${dur.minutes}m`
421
+ entry += `\n - Duration: ${durStr}`
422
+ }
423
+
424
+ // Add code metrics if available
425
+ if (item.codeMetrics) {
426
+ const cm = item.codeMetrics
427
+ entry += `\n - Files: ${cm.filesChanged} | +${cm.linesAdded}/-${cm.linesRemoved}`
428
+ }
429
+
430
+ return entry
431
+ }).join('\n\n')}
432
+ `
433
+ }
434
+
435
+ content += `
436
+ ---
437
+ *Updated: ${formatDateTime(shipped.lastUpdated)}*
438
+ `
439
+
440
+ return content
441
+ }
442
+
443
+ // ============================================
444
+ // MAIN GENERATOR
445
+ // ============================================
446
+
447
+ interface GenerateResult {
448
+ generated: string[]
449
+ errors: string[]
450
+ }
451
+
452
+ /**
453
+ * Generate all views for a project from JSON data
454
+ */
455
+ export async function generateViews(projectId: string): Promise<GenerateResult> {
456
+ const dataPath = getDataPath(projectId)
457
+ const viewsPath = getViewsPath(projectId)
458
+
459
+ const generated: string[] = []
460
+ const errors: string[] = []
461
+
462
+ // Read all JSON data
463
+ const state = await readJson<StateJson>(path.join(dataPath, 'state.json'), DEFAULT_STATE)
464
+ const queue = await readJson<QueueJson>(path.join(dataPath, 'queue.json'), DEFAULT_QUEUE)
465
+ const ideas = await readJson<IdeasJson>(path.join(dataPath, 'ideas.json'), DEFAULT_IDEAS)
466
+ const roadmap = await readJson<RoadmapJson>(path.join(dataPath, 'roadmap.json'), DEFAULT_ROADMAP)
467
+ const shipped = await readJson<ShippedJson>(path.join(dataPath, 'shipped.json'), DEFAULT_SHIPPED)
468
+
469
+ // Generate views
470
+ const views = [
471
+ { name: 'now.md', content: generateNowView(state) },
472
+ { name: 'next.md', content: generateQueueView(queue) },
473
+ { name: 'ideas.md', content: generateIdeasView(ideas) },
474
+ { name: 'roadmap.md', content: generateRoadmapView(roadmap) },
475
+ { name: 'shipped.md', content: generateShippedView(shipped) },
476
+ ]
477
+
478
+ // Write views
479
+ for (const view of views) {
480
+ try {
481
+ await writeFile(path.join(viewsPath, view.name), view.content)
482
+ generated.push(view.name)
483
+ } catch (err) {
484
+ errors.push(`${view.name}: ${err instanceof Error ? err.message : 'Unknown error'}`)
485
+ }
486
+ }
487
+
488
+ return { generated, errors }
489
+ }
490
+
491
+ /**
492
+ * Generate a single view
493
+ */
494
+ export async function generateView(
495
+ projectId: string,
496
+ viewName: 'now' | 'next' | 'ideas' | 'roadmap' | 'shipped'
497
+ ): Promise<void> {
498
+ const dataPath = getDataPath(projectId)
499
+ const viewsPath = getViewsPath(projectId)
500
+
501
+ const generators: Record<string, () => Promise<string>> = {
502
+ now: async () => {
503
+ const state = await readJson<StateJson>(path.join(dataPath, 'state.json'), DEFAULT_STATE)
504
+ return generateNowView(state)
505
+ },
506
+ next: async () => {
507
+ const queue = await readJson<QueueJson>(path.join(dataPath, 'queue.json'), DEFAULT_QUEUE)
508
+ return generateQueueView(queue)
509
+ },
510
+ ideas: async () => {
511
+ const ideas = await readJson<IdeasJson>(path.join(dataPath, 'ideas.json'), DEFAULT_IDEAS)
512
+ return generateIdeasView(ideas)
513
+ },
514
+ roadmap: async () => {
515
+ const roadmap = await readJson<RoadmapJson>(path.join(dataPath, 'roadmap.json'), DEFAULT_ROADMAP)
516
+ return generateRoadmapView(roadmap)
517
+ },
518
+ shipped: async () => {
519
+ const shipped = await readJson<ShippedJson>(path.join(dataPath, 'shipped.json'), DEFAULT_SHIPPED)
520
+ return generateShippedView(shipped)
521
+ },
522
+ }
523
+
524
+ const content = await generators[viewName]()
525
+ await writeFile(path.join(viewsPath, `${viewName}.md`), content)
526
+ }
527
+
528
+ export default {
529
+ generateViews,
530
+ generateView,
531
+ generateNowView,
532
+ generateQueueView,
533
+ generateIdeasView,
534
+ generateRoadmapView,
535
+ generateShippedView,
536
+ }
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "prjct-cli",
3
- "version": "0.11.5",
3
+ "version": "0.12.1",
4
4
  "description": "Built for Claude - Ship fast, track progress, stay focused. Developer momentum tool for indie hackers.",
5
- "main": "core/index.js",
5
+ "main": "core/index.ts",
6
6
  "bin": {
7
7
  "prjct": "bin/prjct",
8
8
  "prjct-dev": "bin/dev.js",
9
- "prjct-serve": "bin/serve.js"
9
+ "prjct-serve": "bin/serve.js",
10
+ "prjct-generate-views": "bin/generate-views.js",
11
+ "prjct-migrate": "bin/migrate-to-json.js"
10
12
  },
11
13
  "workspaces": [
12
14
  "packages/*"
@@ -16,17 +18,21 @@
16
18
  "registry": "https://registry.npmjs.org"
17
19
  },
18
20
  "scripts": {
19
- "dev": "turbo run dev",
20
- "build": "turbo run build",
21
- "serve": "turbo run dev --filter=@prjct/server --filter=@prjct/web",
22
- "postinstall": "node scripts/postinstall.js",
23
- "update-commands": "node -e \"const installer = require('./core/infrastructure/command-installer'); installer.syncCommands().then(r => console.log('Commands updated:', r)).catch(e => console.error('Error:', e.message))\"",
21
+ "dev": "bun run --filter '*' dev",
22
+ "build": "bun run --filter '@prjct/shared' build && bun run --filter 'web' build",
23
+ "build:shared": "bun run --filter '@prjct/shared' build",
24
+ "build:web": "bun run --filter 'web' build",
25
+ "serve": "bun run --filter 'web' dev",
26
+ "postinstall": "bun scripts/postinstall.js",
27
+ "update-commands": "bun -e \"const installer = require('./core/infrastructure/command-installer'); installer.syncCommands().then(r => console.log('Commands updated:', r)).catch(e => console.error('Error:', e.message))\"",
24
28
  "install-global": "./scripts/install.sh",
25
29
  "update": "./scripts/update.sh",
26
- "test": "vitest run",
27
- "test:watch": "vitest",
28
- "test:coverage": "vitest run --coverage",
29
- "validate": "node scripts/validate-commands.js",
30
+ "test": "bun test",
31
+ "test:watch": "bun test --watch",
32
+ "test:coverage": "bun test --coverage",
33
+ "typecheck": "tsc --noEmit -p core/tsconfig.json",
34
+ "typecheck:watch": "tsc --noEmit -p core/tsconfig.json --watch",
35
+ "validate": "bun scripts/validate-commands.js",
30
36
  "lint": "eslint . --ignore-pattern node_modules",
31
37
  "lint:fix": "eslint . --fix --ignore-pattern node_modules",
32
38
  "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\" --config .config/.prettierrc --ignore-path .config/.prettierignore",
@@ -53,7 +59,7 @@
53
59
  "prompts": "^2.4.2"
54
60
  },
55
61
  "devDependencies": {
56
- "@vitest/coverage-v8": "^3.2.4",
62
+ "@types/bun": "latest",
57
63
  "eslint": "^8.57.1",
58
64
  "eslint-config-prettier": "^10.1.8",
59
65
  "eslint-config-standard": "^17.1.0",
@@ -61,8 +67,7 @@
61
67
  "eslint-plugin-n": "^16.6.2",
62
68
  "eslint-plugin-promise": "^6.6.0",
63
69
  "prettier": "^3.6.2",
64
- "turbo": "^2.3.0",
65
- "vitest": "^3.2.4"
70
+ "typescript": "^5.9.3"
66
71
  },
67
72
  "repository": {
68
73
  "type": "git",
@@ -72,9 +77,10 @@
72
77
  "url": "https://github.com/jlopezlira/prjct-cli/issues"
73
78
  },
74
79
  "homepage": "https://prjct.app",
75
- "packageManager": "npm@10.2.4",
80
+ "packageManager": "bun@1.2.23",
76
81
  "engines": {
77
- "node": ">=18.0.0"
82
+ "node": ">=18.0.0",
83
+ "bun": ">=1.0.0"
78
84
  },
79
85
  "files": [
80
86
  "bin/",
@@ -0,0 +1,14 @@
1
+
2
+ > @prjct/shared@0.1.0 build
3
+ > tsup src/index.ts --format esm --dts
4
+
5
+ CLI Building entry: src/index.ts
6
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v8.5.1
8
+ CLI Target: es2022
9
+ ESM Build start
10
+ DTS Build start
11
+ ESM dist/index.js 5.93 KB
12
+ ESM ⚡️ Build success in 221ms
13
+ DTS ⚡️ Build success in 1410ms
14
+ DTS dist/index.d.ts 17.66 KB