prjct-cli 0.11.5 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/README.md +81 -25
- package/bin/dev.js +1 -1
- package/bin/generate-views.js +209 -0
- package/bin/migrate-to-json.js +742 -0
- package/bin/prjct +5 -5
- package/bin/serve.js +226 -50
- package/core/__tests__/agentic/{memory-system.test.js → memory-system.test.ts} +12 -23
- package/core/__tests__/agentic/{plan-mode.test.js → plan-mode.test.ts} +26 -24
- package/core/__tests__/agentic/{prompt-builder.test.js → prompt-builder.test.ts} +3 -8
- package/core/__tests__/utils/{date-helper.test.js → date-helper.test.ts} +19 -30
- package/core/__tests__/utils/{output.test.js → output.test.ts} +12 -24
- package/core/agentic/agent-router.ts +137 -0
- package/core/agentic/chain-of-thought.ts +228 -0
- package/core/agentic/command-executor/command-executor.ts +384 -0
- package/core/agentic/command-executor/index.ts +16 -0
- package/core/agentic/command-executor/status-signal.ts +38 -0
- package/core/agentic/command-executor/types.ts +79 -0
- package/core/agentic/command-executor.ts +8 -0
- package/core/agentic/{context-builder.js → context-builder.ts} +92 -81
- package/core/agentic/context-filter.ts +365 -0
- package/core/agentic/ground-truth/index.ts +76 -0
- package/core/agentic/ground-truth/types.ts +33 -0
- package/core/agentic/ground-truth/utils.ts +48 -0
- package/core/agentic/ground-truth/verifiers/analyze.ts +54 -0
- package/core/agentic/ground-truth/verifiers/done.ts +75 -0
- package/core/agentic/ground-truth/verifiers/feature.ts +70 -0
- package/core/agentic/ground-truth/verifiers/index.ts +37 -0
- package/core/agentic/ground-truth/verifiers/init.ts +52 -0
- package/core/agentic/ground-truth/verifiers/now.ts +57 -0
- package/core/agentic/ground-truth/verifiers/ship.ts +85 -0
- package/core/agentic/ground-truth/verifiers/spec.ts +45 -0
- package/core/agentic/ground-truth/verifiers/sync.ts +47 -0
- package/core/agentic/ground-truth/verifiers.ts +6 -0
- package/core/agentic/ground-truth.ts +8 -0
- package/core/agentic/loop-detector/error-analysis.ts +97 -0
- package/core/agentic/loop-detector/hallucination.ts +71 -0
- package/core/agentic/loop-detector/index.ts +41 -0
- package/core/agentic/loop-detector/loop-detector.ts +222 -0
- package/core/agentic/loop-detector/types.ts +66 -0
- package/core/agentic/loop-detector.ts +8 -0
- package/core/agentic/memory-system/history.ts +53 -0
- package/core/agentic/memory-system/index.ts +192 -0
- package/core/agentic/memory-system/patterns.ts +156 -0
- package/core/agentic/memory-system/semantic-memories.ts +277 -0
- package/core/agentic/memory-system/session.ts +21 -0
- package/core/agentic/memory-system/types.ts +159 -0
- package/core/agentic/memory-system.ts +8 -0
- package/core/agentic/parallel-tools.ts +165 -0
- package/core/agentic/plan-mode/approval.ts +57 -0
- package/core/agentic/plan-mode/constants.ts +44 -0
- package/core/agentic/plan-mode/index.ts +28 -0
- package/core/agentic/plan-mode/plan-mode.ts +406 -0
- package/core/agentic/plan-mode/types.ts +193 -0
- package/core/agentic/plan-mode.ts +8 -0
- package/core/agentic/prompt-builder.ts +566 -0
- package/core/agentic/response-templates.ts +164 -0
- package/core/agentic/semantic-compression.ts +273 -0
- package/core/agentic/services.ts +206 -0
- package/core/agentic/smart-context.ts +476 -0
- package/core/agentic/{template-loader.js → template-loader.ts} +27 -16
- package/core/agentic/think-blocks.ts +202 -0
- package/core/agentic/tool-registry.ts +119 -0
- package/core/agentic/validation-rules.ts +313 -0
- package/core/agents/index.ts +28 -0
- package/core/agents/performance.ts +444 -0
- package/core/agents/types.ts +126 -0
- package/core/bus/{index.js → index.ts} +57 -61
- package/core/command-registry/categories.ts +23 -0
- package/core/command-registry/commands.ts +15 -0
- package/core/command-registry/core-commands.ts +319 -0
- package/core/command-registry/index.ts +158 -0
- package/core/command-registry/optional-commands.ts +119 -0
- package/core/command-registry/setup-commands.ts +53 -0
- package/core/command-registry/types.ts +59 -0
- package/core/command-registry.ts +9 -0
- package/core/commands/analysis.ts +298 -0
- package/core/commands/analytics.ts +288 -0
- package/core/commands/base.ts +273 -0
- package/core/commands/index.ts +211 -0
- package/core/commands/maintenance.ts +226 -0
- package/core/commands/planning.ts +311 -0
- package/core/commands/setup.ts +309 -0
- package/core/commands/shipping.ts +188 -0
- package/core/commands/types.ts +183 -0
- package/core/commands/workflow.ts +226 -0
- package/core/commands.ts +11 -0
- package/core/constants/formats.ts +187 -0
- package/core/constants/index.ts +7 -0
- package/core/{context-sync.js → context-sync.ts} +59 -26
- package/core/data/agents-manager.ts +76 -0
- package/core/data/analysis-manager.ts +83 -0
- package/core/data/base-manager.ts +156 -0
- package/core/data/ideas-manager.ts +81 -0
- package/core/data/index.ts +32 -0
- package/core/data/outcomes-manager.ts +96 -0
- package/core/data/project-manager.ts +75 -0
- package/core/data/roadmap-manager.ts +118 -0
- package/core/data/shipped-manager.ts +65 -0
- package/core/data/state-manager.ts +214 -0
- package/core/domain/{agent-generator.js → agent-generator.ts} +77 -57
- package/core/domain/{agent-loader.js → agent-loader.ts} +65 -56
- package/core/domain/{agent-matcher.js → agent-matcher.ts} +51 -24
- package/core/domain/{agent-validator.js → agent-validator.ts} +70 -37
- package/core/domain/{analyzer.js → analyzer.ts} +91 -85
- package/core/domain/{architect-session.js → architect-session.ts} +49 -34
- package/core/domain/{architecture-generator.js → architecture-generator.ts} +25 -13
- package/core/domain/{context-estimator.js → context-estimator.ts} +57 -36
- package/core/domain/{product-standards.js → product-standards.ts} +40 -26
- package/core/domain/{smart-cache.js → smart-cache.ts} +39 -30
- package/core/domain/{snapshot-manager.js → snapshot-manager.ts} +103 -100
- package/core/domain/{task-analyzer.js → task-analyzer.ts} +82 -43
- package/core/domain/task-stack/index.ts +19 -0
- package/core/domain/task-stack/parser.ts +86 -0
- package/core/domain/task-stack/storage.ts +123 -0
- package/core/domain/task-stack/task-stack.ts +340 -0
- package/core/domain/task-stack/types.ts +51 -0
- package/core/domain/task-stack.ts +8 -0
- package/core/{index.js → index.ts} +61 -18
- package/core/infrastructure/{agent-detector.js → agent-detector.ts} +55 -19
- package/core/infrastructure/agents/{claude-agent.js → claude-agent.ts} +61 -21
- package/core/infrastructure/{author-detector.js → author-detector.ts} +42 -49
- package/core/infrastructure/{capability-installer.js → capability-installer.ts} +51 -27
- package/core/infrastructure/{command-installer.js → command-installer/command-installer.ts} +43 -144
- package/core/infrastructure/command-installer/global-config.ts +106 -0
- package/core/infrastructure/command-installer/index.ts +25 -0
- package/core/infrastructure/command-installer/types.ts +41 -0
- package/core/infrastructure/command-installer.ts +8 -0
- package/core/infrastructure/{config-manager.js → config-manager.ts} +60 -80
- package/core/infrastructure/{editors-config.js → editors-config.ts} +33 -31
- package/core/infrastructure/legacy-installer-detector/cleanup.ts +216 -0
- package/core/infrastructure/legacy-installer-detector/detection.ts +95 -0
- package/core/infrastructure/legacy-installer-detector/index.ts +171 -0
- package/core/infrastructure/legacy-installer-detector/migration.ts +87 -0
- package/core/infrastructure/legacy-installer-detector/types.ts +42 -0
- package/core/infrastructure/legacy-installer-detector.ts +7 -0
- package/core/infrastructure/migrator/file-operations.ts +125 -0
- package/core/infrastructure/migrator/index.ts +288 -0
- package/core/infrastructure/migrator/project-scanner.ts +89 -0
- package/core/infrastructure/migrator/reports.ts +117 -0
- package/core/infrastructure/migrator/types.ts +124 -0
- package/core/infrastructure/migrator/validation.ts +94 -0
- package/core/infrastructure/migrator/version-migration.ts +117 -0
- package/core/infrastructure/migrator.ts +10 -0
- package/core/infrastructure/{path-manager.js → path-manager.ts} +51 -91
- package/core/infrastructure/session-manager/index.ts +23 -0
- package/core/infrastructure/session-manager/migration.ts +88 -0
- package/core/infrastructure/session-manager/session-manager.ts +307 -0
- package/core/infrastructure/session-manager/types.ts +45 -0
- package/core/infrastructure/session-manager.ts +8 -0
- package/core/infrastructure/{setup.js → setup.ts} +29 -21
- package/core/infrastructure/{update-checker.js → update-checker.ts} +40 -18
- package/core/outcomes/analyzer.ts +333 -0
- package/core/outcomes/index.ts +34 -0
- package/core/outcomes/recorder.ts +194 -0
- package/core/outcomes/types.ts +145 -0
- package/core/plugin/{hooks.js → hooks.ts} +56 -58
- package/core/plugin/{index.js → index.ts} +19 -8
- package/core/plugin/{loader.js → loader.ts} +87 -69
- package/core/plugin/{registry.js → registry.ts} +49 -45
- package/core/plugins/{webhook.js → webhook.ts} +43 -27
- package/core/schemas/agents.ts +27 -0
- package/core/schemas/analysis.ts +41 -0
- package/core/schemas/ideas.ts +83 -0
- package/core/schemas/index.ts +73 -0
- package/core/schemas/outcomes.ts +22 -0
- package/core/schemas/project.ts +26 -0
- package/core/schemas/roadmap.ts +90 -0
- package/core/schemas/shipped.ts +82 -0
- package/core/schemas/state.ts +107 -0
- package/core/session/index.ts +17 -0
- package/core/session/{metrics.js → metrics.ts} +64 -46
- package/core/session/{index.js → session-manager.ts} +51 -117
- package/core/session/types.ts +29 -0
- package/core/session/utils.ts +57 -0
- package/core/state/index.ts +25 -0
- package/core/state/manager.ts +376 -0
- package/core/state/types.ts +185 -0
- package/core/tsconfig.json +22 -0
- package/core/types/index.ts +506 -0
- package/core/utils/{animations.js → animations.ts} +74 -28
- package/core/utils/{branding.js → branding.ts} +29 -4
- package/core/utils/{date-helper.js → date-helper.ts} +31 -74
- package/core/utils/file-helper.ts +262 -0
- package/core/utils/{jsonl-helper.js → jsonl-helper.ts} +71 -107
- package/core/utils/{logger.js → logger.ts} +24 -12
- package/core/utils/{output.js → output.ts} +25 -13
- package/core/utils/{project-capabilities.js → project-capabilities.ts} +31 -18
- package/core/utils/{session-helper.js → session-helper.ts} +79 -66
- package/core/utils/{version.js → version.ts} +23 -31
- package/core/view-generator.ts +536 -0
- package/package.json +23 -17
- package/packages/shared/.turbo/turbo-build.log +14 -0
- package/packages/shared/dist/index.d.ts +8 -613
- package/packages/shared/dist/index.d.ts.map +1 -0
- package/packages/shared/dist/index.js +4110 -118
- package/packages/shared/dist/schemas.d.ts +408 -0
- package/packages/shared/dist/schemas.d.ts.map +1 -0
- package/packages/shared/dist/types.d.ts +144 -0
- package/packages/shared/dist/types.d.ts.map +1 -0
- package/packages/shared/dist/unified.d.ts +139 -0
- package/packages/shared/dist/unified.d.ts.map +1 -0
- package/packages/shared/dist/utils.d.ts +60 -0
- package/packages/shared/dist/utils.d.ts.map +1 -0
- package/packages/shared/package.json +4 -4
- package/packages/shared/src/index.ts +1 -0
- package/packages/shared/src/unified.ts +174 -0
- package/packages/web/app/api/claude/sessions/route.ts +1 -1
- package/packages/web/app/api/claude/status/route.ts +1 -1
- package/packages/web/app/api/migrate/route.ts +46 -0
- package/packages/web/app/api/projects/[id]/route.ts +1 -1
- package/packages/web/app/api/projects/[id]/stats/route.ts +30 -2
- package/packages/web/app/api/projects/[id]/status/route.ts +1 -1
- package/packages/web/app/api/projects/route.ts +1 -1
- package/packages/web/app/api/settings/route.ts +97 -0
- package/packages/web/app/api/v2/projects/[id]/unified/route.ts +57 -0
- package/packages/web/app/globals.css +38 -0
- package/packages/web/app/layout.tsx +10 -2
- package/packages/web/app/page.tsx +9 -224
- package/packages/web/app/project/[id]/page.tsx +191 -63
- package/packages/web/app/project/[id]/stats/loading.tsx +43 -0
- package/packages/web/app/project/[id]/stats/page.tsx +204 -163
- package/packages/web/app/settings/page.tsx +222 -2
- package/packages/web/components/ActivityTimeline/ActivityTimeline.constants.ts +2 -0
- package/packages/web/components/ActivityTimeline/ActivityTimeline.tsx +50 -0
- package/packages/web/components/ActivityTimeline/ActivityTimeline.types.ts +8 -0
- package/packages/web/components/ActivityTimeline/hooks/index.ts +2 -0
- package/packages/web/components/ActivityTimeline/hooks/useExpandable.ts +9 -0
- package/packages/web/components/ActivityTimeline/hooks/useGroupedEvents.ts +23 -0
- package/packages/web/components/ActivityTimeline/index.ts +2 -0
- package/packages/web/components/AgentsCard/AgentsCard.tsx +63 -0
- package/packages/web/components/AgentsCard/AgentsCard.types.ts +13 -0
- package/packages/web/components/AgentsCard/index.ts +2 -0
- package/packages/web/components/AppSidebar/AppSidebar.tsx +190 -0
- package/packages/web/components/AppSidebar/index.ts +1 -0
- package/packages/web/components/BackLink/BackLink.tsx +18 -0
- package/packages/web/components/BackLink/BackLink.types.ts +5 -0
- package/packages/web/components/BackLink/index.ts +2 -0
- package/packages/web/components/BentoCard/BentoCard.constants.ts +16 -0
- package/packages/web/components/BentoCard/BentoCard.tsx +47 -0
- package/packages/web/components/BentoCard/BentoCard.types.ts +15 -0
- package/packages/web/components/BentoCard/index.ts +2 -0
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.constants.ts +9 -0
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.tsx +18 -0
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.types.ts +5 -0
- package/packages/web/components/BentoCardSkeleton/index.ts +2 -0
- package/packages/web/components/{stats → BentoGrid}/BentoGrid.tsx +4 -8
- package/packages/web/components/BentoGrid/BentoGrid.types.ts +4 -0
- package/packages/web/components/BentoGrid/index.ts +2 -0
- package/packages/web/components/CommandButton/index.ts +1 -0
- package/packages/web/components/ConnectionStatus/index.ts +1 -0
- package/packages/web/components/DashboardContent/DashboardContent.tsx +254 -0
- package/packages/web/components/DashboardContent/index.ts +1 -0
- package/packages/web/components/DateGroup/DateGroup.tsx +18 -0
- package/packages/web/components/DateGroup/DateGroup.types.ts +6 -0
- package/packages/web/components/DateGroup/DateGroup.utils.ts +11 -0
- package/packages/web/components/DateGroup/index.ts +2 -0
- package/packages/web/components/{stats → EmptyState}/EmptyState.tsx +1 -10
- package/packages/web/components/EmptyState/EmptyState.types.ts +10 -0
- package/packages/web/components/EmptyState/index.ts +2 -0
- package/packages/web/components/EventRow/EventRow.constants.ts +10 -0
- package/packages/web/components/EventRow/EventRow.tsx +49 -0
- package/packages/web/components/EventRow/EventRow.types.ts +7 -0
- package/packages/web/components/EventRow/EventRow.utils.ts +49 -0
- package/packages/web/components/EventRow/index.ts +2 -0
- package/packages/web/components/ExpandButton/ExpandButton.tsx +18 -0
- package/packages/web/components/ExpandButton/ExpandButton.types.ts +6 -0
- package/packages/web/components/ExpandButton/index.ts +2 -0
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.tsx +14 -0
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.types.ts +5 -0
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.utils.ts +13 -0
- package/packages/web/components/HealthGradientBackground/index.ts +2 -0
- package/packages/web/components/HeroSection/HeroSection.tsx +55 -0
- package/packages/web/components/HeroSection/HeroSection.types.ts +14 -0
- package/packages/web/components/HeroSection/HeroSection.utils.ts +7 -0
- package/packages/web/components/HeroSection/hooks/index.ts +2 -0
- package/packages/web/components/HeroSection/hooks/useCountUp.ts +45 -0
- package/packages/web/components/HeroSection/hooks/useWeeklyActivity.ts +18 -0
- package/packages/web/components/HeroSection/index.ts +2 -0
- package/packages/web/components/{stats → IdeasCard}/IdeasCard.tsx +3 -14
- package/packages/web/components/IdeasCard/IdeasCard.types.ts +9 -0
- package/packages/web/components/IdeasCard/index.ts +2 -0
- package/packages/web/components/InsightMessage/InsightMessage.tsx +9 -0
- package/packages/web/components/InsightMessage/InsightMessage.types.ts +3 -0
- package/packages/web/components/InsightMessage/index.ts +2 -0
- package/packages/web/components/Logo/index.ts +1 -0
- package/packages/web/components/MarkdownContent/index.ts +1 -0
- package/packages/web/components/NowCard/NowCard.tsx +93 -0
- package/packages/web/components/NowCard/NowCard.types.ts +15 -0
- package/packages/web/components/NowCard/index.ts +2 -0
- package/packages/web/components/ProgressRing/ProgressRing.constants.ts +20 -0
- package/packages/web/components/{stats → ProgressRing}/ProgressRing.tsx +4 -27
- package/packages/web/components/ProgressRing/ProgressRing.types.ts +11 -0
- package/packages/web/components/ProgressRing/index.ts +2 -0
- package/packages/web/components/ProjectAvatar/index.ts +1 -0
- package/packages/web/components/Providers/index.ts +1 -0
- package/packages/web/components/QueueCard/QueueCard.tsx +72 -0
- package/packages/web/components/QueueCard/QueueCard.types.ts +11 -0
- package/packages/web/components/QueueCard/QueueCard.utils.ts +12 -0
- package/packages/web/components/QueueCard/index.ts +2 -0
- package/packages/web/components/{stats → RoadmapCard}/RoadmapCard.tsx +3 -23
- package/packages/web/components/RoadmapCard/RoadmapCard.types.ts +15 -0
- package/packages/web/components/RoadmapCard/index.ts +2 -0
- package/packages/web/components/{stats → ShipsCard}/ShipsCard.tsx +4 -22
- package/packages/web/components/ShipsCard/ShipsCard.types.ts +12 -0
- package/packages/web/components/ShipsCard/ShipsCard.utils.ts +4 -0
- package/packages/web/components/ShipsCard/index.ts +2 -0
- package/packages/web/components/{stats → SparklineChart}/SparklineChart.tsx +1 -7
- package/packages/web/components/SparklineChart/SparklineChart.types.ts +6 -0
- package/packages/web/components/SparklineChart/index.ts +2 -0
- package/packages/web/components/StreakCard/StreakCard.constants.ts +2 -0
- package/packages/web/components/{stats → StreakCard}/StreakCard.tsx +5 -11
- package/packages/web/components/StreakCard/StreakCard.types.ts +4 -0
- package/packages/web/components/StreakCard/index.ts +2 -0
- package/packages/web/components/TasksCounter/TasksCounter.tsx +14 -0
- package/packages/web/components/TasksCounter/TasksCounter.types.ts +3 -0
- package/packages/web/components/TasksCounter/index.ts +2 -0
- package/packages/web/components/TechStackBadges/index.ts +1 -0
- package/packages/web/components/{TerminalTab.tsx → TerminalTabs/TerminalTab.tsx} +11 -0
- package/packages/web/components/{TerminalTabs.tsx → TerminalTabs/TerminalTabs.tsx} +29 -28
- package/packages/web/components/TerminalTabs/index.ts +1 -0
- package/packages/web/components/VelocityBadge/VelocityBadge.tsx +27 -0
- package/packages/web/components/VelocityBadge/VelocityBadge.types.ts +3 -0
- package/packages/web/components/VelocityBadge/index.ts +2 -0
- package/packages/web/components/VelocityCard/VelocityCard.tsx +71 -0
- package/packages/web/components/VelocityCard/VelocityCard.types.ts +7 -0
- package/packages/web/components/VelocityCard/index.ts +2 -0
- package/packages/web/components/WeeklySparkline/WeeklySparkline.tsx +13 -0
- package/packages/web/components/WeeklySparkline/WeeklySparkline.types.ts +3 -0
- package/packages/web/components/WeeklySparkline/index.ts +2 -0
- package/packages/web/components/ui/input.tsx +21 -0
- package/packages/web/context/TerminalTabsContext.tsx +46 -1
- package/packages/web/hooks/useClaudeTerminal.ts +71 -21
- package/packages/web/hooks/useProjectStats.ts +55 -0
- package/packages/web/hooks/useProjects.ts +6 -6
- package/packages/web/lib/actions/projects.ts +15 -0
- package/packages/web/lib/json-loader.ts +630 -0
- package/packages/web/lib/services/index.ts +9 -0
- package/packages/web/lib/services/migration.server.ts +600 -0
- package/packages/web/lib/services/projects.server.ts +52 -0
- package/packages/web/lib/services/stats.server.ts +264 -0
- package/packages/web/lib/unified-loader.ts +396 -0
- package/packages/web/package.json +10 -7
- package/packages/web/server.ts +58 -8
- package/templates/commands/done.md +76 -32
- package/templates/commands/feature.md +121 -47
- package/templates/commands/idea.md +81 -8
- package/templates/commands/now.md +41 -17
- package/templates/commands/ship.md +64 -25
- package/templates/commands/sync.md +28 -3
- package/core/agentic/agent-router.js +0 -140
- package/core/agentic/chain-of-thought.js +0 -578
- package/core/agentic/command-executor.js +0 -417
- package/core/agentic/context-filter.js +0 -354
- package/core/agentic/ground-truth.js +0 -591
- package/core/agentic/loop-detector.js +0 -406
- package/core/agentic/memory-system.js +0 -845
- package/core/agentic/parallel-tools.js +0 -366
- package/core/agentic/plan-mode.js +0 -572
- package/core/agentic/prompt-builder.js +0 -352
- package/core/agentic/response-templates.js +0 -290
- package/core/agentic/semantic-compression.js +0 -517
- package/core/agentic/think-blocks.js +0 -657
- package/core/agentic/tool-registry.js +0 -184
- package/core/agentic/validation-rules.js +0 -380
- package/core/command-registry.js +0 -698
- package/core/commands.js +0 -2237
- package/core/domain/task-stack.js +0 -497
- package/core/infrastructure/legacy-installer-detector.js +0 -546
- package/core/infrastructure/migrator.js +0 -796
- package/core/infrastructure/session-manager.js +0 -390
- package/core/utils/file-helper.js +0 -329
- package/packages/web/app/api/projects/[id]/delete/route.ts +0 -21
- package/packages/web/app/api/stats/route.ts +0 -38
- package/packages/web/components/AppSidebar.tsx +0 -113
- package/packages/web/components/stats/ActivityTimeline.tsx +0 -201
- package/packages/web/components/stats/AgentsCard.tsx +0 -56
- package/packages/web/components/stats/BentoCard.tsx +0 -88
- package/packages/web/components/stats/HeroSection.tsx +0 -172
- package/packages/web/components/stats/NowCard.tsx +0 -71
- package/packages/web/components/stats/QueueCard.tsx +0 -58
- package/packages/web/components/stats/VelocityCard.tsx +0 -60
- package/packages/web/components/stats/index.ts +0 -17
- package/packages/web/hooks/useStats.ts +0 -28
- /package/packages/web/components/{CommandButton.tsx → CommandButton/CommandButton.tsx} +0 -0
- /package/packages/web/components/{ConnectionStatus.tsx → ConnectionStatus/ConnectionStatus.tsx} +0 -0
- /package/packages/web/components/{Logo.tsx → Logo/Logo.tsx} +0 -0
- /package/packages/web/components/{MarkdownContent.tsx → MarkdownContent/MarkdownContent.tsx} +0 -0
- /package/packages/web/components/{ProjectAvatar.tsx → ProjectAvatar/ProjectAvatar.tsx} +0 -0
- /package/packages/web/components/{providers.tsx → Providers/Providers.tsx} +0 -0
- /package/packages/web/components/{TechStackBadges.tsx → TechStackBadges/TechStackBadges.tsx} +0 -0
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Intelligent Context Filtering System
|
|
3
|
-
*
|
|
4
|
-
* Reduces context window usage by 70-90% by loading only
|
|
5
|
-
* relevant files for each specialized agent
|
|
6
|
-
*
|
|
7
|
-
* @version 1.0.0
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const fs = require('fs').promises;
|
|
11
|
-
const path = require('path');
|
|
12
|
-
const { glob } = require('glob');
|
|
13
|
-
const log = require('../utils/logger');
|
|
14
|
-
|
|
15
|
-
class ContextFilter {
|
|
16
|
-
constructor() {
|
|
17
|
-
// Cache for file analysis
|
|
18
|
-
this.fileCache = new Map();
|
|
19
|
-
// NO HARDCODED PATTERNS - Everything is agentic
|
|
20
|
-
// Claude decides what files are needed based on analysis
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Main entry point - filters context based on agent and task
|
|
25
|
-
* IMPROVED: Supports pre-estimated files for lazy loading
|
|
26
|
-
*/
|
|
27
|
-
async filterForAgent(agent, task, projectPath, fullContext = {}) {
|
|
28
|
-
const startTime = Date.now();
|
|
29
|
-
|
|
30
|
-
// If files were pre-estimated (lazy loading), use them
|
|
31
|
-
if (fullContext.estimatedFiles && fullContext.estimatedFiles.length > 0) {
|
|
32
|
-
const filteredFiles = fullContext.estimatedFiles;
|
|
33
|
-
|
|
34
|
-
const metrics = this.calculateMetrics(
|
|
35
|
-
fullContext.fileCount || filteredFiles.length,
|
|
36
|
-
filteredFiles.length,
|
|
37
|
-
startTime
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
return {
|
|
41
|
-
files: filteredFiles,
|
|
42
|
-
patterns: { preEstimated: true },
|
|
43
|
-
metrics,
|
|
44
|
-
agent: agent.name,
|
|
45
|
-
filtered: true
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Fallback to traditional filtering if no pre-estimation
|
|
50
|
-
// Determine what files this agent needs
|
|
51
|
-
const relevantPatterns = await this.determineRelevantPatterns(
|
|
52
|
-
agent,
|
|
53
|
-
task,
|
|
54
|
-
projectPath
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
// Load only relevant files
|
|
58
|
-
const filteredFiles = await this.loadRelevantFiles(
|
|
59
|
-
projectPath,
|
|
60
|
-
relevantPatterns
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
// Calculate reduction metrics
|
|
64
|
-
const metrics = this.calculateMetrics(
|
|
65
|
-
fullContext.fileCount || 1000, // estimate if not provided
|
|
66
|
-
filteredFiles.length,
|
|
67
|
-
startTime
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
return {
|
|
71
|
-
files: filteredFiles,
|
|
72
|
-
patterns: {
|
|
73
|
-
detectedTech: relevantPatterns.detectedTech,
|
|
74
|
-
projectStructure: relevantPatterns.projectStructure,
|
|
75
|
-
agentic: true // Flag indicating this was agentic, not hardcoded
|
|
76
|
-
},
|
|
77
|
-
metrics,
|
|
78
|
-
agent: agent.name,
|
|
79
|
-
filtered: true
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* REMOVED: initializeTechPatterns() and initializeTaskPatterns()
|
|
85
|
-
*
|
|
86
|
-
* These were hardcoded patterns that limited Claude's knowledge.
|
|
87
|
-
* Now everything is agentic - Claude decides what files are needed
|
|
88
|
-
* based on the actual project analysis, not predetermined patterns.
|
|
89
|
-
*
|
|
90
|
-
* The ContextEstimator provides file suggestions, and Claude
|
|
91
|
-
* uses those along with the project analysis to decide what to load.
|
|
92
|
-
*/
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Determine which patterns to use based on agent and task
|
|
96
|
-
*
|
|
97
|
-
* 100% AGENTIC: Uses analyzer for I/O, no hardcoded tech detection.
|
|
98
|
-
* Claude decides what files matter based on actual project analysis.
|
|
99
|
-
*/
|
|
100
|
-
async determineRelevantPatterns(agent, task, projectPath) {
|
|
101
|
-
const analyzer = require('../domain/analyzer');
|
|
102
|
-
analyzer.init(projectPath);
|
|
103
|
-
|
|
104
|
-
// Get REAL file extensions from project (not assumed)
|
|
105
|
-
const realExtensions = await analyzer.getFileExtensions();
|
|
106
|
-
|
|
107
|
-
// Get REAL directory structure (not assumed)
|
|
108
|
-
const projectStructure = await analyzer.listDirectories();
|
|
109
|
-
|
|
110
|
-
// Get config files that exist (not hardcoded list)
|
|
111
|
-
const configFiles = await analyzer.listConfigFiles();
|
|
112
|
-
|
|
113
|
-
// Build patterns from ACTUAL project data
|
|
114
|
-
const patterns = {
|
|
115
|
-
include: [],
|
|
116
|
-
exclude: ['node_modules', '.git', 'dist', 'build', 'coverage', '.next', '.nuxt', 'target', 'vendor'],
|
|
117
|
-
realExtensions, // Actual extensions found in project
|
|
118
|
-
projectStructure, // Actual directories
|
|
119
|
-
configFiles // Actual config files
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
return patterns;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Detect actual project structure (no assumptions)
|
|
127
|
-
*/
|
|
128
|
-
async detectProjectStructure(projectPath) {
|
|
129
|
-
try {
|
|
130
|
-
const entries = await fs.readdir(projectPath, { withFileTypes: true });
|
|
131
|
-
const directories = entries
|
|
132
|
-
.filter(e => e.isDirectory() && !e.name.startsWith('.'))
|
|
133
|
-
.map(e => e.name);
|
|
134
|
-
return directories;
|
|
135
|
-
} catch {
|
|
136
|
-
return [];
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Detect technologies used in the project
|
|
142
|
-
*
|
|
143
|
-
* 100% AGENTIC: Uses analyzer for raw data.
|
|
144
|
-
* No categorization - Claude decides what's relevant.
|
|
145
|
-
*/
|
|
146
|
-
async detectProjectTechnologies(projectPath) {
|
|
147
|
-
try {
|
|
148
|
-
const analyzer = require('../domain/analyzer');
|
|
149
|
-
analyzer.init(projectPath);
|
|
150
|
-
|
|
151
|
-
// Return raw data for Claude to analyze
|
|
152
|
-
return {
|
|
153
|
-
extensions: await analyzer.getFileExtensions(),
|
|
154
|
-
directories: await analyzer.listDirectories(),
|
|
155
|
-
configFiles: await analyzer.listConfigFiles()
|
|
156
|
-
};
|
|
157
|
-
} catch (error) {
|
|
158
|
-
log.error('Error detecting project data:', error.message);
|
|
159
|
-
return { extensions: {}, directories: [], configFiles: [] };
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* REMOVED: detectTaskType() - was hardcoded pattern matching
|
|
165
|
-
*
|
|
166
|
-
* Task type detection is now agentic - Claude analyzes the task
|
|
167
|
-
* description and project context to determine what files are needed.
|
|
168
|
-
* No hardcoded keyword matching.
|
|
169
|
-
*/
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* REMOVED: getAgentSpecificPatterns() - was hardcoded agent patterns
|
|
173
|
-
*
|
|
174
|
-
* Agent-specific file selection is now agentic - each agent
|
|
175
|
-
* has instructions in its template that tell Claude what files
|
|
176
|
-
* are relevant. No hardcoded assumptions about agent types.
|
|
177
|
-
*/
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Load only relevant files based on patterns
|
|
181
|
-
*/
|
|
182
|
-
async loadRelevantFiles(projectPath, patterns) {
|
|
183
|
-
const files = [];
|
|
184
|
-
|
|
185
|
-
try {
|
|
186
|
-
// Build glob patterns
|
|
187
|
-
const globPatterns = this.buildGlobPatterns(patterns);
|
|
188
|
-
|
|
189
|
-
// Execute glob searches
|
|
190
|
-
for (const pattern of globPatterns) {
|
|
191
|
-
const matches = await glob(pattern, {
|
|
192
|
-
cwd: projectPath,
|
|
193
|
-
ignore: patterns.exclude,
|
|
194
|
-
nodir: true,
|
|
195
|
-
follow: false
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
// Ensure matches is always an array (glob v10+ returns array, but be defensive)
|
|
199
|
-
if (Array.isArray(matches)) {
|
|
200
|
-
files.push(...matches);
|
|
201
|
-
} else if (matches) {
|
|
202
|
-
// Convert iterable to array if needed
|
|
203
|
-
files.push(...Array.from(matches));
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Remove duplicates and sort
|
|
208
|
-
const uniqueFiles = [...new Set(files)].sort();
|
|
209
|
-
|
|
210
|
-
// Limit to reasonable number
|
|
211
|
-
const maxFiles = 300;
|
|
212
|
-
if (uniqueFiles.length > maxFiles) {
|
|
213
|
-
log.debug(`Limiting context to ${maxFiles} files`);
|
|
214
|
-
return uniqueFiles.slice(0, maxFiles);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// Expand context with related files
|
|
218
|
-
const expandedFiles = await this.expandContext(uniqueFiles);
|
|
219
|
-
|
|
220
|
-
return expandedFiles.slice(0, maxFiles);
|
|
221
|
-
|
|
222
|
-
} catch (error) {
|
|
223
|
-
log.error('Error loading files:', error.message);
|
|
224
|
-
return [];
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* Build glob patterns from pattern configuration
|
|
230
|
-
*
|
|
231
|
-
* 100% AGENTIC: Uses REAL extensions from project, not hardcoded mapping.
|
|
232
|
-
* No language→extension assumptions.
|
|
233
|
-
*/
|
|
234
|
-
buildGlobPatterns(patterns) {
|
|
235
|
-
const globs = [];
|
|
236
|
-
|
|
237
|
-
// Use REAL extensions found in project (no hardcoded mapping)
|
|
238
|
-
if (patterns.realExtensions && Object.keys(patterns.realExtensions).length > 0) {
|
|
239
|
-
// Get extensions that actually exist in this project
|
|
240
|
-
const extensions = Object.keys(patterns.realExtensions)
|
|
241
|
-
.filter(ext => ext.startsWith('.')) // Only valid extensions
|
|
242
|
-
.slice(0, 20); // Limit to top 20 most common
|
|
243
|
-
|
|
244
|
-
if (extensions.length > 0) {
|
|
245
|
-
globs.push(`**/*{${extensions.join(',')}}`);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// Use REAL project structure (no assumptions)
|
|
250
|
-
if (patterns.projectStructure && patterns.projectStructure.length > 0) {
|
|
251
|
-
patterns.projectStructure.forEach(dir => {
|
|
252
|
-
// Exclude universal noise directories
|
|
253
|
-
if (!patterns.exclude.includes(dir)) {
|
|
254
|
-
globs.push(`${dir}/**/*`);
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// Include REAL config files that exist (not hardcoded list)
|
|
260
|
-
if (patterns.configFiles && patterns.configFiles.length > 0) {
|
|
261
|
-
patterns.configFiles.forEach(file => {
|
|
262
|
-
globs.push(file);
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Fallback: if no patterns detected, include all source-like files
|
|
267
|
-
if (globs.length === 0) {
|
|
268
|
-
globs.push('**/*');
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
return globs;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Calculate metrics for context reduction
|
|
276
|
-
*/
|
|
277
|
-
calculateMetrics(originalCount, filteredCount, startTime) {
|
|
278
|
-
const reduction = originalCount > 0
|
|
279
|
-
? Math.round(((originalCount - filteredCount) / originalCount) * 100)
|
|
280
|
-
: 0;
|
|
281
|
-
|
|
282
|
-
return {
|
|
283
|
-
originalFiles: originalCount,
|
|
284
|
-
filteredFiles: filteredCount,
|
|
285
|
-
reductionPercent: reduction,
|
|
286
|
-
processingTime: Date.now() - startTime,
|
|
287
|
-
effectiveness: reduction > 70 ? 'high' : reduction > 40 ? 'medium' : 'low'
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Check if file exists
|
|
293
|
-
*/
|
|
294
|
-
async fileExists(filePath) {
|
|
295
|
-
try {
|
|
296
|
-
await fs.access(filePath);
|
|
297
|
-
return true;
|
|
298
|
-
} catch {
|
|
299
|
-
return false;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* Expand context with related files (tests, styles, etc.)
|
|
305
|
-
*/
|
|
306
|
-
async expandContext(files) {
|
|
307
|
-
const expanded = new Set(files);
|
|
308
|
-
|
|
309
|
-
for (const file of files) {
|
|
310
|
-
const ext = path.extname(file);
|
|
311
|
-
const basename = path.basename(file, ext);
|
|
312
|
-
const dirname = path.dirname(file);
|
|
313
|
-
|
|
314
|
-
// 1. Look for test files
|
|
315
|
-
const testPatterns = [
|
|
316
|
-
path.join(dirname, `${basename}.test${ext}`),
|
|
317
|
-
path.join(dirname, `${basename}.spec${ext}`),
|
|
318
|
-
path.join(dirname, '__tests__', `${basename}.test${ext}`),
|
|
319
|
-
path.join(dirname, 'tests', `${basename}.test${ext}`)
|
|
320
|
-
];
|
|
321
|
-
|
|
322
|
-
// 2. Look for style files (for UI components)
|
|
323
|
-
const stylePatterns = [
|
|
324
|
-
path.join(dirname, `${basename}.css`),
|
|
325
|
-
path.join(dirname, `${basename}.scss`),
|
|
326
|
-
path.join(dirname, `${basename}.module.css`),
|
|
327
|
-
path.join(dirname, `${basename}.module.scss`)
|
|
328
|
-
];
|
|
329
|
-
|
|
330
|
-
// Check if these related files exist
|
|
331
|
-
const potentialFiles = [...testPatterns, ...stylePatterns];
|
|
332
|
-
|
|
333
|
-
for (const potential of potentialFiles) {
|
|
334
|
-
if (!expanded.has(potential) && await this.fileExists(potential)) {
|
|
335
|
-
expanded.add(potential);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
return Array.from(expanded).sort();
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* Get filter statistics
|
|
345
|
-
*/
|
|
346
|
-
getStatistics() {
|
|
347
|
-
return {
|
|
348
|
-
cachedFiles: this.fileCache.size,
|
|
349
|
-
agentic: true // All filtering is now agentic, no hardcoded patterns
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
module.exports = ContextFilter;
|