prjct-cli 0.11.5 → 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 (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 +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/{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 +598 -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 +36 -6
  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,211 @@
1
+ /**
2
+ * Agentic Commands Handler for prjct CLI
3
+ *
4
+ * 100% AGENTIC - Claude decides everything based on templates.
5
+ * ZERO if/else business logic.
6
+ *
7
+ * All commands use the agentic execution engine.
8
+ * Templates define what Claude should do.
9
+ *
10
+ * MIGRATED COMMANDS (18 total):
11
+ * - Sprint 1 (9 CRITICAL): init, analyze, sync, feature, bug, now, done, next, ship
12
+ * - Sprint 2 (4 IMPORTANT): context, recap, stuck, design
13
+ * - Sprint 3 (5 OPTIONAL): cleanup, progress, roadmap, status, build
14
+ *
15
+ * PENDING (3 total):
16
+ * - Sprint 4 (3 SETUP): start, setup, migrateAll
17
+ */
18
+
19
+ import { WorkflowCommands } from './workflow'
20
+ import { PlanningCommands } from './planning'
21
+ import { ShippingCommands } from './shipping'
22
+ import { AnalyticsCommands } from './analytics'
23
+ import { MaintenanceCommands } from './maintenance'
24
+ import { AnalysisCommands } from './analysis'
25
+ import { SetupCommands } from './setup'
26
+
27
+ import type {
28
+ CommandResult,
29
+ AgentInfo,
30
+ Author,
31
+ DesignOptions,
32
+ CleanupOptions,
33
+ SetupOptions,
34
+ MigrateOptions,
35
+ AnalyzeOptions
36
+ } from './types'
37
+
38
+ /**
39
+ * PrjctCommands - Combined class with all commands
40
+ * Uses mixins pattern to combine all command groups
41
+ */
42
+ class PrjctCommands {
43
+ // Instances of each command group
44
+ private workflow: WorkflowCommands
45
+ private planning: PlanningCommands
46
+ private shipping: ShippingCommands
47
+ private analytics: AnalyticsCommands
48
+ private maintenance: MaintenanceCommands
49
+ private analysis: AnalysisCommands
50
+ private setupCmds: SetupCommands
51
+
52
+ // Shared state
53
+ agent: unknown
54
+ agentInfo: AgentInfo | null
55
+ currentAuthor: Author | null
56
+ prjctDir: string
57
+
58
+ constructor() {
59
+ this.workflow = new WorkflowCommands()
60
+ this.planning = new PlanningCommands()
61
+ this.shipping = new ShippingCommands()
62
+ this.analytics = new AnalyticsCommands()
63
+ this.maintenance = new MaintenanceCommands()
64
+ this.analysis = new AnalysisCommands()
65
+ this.setupCmds = new SetupCommands()
66
+
67
+ this.agent = null
68
+ this.agentInfo = null
69
+ this.currentAuthor = null
70
+ this.prjctDir = '.prjct'
71
+ }
72
+
73
+ // ========== Workflow Commands ==========
74
+
75
+ async now(task: string | null = null, projectPath: string = process.cwd()): Promise<CommandResult> {
76
+ return this.workflow.now(task, projectPath)
77
+ }
78
+
79
+ async done(projectPath: string = process.cwd()): Promise<CommandResult> {
80
+ return this.workflow.done(projectPath)
81
+ }
82
+
83
+ async next(projectPath: string = process.cwd()): Promise<CommandResult> {
84
+ return this.workflow.next(projectPath)
85
+ }
86
+
87
+ async build(taskOrNumber: string, projectPath: string = process.cwd()): Promise<CommandResult> {
88
+ return this.workflow.build(taskOrNumber, projectPath)
89
+ }
90
+
91
+ // ========== Planning Commands ==========
92
+
93
+ async init(idea: string | null = null, projectPath: string = process.cwd()): Promise<CommandResult> {
94
+ return this.planning.init(idea, projectPath)
95
+ }
96
+
97
+ async feature(description: string, projectPath: string = process.cwd()): Promise<CommandResult> {
98
+ return this.planning.feature(description, projectPath)
99
+ }
100
+
101
+ async bug(description: string, projectPath: string = process.cwd()): Promise<CommandResult> {
102
+ return this.planning.bug(description, projectPath)
103
+ }
104
+
105
+ async architect(action: string = 'execute', projectPath: string = process.cwd()): Promise<CommandResult> {
106
+ return this.planning.architect(action, projectPath)
107
+ }
108
+
109
+ // ========== Shipping Commands ==========
110
+
111
+ async ship(feature: string | null, projectPath: string = process.cwd()): Promise<CommandResult> {
112
+ return this.shipping.ship(feature, projectPath)
113
+ }
114
+
115
+ // ========== Analytics Commands ==========
116
+
117
+ async context(projectPath: string = process.cwd()): Promise<CommandResult> {
118
+ return this.analytics.context(projectPath)
119
+ }
120
+
121
+ async recap(projectPath: string = process.cwd()): Promise<CommandResult> {
122
+ return this.analytics.recap(projectPath)
123
+ }
124
+
125
+ async stuck(issue: string, projectPath: string = process.cwd()): Promise<CommandResult> {
126
+ return this.analytics.stuck(issue, projectPath)
127
+ }
128
+
129
+ async progress(period: string = 'week', projectPath: string = process.cwd()): Promise<CommandResult> {
130
+ return this.analytics.progress(period, projectPath)
131
+ }
132
+
133
+ async roadmap(projectPath: string = process.cwd()): Promise<CommandResult> {
134
+ return this.analytics.roadmap(projectPath)
135
+ }
136
+
137
+ async status(projectPath: string = process.cwd()): Promise<CommandResult> {
138
+ return this.analytics.status(projectPath)
139
+ }
140
+
141
+ // ========== Maintenance Commands ==========
142
+
143
+ async cleanup(options: CleanupOptions = {}, projectPath: string = process.cwd()): Promise<CommandResult> {
144
+ return this.maintenance.cleanup(options, projectPath)
145
+ }
146
+
147
+ async design(target: string | null = null, options: DesignOptions = {}, projectPath: string = process.cwd()): Promise<CommandResult> {
148
+ return this.maintenance.design(target, options, projectPath)
149
+ }
150
+
151
+ // ========== Analysis Commands ==========
152
+
153
+ async analyze(options: AnalyzeOptions = {}, projectPath: string = process.cwd()): Promise<CommandResult> {
154
+ return this.analysis.analyze(options, projectPath)
155
+ }
156
+
157
+ async sync(projectPath: string = process.cwd()): Promise<CommandResult> {
158
+ return this.analysis.sync(projectPath)
159
+ }
160
+
161
+ // ========== Setup Commands ==========
162
+
163
+ async start(): Promise<CommandResult> {
164
+ return this.setupCmds.start()
165
+ }
166
+
167
+ async setup(options: SetupOptions = {}): Promise<CommandResult> {
168
+ return this.setupCmds.setup(options)
169
+ }
170
+
171
+ async migrateAll(options: MigrateOptions = {}): Promise<CommandResult> {
172
+ return this.setupCmds.migrateAll(options)
173
+ }
174
+
175
+ async installStatusLine(): Promise<{ success: boolean; error?: string }> {
176
+ return this.setupCmds.installStatusLine()
177
+ }
178
+
179
+ showAsciiArt(): void {
180
+ return this.setupCmds.showAsciiArt()
181
+ }
182
+
183
+ // ========== Delegated Base Methods ==========
184
+
185
+ async initializeAgent(): Promise<unknown> {
186
+ return this.workflow.initializeAgent()
187
+ }
188
+
189
+ async ensureProjectInit(projectPath: string): Promise<CommandResult> {
190
+ return this.workflow.ensureProjectInit(projectPath)
191
+ }
192
+
193
+ async ensureAuthor(): Promise<Author> {
194
+ return this.workflow.ensureAuthor()
195
+ }
196
+
197
+ async getGlobalProjectPath(projectPath: string): Promise<string> {
198
+ return this.workflow.getGlobalProjectPath(projectPath)
199
+ }
200
+
201
+ async logToMemory(projectPath: string, action: string, data: Record<string, unknown>): Promise<void> {
202
+ return this.workflow.logToMemory(projectPath, action, data)
203
+ }
204
+ }
205
+
206
+ // Export both class and singleton instance
207
+ const instance = new PrjctCommands()
208
+
209
+ export default instance
210
+ export { PrjctCommands }
211
+ export * from './types'
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Maintenance Commands: cleanup, design
3
+ * Analysis commands moved to analysis.ts
4
+ */
5
+
6
+ import path from 'path'
7
+
8
+ import type { CommandResult, CleanupOptions, DesignOptions, Context } from './types'
9
+ import {
10
+ PrjctCommandsBase,
11
+ contextBuilder,
12
+ toolRegistry,
13
+ pathManager,
14
+ configManager,
15
+ fileHelper,
16
+ jsonlHelper,
17
+ dateHelper,
18
+ out
19
+ } from './base'
20
+
21
+ export class MaintenanceCommands extends PrjctCommandsBase {
22
+ /**
23
+ * Memory cleanup helper
24
+ */
25
+ async _cleanupMemory(projectPath: string): Promise<{ success: boolean; results: { rotated: string[]; totalSize: number; freedSpace: number } }> {
26
+ const projectId = await configManager.getProjectId(projectPath)
27
+
28
+ const results = { rotated: [] as string[], totalSize: 0, freedSpace: 0 }
29
+ const jsonlFiles = [
30
+ pathManager.getFilePath(projectId!, 'memory', 'context.jsonl'),
31
+ pathManager.getFilePath(projectId!, 'progress', 'shipped.md'),
32
+ pathManager.getFilePath(projectId!, 'planning', 'ideas.md'),
33
+ ]
34
+
35
+ for (const filePath of jsonlFiles) {
36
+ try {
37
+ const sizeMB = await jsonlHelper.getFileSizeMB(filePath)
38
+ if (sizeMB > 0) {
39
+ results.totalSize += sizeMB
40
+ const rotated = await jsonlHelper.rotateJsonLinesIfNeeded(filePath, 10)
41
+ if (rotated) {
42
+ results.rotated.push(path.basename(filePath))
43
+ results.freedSpace += sizeMB
44
+ }
45
+ }
46
+ } catch {
47
+ // skip
48
+ }
49
+ }
50
+
51
+ return { success: true, results }
52
+ }
53
+
54
+ /**
55
+ * Internal cleanup helper for memory during normal cleanup
56
+ */
57
+ async _cleanupMemoryInternal(projectPath: string): Promise<void> {
58
+ const projectId = await configManager.getProjectId(projectPath)
59
+ const memoryPath = pathManager.getFilePath(projectId!, 'memory', 'context.jsonl')
60
+ await jsonlHelper.rotateJsonLinesIfNeeded(memoryPath, 10)
61
+ }
62
+
63
+ /**
64
+ * /p:cleanup - Clean temp files and old entries
65
+ */
66
+ async cleanup(_options: CleanupOptions = {}, projectPath: string = process.cwd()): Promise<CommandResult> {
67
+ try {
68
+ const initResult = await this.ensureProjectInit(projectPath)
69
+ if (!initResult.success) return initResult
70
+
71
+ const isMemoryMode = _options.memory === true || _options.type === 'memory'
72
+
73
+ if (isMemoryMode) {
74
+ out.spin('cleaning memory...')
75
+ const result = await this._cleanupMemory(projectPath)
76
+ out.done('memory cleaned')
77
+ return result
78
+ }
79
+
80
+ out.spin('cleaning up...')
81
+
82
+ const context = await contextBuilder.build(projectPath) as Context
83
+ const projectId = await configManager.getProjectId(projectPath)
84
+
85
+ const cleaned: string[] = []
86
+
87
+ const memoryPath = pathManager.getFilePath(projectId!, 'memory', 'context.jsonl')
88
+ try {
89
+ const entries = await jsonlHelper.readJsonLines(memoryPath)
90
+
91
+ if (entries.length > 100) {
92
+ const kept = entries.slice(-100)
93
+ await jsonlHelper.writeJsonLines(memoryPath, kept)
94
+ cleaned.push(`Memory: ${entries.length - 100} old entries removed`)
95
+ } else {
96
+ cleaned.push('Memory: No cleanup needed')
97
+ }
98
+ } catch {
99
+ cleaned.push('Memory: No file found')
100
+ }
101
+
102
+ const ideasPath = context.paths.ideas
103
+ try {
104
+ const ideasContent = (await toolRegistry.get('Read')!(ideasPath)) as string
105
+ const sections = ideasContent.split('##').filter((s) => s.trim())
106
+
107
+ const nonEmpty = sections.filter((section) => {
108
+ const lines = section
109
+ .trim()
110
+ .split('\n')
111
+ .filter((l) => l.trim())
112
+ return lines.length > 1
113
+ })
114
+
115
+ if (sections.length !== nonEmpty.length) {
116
+ const newContent =
117
+ '# IDEAS 💡\n\n## Brain Dump\n\n' +
118
+ nonEmpty
119
+ .slice(1)
120
+ .map((s) => '## ' + s.trim())
121
+ .join('\n\n')
122
+ await toolRegistry.get('Write')!(ideasPath, newContent)
123
+ cleaned.push(`Ideas: ${sections.length - nonEmpty.length} empty sections removed`)
124
+ } else {
125
+ cleaned.push('Ideas: No cleanup needed')
126
+ }
127
+ } catch {
128
+ cleaned.push('Ideas: No file found')
129
+ }
130
+
131
+ const nextPath = context.paths.next
132
+ try {
133
+ const nextContent = (await toolRegistry.get('Read')!(nextPath)) as string
134
+ const completedTasks = (nextContent.match(/\[x\]/gi) || []).length
135
+
136
+ if (completedTasks > 0) {
137
+ cleaned.push(
138
+ `Queue: ${completedTasks} completed tasks found (not removed - use /p:done to clear)`
139
+ )
140
+ } else {
141
+ cleaned.push('Queue: No completed tasks')
142
+ }
143
+ } catch {
144
+ cleaned.push('Queue: No file found')
145
+ }
146
+
147
+ await this._cleanupMemoryInternal(projectPath)
148
+
149
+ await this.logToMemory(projectPath, 'cleanup_performed', {
150
+ items: cleaned.length,
151
+ timestamp: dateHelper.getTimestamp(),
152
+ })
153
+
154
+ out.done(`${cleaned.length} items cleaned`)
155
+ return { success: true, cleaned }
156
+ } catch (error) {
157
+ out.fail((error as Error).message)
158
+ return { success: false, error: (error as Error).message }
159
+ }
160
+ }
161
+
162
+ /**
163
+ * /p:design - Design system architecture, APIs, and components
164
+ */
165
+ async design(target: string | null = null, options: DesignOptions = {}, projectPath: string = process.cwd()): Promise<CommandResult> {
166
+ try {
167
+ const initResult = await this.ensureProjectInit(projectPath)
168
+ if (!initResult.success) return initResult
169
+
170
+ const designType = options.type || 'architecture'
171
+ const validTypes = ['architecture', 'api', 'component', 'database', 'flow']
172
+
173
+ if (!validTypes.includes(designType)) {
174
+ out.fail(`invalid type: ${designType}`)
175
+ return { success: false, error: 'Invalid design type' }
176
+ }
177
+
178
+ const designTarget = target || 'system'
179
+ out.spin(`designing ${designType}...`)
180
+
181
+ const projectId = await configManager.getProjectId(projectPath)
182
+ const designsPath = path.join(
183
+ pathManager.getGlobalProjectPath(projectId!),
184
+ 'planning',
185
+ 'designs'
186
+ )
187
+ await fileHelper.ensureDir(designsPath)
188
+
189
+ let designContent = ''
190
+
191
+ switch (designType) {
192
+ case 'architecture':
193
+ designContent = `# Architecture Design: ${designTarget}\n\n*Use templates/design/architecture.md for full design*\n`
194
+ break
195
+ case 'api':
196
+ designContent = `# API Design: ${designTarget}\n\n*Use templates/design/api.md for full design*\n`
197
+ break
198
+ case 'component':
199
+ designContent = `# Component Design: ${designTarget}\n\n*Use templates/design/component.md for full design*\n`
200
+ break
201
+ case 'database':
202
+ designContent = `# Database Design: ${designTarget}\n\n*Use templates/design/database.md for full design*\n`
203
+ break
204
+ case 'flow':
205
+ designContent = `# Flow Design: ${designTarget}\n\n*Use templates/design/flow.md for full design*\n`
206
+ break
207
+ }
208
+
209
+ const designFileName = `${designType}-${designTarget.toLowerCase().replace(/\s+/g, '-')}.md`
210
+ const designFilePath = path.join(designsPath, designFileName)
211
+ await fileHelper.writeFile(designFilePath, designContent)
212
+
213
+ await this.logToMemory(projectPath, 'design_created', {
214
+ type: designType,
215
+ target: designTarget,
216
+ timestamp: dateHelper.getTimestamp(),
217
+ })
218
+
219
+ out.done(`${designType} design created`)
220
+ return { success: true, designPath: designFilePath, type: designType, target: designTarget }
221
+ } catch (error) {
222
+ out.fail((error as Error).message)
223
+ return { success: false, error: (error as Error).message }
224
+ }
225
+ }
226
+ }