@agile-vibe-coding/avc 0.1.1 → 0.3.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/cli/agent-loader.js +21 -0
- package/cli/agents/agent-selector.md +152 -0
- package/cli/agents/architecture-recommender.md +418 -0
- package/cli/agents/code-implementer.md +117 -0
- package/cli/agents/code-validator.md +80 -0
- package/cli/agents/context-reviewer-epic.md +101 -0
- package/cli/agents/context-reviewer-story.md +92 -0
- package/cli/agents/context-writer-epic.md +145 -0
- package/cli/agents/context-writer-story.md +111 -0
- package/cli/agents/database-deep-dive.md +470 -0
- package/cli/agents/database-recommender.md +634 -0
- package/cli/agents/doc-distributor.md +176 -0
- package/cli/agents/doc-writer-epic.md +42 -0
- package/cli/agents/doc-writer-story.md +43 -0
- package/cli/agents/documentation-updater.md +203 -0
- package/cli/agents/duplicate-detector.md +110 -0
- package/cli/agents/epic-story-decomposer.md +559 -0
- package/cli/agents/feature-context-generator.md +91 -0
- package/cli/agents/gap-checker-epic.md +52 -0
- package/cli/agents/impact-checker-story.md +51 -0
- package/cli/agents/migration-guide-generator.md +305 -0
- package/cli/agents/mission-scope-generator.md +143 -0
- package/cli/agents/mission-scope-validator.md +146 -0
- package/cli/agents/project-context-extractor.md +122 -0
- package/cli/agents/project-documentation-creator.json +226 -0
- package/cli/agents/project-documentation-creator.md +595 -0
- package/cli/agents/question-prefiller.md +269 -0
- package/cli/agents/refiner-epic.md +39 -0
- package/cli/agents/refiner-story.md +42 -0
- package/cli/agents/scaffolding-generator.md +99 -0
- package/cli/agents/seed-validator.md +71 -0
- package/cli/agents/story-doc-enricher.md +133 -0
- package/cli/agents/story-scope-reviewer.md +147 -0
- package/cli/agents/story-splitter.md +83 -0
- package/cli/agents/suggestion-business-analyst.md +88 -0
- package/cli/agents/suggestion-deployment-architect.md +263 -0
- package/cli/agents/suggestion-product-manager.md +129 -0
- package/cli/agents/suggestion-security-specialist.md +156 -0
- package/cli/agents/suggestion-technical-architect.md +269 -0
- package/cli/agents/suggestion-ux-researcher.md +93 -0
- package/cli/agents/task-subtask-decomposer.md +188 -0
- package/cli/agents/validator-documentation.json +183 -0
- package/cli/agents/validator-documentation.md +455 -0
- package/cli/agents/validator-selector.md +211 -0
- package/cli/ansi-colors.js +21 -0
- package/cli/api-reference-tool.js +368 -0
- package/cli/build-docs.js +29 -8
- package/cli/ceremony-history.js +369 -0
- package/cli/checks/catalog.json +76 -0
- package/cli/checks/code/quality.json +26 -0
- package/cli/checks/code/testing.json +14 -0
- package/cli/checks/code/traceability.json +26 -0
- package/cli/checks/cross-refs/epic.json +171 -0
- package/cli/checks/cross-refs/story.json +149 -0
- package/cli/checks/epic/api.json +114 -0
- package/cli/checks/epic/backend.json +126 -0
- package/cli/checks/epic/cloud.json +126 -0
- package/cli/checks/epic/data.json +102 -0
- package/cli/checks/epic/database.json +114 -0
- package/cli/checks/epic/developer.json +182 -0
- package/cli/checks/epic/devops.json +174 -0
- package/cli/checks/epic/frontend.json +162 -0
- package/cli/checks/epic/mobile.json +102 -0
- package/cli/checks/epic/qa.json +90 -0
- package/cli/checks/epic/security.json +184 -0
- package/cli/checks/epic/solution-architect.json +192 -0
- package/cli/checks/epic/test-architect.json +90 -0
- package/cli/checks/epic/ui.json +102 -0
- package/cli/checks/epic/ux.json +90 -0
- package/cli/checks/fixes/epic-fix-template.md +10 -0
- package/cli/checks/fixes/story-fix-template.md +10 -0
- package/cli/checks/story/api.json +186 -0
- package/cli/checks/story/backend.json +102 -0
- package/cli/checks/story/cloud.json +102 -0
- package/cli/checks/story/data.json +210 -0
- package/cli/checks/story/database.json +102 -0
- package/cli/checks/story/developer.json +168 -0
- package/cli/checks/story/devops.json +102 -0
- package/cli/checks/story/frontend.json +174 -0
- package/cli/checks/story/mobile.json +102 -0
- package/cli/checks/story/qa.json +210 -0
- package/cli/checks/story/security.json +198 -0
- package/cli/checks/story/solution-architect.json +230 -0
- package/cli/checks/story/test-architect.json +210 -0
- package/cli/checks/story/ui.json +102 -0
- package/cli/checks/story/ux.json +102 -0
- package/cli/coding-order.js +401 -0
- package/cli/command-logger.js +49 -12
- package/cli/components/static-output.js +63 -0
- package/cli/console-output-manager.js +94 -0
- package/cli/dependency-checker.js +72 -0
- package/cli/docs-sync.js +306 -0
- package/cli/epic-story-validator.js +659 -0
- package/cli/evaluation-prompts.js +1008 -0
- package/cli/execution-context.js +195 -0
- package/cli/generate-summary-table.js +340 -0
- package/cli/init-model-config.js +704 -0
- package/cli/init.js +1737 -278
- package/cli/kanban-server-manager.js +227 -0
- package/cli/llm-claude.js +150 -1
- package/cli/llm-gemini.js +109 -0
- package/cli/llm-local.js +493 -0
- package/cli/llm-mock.js +233 -0
- package/cli/llm-openai.js +454 -0
- package/cli/llm-provider.js +379 -3
- package/cli/llm-token-limits.js +211 -0
- package/cli/llm-verifier.js +662 -0
- package/cli/llm-xiaomi.js +143 -0
- package/cli/message-constants.js +49 -0
- package/cli/message-manager.js +334 -0
- package/cli/message-types.js +96 -0
- package/cli/messaging-api.js +291 -0
- package/cli/micro-check-fixer.js +335 -0
- package/cli/micro-check-runner.js +449 -0
- package/cli/micro-check-scorer.js +148 -0
- package/cli/micro-check-validator.js +538 -0
- package/cli/model-pricing.js +192 -0
- package/cli/model-query-engine.js +468 -0
- package/cli/model-recommendation-analyzer.js +495 -0
- package/cli/model-selector.js +270 -0
- package/cli/output-buffer.js +107 -0
- package/cli/process-manager.js +73 -2
- package/cli/prompt-logger.js +57 -0
- package/cli/repl-ink.js +4625 -1094
- package/cli/repl-old.js +3 -4
- package/cli/seed-processor.js +962 -0
- package/cli/sprint-planning-processor.js +4162 -0
- package/cli/template-processor.js +2149 -105
- package/cli/templates/project.md +25 -8
- package/cli/templates/vitepress-config.mts.template +5 -4
- package/cli/token-tracker.js +547 -0
- package/cli/tools/generate-story-validators.js +317 -0
- package/cli/tools/generate-validators.js +669 -0
- package/cli/update-checker.js +19 -17
- package/cli/update-notifier.js +4 -4
- package/cli/validation-router.js +667 -0
- package/cli/verification-tracker.js +563 -0
- package/cli/worktree-runner.js +654 -0
- package/kanban/README.md +386 -0
- package/kanban/client/README.md +205 -0
- package/kanban/client/components.json +20 -0
- package/kanban/client/dist/assets/index-D_KC5EQT.css +1 -0
- package/kanban/client/dist/assets/index-DjY5zqW7.js +351 -0
- package/kanban/client/dist/index.html +16 -0
- package/kanban/client/dist/vite.svg +1 -0
- package/kanban/client/index.html +15 -0
- package/kanban/client/package-lock.json +9442 -0
- package/kanban/client/package.json +44 -0
- package/kanban/client/postcss.config.js +6 -0
- package/kanban/client/public/vite.svg +1 -0
- package/kanban/client/src/App.jsx +651 -0
- package/kanban/client/src/components/ProjectFileEditorPopup.jsx +117 -0
- package/kanban/client/src/components/ceremony/AskArchPopup.jsx +420 -0
- package/kanban/client/src/components/ceremony/AskModelPopup.jsx +629 -0
- package/kanban/client/src/components/ceremony/CeremonyWorkflowModal.jsx +1133 -0
- package/kanban/client/src/components/ceremony/EpicStorySelectionModal.jsx +254 -0
- package/kanban/client/src/components/ceremony/ProviderSwitcherButton.jsx +290 -0
- package/kanban/client/src/components/ceremony/SponsorCallModal.jsx +686 -0
- package/kanban/client/src/components/ceremony/SprintPlanningModal.jsx +838 -0
- package/kanban/client/src/components/ceremony/steps/ArchitectureStep.jsx +150 -0
- package/kanban/client/src/components/ceremony/steps/CompleteStep.jsx +136 -0
- package/kanban/client/src/components/ceremony/steps/DatabaseStep.jsx +202 -0
- package/kanban/client/src/components/ceremony/steps/DeploymentStep.jsx +123 -0
- package/kanban/client/src/components/ceremony/steps/MissionStep.jsx +106 -0
- package/kanban/client/src/components/ceremony/steps/ReviewAnswersStep.jsx +329 -0
- package/kanban/client/src/components/ceremony/steps/RunningStep.jsx +249 -0
- package/kanban/client/src/components/kanban/CardDetailModal.jsx +646 -0
- package/kanban/client/src/components/kanban/EpicSection.jsx +146 -0
- package/kanban/client/src/components/kanban/FilterToolbar.jsx +222 -0
- package/kanban/client/src/components/kanban/GroupingSelector.jsx +63 -0
- package/kanban/client/src/components/kanban/KanbanBoard.jsx +211 -0
- package/kanban/client/src/components/kanban/KanbanCard.jsx +147 -0
- package/kanban/client/src/components/kanban/KanbanColumn.jsx +90 -0
- package/kanban/client/src/components/kanban/RefineWorkItemPopup.jsx +784 -0
- package/kanban/client/src/components/kanban/RunButton.jsx +162 -0
- package/kanban/client/src/components/kanban/SeedButton.jsx +176 -0
- package/kanban/client/src/components/layout/LoadingScreen.jsx +82 -0
- package/kanban/client/src/components/process/ProcessMonitorBar.jsx +80 -0
- package/kanban/client/src/components/settings/AgentEditorPopup.jsx +171 -0
- package/kanban/client/src/components/settings/AgentsTab.jsx +381 -0
- package/kanban/client/src/components/settings/ApiKeysTab.jsx +142 -0
- package/kanban/client/src/components/settings/CeremonyModelsTab.jsx +105 -0
- package/kanban/client/src/components/settings/CheckEditorPopup.jsx +507 -0
- package/kanban/client/src/components/settings/CostThresholdsTab.jsx +95 -0
- package/kanban/client/src/components/settings/ModelPricingTab.jsx +269 -0
- package/kanban/client/src/components/settings/OpenAIAuthSection.jsx +412 -0
- package/kanban/client/src/components/settings/ServersTab.jsx +121 -0
- package/kanban/client/src/components/settings/SettingsModal.jsx +84 -0
- package/kanban/client/src/components/stats/CostModal.jsx +384 -0
- package/kanban/client/src/components/ui/badge.jsx +27 -0
- package/kanban/client/src/components/ui/dialog.jsx +121 -0
- package/kanban/client/src/components/ui/tabs.jsx +85 -0
- package/kanban/client/src/hooks/__tests__/useGrouping.test.js +232 -0
- package/kanban/client/src/hooks/useGrouping.js +177 -0
- package/kanban/client/src/hooks/useWebSocket.js +120 -0
- package/kanban/client/src/lib/__tests__/api.test.js +196 -0
- package/kanban/client/src/lib/__tests__/status-grouping.test.js +94 -0
- package/kanban/client/src/lib/api.js +515 -0
- package/kanban/client/src/lib/status-grouping.js +154 -0
- package/kanban/client/src/lib/utils.js +11 -0
- package/kanban/client/src/main.jsx +10 -0
- package/kanban/client/src/store/__tests__/kanbanStore.test.js +164 -0
- package/kanban/client/src/store/ceremonyStore.js +172 -0
- package/kanban/client/src/store/filterStore.js +201 -0
- package/kanban/client/src/store/kanbanStore.js +123 -0
- package/kanban/client/src/store/processStore.js +65 -0
- package/kanban/client/src/store/sprintPlanningStore.js +33 -0
- package/kanban/client/src/styles/globals.css +59 -0
- package/kanban/client/tailwind.config.js +77 -0
- package/kanban/client/vite.config.js +28 -0
- package/kanban/client/vitest.config.js +28 -0
- package/kanban/dev-start.sh +47 -0
- package/kanban/package.json +12 -0
- package/kanban/server/index.js +537 -0
- package/kanban/server/routes/ceremony.js +454 -0
- package/kanban/server/routes/costs.js +163 -0
- package/kanban/server/routes/openai-oauth.js +366 -0
- package/kanban/server/routes/processes.js +50 -0
- package/kanban/server/routes/settings.js +736 -0
- package/kanban/server/routes/websocket.js +281 -0
- package/kanban/server/routes/work-items.js +487 -0
- package/kanban/server/services/CeremonyService.js +1441 -0
- package/kanban/server/services/FileSystemScanner.js +95 -0
- package/kanban/server/services/FileWatcher.js +144 -0
- package/kanban/server/services/HierarchyBuilder.js +196 -0
- package/kanban/server/services/ProcessRegistry.js +122 -0
- package/kanban/server/services/TaskRunnerService.js +261 -0
- package/kanban/server/services/WorkItemReader.js +123 -0
- package/kanban/server/services/WorkItemRefineService.js +510 -0
- package/kanban/server/start.js +49 -0
- package/kanban/server/utils/kanban-logger.js +132 -0
- package/kanban/server/utils/markdown.js +91 -0
- package/kanban/server/utils/status-grouping.js +107 -0
- package/kanban/server/workers/run-task-worker.js +121 -0
- package/kanban/server/workers/seed-worker.js +94 -0
- package/kanban/server/workers/sponsor-call-worker.js +92 -0
- package/kanban/server/workers/sprint-planning-worker.js +212 -0
- package/package.json +19 -7
- package/cli/agents/documentation.md +0 -302
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ProcessStore
|
|
5
|
+
* Tracks lightweight process DTOs for the ProcessMonitorBar chip row.
|
|
6
|
+
* Full ceremony logs live in sprintPlanningStore / ceremonyStore (accumulated via WS events).
|
|
7
|
+
*/
|
|
8
|
+
export const useProcessStore = create((set, get) => ({
|
|
9
|
+
processes: [], // { id, type, label, status, startedAt, endedAt }
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Called from App.jsx WebSocket message handler for process:* events.
|
|
13
|
+
*/
|
|
14
|
+
handleProcessMessage: (message) => {
|
|
15
|
+
const { processes } = get();
|
|
16
|
+
|
|
17
|
+
switch (message.type) {
|
|
18
|
+
case 'process:list':
|
|
19
|
+
set({ processes: message.processes });
|
|
20
|
+
break;
|
|
21
|
+
|
|
22
|
+
case 'process:started':
|
|
23
|
+
// Avoid duplicates on reconnect
|
|
24
|
+
if (processes.find(p => p.id === message.processId)) break;
|
|
25
|
+
set({
|
|
26
|
+
processes: [...processes, {
|
|
27
|
+
id: message.processId,
|
|
28
|
+
type: message.processType,
|
|
29
|
+
label: message.label,
|
|
30
|
+
status: 'running',
|
|
31
|
+
startedAt: message.startedAt,
|
|
32
|
+
endedAt: null,
|
|
33
|
+
}],
|
|
34
|
+
});
|
|
35
|
+
break;
|
|
36
|
+
|
|
37
|
+
case 'process:status': {
|
|
38
|
+
const updated = processes.map(p =>
|
|
39
|
+
p.id === message.processId
|
|
40
|
+
? { ...p, status: message.status, endedAt: message.endedAt ?? p.endedAt }
|
|
41
|
+
: p
|
|
42
|
+
);
|
|
43
|
+
set({ processes: updated });
|
|
44
|
+
// Auto-remove cancelled processes after a brief moment so the chip disappears
|
|
45
|
+
// rather than staying permanently grayed out (user must manually clear others).
|
|
46
|
+
if (message.status === 'cancelled') {
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
set(s => ({ processes: s.processes.filter(p => p.id !== message.processId) }));
|
|
49
|
+
}, 1000);
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
/** Remove finished (complete/error/cancelled) records both locally and on server. */
|
|
57
|
+
clearCompleted: async () => {
|
|
58
|
+
try { await fetch('/api/processes', { method: 'DELETE' }); } catch (_) {}
|
|
59
|
+
set(s => ({
|
|
60
|
+
processes: s.processes.filter(p =>
|
|
61
|
+
!['complete', 'error', 'cancelled'].includes(p.status)
|
|
62
|
+
),
|
|
63
|
+
}));
|
|
64
|
+
},
|
|
65
|
+
}));
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
|
|
3
|
+
export const useSprintPlanningStore = create((set) => ({
|
|
4
|
+
isOpen: false,
|
|
5
|
+
step: 1, // 1: ready, 2: running, 3: select, 4: complete
|
|
6
|
+
status: 'idle', // 'idle' | 'running' | 'awaiting-selection' | 'complete' | 'error'
|
|
7
|
+
isPaused: false,
|
|
8
|
+
progressLog: [],
|
|
9
|
+
result: null, // { epicsCreated, storiesCreated, totalEpics, totalStories, tokenUsage, model }
|
|
10
|
+
error: null,
|
|
11
|
+
processId: null, // active fork processId (set after run starts)
|
|
12
|
+
decomposedHierarchy: null, // { epics: [...] } — populated during awaiting-selection
|
|
13
|
+
|
|
14
|
+
openModal: () => set({ isOpen: true, step: 1, status: 'idle', isPaused: false, progressLog: [], result: null, error: null, processId: null, decomposedHierarchy: null }),
|
|
15
|
+
closeModal: () => set({ isOpen: false }),
|
|
16
|
+
// Reopen without resetting state — used by ProcessMonitorBar chip click
|
|
17
|
+
reopenModal: () => set((s) => ({
|
|
18
|
+
isOpen: true,
|
|
19
|
+
step: s.status === 'complete' ? 4
|
|
20
|
+
: s.status === 'awaiting-selection' ? 3
|
|
21
|
+
: (s.status === 'running' || s.status === 'error') ? 2
|
|
22
|
+
: 1,
|
|
23
|
+
})),
|
|
24
|
+
setStep: (step) => set({ step }),
|
|
25
|
+
setStatus: (status) => set({ status }),
|
|
26
|
+
setPaused: (isPaused) => set({ isPaused }),
|
|
27
|
+
appendProgress: (entry) => set((s) => ({ progressLog: [...s.progressLog, entry] })),
|
|
28
|
+
setProgressLog: (entries) => set({ progressLog: Array.isArray(entries) ? entries : [] }),
|
|
29
|
+
setResult: (result) => set({ result }),
|
|
30
|
+
setError: (error) => set({ error }),
|
|
31
|
+
setProcessId: (processId) => set({ processId }),
|
|
32
|
+
setDecomposedHierarchy: (decomposedHierarchy) => set({ decomposedHierarchy }),
|
|
33
|
+
}));
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
@tailwind base;
|
|
2
|
+
@tailwind components;
|
|
3
|
+
@tailwind utilities;
|
|
4
|
+
|
|
5
|
+
@layer base {
|
|
6
|
+
:root {
|
|
7
|
+
--background: 0 0% 100%;
|
|
8
|
+
--foreground: 222.2 84% 4.9%;
|
|
9
|
+
--card: 0 0% 100%;
|
|
10
|
+
--card-foreground: 222.2 84% 4.9%;
|
|
11
|
+
--popover: 0 0% 100%;
|
|
12
|
+
--popover-foreground: 222.2 84% 4.9%;
|
|
13
|
+
--primary: 222.2 47.4% 11.2%;
|
|
14
|
+
--primary-foreground: 210 40% 98%;
|
|
15
|
+
--secondary: 210 40% 96.1%;
|
|
16
|
+
--secondary-foreground: 222.2 47.4% 11.2%;
|
|
17
|
+
--muted: 210 40% 96.1%;
|
|
18
|
+
--muted-foreground: 215.4 16.3% 46.9%;
|
|
19
|
+
--accent: 210 40% 96.1%;
|
|
20
|
+
--accent-foreground: 222.2 47.4% 11.2%;
|
|
21
|
+
--destructive: 0 84.2% 60.2%;
|
|
22
|
+
--destructive-foreground: 210 40% 98%;
|
|
23
|
+
--border: 214.3 31.8% 91.4%;
|
|
24
|
+
--input: 214.3 31.8% 91.4%;
|
|
25
|
+
--ring: 222.2 84% 4.9%;
|
|
26
|
+
--radius: 0.5rem;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.dark {
|
|
30
|
+
--background: 222.2 84% 4.9%;
|
|
31
|
+
--foreground: 210 40% 98%;
|
|
32
|
+
--card: 222.2 84% 4.9%;
|
|
33
|
+
--card-foreground: 210 40% 98%;
|
|
34
|
+
--popover: 222.2 84% 4.9%;
|
|
35
|
+
--popover-foreground: 210 40% 98%;
|
|
36
|
+
--primary: 210 40% 98%;
|
|
37
|
+
--primary-foreground: 222.2 47.4% 11.2%;
|
|
38
|
+
--secondary: 217.2 32.6% 17.5%;
|
|
39
|
+
--secondary-foreground: 210 40% 98%;
|
|
40
|
+
--muted: 217.2 32.6% 17.5%;
|
|
41
|
+
--muted-foreground: 215 20.2% 65.1%;
|
|
42
|
+
--accent: 217.2 32.6% 17.5%;
|
|
43
|
+
--accent-foreground: 210 40% 98%;
|
|
44
|
+
--destructive: 0 62.8% 30.6%;
|
|
45
|
+
--destructive-foreground: 210 40% 98%;
|
|
46
|
+
--border: 217.2 32.6% 17.5%;
|
|
47
|
+
--input: 217.2 32.6% 17.5%;
|
|
48
|
+
--ring: 212.7 26.8% 83.9%;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@layer base {
|
|
53
|
+
* {
|
|
54
|
+
@apply border-border;
|
|
55
|
+
}
|
|
56
|
+
body {
|
|
57
|
+
@apply bg-background text-foreground;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** @type {import('tailwindcss').Config} */
|
|
2
|
+
export default {
|
|
3
|
+
darkMode: ['class'],
|
|
4
|
+
content: [
|
|
5
|
+
'./index.html',
|
|
6
|
+
'./src/**/*.{js,ts,jsx,tsx}',
|
|
7
|
+
],
|
|
8
|
+
theme: {
|
|
9
|
+
container: {
|
|
10
|
+
center: true,
|
|
11
|
+
padding: '2rem',
|
|
12
|
+
screens: {
|
|
13
|
+
'2xl': '1400px',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
extend: {
|
|
17
|
+
colors: {
|
|
18
|
+
border: 'hsl(var(--border))',
|
|
19
|
+
input: 'hsl(var(--input))',
|
|
20
|
+
ring: 'hsl(var(--ring))',
|
|
21
|
+
background: 'hsl(var(--background))',
|
|
22
|
+
foreground: 'hsl(var(--foreground))',
|
|
23
|
+
primary: {
|
|
24
|
+
DEFAULT: 'hsl(var(--primary))',
|
|
25
|
+
foreground: 'hsl(var(--primary-foreground))',
|
|
26
|
+
},
|
|
27
|
+
secondary: {
|
|
28
|
+
DEFAULT: 'hsl(var(--secondary))',
|
|
29
|
+
foreground: 'hsl(var(--secondary-foreground))',
|
|
30
|
+
},
|
|
31
|
+
destructive: {
|
|
32
|
+
DEFAULT: 'hsl(var(--destructive))',
|
|
33
|
+
foreground: 'hsl(var(--destructive-foreground))',
|
|
34
|
+
},
|
|
35
|
+
muted: {
|
|
36
|
+
DEFAULT: 'hsl(var(--muted))',
|
|
37
|
+
foreground: 'hsl(var(--muted-foreground))',
|
|
38
|
+
},
|
|
39
|
+
accent: {
|
|
40
|
+
DEFAULT: 'hsl(var(--accent))',
|
|
41
|
+
foreground: 'hsl(var(--accent-foreground))',
|
|
42
|
+
},
|
|
43
|
+
popover: {
|
|
44
|
+
DEFAULT: 'hsl(var(--popover))',
|
|
45
|
+
foreground: 'hsl(var(--popover-foreground))',
|
|
46
|
+
},
|
|
47
|
+
card: {
|
|
48
|
+
DEFAULT: 'hsl(var(--card))',
|
|
49
|
+
foreground: 'hsl(var(--card-foreground))',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
borderRadius: {
|
|
53
|
+
lg: 'var(--radius)',
|
|
54
|
+
md: 'calc(var(--radius) - 2px)',
|
|
55
|
+
sm: 'calc(var(--radius) - 4px)',
|
|
56
|
+
},
|
|
57
|
+
keyframes: {
|
|
58
|
+
'accordion-down': {
|
|
59
|
+
from: { height: '0' },
|
|
60
|
+
to: { height: 'var(--radix-accordion-content-height)' },
|
|
61
|
+
},
|
|
62
|
+
'accordion-up': {
|
|
63
|
+
from: { height: 'var(--radix-accordion-content-height)' },
|
|
64
|
+
to: { height: '0' },
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
animation: {
|
|
68
|
+
'accordion-down': 'accordion-down 0.2s ease-out',
|
|
69
|
+
'accordion-up': 'accordion-up 0.2s ease-out',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
plugins: [
|
|
74
|
+
require('tailwindcss-animate'),
|
|
75
|
+
require('@tailwindcss/typography'),
|
|
76
|
+
],
|
|
77
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
// https://vite.dev/config/
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
plugins: [react()],
|
|
8
|
+
resolve: {
|
|
9
|
+
alias: {
|
|
10
|
+
'@': path.resolve(__dirname, './src'),
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
server: {
|
|
14
|
+
port: 5173,
|
|
15
|
+
proxy: {
|
|
16
|
+
// Proxy API requests to backend server
|
|
17
|
+
'/api': {
|
|
18
|
+
target: 'http://localhost:4174',
|
|
19
|
+
changeOrigin: true,
|
|
20
|
+
},
|
|
21
|
+
// Proxy WebSocket requests
|
|
22
|
+
'/ws': {
|
|
23
|
+
target: 'ws://localhost:4174',
|
|
24
|
+
ws: true,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
plugins: [react()],
|
|
7
|
+
test: {
|
|
8
|
+
globals: true,
|
|
9
|
+
environment: 'jsdom',
|
|
10
|
+
setupFiles: [],
|
|
11
|
+
coverage: {
|
|
12
|
+
provider: 'v8',
|
|
13
|
+
reporter: ['text', 'json', 'html'],
|
|
14
|
+
exclude: [
|
|
15
|
+
'node_modules/',
|
|
16
|
+
'dist/',
|
|
17
|
+
'**/*.config.js',
|
|
18
|
+
'**/main.jsx',
|
|
19
|
+
'**/index.jsx',
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
resolve: {
|
|
24
|
+
alias: {
|
|
25
|
+
'@': path.resolve(__dirname, './src'),
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Development startup script for AVC Kanban Board
|
|
4
|
+
# Starts both backend and frontend servers
|
|
5
|
+
|
|
6
|
+
echo "🚀 Starting AVC Kanban Board Development Servers..."
|
|
7
|
+
echo ""
|
|
8
|
+
|
|
9
|
+
# Check if .avc/project exists
|
|
10
|
+
if [ ! -d "../.avc/project" ]; then
|
|
11
|
+
echo "⚠️ Warning: .avc/project directory not found"
|
|
12
|
+
echo " The backend will start but no work items will be available"
|
|
13
|
+
echo ""
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
# Start backend server in background
|
|
17
|
+
echo "📦 Starting backend server (port 4174)..."
|
|
18
|
+
cd server
|
|
19
|
+
node start.js .. 4174 &
|
|
20
|
+
BACKEND_PID=$!
|
|
21
|
+
echo " Backend PID: $BACKEND_PID"
|
|
22
|
+
|
|
23
|
+
# Wait for backend to be ready
|
|
24
|
+
sleep 2
|
|
25
|
+
|
|
26
|
+
# Start frontend dev server in background
|
|
27
|
+
echo ""
|
|
28
|
+
echo "🎨 Starting frontend dev server (port 5173)..."
|
|
29
|
+
cd ../client
|
|
30
|
+
npm run dev &
|
|
31
|
+
FRONTEND_PID=$!
|
|
32
|
+
echo " Frontend PID: $FRONTEND_PID"
|
|
33
|
+
|
|
34
|
+
echo ""
|
|
35
|
+
echo "✅ Both servers started!"
|
|
36
|
+
echo ""
|
|
37
|
+
echo "📊 Backend API: http://localhost:4174/api/health"
|
|
38
|
+
echo "🌐 Frontend UI: http://localhost:5173"
|
|
39
|
+
echo ""
|
|
40
|
+
echo "Press Ctrl+C to stop both servers"
|
|
41
|
+
echo ""
|
|
42
|
+
|
|
43
|
+
# Trap Ctrl+C and cleanup
|
|
44
|
+
trap "echo ''; echo '🛑 Stopping servers...'; kill $BACKEND_PID $FRONTEND_PID; exit" INT
|
|
45
|
+
|
|
46
|
+
# Wait for both processes
|
|
47
|
+
wait
|