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
@@ -1,417 +0,0 @@
1
- /**
2
- * Command Executor
3
- * Orchestrates command execution with agentic delegation.
4
- *
5
- * @module agentic/command-executor
6
- * @version 3.4
7
- */
8
-
9
- const fs = require('fs')
10
- const path = require('path')
11
- const os = require('os')
12
- const templateLoader = require('./template-loader')
13
- const contextBuilder = require('./context-builder')
14
- const promptBuilder = require('./prompt-builder')
15
- const toolRegistry = require('./tool-registry')
16
- // REMOVED: MandatoryAgentRouter, ContextFilter, ContextEstimator
17
- // Agent assignment is 100% agentic - Claude decides via templates
18
- const { validate, formatError } = require('./validation-rules')
19
- const loopDetector = require('./loop-detector')
20
- const chainOfThought = require('./chain-of-thought')
21
- const semanticCompression = require('./semantic-compression')
22
- const responseTemplates = require('./response-templates')
23
- const memorySystem = require('./memory-system')
24
- const groundTruth = require('./ground-truth')
25
- const thinkBlocks = require('./think-blocks')
26
- const parallelTools = require('./parallel-tools')
27
- const planMode = require('./plan-mode')
28
-
29
- // Running file for status line integration
30
- const RUNNING_FILE = path.join(os.homedir(), '.prjct-cli', '.running')
31
- // P3.5, P3.6, P3.7: DELEGATED TO CLAUDE CODE
32
- // - semantic-search → Claude Code has Grep/Glob with semantic understanding
33
- // - code-intelligence → Claude Code has native LSP integration
34
- // - browser-preview → Claude Code can use Bash directly
35
-
36
- /**
37
- * Orchestrates prjct command execution.
38
- * Handles template loading, context building, validation, and agentic delegation.
39
- */
40
- class CommandExecutor {
41
- constructor() {}
42
-
43
- /**
44
- * Signal that a command is running (for status line)
45
- *
46
- * @param {string} commandName - Name of the running command
47
- */
48
- signalStart(commandName) {
49
- try {
50
- const dir = path.dirname(RUNNING_FILE)
51
- if (!fs.existsSync(dir)) {
52
- fs.mkdirSync(dir, { recursive: true })
53
- }
54
- fs.writeFileSync(RUNNING_FILE, `/p:${commandName}`)
55
- } catch {
56
- // Silently ignore - status line is optional
57
- }
58
- }
59
-
60
- /**
61
- * Signal that command has finished (for status line)
62
- */
63
- signalEnd() {
64
- try {
65
- if (fs.existsSync(RUNNING_FILE)) {
66
- fs.unlinkSync(RUNNING_FILE)
67
- }
68
- } catch {
69
- // Silently ignore - status line is optional
70
- }
71
- }
72
-
73
- /**
74
- * Execute a prjct command with full agentic delegation
75
- *
76
- * @param {string} commandName - Command to execute (e.g., 'now', 'ship')
77
- * @param {Object} params - Command parameters
78
- * @param {string} projectPath - Path to the project
79
- * @returns {Promise<Object>} Execution result with prompt, context, helpers
80
- */
81
- async execute(commandName, params, projectPath) {
82
- // Signal start for status line
83
- this.signalStart(commandName)
84
-
85
- // Context for loop detection
86
- const loopContext = params.task || params.description || ''
87
-
88
- // Check if we're in a loop BEFORE attempting
89
- if (loopDetector.shouldEscalate(commandName, loopContext)) {
90
- const escalation = loopDetector.getEscalationInfo(commandName, loopContext)
91
- this.signalEnd()
92
- return {
93
- success: false,
94
- error: escalation.message,
95
- escalation,
96
- isLoopDetected: true,
97
- suggestion: escalation.suggestion
98
- }
99
- }
100
-
101
- try {
102
- // 1. Load template
103
- const template = await templateLoader.load(commandName)
104
-
105
- // 2. Build METADATA context only (lazy loading - no file reads yet)
106
- const metadataContext = await contextBuilder.build(projectPath, params)
107
-
108
- // 2.5. VALIDATE: Pre-flight checks with specific errors
109
- const validation = await validate(commandName, metadataContext)
110
- if (!validation.valid) {
111
- this.signalEnd()
112
- return {
113
- success: false,
114
- error: formatError(validation),
115
- validation,
116
- isValidationError: true
117
- }
118
- }
119
-
120
- // 2.55. P3.4 PLAN MODE: Check if command requires planning
121
- const requiresPlanning = planMode.requiresPlanning(commandName)
122
- const isDestructive = planMode.isDestructive(commandName)
123
- const isInPlanningMode = planMode.isInPlanningMode(metadataContext.projectId)
124
-
125
- // Start planning mode if required and not already in it
126
- let activePlan = null
127
- if (requiresPlanning && !isInPlanningMode && !params.skipPlanning) {
128
- activePlan = planMode.startPlanning(metadataContext.projectId, commandName, params)
129
- } else if (isInPlanningMode) {
130
- activePlan = planMode.getActivePlan(metadataContext.projectId)
131
- }
132
-
133
- // 2.6. GROUND TRUTH: Verify actual state before critical operations
134
- let groundTruthResult = null
135
- if (groundTruth.requiresVerification(commandName)) {
136
- const preState = await contextBuilder.loadStateForCommand(metadataContext, commandName)
137
- groundTruthResult = await groundTruth.verify(commandName, metadataContext, preState)
138
-
139
- // Log warnings but don't block (user can override)
140
- if (!groundTruthResult.verified && groundTruthResult.warnings.length > 0) {
141
- console.log(groundTruth.formatWarnings(groundTruthResult))
142
- }
143
- }
144
-
145
- // 2.7. THINK BLOCKS (P3.1): Dynamic reasoning based on triggers
146
- // ANTI-HALLUCINATION FIX: Load state BEFORE using it (was undefined)
147
- let thinkBlock = null
148
- const preThinkState = groundTruthResult?.actual || await contextBuilder.loadStateForCommand(metadataContext, commandName)
149
- const thinkTrigger = thinkBlocks.detectTrigger(commandName, metadataContext, preThinkState)
150
- if (thinkTrigger) {
151
- thinkBlock = await thinkBlocks.generate(thinkTrigger, commandName, metadataContext, preThinkState)
152
-
153
- // Log think block if in debug mode
154
- if (process.env.PRJCT_DEBUG === 'true') {
155
- console.log(thinkBlocks.format(thinkBlock, true))
156
- }
157
- }
158
-
159
- // 2.8. CHAIN OF THOUGHT: Reasoning for critical commands
160
- let reasoning = null
161
- if (chainOfThought.requiresReasoning(commandName)) {
162
- // Load state for reasoning
163
- const reasoningState = await contextBuilder.loadStateForCommand(metadataContext, commandName)
164
- reasoning = await chainOfThought.reason(commandName, metadataContext, reasoningState)
165
-
166
- // If reasoning shows critical issues, warn but continue
167
- if (reasoning.reasoning && !reasoning.reasoning.allPassed) {
168
- console.log('⚠️ Chain of Thought detected issues:')
169
- console.log(chainOfThought.formatPlan(reasoning))
170
- }
171
- }
172
-
173
- // 3. AGENTIC: Claude decides agent assignment via templates
174
- // NO if/else logic here - templates instruct Claude to use Task tool
175
- // See templates/agentic/agent-routing.md for routing rules
176
- let context = metadataContext
177
-
178
- // Provide agent info to context so Claude can delegate
179
- context = {
180
- ...context,
181
- agentsPath: path.join(os.homedir(), '.prjct-cli', 'projects', metadataContext.projectId || '', 'agents'),
182
- agentRoutingPath: path.join(__dirname, '..', '..', 'templates', 'agentic', 'agent-routing.md'),
183
- // Flag: Claude must delegate to subagent via Task tool
184
- agenticDelegation: true
185
- }
186
-
187
- // 6. Load state with filtered context
188
- const rawState = await contextBuilder.loadState(context)
189
-
190
- // 6.5. SEMANTIC COMPRESSION: Compress state for reduced token usage
191
- const compressedState = {}
192
- for (const [key, content] of Object.entries(rawState)) {
193
- if (content) {
194
- const compressed = semanticCompression.compress(content, key)
195
- compressedState[key] = {
196
- raw: content,
197
- summary: compressed.summary,
198
- compressed
199
- }
200
- } else {
201
- compressedState[key] = { raw: null, summary: 'Empty', compressed: null }
202
- }
203
- }
204
-
205
- // Use compressed summaries for prompt, keep raw for tool execution
206
- const state = {
207
- ...rawState,
208
- _compressed: compressedState,
209
- _compressionMetrics: semanticCompression.getMetrics()
210
- }
211
-
212
- // 7. MEMORY: Load learned patterns AND relevant memories for this command
213
- let learnedPatterns = null
214
- let relevantMemories = null
215
- if (context.projectId) {
216
- learnedPatterns = {
217
- commit_footer: await memorySystem.getSmartDecision(context.projectId, 'commit_footer'),
218
- branch_naming: await memorySystem.getSmartDecision(context.projectId, 'branch_naming'),
219
- test_before_ship: await memorySystem.getSmartDecision(context.projectId, 'test_before_ship'),
220
- preferred_agent: await memorySystem.getSmartDecision(context.projectId, `preferred_agent_${commandName}`)
221
- }
222
-
223
- // P3.3: Get relevant memories for context
224
- relevantMemories = await memorySystem.getRelevantMemories(
225
- context.projectId,
226
- { commandName, params },
227
- 5 // Top 5 relevant memories
228
- )
229
- }
230
-
231
- // 9. Build prompt - NO agent assignment here, Claude decides via templates
232
- const planInfo = {
233
- isPlanning: requiresPlanning || isInPlanningMode,
234
- requiresApproval: isDestructive && !params.approved,
235
- active: activePlan,
236
- allowedTools: planMode.getAllowedTools(
237
- isInPlanningMode,
238
- template.frontmatter['allowed-tools'] || []
239
- )
240
- }
241
- // Agent is null - Claude assigns via Task tool using agent-routing.md
242
- const prompt = promptBuilder.build(template, context, state, null, learnedPatterns, thinkBlock, relevantMemories, planInfo)
243
-
244
- // Log agentic mode
245
- console.log(`🤖 Agentic delegation enabled - Claude will assign agent via Task tool`)
246
-
247
- // Record successful attempt
248
- loopDetector.recordSuccess(commandName, loopContext)
249
-
250
- // Signal end for status line
251
- this.signalEnd()
252
-
253
- return {
254
- success: true,
255
- template,
256
- context,
257
- state,
258
- prompt,
259
- // AGENTIC: No pre-assigned agent - Claude delegates via Task tool
260
- agenticDelegation: true,
261
- agentsPath: context.agentsPath,
262
- agentRoutingPath: context.agentRoutingPath,
263
- reasoning, // Chain of thought results
264
- thinkBlock, // Think blocks (P3.1)
265
- groundTruth: groundTruthResult, // Ground truth verification (P1.3)
266
- compressionMetrics: state._compressionMetrics,
267
- learnedPatterns, // Memory system patterns
268
- relevantMemories, // P3.3: Semantic memories
269
- // Response formatter helper
270
- formatResponse: (data) => responseTemplates.format(commandName, data),
271
- // Think block formatter helper
272
- formatThinkBlock: (verbose) => thinkBlocks.format(thinkBlock, verbose),
273
- // P3.2: Parallel tools helper
274
- parallel: {
275
- execute: (toolCalls) => parallelTools.execute(toolCalls),
276
- readAll: (paths) => parallelTools.readAll(paths),
277
- canParallelize: (tools) => parallelTools.canParallelize(tools),
278
- getMetrics: () => parallelTools.getMetrics()
279
- },
280
- // P3.3: Memory system helpers
281
- memory: {
282
- create: (memory) => memorySystem.createMemory(context.projectId, memory),
283
- autoRemember: (type, value, ctx) => memorySystem.autoRemember(context.projectId, type, value, ctx),
284
- search: (query) => memorySystem.searchMemories(context.projectId, query),
285
- findByTags: (tags) => memorySystem.findByTags(context.projectId, tags),
286
- getStats: () => memorySystem.getMemoryStats(context.projectId)
287
- },
288
- // P3.4: Plan Mode helpers
289
- plan: {
290
- active: activePlan,
291
- isPlanning: requiresPlanning || isInPlanningMode,
292
- isDestructive,
293
- requiresApproval: isDestructive && !params.approved,
294
- // Planning phase methods
295
- recordInfo: (info) => planMode.recordGatheredInfo(context.projectId, info),
296
- setAnalysis: (analysis) => planMode.setAnalysis(context.projectId, analysis),
297
- propose: (plan) => planMode.proposePlan(context.projectId, plan),
298
- // Approval methods
299
- approve: (feedback) => planMode.approvePlan(context.projectId, feedback),
300
- reject: (reason) => planMode.rejectPlan(context.projectId, reason),
301
- getApprovalPrompt: () => planMode.generateApprovalPrompt(commandName, context),
302
- // Execution methods
303
- startExecution: () => planMode.startExecution(context.projectId),
304
- getNextStep: () => planMode.getNextStep(context.projectId),
305
- completeStep: (result) => planMode.completeStep(context.projectId, result),
306
- failStep: (error) => planMode.failStep(context.projectId, error),
307
- abort: (reason) => planMode.abortPlan(context.projectId, reason),
308
- // Status
309
- getStatus: () => planMode.formatStatus(context.projectId),
310
- getAllowedTools: () => planMode.getAllowedTools(
311
- isInPlanningMode,
312
- template.frontmatter['allowed-tools'] || []
313
- )
314
- }
315
- // P3.5, P3.6: DELEGATED TO CLAUDE CODE
316
- // Use Claude Code's native tools instead:
317
- // - Grep for semantic search
318
- // - Glob for file patterns
319
- // - Native LSP for code intelligence
320
- }
321
- } catch (error) {
322
- // Signal end for status line
323
- this.signalEnd()
324
-
325
- // Record failed attempt for loop detection
326
- const attemptInfo = loopDetector.recordAttempt(commandName, loopContext, {
327
- success: false,
328
- error: error.message
329
- })
330
-
331
- // Check if we should escalate after this failure
332
- if (attemptInfo.shouldEscalate) {
333
- const escalation = loopDetector.getEscalationInfo(commandName, loopContext)
334
- return {
335
- success: false,
336
- error: escalation.message,
337
- escalation,
338
- isLoopDetected: true,
339
- suggestion: escalation.suggestion
340
- }
341
- }
342
-
343
- return {
344
- success: false,
345
- error: error.message,
346
- attemptNumber: attemptInfo.attemptNumber,
347
- isLooping: attemptInfo.isLooping
348
- }
349
- }
350
- }
351
-
352
- // REMOVED: isTaskCommand() and shouldUseAgent()
353
- // Agent assignment is now 100% agentic - Claude decides via templates
354
- // See templates/agentic/agent-routing.md
355
-
356
- /**
357
- * Execute tool with permission check
358
- * @param {string} toolName - Tool name
359
- * @param {Array} args - Tool arguments
360
- * @param {string[]} allowedTools - Allowed tools for this command
361
- * @returns {Promise<any>}
362
- */
363
- async executeTool(toolName, args, allowedTools) {
364
- // Check if tool is allowed
365
- if (!toolRegistry.isAllowed(toolName, allowedTools)) {
366
- throw new Error(`Tool ${toolName} not allowed for this command`)
367
- }
368
-
369
- // Get tool function
370
- const tool = toolRegistry.get(toolName)
371
-
372
- // Execute tool
373
- return await tool(...args)
374
- }
375
-
376
- /**
377
- * Simple execution for direct tool access (legacy migration helper)
378
- *
379
- * @param {string} commandName - Command name
380
- * @param {Function} executionFn - Function receiving (tools, context)
381
- * @param {string} projectPath - Project path
382
- * @returns {Promise<Object>} Result with success flag
383
- */
384
- async executeSimple(commandName, executionFn, projectPath) {
385
- try {
386
- // Load template to get allowed tools
387
- const template = await templateLoader.load(commandName)
388
- const allowedTools = template.frontmatter['allowed-tools'] || []
389
-
390
- // Build context
391
- const context = await contextBuilder.build(projectPath)
392
-
393
- // Create tools proxy that checks permissions
394
- const tools = {
395
- read: async (filePath) => this.executeTool('Read', [filePath], allowedTools),
396
- write: async (filePath, content) =>
397
- this.executeTool('Write', [filePath, content], allowedTools),
398
- bash: async (command) => this.executeTool('Bash', [command], allowedTools),
399
- }
400
-
401
- // Execute user function with tools
402
- const result = await executionFn(tools, context)
403
-
404
- return {
405
- success: true,
406
- result,
407
- }
408
- } catch (error) {
409
- return {
410
- success: false,
411
- error: error.message,
412
- }
413
- }
414
- }
415
- }
416
-
417
- module.exports = new CommandExecutor()