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
@@ -7,9 +7,9 @@
7
7
  * @version 1.0.0
8
8
  */
9
9
 
10
- const fs = require('fs').promises
11
- const path = require('path')
12
- const pathManager = require('../infrastructure/path-manager')
10
+ import fs from 'fs/promises'
11
+ import path from 'path'
12
+ import pathManager from '../infrastructure/path-manager'
13
13
 
14
14
  /**
15
15
  * Event Types - All events that can be emitted
@@ -50,9 +50,26 @@ const EventTypes = {
50
50
 
51
51
  // Wildcard
52
52
  ALL: '*'
53
+ } as const
54
+
55
+ type EventType = typeof EventTypes[keyof typeof EventTypes]
56
+
57
+ interface EventData {
58
+ type: string
59
+ timestamp: string
60
+ projectId: string | null
61
+ [key: string]: unknown
53
62
  }
54
63
 
64
+ type EventCallback = (data: EventData) => void | Promise<void>
65
+
55
66
  class EventBus {
67
+ private listeners: Map<string, Set<EventCallback>>
68
+ private onceListeners: Map<string, Set<EventCallback>>
69
+ private history: EventData[]
70
+ private historyLimit: number
71
+ projectId: string | null
72
+
56
73
  constructor() {
57
74
  this.listeners = new Map()
58
75
  this.onceListeners = new Map()
@@ -63,23 +80,19 @@ class EventBus {
63
80
 
64
81
  /**
65
82
  * Initialize event bus for a project
66
- * @param {string} projectId
67
83
  */
68
- async initialize(projectId) {
84
+ async initialize(projectId: string): Promise<void> {
69
85
  this.projectId = projectId
70
86
  }
71
87
 
72
88
  /**
73
89
  * Subscribe to an event
74
- * @param {string} event - Event type or wildcard pattern
75
- * @param {Function} callback - Handler function
76
- * @returns {Function} Unsubscribe function
77
90
  */
78
- on(event, callback) {
91
+ on(event: string, callback: EventCallback): () => void {
79
92
  if (!this.listeners.has(event)) {
80
93
  this.listeners.set(event, new Set())
81
94
  }
82
- this.listeners.get(event).add(callback)
95
+ this.listeners.get(event)!.add(callback)
83
96
 
84
97
  // Return unsubscribe function
85
98
  return () => this.off(event, callback)
@@ -87,15 +100,12 @@ class EventBus {
87
100
 
88
101
  /**
89
102
  * Subscribe to an event once
90
- * @param {string} event
91
- * @param {Function} callback
92
- * @returns {Function} Unsubscribe function
93
103
  */
94
- once(event, callback) {
104
+ once(event: string, callback: EventCallback): () => void {
95
105
  if (!this.onceListeners.has(event)) {
96
106
  this.onceListeners.set(event, new Set())
97
107
  }
98
- this.onceListeners.get(event).add(callback)
108
+ this.onceListeners.get(event)!.add(callback)
99
109
 
100
110
  return () => {
101
111
  const listeners = this.onceListeners.get(event)
@@ -107,10 +117,8 @@ class EventBus {
107
117
 
108
118
  /**
109
119
  * Unsubscribe from an event
110
- * @param {string} event
111
- * @param {Function} callback
112
120
  */
113
- off(event, callback) {
121
+ off(event: string, callback: EventCallback): void {
114
122
  const listeners = this.listeners.get(event)
115
123
  if (listeners) {
116
124
  listeners.delete(callback)
@@ -119,13 +127,10 @@ class EventBus {
119
127
 
120
128
  /**
121
129
  * Emit an event
122
- * @param {string} event - Event type
123
- * @param {Object} data - Event payload
124
- * @returns {Promise<void>}
125
130
  */
126
- async emit(event, data = {}) {
131
+ async emit(event: string, data: Record<string, unknown> = {}): Promise<void> {
127
132
  const timestamp = new Date().toISOString()
128
- const eventData = {
133
+ const eventData: EventData = {
129
134
  type: event,
130
135
  timestamp,
131
136
  projectId: this.projectId,
@@ -152,7 +157,7 @@ class EventBus {
152
157
  )
153
158
 
154
159
  // Log any errors
155
- results.forEach((result, index) => {
160
+ results.forEach((result) => {
156
161
  if (result.status === 'rejected') {
157
162
  console.error(`Event listener error for ${event}:`, result.reason)
158
163
  }
@@ -179,11 +184,9 @@ class EventBus {
179
184
 
180
185
  /**
181
186
  * Get all listeners that match an event (including wildcards)
182
- * @param {string} event
183
- * @returns {Function[]}
184
187
  */
185
- getMatchingListeners(event) {
186
- const callbacks = []
188
+ getMatchingListeners(event: string): EventCallback[] {
189
+ const callbacks: EventCallback[] = []
187
190
 
188
191
  // Exact match
189
192
  const exact = this.listeners.get(event)
@@ -209,10 +212,8 @@ class EventBus {
209
212
 
210
213
  /**
211
214
  * Execute a callback safely (handles sync and async)
212
- * @param {Function} callback
213
- * @param {Object} data
214
215
  */
215
- async executeCallback(callback, data) {
216
+ async executeCallback(callback: EventCallback, data: EventData): Promise<void> {
216
217
  try {
217
218
  const result = callback(data)
218
219
  if (result instanceof Promise) {
@@ -226,11 +227,10 @@ class EventBus {
226
227
 
227
228
  /**
228
229
  * Log event to persistent storage
229
- * @param {Object} eventData
230
230
  */
231
- async logEvent(eventData) {
231
+ async logEvent(eventData: EventData): Promise<void> {
232
232
  try {
233
- const globalPath = pathManager.getGlobalProjectPath(this.projectId)
233
+ const globalPath = pathManager.getGlobalProjectPath(this.projectId!)
234
234
  const eventsPath = path.join(globalPath, 'memory', 'events.jsonl')
235
235
 
236
236
  // Ensure directory exists
@@ -246,11 +246,8 @@ class EventBus {
246
246
 
247
247
  /**
248
248
  * Get recent events from history
249
- * @param {number} limit
250
- * @param {string} [type] - Optional filter by event type
251
- * @returns {Object[]}
252
249
  */
253
- getHistory(limit = 10, type = null) {
250
+ getHistory(limit: number = 10, type: string | null = null): EventData[] {
254
251
  let events = this.history
255
252
  if (type) {
256
253
  events = events.filter(e => e.type === type || e.type.startsWith(type))
@@ -261,26 +258,23 @@ class EventBus {
261
258
  /**
262
259
  * Clear all listeners
263
260
  */
264
- clear() {
261
+ clear(): void {
265
262
  this.listeners.clear()
266
263
  this.onceListeners.clear()
267
264
  }
268
265
 
269
266
  /**
270
267
  * Get count of listeners for an event
271
- * @param {string} event
272
- * @returns {number}
273
268
  */
274
- listenerCount(event) {
269
+ listenerCount(event: string): number {
275
270
  const listeners = this.listeners.get(event)
276
271
  return listeners ? listeners.size : 0
277
272
  }
278
273
 
279
274
  /**
280
275
  * Get all registered event types
281
- * @returns {string[]}
282
276
  */
283
- getRegisteredEvents() {
277
+ getRegisteredEvents(): string[] {
284
278
  return Array.from(this.listeners.keys())
285
279
  }
286
280
  }
@@ -290,33 +284,35 @@ const eventBus = new EventBus()
290
284
 
291
285
  // Convenience methods for common events
292
286
  const emit = {
293
- sessionStarted: (data) => eventBus.emit(EventTypes.SESSION_STARTED, data),
294
- sessionPaused: (data) => eventBus.emit(EventTypes.SESSION_PAUSED, data),
295
- sessionResumed: (data) => eventBus.emit(EventTypes.SESSION_RESUMED, data),
296
- sessionCompleted: (data) => eventBus.emit(EventTypes.SESSION_COMPLETED, data),
287
+ sessionStarted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SESSION_STARTED, data),
288
+ sessionPaused: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SESSION_PAUSED, data),
289
+ sessionResumed: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SESSION_RESUMED, data),
290
+ sessionCompleted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SESSION_COMPLETED, data),
297
291
 
298
- taskCreated: (data) => eventBus.emit(EventTypes.TASK_CREATED, data),
299
- taskCompleted: (data) => eventBus.emit(EventTypes.TASK_COMPLETED, data),
292
+ taskCreated: (data: Record<string, unknown>) => eventBus.emit(EventTypes.TASK_CREATED, data),
293
+ taskCompleted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.TASK_COMPLETED, data),
300
294
 
301
- featureAdded: (data) => eventBus.emit(EventTypes.FEATURE_ADDED, data),
302
- featureShipped: (data) => eventBus.emit(EventTypes.FEATURE_SHIPPED, data),
295
+ featureAdded: (data: Record<string, unknown>) => eventBus.emit(EventTypes.FEATURE_ADDED, data),
296
+ featureShipped: (data: Record<string, unknown>) => eventBus.emit(EventTypes.FEATURE_SHIPPED, data),
303
297
 
304
- ideaCaptured: (data) => eventBus.emit(EventTypes.IDEA_CAPTURED, data),
298
+ ideaCaptured: (data: Record<string, unknown>) => eventBus.emit(EventTypes.IDEA_CAPTURED, data),
305
299
 
306
- snapshotCreated: (data) => eventBus.emit(EventTypes.SNAPSHOT_CREATED, data),
307
- snapshotRestored: (data) => eventBus.emit(EventTypes.SNAPSHOT_RESTORED, data),
300
+ snapshotCreated: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SNAPSHOT_CREATED, data),
301
+ snapshotRestored: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SNAPSHOT_RESTORED, data),
308
302
 
309
- commitCreated: (data) => eventBus.emit(EventTypes.COMMIT_CREATED, data),
310
- pushCompleted: (data) => eventBus.emit(EventTypes.PUSH_COMPLETED, data),
303
+ commitCreated: (data: Record<string, unknown>) => eventBus.emit(EventTypes.COMMIT_CREATED, data),
304
+ pushCompleted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.PUSH_COMPLETED, data),
311
305
 
312
- projectInitialized: (data) => eventBus.emit(EventTypes.PROJECT_INITIALIZED, data),
313
- projectSynced: (data) => eventBus.emit(EventTypes.PROJECT_SYNCED, data),
314
- analysisCompleted: (data) => eventBus.emit(EventTypes.ANALYSIS_COMPLETED, data)
306
+ projectInitialized: (data: Record<string, unknown>) => eventBus.emit(EventTypes.PROJECT_INITIALIZED, data),
307
+ projectSynced: (data: Record<string, unknown>) => eventBus.emit(EventTypes.PROJECT_SYNCED, data),
308
+ analysisCompleted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.ANALYSIS_COMPLETED, data)
315
309
  }
316
310
 
317
- module.exports = {
311
+ export {
318
312
  EventBus,
319
313
  EventTypes,
320
314
  eventBus,
321
315
  emit
322
316
  }
317
+
318
+ export default { EventBus, EventTypes, eventBus, emit }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Category Definitions
3
+ */
4
+
5
+ import type { Categories } from './types'
6
+
7
+ export const CATEGORIES: Categories = {
8
+ core: {
9
+ title: 'Core Workflow',
10
+ description: '13 essential commands for daily development workflow',
11
+ order: 1,
12
+ },
13
+ optional: {
14
+ title: 'Optional Commands',
15
+ description: 'Advanced features for specialized workflows',
16
+ order: 2,
17
+ },
18
+ setup: {
19
+ title: 'Setup',
20
+ description: 'Installation and configuration (not for daily use)',
21
+ order: 3,
22
+ },
23
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Command Definitions
3
+ * All prjct commands combined from category modules.
4
+ */
5
+
6
+ import type { Command } from './types'
7
+ import { CORE_COMMANDS } from './core-commands'
8
+ import { OPTIONAL_COMMANDS } from './optional-commands'
9
+ import { SETUP_COMMANDS } from './setup-commands'
10
+
11
+ export const COMMANDS: Command[] = [
12
+ ...CORE_COMMANDS,
13
+ ...OPTIONAL_COMMANDS,
14
+ ...SETUP_COMMANDS,
15
+ ]
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Core Workflow Commands
3
+ * 14 essential commands for daily development workflow.
4
+ */
5
+
6
+ import type { Command } from './types'
7
+
8
+ export const CORE_COMMANDS: Command[] = [
9
+ {
10
+ name: 'init',
11
+ category: 'core',
12
+ description: 'Deep project analysis and initialization',
13
+ usage: {
14
+ claude: '/p:init "[idea]"',
15
+ terminal: 'prjct init "[idea]"',
16
+ },
17
+ params: '[idea]',
18
+ implemented: true,
19
+ hasTemplate: true,
20
+ requiresInit: false,
21
+ blockingRules: null,
22
+ features: [
23
+ 'Architect mode for blank projects',
24
+ 'Auto tech stack recommendation',
25
+ 'Project structure generation',
26
+ 'Initial roadmap creation',
27
+ 'Analyzes existing codebases',
28
+ ],
29
+ },
30
+
31
+ {
32
+ name: 'idea',
33
+ category: 'core',
34
+ description: 'Transform ideas into complete technical architectures',
35
+ usage: {
36
+ claude: '/p:idea "build a CRM with AI"',
37
+ terminal: 'prjct idea "build a CRM with AI"',
38
+ },
39
+ params: '<description>',
40
+ implemented: true,
41
+ hasTemplate: true,
42
+ requiresInit: true,
43
+ blockingRules: null,
44
+ features: [
45
+ 'Simple ideas -> Quick capture',
46
+ 'Complex ideas -> Full architecture',
47
+ 'Interactive discovery process',
48
+ 'Tech stack recommendation',
49
+ 'Complete roadmap generation',
50
+ 'Database schema design',
51
+ 'API specification',
52
+ ],
53
+ },
54
+
55
+ {
56
+ name: 'feature',
57
+ category: 'core',
58
+ description: 'Add feature with value analysis, roadmap, and task breakdown',
59
+ usage: {
60
+ claude: '/p:feature "add unit testing"',
61
+ terminal: 'prjct feature "add unit testing"',
62
+ },
63
+ params: '<description>',
64
+ implemented: true,
65
+ hasTemplate: true,
66
+ requiresInit: true,
67
+ blockingRules: null,
68
+ features: [
69
+ 'Value analysis (impact/effort/timing)',
70
+ 'Auto roadmap generation',
71
+ 'Task breakdown',
72
+ 'Auto-start first task',
73
+ 'Timing recommendations',
74
+ ],
75
+ },
76
+
77
+ {
78
+ name: 'spec',
79
+ category: 'core',
80
+ description: 'Create detailed specifications for complex features',
81
+ usage: {
82
+ claude: '/p:spec "Dark Mode"',
83
+ terminal: 'prjct spec "Dark Mode"',
84
+ },
85
+ params: '[feature]',
86
+ implemented: true,
87
+ hasTemplate: true,
88
+ requiresInit: true,
89
+ blockingRules: null,
90
+ features: [
91
+ 'Requirements documentation',
92
+ 'Design decisions tracking',
93
+ 'Tasks broken into 20-30min chunks',
94
+ 'User approval workflow',
95
+ 'Auto-add tasks to queue on approve',
96
+ 'Integrates with /p:feature',
97
+ ],
98
+ },
99
+
100
+ {
101
+ name: 'work',
102
+ category: 'core',
103
+ description: 'Show current or start new task',
104
+ usage: {
105
+ claude: '/p:work ["task"]',
106
+ terminal: 'prjct work ["task"]',
107
+ },
108
+ params: '[task]',
109
+ implemented: true,
110
+ hasTemplate: true,
111
+ requiresInit: true,
112
+ blockingRules: null,
113
+ features: [
114
+ 'No params -> Show current task',
115
+ 'With task -> Start new task',
116
+ 'Auto agent assignment',
117
+ 'Supports task numbers',
118
+ 'Replaces /p:now and /p:build',
119
+ ],
120
+ },
121
+
122
+ {
123
+ name: 'pause',
124
+ category: 'core',
125
+ description: 'Pause active task to handle interruption',
126
+ usage: {
127
+ claude: '/p:pause ["reason"]',
128
+ terminal: 'prjct pause ["reason"]',
129
+ },
130
+ params: '[reason]',
131
+ implemented: true,
132
+ hasTemplate: true,
133
+ requiresInit: true,
134
+ blockingRules: {
135
+ check: 'Active task exists',
136
+ message: 'No active task to pause',
137
+ },
138
+ features: [
139
+ 'Preserves task context',
140
+ 'Optional pause reason',
141
+ 'Tracks paused duration',
142
+ 'Allows multiple paused tasks',
143
+ ],
144
+ },
145
+
146
+ {
147
+ name: 'resume',
148
+ category: 'core',
149
+ description: 'Resume most recently paused task',
150
+ usage: {
151
+ claude: '/p:resume [task_id]',
152
+ terminal: 'prjct resume [task_id]',
153
+ },
154
+ params: '[task_id]',
155
+ implemented: true,
156
+ hasTemplate: true,
157
+ requiresInit: true,
158
+ blockingRules: {
159
+ check: 'Paused tasks exist',
160
+ message: 'No paused tasks to resume',
161
+ },
162
+ features: [
163
+ 'Resume last paused',
164
+ 'Resume specific task',
165
+ 'Resume by number',
166
+ 'Calculates active time',
167
+ ],
168
+ },
169
+
170
+ {
171
+ name: 'next',
172
+ category: 'core',
173
+ description: 'Show top 5 non-blocking priority tasks',
174
+ usage: {
175
+ claude: '/p:next',
176
+ terminal: 'prjct next',
177
+ },
178
+ params: null,
179
+ implemented: true,
180
+ hasTemplate: true,
181
+ requiresInit: true,
182
+ blockingRules: {
183
+ check: 'filters blocked tasks',
184
+ message: 'Shows warning if now.md is active',
185
+ },
186
+ features: [
187
+ 'Filters out blocked tasks',
188
+ 'Shows top 5 by priority',
189
+ 'Numbered 1-5 for quick selection',
190
+ 'Warns if active task exists',
191
+ ],
192
+ },
193
+
194
+ {
195
+ name: 'done',
196
+ category: 'core',
197
+ description: 'Mark current task as complete',
198
+ usage: {
199
+ claude: '/p:done',
200
+ terminal: 'prjct done',
201
+ },
202
+ params: null,
203
+ implemented: true,
204
+ hasTemplate: true,
205
+ requiresInit: true,
206
+ blockingRules: {
207
+ check: 'now.md must have content',
208
+ message: 'No active task to complete',
209
+ },
210
+ },
211
+
212
+ {
213
+ name: 'ship',
214
+ category: 'core',
215
+ description: 'Commit, push, and celebrate shipped feature',
216
+ usage: {
217
+ claude: '/p:ship "user authentication"',
218
+ terminal: 'prjct ship "user authentication"',
219
+ },
220
+ params: '<feature>',
221
+ implemented: true,
222
+ hasTemplate: true,
223
+ requiresInit: true,
224
+ blockingRules: null,
225
+ features: [
226
+ 'Lint checks (non-blocking)',
227
+ 'Run tests (non-blocking)',
228
+ 'Update docs',
229
+ 'Update version',
230
+ 'Update CHANGELOG',
231
+ 'Git commit + push',
232
+ 'Recommend compact',
233
+ ],
234
+ },
235
+
236
+ {
237
+ name: 'bug',
238
+ category: 'core',
239
+ description: 'Report and track bugs with priority',
240
+ usage: {
241
+ claude: '/p:bug "login button not working"',
242
+ terminal: 'prjct bug "login button not working"',
243
+ },
244
+ params: '<description>',
245
+ implemented: true,
246
+ hasTemplate: true,
247
+ requiresInit: true,
248
+ blockingRules: null,
249
+ features: [
250
+ 'Auto-detect severity (critical/high/medium/low)',
251
+ 'Priority placement in next.md',
252
+ 'Bug tracking in memory',
253
+ 'Quick bug resolution workflow',
254
+ ],
255
+ },
256
+
257
+ {
258
+ name: 'dash',
259
+ category: 'core',
260
+ description: 'Unified dashboard - status, progress, and roadmap',
261
+ usage: {
262
+ claude: '/p:dash [view]',
263
+ terminal: 'prjct dash [view]',
264
+ },
265
+ params: '[week|month|roadmap|compact]',
266
+ implemented: true,
267
+ hasTemplate: true,
268
+ requiresInit: true,
269
+ blockingRules: null,
270
+ features: [
271
+ 'Project overview',
272
+ 'Weekly/monthly progress',
273
+ 'Roadmap view',
274
+ 'ASCII graphics',
275
+ 'Replaces 4 commands',
276
+ ],
277
+ },
278
+
279
+ {
280
+ name: 'help',
281
+ category: 'core',
282
+ description: 'Contextual help and guidance',
283
+ usage: {
284
+ claude: '/p:help [topic]',
285
+ terminal: 'prjct help [topic]',
286
+ },
287
+ params: '[topic]',
288
+ implemented: true,
289
+ hasTemplate: true,
290
+ requiresInit: false,
291
+ blockingRules: null,
292
+ features: [
293
+ 'Context-aware suggestions',
294
+ 'Intent to action translator',
295
+ 'Problem solving guidance',
296
+ 'Absorbs ask/suggest/stuck',
297
+ ],
298
+ },
299
+
300
+ {
301
+ name: 'sync',
302
+ category: 'core',
303
+ description: 'Sync project state and update workflow agents',
304
+ usage: {
305
+ claude: '/p:sync',
306
+ terminal: 'prjct sync',
307
+ },
308
+ params: null,
309
+ implemented: true,
310
+ hasTemplate: true,
311
+ requiresInit: true,
312
+ blockingRules: null,
313
+ features: [
314
+ 'Syncs project state',
315
+ 'Updates dynamic agents',
316
+ 'Refreshes context',
317
+ ],
318
+ },
319
+ ]