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
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Response Templates
3
+ * Consistent response formatting for commands
4
+ *
5
+ * @module agentic/response-templates
6
+ * @version 1.0.0
7
+ */
8
+
9
+ interface ResponseData {
10
+ task?: string
11
+ duration?: string
12
+ feature?: string
13
+ filesChanged?: number
14
+ keyFile?: string
15
+ nextAction?: string
16
+ message?: string
17
+ ideas?: number
18
+ roadmapFeatures?: number
19
+ pendingTasks?: number
20
+ completedTasks?: number
21
+ error?: string
22
+ [key: string]: unknown
23
+ }
24
+
25
+ interface ResponseTemplate {
26
+ success: (data: ResponseData) => string
27
+ error: (data: ResponseData) => string
28
+ }
29
+
30
+ /**
31
+ * Response templates by command
32
+ */
33
+ const templates: Record<string, ResponseTemplate> = {
34
+ done: {
35
+ success: (data) => `✅ ${data.task || 'Task'} (${data.duration || '?'})
36
+
37
+ Files: ${data.filesChanged || 0} | Modified: ${data.keyFile || 'n/a'}
38
+ Next: ${data.nextAction || '/p:next for queue'}`,
39
+
40
+ error: (data) => `❌ Could not complete task
41
+
42
+ ${data.error || 'Unknown error'}
43
+ Try: /p:now to check current task`,
44
+ },
45
+
46
+ ship: {
47
+ success: (data) => `🚀 ${data.feature || 'Feature'} shipped!
48
+
49
+ ${data.message || 'Successfully deployed'}
50
+ Next: ${data.nextAction || '/p:recap for progress'}`,
51
+
52
+ error: (data) => `❌ Ship failed
53
+
54
+ ${data.error || 'Unknown error'}
55
+ Check git status and try again`,
56
+ },
57
+
58
+ now: {
59
+ success: (data) => `🎯 Now working on: ${data.task || 'Task'}
60
+
61
+ ${data.message || 'Focus set'}
62
+ When done: /p:done`,
63
+
64
+ error: (data) => `❌ Could not set task
65
+
66
+ ${data.error || 'Unknown error'}
67
+ Try: /p:init if project not initialized`,
68
+ },
69
+
70
+ feature: {
71
+ success: (data) => `✨ Feature added: ${data.feature || 'New feature'}
72
+
73
+ ${data.message || 'Added to roadmap'}
74
+ Start: /p:now to begin first task`,
75
+
76
+ error: (data) => `❌ Could not add feature
77
+
78
+ ${data.error || 'Unknown error'}`,
79
+ },
80
+
81
+ idea: {
82
+ success: (data) => `💡 Idea captured!
83
+
84
+ ${data.message || 'Saved to ideas.md'}
85
+ Total ideas: ${data.ideas || '?'}`,
86
+
87
+ error: (data) => `❌ Could not save idea
88
+
89
+ ${data.error || 'Unknown error'}`,
90
+ },
91
+
92
+ recap: {
93
+ success: (data) => `📊 Project Recap
94
+
95
+ Features: ${data.roadmapFeatures || 0}
96
+ Pending: ${data.pendingTasks || 0}
97
+ Completed: ${data.completedTasks || 0}
98
+
99
+ ${data.message || ''}`,
100
+
101
+ error: (data) => `❌ Could not generate recap
102
+
103
+ ${data.error || 'Unknown error'}
104
+ Try: /p:sync to refresh state`,
105
+ },
106
+
107
+ sync: {
108
+ success: (data) => `🔄 Sync complete
109
+
110
+ ${data.message || 'Project state updated'}
111
+ Next: ${data.nextAction || '/p:recap for overview'}`,
112
+
113
+ error: (data) => `❌ Sync failed
114
+
115
+ ${data.error || 'Unknown error'}
116
+ Try: /p:init to reinitialize`,
117
+ },
118
+
119
+ init: {
120
+ success: (data) => `🎉 Project initialized!
121
+
122
+ ${data.message || 'Ready to use prjct'}
123
+ Next: /p:sync to analyze codebase`,
124
+
125
+ error: (data) => `❌ Initialization failed
126
+
127
+ ${data.error || 'Unknown error'}
128
+ Check permissions and try again`,
129
+ },
130
+
131
+ default: {
132
+ success: (data) => `✅ Done
133
+
134
+ ${data.message || 'Operation completed'}`,
135
+
136
+ error: (data) => `❌ Failed
137
+
138
+ ${data.error || 'Unknown error'}`,
139
+ },
140
+ }
141
+
142
+ /**
143
+ * Format response for a command
144
+ */
145
+ function format(commandName: string, data: ResponseData): string {
146
+ const template = templates[commandName] || templates.default
147
+ const success = data.error ? false : true
148
+
149
+ if (success) {
150
+ return template.success(data)
151
+ } else {
152
+ return template.error(data)
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Get template for command
158
+ */
159
+ function getTemplate(commandName: string): ResponseTemplate {
160
+ return templates[commandName] || templates.default
161
+ }
162
+
163
+ export { format, getTemplate, templates }
164
+ export default { format, getTemplate, templates }
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Semantic Compression
3
+ * Compresses context while preserving meaning
4
+ *
5
+ * @module agentic/semantic-compression
6
+ * @version 1.0.0
7
+ */
8
+
9
+ interface CompressionResult {
10
+ summary: string
11
+ originalLength: number
12
+ compressedLength: number
13
+ ratio: number
14
+ key: string
15
+ }
16
+
17
+ interface CompressionMetrics {
18
+ totalOriginal: number
19
+ totalCompressed: number
20
+ overallRatio: number
21
+ compressions: number
22
+ }
23
+
24
+ class SemanticCompression {
25
+ private metrics: CompressionMetrics
26
+
27
+ constructor() {
28
+ this.metrics = {
29
+ totalOriginal: 0,
30
+ totalCompressed: 0,
31
+ overallRatio: 1,
32
+ compressions: 0,
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Compress content while preserving semantic meaning
38
+ */
39
+ compress(content: string, key: string): CompressionResult {
40
+ if (!content || !content.trim()) {
41
+ return {
42
+ summary: 'Empty',
43
+ originalLength: 0,
44
+ compressedLength: 0,
45
+ ratio: 1,
46
+ key,
47
+ }
48
+ }
49
+
50
+ const originalLength = content.length
51
+ let summary: string
52
+
53
+ // Apply key-specific compression strategies
54
+ switch (key) {
55
+ case 'now':
56
+ summary = this.compressNow(content)
57
+ break
58
+ case 'next':
59
+ summary = this.compressNext(content)
60
+ break
61
+ case 'shipped':
62
+ summary = this.compressShipped(content)
63
+ break
64
+ case 'analysis':
65
+ summary = this.compressAnalysis(content)
66
+ break
67
+ case 'roadmap':
68
+ summary = this.compressRoadmap(content)
69
+ break
70
+ case 'codePatterns':
71
+ summary = this.compressCodePatterns(content)
72
+ break
73
+ default:
74
+ summary = this.compressGeneric(content)
75
+ }
76
+
77
+ const compressedLength = summary.length
78
+ const ratio = originalLength > 0 ? compressedLength / originalLength : 1
79
+
80
+ // Update metrics
81
+ this.metrics.totalOriginal += originalLength
82
+ this.metrics.totalCompressed += compressedLength
83
+ this.metrics.compressions++
84
+ this.metrics.overallRatio =
85
+ this.metrics.totalOriginal > 0 ? this.metrics.totalCompressed / this.metrics.totalOriginal : 1
86
+
87
+ return {
88
+ summary,
89
+ originalLength,
90
+ compressedLength,
91
+ ratio,
92
+ key,
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Compress now.md content
98
+ */
99
+ private compressNow(content: string): string {
100
+ // Extract task description
101
+ const taskMatch = content.match(/task:\s*["']?([^"'\n]+)["']?/i) || content.match(/#+\s*(.+)/m)
102
+ const task = taskMatch ? taskMatch[1].trim() : 'Unknown task'
103
+
104
+ // Extract started time
105
+ const startedMatch = content.match(/started:\s*(.+)/i)
106
+ const started = startedMatch ? startedMatch[1].trim() : ''
107
+
108
+ // Extract agent if present
109
+ const agentMatch = content.match(/agent:\s*(.+)/i)
110
+ const agent = agentMatch ? agentMatch[1].trim() : ''
111
+
112
+ let summary = `Task: ${task}`
113
+ if (started) summary += ` | Started: ${started}`
114
+ if (agent) summary += ` | Agent: ${agent}`
115
+
116
+ return summary
117
+ }
118
+
119
+ /**
120
+ * Compress next.md content
121
+ */
122
+ private compressNext(content: string): string {
123
+ // Count tasks
124
+ const pending = (content.match(/- \[ \]/g) || []).length
125
+ const completed = (content.match(/- \[x\]/gi) || []).length
126
+ const total = pending + completed
127
+
128
+ // Get first few pending tasks
129
+ const taskLines = content.match(/- \[ \] .+/g) || []
130
+ const topTasks = taskLines.slice(0, 3).map((t) => t.replace('- [ ] ', '').trim())
131
+
132
+ let summary = `Queue: ${pending} pending, ${completed} done (${total} total)`
133
+ if (topTasks.length > 0) {
134
+ summary += ` | Next: ${topTasks.join(', ')}`
135
+ }
136
+
137
+ return summary
138
+ }
139
+
140
+ /**
141
+ * Compress shipped.md content
142
+ */
143
+ private compressShipped(content: string): string {
144
+ // Count shipped items
145
+ const shipped = (content.match(/^##\s+/gm) || []).length
146
+ const lines = content.split('\n')
147
+
148
+ // Get most recent ship
149
+ let recentShip = ''
150
+ for (const line of lines) {
151
+ if (line.startsWith('## ')) {
152
+ recentShip = line.replace('## ', '').trim()
153
+ break
154
+ }
155
+ }
156
+
157
+ let summary = `Shipped: ${shipped} items`
158
+ if (recentShip) summary += ` | Recent: ${recentShip.substring(0, 50)}`
159
+
160
+ return summary
161
+ }
162
+
163
+ /**
164
+ * Compress analysis content
165
+ */
166
+ private compressAnalysis(content: string): string {
167
+ // Extract stack
168
+ const stackMatch =
169
+ content.match(/stack[:\s]+([^\n]+)/i) ||
170
+ content.match(/technology[:\s]+([^\n]+)/i) ||
171
+ content.match(/framework[:\s]+([^\n]+)/i)
172
+ const stack = stackMatch ? stackMatch[1].trim() : 'Unknown'
173
+
174
+ // Extract file count if present
175
+ const filesMatch = content.match(/(\d+)\s*files/i)
176
+ const files = filesMatch ? filesMatch[1] : ''
177
+
178
+ // Extract language
179
+ const langMatch = content.match(/language[:\s]+([^\n]+)/i) || content.match(/primary[:\s]+([^\n]+)/i)
180
+ const language = langMatch ? langMatch[1].trim() : ''
181
+
182
+ let summary = `Stack: ${stack}`
183
+ if (language) summary += ` | Language: ${language}`
184
+ if (files) summary += ` | Files: ${files}`
185
+
186
+ return summary
187
+ }
188
+
189
+ /**
190
+ * Compress roadmap content
191
+ */
192
+ private compressRoadmap(content: string): string {
193
+ // Count features
194
+ const features = (content.match(/^##\s+/gm) || []).length
195
+
196
+ // Get feature names
197
+ const featureNames: string[] = []
198
+ const matches = content.match(/^##\s+(.+)/gm) || []
199
+ matches.slice(0, 3).forEach((m) => {
200
+ featureNames.push(m.replace(/^##\s+/, '').trim())
201
+ })
202
+
203
+ let summary = `Roadmap: ${features} features`
204
+ if (featureNames.length > 0) {
205
+ summary += ` | Top: ${featureNames.join(', ')}`
206
+ }
207
+
208
+ return summary
209
+ }
210
+
211
+ /**
212
+ * Compress code patterns content
213
+ */
214
+ private compressCodePatterns(content: string): string {
215
+ // Extract conventions section
216
+ const conventionsMatch = content.match(/## Conventions[\s\S]*?(?=##|$)/i)
217
+ let conventions = ''
218
+ if (conventionsMatch) {
219
+ const lines = conventionsMatch[0]
220
+ .split('\n')
221
+ .filter((l) => l.includes(':') || l.startsWith('-'))
222
+ .slice(0, 3)
223
+ conventions = lines.join(' | ')
224
+ }
225
+
226
+ // Check for anti-patterns
227
+ const hasAntiPatterns = content.toLowerCase().includes('anti-pattern')
228
+
229
+ let summary = 'Code patterns loaded'
230
+ if (conventions) summary += ` | ${conventions.substring(0, 100)}`
231
+ if (hasAntiPatterns) summary += ' | Has anti-patterns'
232
+
233
+ return summary
234
+ }
235
+
236
+ /**
237
+ * Generic compression
238
+ */
239
+ private compressGeneric(content: string): string {
240
+ // Take first meaningful lines
241
+ const lines = content.split('\n').filter((l) => l.trim() && !l.startsWith('#'))
242
+ const preview = lines.slice(0, 2).join(' | ')
243
+
244
+ if (preview.length > 150) {
245
+ return preview.substring(0, 150) + '...'
246
+ }
247
+
248
+ return preview || 'Content available'
249
+ }
250
+
251
+ /**
252
+ * Get compression metrics
253
+ */
254
+ getMetrics(): CompressionMetrics {
255
+ return { ...this.metrics }
256
+ }
257
+
258
+ /**
259
+ * Reset metrics
260
+ */
261
+ resetMetrics(): void {
262
+ this.metrics = {
263
+ totalOriginal: 0,
264
+ totalCompressed: 0,
265
+ overallRatio: 1,
266
+ compressions: 0,
267
+ }
268
+ }
269
+ }
270
+
271
+ const semanticCompression = new SemanticCompression()
272
+ export default semanticCompression
273
+ export { SemanticCompression }
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Agentic Services Facade
3
+ *
4
+ * Single entry point for all agentic subsystems.
5
+ * Use this facade instead of importing individual modules.
6
+ *
7
+ * This reduces the number of imports Claude needs to understand
8
+ * and provides a clear API for the agentic system.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { services } from './services'
13
+ *
14
+ * // Instead of:
15
+ * import templateLoader from './template-loader'
16
+ * import contextBuilder from './context-builder'
17
+ * // ... 12 more imports
18
+ *
19
+ * // Use:
20
+ * const template = await services.templates.load('now')
21
+ * const context = await services.context.build(projectPath)
22
+ * ```
23
+ */
24
+
25
+ import templateLoader from './template-loader'
26
+ import contextBuilder from './context-builder'
27
+ import promptBuilder from './prompt-builder'
28
+ import toolRegistry from './tool-registry'
29
+ import loopDetector from './loop-detector'
30
+ import memorySystem from './memory-system'
31
+ import groundTruth from './ground-truth'
32
+ import semanticCompression from './semantic-compression'
33
+ import responseTemplates from './response-templates'
34
+ import chainOfThought from './chain-of-thought'
35
+ import thinkBlocks from './think-blocks'
36
+ import parallelTools from './parallel-tools'
37
+ import planMode from './plan-mode'
38
+ import contextFilter from './context-filter'
39
+ import validationRules from './validation-rules'
40
+ import agentRouter from './agent-router'
41
+ import smartContext from './smart-context'
42
+ import stateManager from '../state'
43
+ import { outcomeRecorder, outcomeAnalyzer } from '../outcomes'
44
+ import { agentPerformanceTracker } from '../agents'
45
+
46
+ /**
47
+ * Agentic services interface.
48
+ * Each property provides access to a subsystem.
49
+ */
50
+ export interface AgenticServices {
51
+ /**
52
+ * Template loader - loads command templates from templates/
53
+ * @see templateLoader
54
+ */
55
+ templates: typeof templateLoader
56
+
57
+ /**
58
+ * Context builder - builds ProjectContext for commands
59
+ * @see contextBuilder
60
+ */
61
+ context: typeof contextBuilder
62
+
63
+ /**
64
+ * Prompt builder - generates prompts from templates and context
65
+ * @see promptBuilder
66
+ */
67
+ prompts: typeof promptBuilder
68
+
69
+ /**
70
+ * Tool registry - registers and executes tools (Read, Write, Bash, etc.)
71
+ * @see toolRegistry
72
+ */
73
+ tools: typeof toolRegistry
74
+
75
+ /**
76
+ * Loop detector - detects and prevents infinite loops
77
+ * @see loopDetector
78
+ */
79
+ loops: typeof loopDetector
80
+
81
+ /**
82
+ * Memory system - stores and retrieves learned patterns
83
+ * @see memorySystem
84
+ */
85
+ memory: typeof memorySystem
86
+
87
+ /**
88
+ * Ground truth - verifies command preconditions
89
+ * @see groundTruth
90
+ */
91
+ truth: typeof groundTruth
92
+
93
+ /**
94
+ * Semantic compression - compresses context to fit token limits
95
+ * @see semanticCompression
96
+ */
97
+ compression: typeof semanticCompression
98
+
99
+ /**
100
+ * Response templates - generates formatted responses
101
+ * @see responseTemplates
102
+ */
103
+ responses: typeof responseTemplates
104
+
105
+ /**
106
+ * Chain of thought - adds reasoning to responses
107
+ * @see chainOfThought
108
+ */
109
+ reasoning: typeof chainOfThought
110
+
111
+ /**
112
+ * Think blocks - generates think block content
113
+ * @see thinkBlocks
114
+ */
115
+ thinking: typeof thinkBlocks
116
+
117
+ /**
118
+ * Parallel tools - executes tools in parallel
119
+ * @see parallelTools
120
+ */
121
+ parallel: typeof parallelTools
122
+
123
+ /**
124
+ * Plan mode - handles planning workflow
125
+ * @see planMode
126
+ */
127
+ planning: typeof planMode
128
+
129
+ /**
130
+ * Context filter - filters context for relevance
131
+ * @see contextFilter
132
+ */
133
+ filter: typeof contextFilter
134
+
135
+ /**
136
+ * Validation rules - validates command inputs
137
+ * @see validationRules
138
+ */
139
+ validation: typeof validationRules
140
+
141
+ /**
142
+ * Agent router - routes tasks to appropriate agents
143
+ * @see agentRouter
144
+ */
145
+ router: typeof agentRouter
146
+
147
+ /**
148
+ * Smart context - intelligent context filtering by task type
149
+ * @see smartContext
150
+ */
151
+ smartContext: typeof smartContext
152
+
153
+ /**
154
+ * State manager - unified project state (read/write state.json)
155
+ * @see stateManager
156
+ */
157
+ state: typeof stateManager
158
+
159
+ /**
160
+ * Outcome recorder - records execution outcomes
161
+ * @see outcomeRecorder
162
+ */
163
+ outcomes: typeof outcomeRecorder
164
+
165
+ /**
166
+ * Outcome analyzer - analyzes outcomes for patterns
167
+ * @see outcomeAnalyzer
168
+ */
169
+ outcomeAnalysis: typeof outcomeAnalyzer
170
+
171
+ /**
172
+ * Agent performance tracker - tracks agent performance
173
+ * @see agentPerformanceTracker
174
+ */
175
+ agentPerformance: typeof agentPerformanceTracker
176
+ }
177
+
178
+ /**
179
+ * Singleton services instance.
180
+ * Import and use this instead of individual module imports.
181
+ */
182
+ export const services: AgenticServices = {
183
+ templates: templateLoader,
184
+ context: contextBuilder,
185
+ prompts: promptBuilder,
186
+ tools: toolRegistry,
187
+ loops: loopDetector,
188
+ memory: memorySystem,
189
+ truth: groundTruth,
190
+ compression: semanticCompression,
191
+ responses: responseTemplates,
192
+ reasoning: chainOfThought,
193
+ thinking: thinkBlocks,
194
+ parallel: parallelTools,
195
+ planning: planMode,
196
+ filter: contextFilter,
197
+ validation: validationRules,
198
+ router: agentRouter,
199
+ smartContext: smartContext,
200
+ state: stateManager,
201
+ outcomes: outcomeRecorder,
202
+ outcomeAnalysis: outcomeAnalyzer,
203
+ agentPerformance: agentPerformanceTracker,
204
+ }
205
+
206
+ export default services