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
@@ -1,7 +1,7 @@
1
- const path = require('path')
2
- const dateHelper = require('./date-helper')
3
- const jsonlHelper = require('./jsonl-helper')
4
- const fileHelper = require('./file-helper')
1
+ import path from 'path'
2
+ import * as dateHelper from './date-helper'
3
+ import * as jsonlHelper from './jsonl-helper'
4
+ import * as fileHelper from './file-helper'
5
5
 
6
6
  /**
7
7
  * Session Helper - High-level session operations
@@ -11,19 +11,37 @@ const fileHelper = require('./file-helper')
11
11
  * - jsonl-helper (JSONL parsing)
12
12
  * - file-helper (file operations)
13
13
  * - path-manager (path construction)
14
- *
15
- * @module session-helper
16
14
  */
17
15
 
16
+ interface SessionEntry {
17
+ ts?: string
18
+ timestamp?: string
19
+ type?: string
20
+ [key: string]: unknown
21
+ }
22
+
23
+ interface SessionStats {
24
+ totalEntries: number
25
+ byType: Record<string, number>
26
+ byDate: Record<string, number>
27
+ activeDays: number
28
+ averagePerDay: number
29
+ }
30
+
31
+ interface ArchiveResult {
32
+ archived: number
33
+ files: string[]
34
+ errors: Array<{ filename: string; error: string }>
35
+ }
36
+
18
37
  /**
19
38
  * Build session file path for today
20
- *
21
- * @param {string} projectGlobalPath - Global project path
22
- * @param {string} layer - Layer (planning/progress/memory)
23
- * @param {string} filename - Filename (e.g., '2025-10-04.jsonl')
24
- * @returns {string} - Full path to session file
25
39
  */
26
- function getTodaySessionFilePath(projectGlobalPath, layer, filename = null) {
40
+ export function getTodaySessionFilePath(
41
+ projectGlobalPath: string,
42
+ layer: string,
43
+ filename: string | null = null
44
+ ): string {
27
45
  const today = dateHelper.getTodayKey()
28
46
  const yearMonth = dateHelper.formatMonth(new Date())
29
47
  const [year, month] = yearMonth.split('-')
@@ -39,12 +57,11 @@ function getTodaySessionFilePath(projectGlobalPath, layer, filename = null) {
39
57
 
40
58
  /**
41
59
  * Ensure today's session directory exists
42
- *
43
- * @param {string} projectGlobalPath - Global project path
44
- * @param {string} layer - Layer (planning/progress/memory)
45
- * @returns {Promise<string>} - Path to session directory
46
60
  */
47
- async function ensureTodaySessionDir(projectGlobalPath, layer) {
61
+ export async function ensureTodaySessionDir(
62
+ projectGlobalPath: string,
63
+ layer: string
64
+ ): Promise<string> {
48
65
  const yearMonth = dateHelper.formatMonth(new Date())
49
66
  const [year, month] = yearMonth.split('-')
50
67
 
@@ -56,14 +73,13 @@ async function ensureTodaySessionDir(projectGlobalPath, layer) {
56
73
 
57
74
  /**
58
75
  * Write log entry to today's session
59
- *
60
- * @param {string} projectGlobalPath - Global project path
61
- * @param {string} layer - Layer (planning/progress/memory)
62
- * @param {Object} entry - Log entry to write
63
- * @param {string} filename - Optional custom filename (defaults to YYYY-MM-DD.jsonl)
64
- * @returns {Promise<void>}
65
76
  */
66
- async function writeToSession(projectGlobalPath, layer, entry, filename = null) {
77
+ export async function writeToSession(
78
+ projectGlobalPath: string,
79
+ layer: string,
80
+ entry: SessionEntry,
81
+ filename: string | null = null
82
+ ): Promise<void> {
67
83
  await ensureTodaySessionDir(projectGlobalPath, layer)
68
84
 
69
85
  const filePath = getTodaySessionFilePath(projectGlobalPath, layer, filename)
@@ -78,31 +94,29 @@ async function writeToSession(projectGlobalPath, layer, entry, filename = null)
78
94
 
79
95
  /**
80
96
  * Read today's session logs
81
- *
82
- * @param {string} projectGlobalPath - Global project path
83
- * @param {string} layer - Layer (planning/progress/memory)
84
- * @param {string} filename - Optional custom filename
85
- * @returns {Promise<Array<Object>>} - Array of log entries
86
97
  */
87
- async function readTodaySession(projectGlobalPath, layer, filename = null) {
98
+ export async function readTodaySession<T = SessionEntry>(
99
+ projectGlobalPath: string,
100
+ layer: string,
101
+ filename: string | null = null
102
+ ): Promise<T[]> {
88
103
  const filePath = getTodaySessionFilePath(projectGlobalPath, layer, filename)
89
- return await jsonlHelper.readJsonLines(filePath)
104
+ return await jsonlHelper.readJsonLines<T>(filePath)
90
105
  }
91
106
 
92
107
  /**
93
108
  * Read session logs for a date range
94
- *
95
- * @param {string} projectGlobalPath - Global project path
96
- * @param {string} layer - Layer (planning/progress/memory)
97
- * @param {number} daysBack - Number of days to look back
98
- * @returns {Promise<Array<Object>>} - Array of all log entries
99
109
  */
100
- async function readRecentSessions(projectGlobalPath, layer, daysBack = 7) {
110
+ export async function readRecentSessions<T = SessionEntry>(
111
+ projectGlobalPath: string,
112
+ layer: string,
113
+ daysBack = 7
114
+ ): Promise<T[]> {
101
115
  const fromDate = dateHelper.getDaysAgo(daysBack)
102
116
  const toDate = new Date()
103
117
 
104
118
  const dates = dateHelper.getDateRange(fromDate, toDate)
105
- const allEntries = []
119
+ const allEntries: T[] = []
106
120
 
107
121
  for (const date of dates) {
108
122
  const yearMonth = dateHelper.formatMonth(date)
@@ -118,7 +132,7 @@ async function readRecentSessions(projectGlobalPath, layer, daysBack = 7) {
118
132
  `${dateKey}.jsonl`
119
133
  )
120
134
 
121
- const entries = await jsonlHelper.readJsonLines(filePath)
135
+ const entries = await jsonlHelper.readJsonLines<T>(filePath)
122
136
  allEntries.push(...entries)
123
137
  }
124
138
 
@@ -127,24 +141,23 @@ async function readRecentSessions(projectGlobalPath, layer, daysBack = 7) {
127
141
 
128
142
  /**
129
143
  * Get session statistics for a layer
130
- *
131
- * @param {string} projectGlobalPath - Global project path
132
- * @param {string} layer - Layer (planning/progress/memory)
133
- * @param {number} daysBack - Number of days to analyze
134
- * @returns {Promise<Object>} - Statistics object
135
144
  */
136
- async function getSessionStats(projectGlobalPath, layer, daysBack = 30) {
137
- const entries = await readRecentSessions(projectGlobalPath, layer, daysBack)
145
+ export async function getSessionStats(
146
+ projectGlobalPath: string,
147
+ layer: string,
148
+ daysBack = 30
149
+ ): Promise<SessionStats> {
150
+ const entries = await readRecentSessions<SessionEntry>(projectGlobalPath, layer, daysBack)
138
151
 
139
152
  // Group by type
140
- const byType = {}
153
+ const byType: Record<string, number> = {}
141
154
  for (const entry of entries) {
142
155
  const type = entry.type || 'unknown'
143
156
  byType[type] = (byType[type] || 0) + 1
144
157
  }
145
158
 
146
159
  // Group by date
147
- const byDate = {}
160
+ const byDate: Record<string, number> = {}
148
161
  for (const entry of entries) {
149
162
  const timestamp = entry.ts || entry.timestamp
150
163
  if (timestamp) {
@@ -164,13 +177,12 @@ async function getSessionStats(projectGlobalPath, layer, daysBack = 30) {
164
177
 
165
178
  /**
166
179
  * Archive old session data (move sessions older than N days)
167
- *
168
- * @param {string} projectGlobalPath - Global project path
169
- * @param {string} layer - Layer (planning/progress/memory)
170
- * @param {number} daysToKeep - Keep sessions newer than this (default: 30)
171
- * @returns {Promise<Object>} - Archive result
172
180
  */
173
- async function archiveOldSessions(projectGlobalPath, layer, daysToKeep = 30) {
181
+ export async function archiveOldSessions(
182
+ projectGlobalPath: string,
183
+ layer: string,
184
+ daysToKeep = 30
185
+ ): Promise<ArchiveResult> {
174
186
  const cutoffDate = dateHelper.getDaysAgo(daysToKeep)
175
187
  const archiveDir = path.join(projectGlobalPath, layer, 'archive')
176
188
  await fileHelper.ensureDir(archiveDir)
@@ -178,8 +190,8 @@ async function archiveOldSessions(projectGlobalPath, layer, daysToKeep = 30) {
178
190
  const sessionsDir = path.join(projectGlobalPath, layer, 'sessions')
179
191
 
180
192
  // Find all session files older than cutoff
181
- const archived = []
182
- const errors = []
193
+ const archived: string[] = []
194
+ const errors: Array<{ filename: string; error: string }> = []
183
195
 
184
196
  try {
185
197
  const years = await fileHelper.listFiles(sessionsDir, { dirsOnly: true })
@@ -206,13 +218,13 @@ async function archiveOldSessions(projectGlobalPath, layer, daysToKeep = 30) {
206
218
  await fileHelper.moveFile(sourcePath, destPath)
207
219
  archived.push(filename)
208
220
  } catch (error) {
209
- errors.push({ filename, error: error.message })
221
+ errors.push({ filename, error: (error as Error).message })
210
222
  }
211
223
  }
212
224
  }
213
225
  }
214
226
  }
215
- } catch (error) {
227
+ } catch {
216
228
  // Sessions directory might not exist yet
217
229
  }
218
230
 
@@ -225,12 +237,11 @@ async function archiveOldSessions(projectGlobalPath, layer, daysToKeep = 30) {
225
237
 
226
238
  /**
227
239
  * Clean empty session directories
228
- *
229
- * @param {string} projectGlobalPath - Global project path
230
- * @param {string} layer - Layer (planning/progress/memory)
231
- * @returns {Promise<number>} - Number of directories removed
232
240
  */
233
- async function cleanEmptySessionDirs(projectGlobalPath, layer) {
241
+ export async function cleanEmptySessionDirs(
242
+ projectGlobalPath: string,
243
+ layer: string
244
+ ): Promise<number> {
234
245
  const sessionsDir = path.join(projectGlobalPath, layer, 'sessions')
235
246
  let cleaned = 0
236
247
 
@@ -258,14 +269,15 @@ async function cleanEmptySessionDirs(projectGlobalPath, layer) {
258
269
  cleaned++
259
270
  }
260
271
  }
261
- } catch (error) {
272
+ } catch {
262
273
  // Sessions directory might not exist
263
274
  }
264
275
 
265
276
  return cleaned
266
277
  }
267
278
 
268
- module.exports = {
279
+ // Default export for CommonJS compatibility
280
+ export default {
269
281
  getTodaySessionFilePath,
270
282
  ensureTodaySessionDir,
271
283
  writeToSession,
@@ -273,5 +285,6 @@ module.exports = {
273
285
  readRecentSessions,
274
286
  getSessionStats,
275
287
  archiveOldSessions,
276
- cleanEmptySessionDirs,
288
+ cleanEmptySessionDirs
277
289
  }
290
+
@@ -1,46 +1,47 @@
1
- const fs = require('fs')
2
- const path = require('path')
1
+ import fs from 'fs'
2
+ import path from 'path'
3
3
 
4
4
  /**
5
5
  * Version Manager - Single source of truth for application version
6
6
  *
7
7
  * Reads version from package.json dynamically to ensure consistency
8
8
  * across the entire application.
9
- *
10
- * @module version
11
9
  */
12
10
 
13
- let cachedVersion = null
14
- let cachedPackageJson = null
11
+ interface PackageJson {
12
+ version: string
13
+ name?: string
14
+ description?: string
15
+ [key: string]: unknown
16
+ }
17
+
18
+ let cachedVersion: string | null = null
19
+ let cachedPackageJson: PackageJson | null = null
15
20
 
16
21
  /**
17
22
  * Get the current application version from package.json
18
- *
19
- * @returns {string} - Semantic version string (e.g., "0.2.1")
20
23
  */
21
- function getVersion() {
24
+ export function getVersion(): string {
22
25
  if (cachedVersion) {
23
26
  return cachedVersion
24
27
  }
25
28
 
26
29
  try {
27
30
  const packageJsonPath = path.join(__dirname, '..', '..', 'package.json')
28
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))
31
+ const packageJson: PackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))
29
32
  cachedVersion = packageJson.version
30
33
  cachedPackageJson = packageJson
31
34
  return cachedVersion
32
35
  } catch (error) {
33
- console.error('Failed to read version from package.json:', error.message)
36
+ console.error('Failed to read version from package.json:', (error as Error).message)
34
37
  return '0.0.0'
35
38
  }
36
39
  }
37
40
 
38
41
  /**
39
42
  * Get the full package.json object
40
- *
41
- * @returns {Object} - Package.json contents
42
43
  */
43
- function getPackageInfo() {
44
+ export function getPackageInfo(): PackageJson | null {
44
45
  if (!cachedPackageJson) {
45
46
  getVersion()
46
47
  }
@@ -49,12 +50,9 @@ function getPackageInfo() {
49
50
 
50
51
  /**
51
52
  * Compare two semantic version strings
52
- *
53
- * @param {string} v1 - First version (e.g., "0.2.1")
54
- * @param {string} v2 - Second version (e.g., "0.2.0")
55
- * @returns {number} - Returns -1 if v1 < v2, 0 if equal, 1 if v1 > v2
53
+ * @returns -1 if v1 < v2, 0 if equal, 1 if v1 > v2
56
54
  */
57
- function compareVersions(v1, v2) {
55
+ export function compareVersions(v1: string, v2: string): number {
58
56
  const parts1 = v1.split('.').map(Number)
59
57
  const parts2 = v2.split('.').map(Number)
60
58
 
@@ -71,11 +69,8 @@ function compareVersions(v1, v2) {
71
69
 
72
70
  /**
73
71
  * Check if a config version is compatible with current version
74
- *
75
- * @param {string} configVersion - Version from config file
76
- * @returns {boolean} - True if compatible
77
72
  */
78
- function isCompatible(configVersion) {
73
+ export function isCompatible(configVersion: string): boolean {
79
74
  const current = getVersion()
80
75
  const [currentMajor, currentMinor] = current.split('.').map(Number)
81
76
  const [configMajor, configMinor] = configVersion.split('.').map(Number)
@@ -85,23 +80,20 @@ function isCompatible(configVersion) {
85
80
 
86
81
  /**
87
82
  * Check if migration is needed based on version comparison
88
- *
89
- * @param {string} fromVersion - Current config version
90
- * @param {string} toVersion - Target version (defaults to current)
91
- * @returns {boolean} - True if migration needed
92
83
  */
93
- function needsMigration(fromVersion, toVersion = null) {
84
+ export function needsMigration(fromVersion: string, toVersion: string | null = null): boolean {
94
85
  const target = toVersion || getVersion()
95
86
  return compareVersions(fromVersion, target) < 0
96
87
  }
97
88
 
98
- const VERSION = getVersion()
89
+ export const VERSION = getVersion()
99
90
 
100
- module.exports = {
101
- VERSION,
91
+ // Default export for CommonJS compatibility
92
+ export default {
102
93
  getVersion,
103
94
  getPackageInfo,
104
95
  compareVersions,
105
96
  isCompatible,
106
97
  needsMigration,
98
+ VERSION
107
99
  }