prjct-cli 0.11.4 → 0.12.0

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 (385) hide show
  1. package/CHANGELOG.md +72 -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 +246 -54
  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.ts +405 -0
  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} +99 -89
  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} +35 -18
  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} +62 -23
  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 +203 -403
  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 +134 -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/BentoGrid/BentoGrid.tsx +18 -0
  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/EmptyState/EmptyState.tsx +58 -0
  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/IdeasCard/IdeasCard.tsx +48 -0
  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/ProgressRing/ProgressRing.tsx +51 -0
  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/RoadmapCard/RoadmapCard.tsx +77 -0
  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/ShipsCard/ShipsCard.tsx +52 -0
  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/SparklineChart/SparklineChart.tsx +38 -0
  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/StreakCard/StreakCard.tsx +53 -0
  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/components/ui/tooltip.tsx +2 -2
  333. package/packages/web/context/TerminalTabsContext.tsx +46 -1
  334. package/packages/web/hooks/useClaudeTerminal.ts +71 -21
  335. package/packages/web/hooks/useProjectStats.ts +55 -0
  336. package/packages/web/hooks/useProjects.ts +6 -6
  337. package/packages/web/lib/actions/projects.ts +15 -0
  338. package/packages/web/lib/json-loader.ts +630 -0
  339. package/packages/web/lib/services/index.ts +9 -0
  340. package/packages/web/lib/services/migration.server.ts +598 -0
  341. package/packages/web/lib/services/projects.server.ts +52 -0
  342. package/packages/web/lib/services/stats.server.ts +264 -0
  343. package/packages/web/lib/unified-loader.ts +396 -0
  344. package/packages/web/next-env.d.ts +1 -1
  345. package/packages/web/package.json +10 -6
  346. package/packages/web/server.ts +36 -6
  347. package/templates/commands/done.md +76 -32
  348. package/templates/commands/feature.md +121 -47
  349. package/templates/commands/idea.md +81 -8
  350. package/templates/commands/now.md +41 -17
  351. package/templates/commands/ship.md +64 -25
  352. package/templates/commands/sync.md +28 -3
  353. package/core/agentic/agent-router.js +0 -128
  354. package/core/agentic/chain-of-thought.js +0 -578
  355. package/core/agentic/command-executor.js +0 -421
  356. package/core/agentic/context-filter.js +0 -354
  357. package/core/agentic/ground-truth.js +0 -591
  358. package/core/agentic/loop-detector.js +0 -406
  359. package/core/agentic/memory-system.js +0 -850
  360. package/core/agentic/parallel-tools.js +0 -366
  361. package/core/agentic/plan-mode.js +0 -572
  362. package/core/agentic/prompt-builder.js +0 -338
  363. package/core/agentic/response-templates.js +0 -290
  364. package/core/agentic/semantic-compression.js +0 -517
  365. package/core/agentic/think-blocks.js +0 -657
  366. package/core/agentic/tool-registry.js +0 -184
  367. package/core/agentic/validation-rules.js +0 -380
  368. package/core/command-registry.js +0 -698
  369. package/core/commands.js +0 -2237
  370. package/core/domain/task-stack.js +0 -497
  371. package/core/infrastructure/legacy-installer-detector.js +0 -546
  372. package/core/infrastructure/migrator.js +0 -799
  373. package/core/infrastructure/session-manager.js +0 -390
  374. package/core/utils/file-helper.js +0 -329
  375. package/packages/web/app/api/projects/[id]/delete/route.ts +0 -21
  376. package/packages/web/app/api/stats/route.ts +0 -38
  377. package/packages/web/components/AppSidebar.tsx +0 -113
  378. package/packages/web/hooks/useStats.ts +0 -28
  379. /package/packages/web/components/{CommandButton.tsx → CommandButton/CommandButton.tsx} +0 -0
  380. /package/packages/web/components/{ConnectionStatus.tsx → ConnectionStatus/ConnectionStatus.tsx} +0 -0
  381. /package/packages/web/components/{Logo.tsx → Logo/Logo.tsx} +0 -0
  382. /package/packages/web/components/{MarkdownContent.tsx → MarkdownContent/MarkdownContent.tsx} +0 -0
  383. /package/packages/web/components/{ProjectAvatar.tsx → ProjectAvatar/ProjectAvatar.tsx} +0 -0
  384. /package/packages/web/components/{providers.tsx → Providers/Providers.tsx} +0 -0
  385. /package/packages/web/components/{TechStackBadges.tsx → TechStackBadges/TechStackBadges.tsx} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,77 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.12.0] - 2025-12-10
4
+
5
+ ### Added - JSON-First Architecture (Zero Data Loss)
6
+
7
+ Major refactor: JSON is now source of truth. Claude reads/writes JSON, MD views are auto-generated.
8
+
9
+ - **New Data Flow**
10
+ - `data/*.json` - Source of truth (Claude reads/writes)
11
+ - `views/*.md` - Auto-generated from JSON (Claude does NOT write MD)
12
+ - Web app reads JSON directly (no regex parsing)
13
+
14
+ - **LLM-Based Migration** (`/api/migrate`)
15
+ - OpenRouter Claude-3.5-haiku extracts structured data from legacy MD
16
+ - Comprehensive pattern extraction rules for ZERO data loss
17
+ - Migrates: state, queue, ideas, roadmap, shipped, metrics, project
18
+
19
+ - **Enriched Schemas** (capturing ALL data from MD)
20
+ - `shipped.json`: Added `agent`, `description`, `codeSnippets[]`, `commit{hash,message}`
21
+ - `queue.json`: Added `agent`, `groupName`, `groupId` per task
22
+ - `ideas.json`: Added `source`, `sourceFiles[]`, `stack{}`, `modules[]`, `roles[]`, `risks[]`
23
+ - `roadmap.json`: Added `duration{}`, `taskCount`, `agent`, `sprintName`, `completedDate`
24
+
25
+ - **View Generator** (`bin/generate-views.js`)
26
+ - Generates MD from JSON for Claude context
27
+ - Templates: now.md, next.md, ideas.md, roadmap.md, shipped.md
28
+
29
+ - **Files Added**:
30
+ - `packages/web/lib/services/migration.server.ts` - LLM migration service
31
+ - `packages/web/app/api/migrate/route.ts` - Migration API endpoint
32
+ - `core/view-generator.ts` - View generation from JSON
33
+ - `bin/generate-views.js` - CLI for view generation
34
+
35
+ - **Files Modified**:
36
+ - `core/schemas/*.ts` - All schemas with enriched fields
37
+ - `packages/web/lib/json-loader.ts` - Types synced with schemas
38
+
39
+ ## [0.11.6] - 2025-12-09
40
+
41
+ ### Fixed - Terminal Responsive & Performance Issues
42
+
43
+ Bug fixes for terminal UX issues when resizing browser and handling large output.
44
+
45
+ - **Resize Bug Fixed** - Terminal no longer gets stuck at ~100px² when resizing browser
46
+ - Replaced `window.addEventListener('resize')` with `ResizeObserver`
47
+ - Added dimension validation before fitting (handles hidden tabs correctly)
48
+ - Added proper cleanup on unmount
49
+ - Added re-fit on tab activation
50
+
51
+ - **Performance Improvements** - Terminal now handles large output smoothly
52
+ - Added client-side output buffering with `requestAnimationFrame`
53
+ - Added server-side PTY output buffering (16ms batch window)
54
+ - Added terminal config optimizations (`scrollback: 5000`, `smoothScrollDuration: 0`)
55
+
56
+ - **Files Modified**:
57
+ - `packages/web/hooks/useClaudeTerminal.ts` - ResizeObserver, output batching, fit function
58
+ - `packages/web/components/TerminalTab.tsx` - Re-fit on tab activation
59
+ - `packages/web/server.ts` - PTY output buffering
60
+
61
+ ## [0.11.5] - 2025-12-09
62
+
63
+ ### Fixed - Production Server Mode
64
+
65
+ Critical bug fix: `prjct serve` now runs in production mode instead of development mode.
66
+
67
+ - **Server Mode** - Changed from dev to production
68
+ - Default port: 3000 → 9472 (avoids conflicts)
69
+ - Mode: `npm run dev` → `npm run start:prod` with `NODE_ENV=production`
70
+ - Auto-build on first run if `.next/` doesn't exist
71
+ - All features now work correctly (were broken in dev mode)
72
+
73
+ - **packages/web/package.json** - Added `start:prod` script
74
+
3
75
  ## [0.11.0] - 2025-12-08
4
76
 
5
77
  ### Added - Web Application & Server Components
package/README.md CHANGED
@@ -17,6 +17,34 @@ Developer momentum tool for indie hackers and small teams.
17
17
  [![Tests](https://github.com/jlopezlira/prjct-cli/actions/workflows/test.yml/badge.svg)](https://github.com/jlopezlira/prjct-cli/actions/workflows/test.yml)
18
18
  [![Website Build](https://img.shields.io/badge/website-deployed-success)](https://prjct.app)
19
19
 
20
+ > **New to prjct?** You don't need to memorize commands. Just use `p.` and talk naturally:
21
+ > - `p. start working on user auth`
22
+ > - `p. I'm done`
23
+ > - `p. ship the authentication`
24
+
25
+ ## 💬 p. Trigger - Zero Memorization
26
+
27
+ **You don't need to memorize commands.** Just use the `p.` prefix and talk naturally!
28
+
29
+ The system detects your intent and maps it to the right command - **works in any language**:
30
+
31
+ ```
32
+ Instead of: Just say:
33
+ /p:now "implement auth" → "p. I want to start building the auth system"
34
+ /p:done → "p. I'm done" or "p. finished"
35
+ /p:ship "feature" → "p. ship the authentication"
36
+ /p:stuck "error" → "p. I'm stuck on this error"
37
+ /p:idea "add feature" → "p. I have an idea about dark mode"
38
+ ```
39
+
40
+ **How it works:**
41
+
42
+ - Simple `p.` prefix signals prjct context
43
+ - Works in English, Spanish, German, French - any language
44
+ - System detects intent and executes the right command
45
+ - Auto-validates you're in a prjct project before execution
46
+ - Every command response suggests what to do next
47
+
20
48
  ## 🤖 Claude-Native Architecture
21
49
 
22
50
  **prjct-cli is purpose-built for Claude's unique capabilities:**
@@ -38,25 +66,25 @@ We chose to focus 100% on Claude to deliver:
38
66
 
39
67
  ## ⚡ Installation
40
68
 
41
- ### From npm (Recommended)
69
+ ### Using Bun (Recommended)
42
70
 
43
- Install prjct-cli globally using npm:
71
+ prjct-cli is built with Bun for maximum performance:
44
72
 
45
73
  ```bash
46
- npm install -g prjct-cli
74
+ bun install -g prjct-cli
47
75
  ```
48
76
 
49
- **Alternative package managers**:
77
+ ### Alternative Package Managers
50
78
 
51
79
  ```bash
80
+ # Using npm
81
+ npm install -g prjct-cli
82
+
52
83
  # Using yarn
53
84
  yarn global add prjct-cli
54
85
 
55
86
  # Using pnpm
56
87
  pnpm add -g prjct-cli
57
-
58
- # Using bun
59
- bun install -g prjct-cli
60
88
  ```
61
89
 
62
90
  ### From GitHub Packages
@@ -69,7 +97,7 @@ npm install -g @jlopezlira/prjct-cli --registry=https://npm.pkg.github.com
69
97
 
70
98
  For easier installation from GitHub Packages, see [GitHub Packages Setup](docs/GITHUB_PACKAGES.md).
71
99
 
72
- **Requirements**: Node.js 18 or higher
100
+ **Requirements**: Bun 1.0+ or Node.js 18+
73
101
 
74
102
  > **Note**: The CLI automatically detects updates and notifies you when a new version is available. Simply run `npm update -g prjct-cli` to upgrade.
75
103
 
@@ -127,32 +155,60 @@ cd prjct-cli
127
155
  - ✅ **Auto-detects your environment** (Claude or Terminal fallback)
128
156
  - ✅ **Configures shell** (bash/zsh) automatically
129
157
 
130
- ## 💬 p. Trigger - Zero Memorization
158
+ ## 5-Minute Quick Start
131
159
 
132
- **You don't need to memorize commands.** Just use the `p.` prefix and talk naturally!
160
+ Get productive with prjct-cli in under 5 minutes.
133
161
 
134
- The system detects your intent and maps it to the right command - **works in any language**:
162
+ ### Step 1: Initialize Your Project
135
163
 
164
+ ```bash
165
+ cd your-project
136
166
  ```
137
- ✨ Natural Language with p. Trigger:
138
167
 
139
- Instead of: Just say:
140
- /p:now "implement auth" → "p. I want to start building the auth system"
141
- /p:done → "p. I'm done" or "p. finished"
142
- /p:ship "feature" → "p. ship the authentication"
143
- /p:stuck "error" → "p. I'm stuck on this error"
144
- /p:idea "add feature" → "p. I have an idea about dark mode"
168
+ In Claude Code or Claude Desktop:
169
+ ```
170
+ /p:init
145
171
  ```
146
172
 
147
- **How it works:**
173
+ Or just say: `p. initialize this project`
148
174
 
149
- - Simple `p.` prefix signals prjct context
150
- - Works in English, Spanish, German, French - any language
151
- - System detects intent and executes the right command
152
- - Auto-validates you're in a prjct project before execution
153
- - Every command response suggests what to do next
175
+ ### Step 2: Start Your First Task
176
+
177
+ ```
178
+ /p:now "implement user login"
179
+ ```
180
+
181
+ Or naturally: `p. I want to start working on user login`
182
+
183
+ ### Step 3: Work on Your Task
184
+
185
+ Just code! prjct tracks your focus.
186
+
187
+ ### Step 4: Complete Your Task
188
+
189
+ ```
190
+ /p:done
191
+ ```
192
+
193
+ Or naturally: `p. finished`
194
+
195
+ ### Step 5: Ship It!
196
+
197
+ ```
198
+ /p:ship "user authentication"
199
+ ```
200
+
201
+ Or naturally: `p. ship the authentication`
202
+
203
+ **That's it!** You now know the core workflow.
204
+
205
+ ### What's Next?
206
+
207
+ - `/p:recap` - See your progress
208
+ - `/p:help` - Get contextual guidance
209
+ - `/p:idea "something cool"` - Capture ideas without interrupting
154
210
 
155
- **Available in:** Any language - powered by Claude's natural language understanding
211
+ > **Pro tip:** You don't need to memorize commands. Just use `p.` and describe what you want!
156
212
 
157
213
  ## 🚀 Built for Claude - Ship Fast, No BS
158
214
 
package/bin/dev.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env bun
2
2
 
3
3
  /**
4
4
  * prjct dev - Start prjct web development environment
@@ -0,0 +1,209 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * prjct generate-views - Generate MD views from JSON data
5
+ *
6
+ * Converts JSON source of truth to readable MD files for Claude.
7
+ *
8
+ * Usage:
9
+ * prjct generate-views --project=<projectId> Generate views for specific project
10
+ * prjct generate-views --all Generate views for all projects
11
+ * prjct generate-views --view=<name> Generate specific view (now, next, ideas, roadmap, shipped)
12
+ */
13
+
14
+ const path = require('path')
15
+ const fs = require('fs/promises')
16
+ const os = require('os')
17
+
18
+ // Colors for terminal output
19
+ const colors = {
20
+ reset: '\x1b[0m',
21
+ bright: '\x1b[1m',
22
+ dim: '\x1b[2m',
23
+ cyan: '\x1b[36m',
24
+ green: '\x1b[32m',
25
+ yellow: '\x1b[33m',
26
+ red: '\x1b[31m',
27
+ }
28
+
29
+ const GLOBAL_STORAGE = path.join(os.homedir(), '.prjct-cli', 'projects')
30
+
31
+ // Parse command line arguments
32
+ function parseArgs(argv) {
33
+ const args = {
34
+ project: null,
35
+ all: false,
36
+ view: null,
37
+ help: false,
38
+ }
39
+
40
+ for (const arg of argv.slice(2)) {
41
+ if (arg === '--help' || arg === '-h') {
42
+ args.help = true
43
+ } else if (arg === '--all') {
44
+ args.all = true
45
+ } else if (arg.startsWith('--project=')) {
46
+ args.project = arg.split('=')[1]
47
+ } else if (arg.startsWith('--view=')) {
48
+ args.view = arg.split('=')[1]
49
+ }
50
+ }
51
+
52
+ return args
53
+ }
54
+
55
+ // Print help message
56
+ function printHelp() {
57
+ console.log(`
58
+ ${colors.cyan}${colors.bright}prjct generate-views${colors.reset}
59
+
60
+ Generate MD views from JSON data files.
61
+
62
+ ${colors.bright}Usage:${colors.reset}
63
+ prjct generate-views --project=<projectId> Generate views for specific project
64
+ prjct generate-views --all Generate views for all projects
65
+ prjct generate-views --view=<name> Generate specific view only
66
+
67
+ ${colors.bright}Options:${colors.reset}
68
+ --project=<id> Project ID to generate views for
69
+ --all Generate views for all projects
70
+ --view=<name> Generate specific view (now, next, ideas, roadmap, shipped)
71
+ --help, -h Show this help message
72
+
73
+ ${colors.bright}Views:${colors.reset}
74
+ now Current task status (from state.json)
75
+ next Priority queue (from queue.json)
76
+ ideas Idea backlog (from ideas.json)
77
+ roadmap Feature roadmap (from roadmap.json)
78
+ shipped Shipped items (from shipped.json)
79
+
80
+ ${colors.bright}Examples:${colors.reset}
81
+ prjct generate-views --project=abc123
82
+ prjct generate-views --all
83
+ prjct generate-views --project=abc123 --view=now
84
+ `)
85
+ }
86
+
87
+ // Get list of all project IDs
88
+ async function getAllProjects() {
89
+ try {
90
+ const entries = await fs.readdir(GLOBAL_STORAGE, { withFileTypes: true })
91
+ return entries
92
+ .filter((entry) => entry.isDirectory())
93
+ .map((entry) => entry.name)
94
+ } catch {
95
+ return []
96
+ }
97
+ }
98
+
99
+ // Import and run the view generator
100
+ async function generateViews(projectId, viewName = null) {
101
+ // Dynamic import of the TypeScript module
102
+ const generatorPath = path.join(__dirname, '..', 'core', 'view-generator.ts')
103
+
104
+ try {
105
+ const generator = await import(generatorPath)
106
+
107
+ if (viewName) {
108
+ // Generate specific view
109
+ await generator.generateView(projectId, viewName)
110
+ return { generated: [`${viewName}.md`], errors: [] }
111
+ } else {
112
+ // Generate all views
113
+ return await generator.generateViews(projectId)
114
+ }
115
+ } catch (err) {
116
+ return {
117
+ generated: [],
118
+ errors: [err instanceof Error ? err.message : 'Unknown error'],
119
+ }
120
+ }
121
+ }
122
+
123
+ // Main function
124
+ async function main() {
125
+ const args = parseArgs(process.argv)
126
+
127
+ if (args.help) {
128
+ printHelp()
129
+ process.exit(0)
130
+ }
131
+
132
+ // Validate arguments
133
+ if (!args.project && !args.all) {
134
+ console.log(`${colors.red}Error: Specify --project=<id> or --all${colors.reset}`)
135
+ console.log(`${colors.dim}Run 'prjct generate-views --help' for usage${colors.reset}`)
136
+ process.exit(1)
137
+ }
138
+
139
+ // Validate view name if specified
140
+ const validViews = ['now', 'next', 'ideas', 'roadmap', 'shipped']
141
+ if (args.view && !validViews.includes(args.view)) {
142
+ console.log(`${colors.red}Error: Invalid view '${args.view}'${colors.reset}`)
143
+ console.log(`${colors.dim}Valid views: ${validViews.join(', ')}${colors.reset}`)
144
+ process.exit(1)
145
+ }
146
+
147
+ // Get projects to process
148
+ let projects = []
149
+ if (args.all) {
150
+ projects = await getAllProjects()
151
+ if (projects.length === 0) {
152
+ console.log(`${colors.yellow}No projects found in ${GLOBAL_STORAGE}${colors.reset}`)
153
+ process.exit(0)
154
+ }
155
+ } else {
156
+ projects = [args.project]
157
+ }
158
+
159
+ console.log(`${colors.cyan}${colors.bright}Generating views...${colors.reset}\n`)
160
+
161
+ let totalGenerated = 0
162
+ let totalErrors = 0
163
+
164
+ for (const projectId of projects) {
165
+ const projectPath = path.join(GLOBAL_STORAGE, projectId)
166
+
167
+ // Check project exists
168
+ try {
169
+ await fs.access(projectPath)
170
+ } catch {
171
+ console.log(`${colors.yellow}⚠ Project not found: ${projectId}${colors.reset}`)
172
+ totalErrors++
173
+ continue
174
+ }
175
+
176
+ const result = await generateViews(projectId, args.view)
177
+
178
+ if (result.generated.length > 0) {
179
+ console.log(`${colors.green}✓ ${projectId}${colors.reset}`)
180
+ for (const file of result.generated) {
181
+ console.log(` ${colors.dim}→ ${file}${colors.reset}`)
182
+ }
183
+ totalGenerated += result.generated.length
184
+ }
185
+
186
+ if (result.errors.length > 0) {
187
+ console.log(`${colors.red}✗ ${projectId}${colors.reset}`)
188
+ for (const error of result.errors) {
189
+ console.log(` ${colors.red}→ ${error}${colors.reset}`)
190
+ }
191
+ totalErrors += result.errors.length
192
+ }
193
+ }
194
+
195
+ // Summary
196
+ console.log('')
197
+ if (totalGenerated > 0) {
198
+ console.log(`${colors.green}${colors.bright}✓ Generated ${totalGenerated} view(s)${colors.reset}`)
199
+ }
200
+ if (totalErrors > 0) {
201
+ console.log(`${colors.red}✗ ${totalErrors} error(s)${colors.reset}`)
202
+ process.exit(1)
203
+ }
204
+ }
205
+
206
+ main().catch((err) => {
207
+ console.error(`${colors.red}Error: ${err.message}${colors.reset}`)
208
+ process.exit(1)
209
+ })