vibe-fabric 0.1.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.
- package/LICENSE +21 -0
- package/README.md +171 -0
- package/dist/cli/commands/claude.d.ts +19 -0
- package/dist/cli/commands/claude.d.ts.map +1 -0
- package/dist/cli/commands/claude.js +107 -0
- package/dist/cli/commands/claude.js.map +1 -0
- package/dist/cli/commands/coverage.d.ts +37 -0
- package/dist/cli/commands/coverage.d.ts.map +1 -0
- package/dist/cli/commands/coverage.js +374 -0
- package/dist/cli/commands/coverage.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +30 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +187 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gaps.d.ts +52 -0
- package/dist/cli/commands/gaps.d.ts.map +1 -0
- package/dist/cli/commands/gaps.js +487 -0
- package/dist/cli/commands/gaps.js.map +1 -0
- package/dist/cli/commands/help.d.ts +7 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +51 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/init.d.ts +39 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +246 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/prd.d.ts +30 -0
- package/dist/cli/commands/prd.d.ts.map +1 -0
- package/dist/cli/commands/prd.js +179 -0
- package/dist/cli/commands/prd.js.map +1 -0
- package/dist/cli/commands/repo/add.d.ts +36 -0
- package/dist/cli/commands/repo/add.d.ts.map +1 -0
- package/dist/cli/commands/repo/add.js +303 -0
- package/dist/cli/commands/repo/add.js.map +1 -0
- package/dist/cli/commands/scope.d.ts +36 -0
- package/dist/cli/commands/scope.d.ts.map +1 -0
- package/dist/cli/commands/scope.js +312 -0
- package/dist/cli/commands/scope.js.map +1 -0
- package/dist/cli/commands/send.d.ts +43 -0
- package/dist/cli/commands/send.d.ts.map +1 -0
- package/dist/cli/commands/send.js +469 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/commands/status.d.ts +32 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +422 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +37 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +299 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/version.d.ts +7 -0
- package/dist/cli/commands/version.d.ts.map +1 -0
- package/dist/cli/commands/version.js +45 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +65 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/components/ActiveScopes.d.ts +13 -0
- package/dist/cli/ui/components/ActiveScopes.d.ts.map +1 -0
- package/dist/cli/ui/components/ActiveScopes.js +25 -0
- package/dist/cli/ui/components/ActiveScopes.js.map +1 -0
- package/dist/cli/ui/components/EmptyState.d.ts +24 -0
- package/dist/cli/ui/components/EmptyState.d.ts.map +1 -0
- package/dist/cli/ui/components/EmptyState.js +13 -0
- package/dist/cli/ui/components/EmptyState.js.map +1 -0
- package/dist/cli/ui/components/Header.d.ts +11 -0
- package/dist/cli/ui/components/Header.d.ts.map +1 -0
- package/dist/cli/ui/components/Header.js +32 -0
- package/dist/cli/ui/components/Header.js.map +1 -0
- package/dist/cli/ui/components/PrdCoverage.d.ts +12 -0
- package/dist/cli/ui/components/PrdCoverage.d.ts.map +1 -0
- package/dist/cli/ui/components/PrdCoverage.js +15 -0
- package/dist/cli/ui/components/PrdCoverage.js.map +1 -0
- package/dist/cli/ui/components/RecentActivity.d.ts +12 -0
- package/dist/cli/ui/components/RecentActivity.d.ts.map +1 -0
- package/dist/cli/ui/components/RecentActivity.js +40 -0
- package/dist/cli/ui/components/RecentActivity.js.map +1 -0
- package/dist/cli/ui/components/RepoList.d.ts +12 -0
- package/dist/cli/ui/components/RepoList.d.ts.map +1 -0
- package/dist/cli/ui/components/RepoList.js +24 -0
- package/dist/cli/ui/components/RepoList.js.map +1 -0
- package/dist/cli/ui/components/Shortcuts.d.ts +7 -0
- package/dist/cli/ui/components/Shortcuts.d.ts.map +1 -0
- package/dist/cli/ui/components/Shortcuts.js +7 -0
- package/dist/cli/ui/components/Shortcuts.js.map +1 -0
- package/dist/cli/ui/components/index.d.ts +12 -0
- package/dist/cli/ui/components/index.d.ts.map +1 -0
- package/dist/cli/ui/components/index.js +12 -0
- package/dist/cli/ui/components/index.js.map +1 -0
- package/dist/cli/ui/dashboard.d.ts +9 -0
- package/dist/cli/ui/dashboard.d.ts.map +1 -0
- package/dist/cli/ui/dashboard.js +102 -0
- package/dist/cli/ui/dashboard.js.map +1 -0
- package/dist/core/commands.d.ts +32 -0
- package/dist/core/commands.d.ts.map +1 -0
- package/dist/core/commands.js +361 -0
- package/dist/core/commands.js.map +1 -0
- package/dist/core/config.d.ts +18 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +78 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/coverage.d.ts +32 -0
- package/dist/core/coverage.d.ts.map +1 -0
- package/dist/core/coverage.js +286 -0
- package/dist/core/coverage.js.map +1 -0
- package/dist/core/dashboard/data.d.ts +73 -0
- package/dist/core/dashboard/data.d.ts.map +1 -0
- package/dist/core/dashboard/data.js +250 -0
- package/dist/core/dashboard/data.js.map +1 -0
- package/dist/core/dependencies.d.ts +39 -0
- package/dist/core/dependencies.d.ts.map +1 -0
- package/dist/core/dependencies.js +160 -0
- package/dist/core/dependencies.js.map +1 -0
- package/dist/core/doctor/auth.d.ts +22 -0
- package/dist/core/doctor/auth.d.ts.map +1 -0
- package/dist/core/doctor/auth.js +147 -0
- package/dist/core/doctor/auth.js.map +1 -0
- package/dist/core/doctor/config.d.ts +26 -0
- package/dist/core/doctor/config.d.ts.map +1 -0
- package/dist/core/doctor/config.js +172 -0
- package/dist/core/doctor/config.js.map +1 -0
- package/dist/core/doctor/environment.d.ts +26 -0
- package/dist/core/doctor/environment.d.ts.map +1 -0
- package/dist/core/doctor/environment.js +145 -0
- package/dist/core/doctor/environment.js.map +1 -0
- package/dist/core/doctor/index.d.ts +44 -0
- package/dist/core/doctor/index.d.ts.map +1 -0
- package/dist/core/doctor/index.js +134 -0
- package/dist/core/doctor/index.js.map +1 -0
- package/dist/core/doctor/repos.d.ts +22 -0
- package/dist/core/doctor/repos.d.ts.map +1 -0
- package/dist/core/doctor/repos.js +262 -0
- package/dist/core/doctor/repos.js.map +1 -0
- package/dist/core/doctor/sync.d.ts +18 -0
- package/dist/core/doctor/sync.d.ts.map +1 -0
- package/dist/core/doctor/sync.js +146 -0
- package/dist/core/doctor/sync.js.map +1 -0
- package/dist/core/gaps.d.ts +70 -0
- package/dist/core/gaps.d.ts.map +1 -0
- package/dist/core/gaps.js +448 -0
- package/dist/core/gaps.js.map +1 -0
- package/dist/core/github.d.ts +38 -0
- package/dist/core/github.d.ts.map +1 -0
- package/dist/core/github.js +102 -0
- package/dist/core/github.js.map +1 -0
- package/dist/core/prd/analyzer.d.ts +44 -0
- package/dist/core/prd/analyzer.d.ts.map +1 -0
- package/dist/core/prd/analyzer.js +259 -0
- package/dist/core/prd/analyzer.js.map +1 -0
- package/dist/core/prd/check.d.ts +17 -0
- package/dist/core/prd/check.d.ts.map +1 -0
- package/dist/core/prd/check.js +154 -0
- package/dist/core/prd/check.js.map +1 -0
- package/dist/core/prd/index.d.ts +6 -0
- package/dist/core/prd/index.d.ts.map +1 -0
- package/dist/core/prd/index.js +6 -0
- package/dist/core/prd/index.js.map +1 -0
- package/dist/core/project.d.ts +13 -0
- package/dist/core/project.d.ts.map +1 -0
- package/dist/core/project.js +810 -0
- package/dist/core/project.js.map +1 -0
- package/dist/core/prompts.d.ts +52 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +266 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/repo/framework.d.ts +38 -0
- package/dist/core/repo/framework.d.ts.map +1 -0
- package/dist/core/repo/framework.js +142 -0
- package/dist/core/repo/framework.js.map +1 -0
- package/dist/core/repo/index.d.ts +6 -0
- package/dist/core/repo/index.d.ts.map +1 -0
- package/dist/core/repo/index.js +6 -0
- package/dist/core/repo/index.js.map +1 -0
- package/dist/core/repo/templates/claude-agents.d.ts +6 -0
- package/dist/core/repo/templates/claude-agents.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-agents.js +173 -0
- package/dist/core/repo/templates/claude-agents.js.map +1 -0
- package/dist/core/repo/templates/claude-commands.d.ts +6 -0
- package/dist/core/repo/templates/claude-commands.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-commands.js +278 -0
- package/dist/core/repo/templates/claude-commands.js.map +1 -0
- package/dist/core/repo/templates/claude-prompts.d.ts +6 -0
- package/dist/core/repo/templates/claude-prompts.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-prompts.js +258 -0
- package/dist/core/repo/templates/claude-prompts.js.map +1 -0
- package/dist/core/repo/templates/claude-scripts.d.ts +6 -0
- package/dist/core/repo/templates/claude-scripts.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-scripts.js +212 -0
- package/dist/core/repo/templates/claude-scripts.js.map +1 -0
- package/dist/core/repo/templates/index.d.ts +22 -0
- package/dist/core/repo/templates/index.d.ts.map +1 -0
- package/dist/core/repo/templates/index.js +121 -0
- package/dist/core/repo/templates/index.js.map +1 -0
- package/dist/core/repo/templates/vibe-readme.d.ts +6 -0
- package/dist/core/repo/templates/vibe-readme.d.ts.map +1 -0
- package/dist/core/repo/templates/vibe-readme.js +204 -0
- package/dist/core/repo/templates/vibe-readme.js.map +1 -0
- package/dist/core/repo/templates/vibe-scripts.d.ts +6 -0
- package/dist/core/repo/templates/vibe-scripts.d.ts.map +1 -0
- package/dist/core/repo/templates/vibe-scripts.js +308 -0
- package/dist/core/repo/templates/vibe-scripts.js.map +1 -0
- package/dist/core/repo/validation.d.ts +46 -0
- package/dist/core/repo/validation.d.ts.map +1 -0
- package/dist/core/repo/validation.js +154 -0
- package/dist/core/repo/validation.js.map +1 -0
- package/dist/core/runner.d.ts +38 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +124 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/send.d.ts +83 -0
- package/dist/core/send.d.ts.map +1 -0
- package/dist/core/send.js +565 -0
- package/dist/core/send.js.map +1 -0
- package/dist/core/status.d.ts +76 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/status.js +430 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/sync/aggregator.d.ts +22 -0
- package/dist/core/sync/aggregator.d.ts.map +1 -0
- package/dist/core/sync/aggregator.js +278 -0
- package/dist/core/sync/aggregator.js.map +1 -0
- package/dist/core/sync/completion.d.ts +37 -0
- package/dist/core/sync/completion.d.ts.map +1 -0
- package/dist/core/sync/completion.js +264 -0
- package/dist/core/sync/completion.js.map +1 -0
- package/dist/core/sync/index.d.ts +51 -0
- package/dist/core/sync/index.d.ts.map +1 -0
- package/dist/core/sync/index.js +200 -0
- package/dist/core/sync/index.js.map +1 -0
- package/dist/core/sync/scanner.d.ts +39 -0
- package/dist/core/sync/scanner.d.ts.map +1 -0
- package/dist/core/sync/scanner.js +364 -0
- package/dist/core/sync/scanner.js.map +1 -0
- package/dist/types/config.d.ts +157 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +58 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/coverage.d.ts +100 -0
- package/dist/types/coverage.d.ts.map +1 -0
- package/dist/types/coverage.js +8 -0
- package/dist/types/coverage.js.map +1 -0
- package/dist/types/doctor.d.ts +68 -0
- package/dist/types/doctor.d.ts.map +1 -0
- package/dist/types/doctor.js +5 -0
- package/dist/types/doctor.js.map +1 -0
- package/dist/types/gaps.d.ts +129 -0
- package/dist/types/gaps.d.ts.map +1 -0
- package/dist/types/gaps.js +8 -0
- package/dist/types/gaps.js.map +1 -0
- package/dist/types/prompts.d.ts +99 -0
- package/dist/types/prompts.d.ts.map +1 -0
- package/dist/types/prompts.js +5 -0
- package/dist/types/prompts.js.map +1 -0
- package/dist/types/runner.d.ts +156 -0
- package/dist/types/runner.d.ts.map +1 -0
- package/dist/types/runner.js +41 -0
- package/dist/types/runner.js.map +1 -0
- package/dist/types/send.d.ts +157 -0
- package/dist/types/send.d.ts.map +1 -0
- package/dist/types/send.js +18 -0
- package/dist/types/send.js.map +1 -0
- package/dist/types/status.d.ts +150 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +15 -0
- package/dist/types/status.js.map +1 -0
- package/dist/types/sync.d.ts +259 -0
- package/dist/types/sync.d.ts.map +1 -0
- package/dist/types/sync.js +38 -0
- package/dist/types/sync.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Coverage component
|
|
3
|
+
* Shows requirements coverage percentage and gaps
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import type { CoverageInfo } from '../../../core/dashboard/data.js';
|
|
7
|
+
interface PrdCoverageProps {
|
|
8
|
+
coverage: CoverageInfo;
|
|
9
|
+
}
|
|
10
|
+
export declare const PrdCoverage: React.FC<PrdCoverageProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=PrdCoverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrdCoverage.d.ts","sourceRoot":"","sources":["../../../../src/cli/ui/components/PrdCoverage.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAiBpE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqClD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
/**
|
|
4
|
+
* Progress bar component
|
|
5
|
+
*/
|
|
6
|
+
const ProgressBar = ({ value, width }) => {
|
|
7
|
+
const filled = Math.round((value / 100) * width);
|
|
8
|
+
const empty = width - filled;
|
|
9
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: "green", children: '█'.repeat(filled) }), _jsx(Text, { color: "gray", children: '░'.repeat(empty) })] }));
|
|
10
|
+
};
|
|
11
|
+
export const PrdCoverage = ({ coverage }) => {
|
|
12
|
+
const { percentage, done, total, gaps } = coverage;
|
|
13
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, width: 35, children: [_jsx(Text, { bold: true, children: " PRD Coverage " }), total === 0 ? (_jsxs(Box, { flexDirection: "column", paddingY: 1, children: [_jsx(Text, { color: "gray", children: "No requirements yet." }), _jsx(Text, { color: "gray", children: " " }), _jsxs(Text, { children: ["Press ", _jsx(Text, { color: "cyan", children: "[P]" }), " to create PRD."] })] })) : (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(ProgressBar, { value: percentage, width: 20 }), _jsxs(Text, { children: [" ", percentage, "%"] })] }), _jsxs(Text, { color: "gray", children: [done, "/", total, " requirements done"] }), gaps > 0 && (_jsxs(Text, { color: "yellow", children: ["Gaps: ", gaps] }))] }))] }));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=PrdCoverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrdCoverage.js","sourceRoot":"","sources":["../../../../src/cli/ui/components/PrdCoverage.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC;;GAEG;AACH,MAAM,WAAW,GAA+C,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7B,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAQ,EAC/C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,IACxC,CACR,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACtE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAEnD,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,EAAE,aAET,KAAC,IAAI,IAAC,IAAI,qCAAsB,EAE/B,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CACb,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,qCAA4B,EAC9C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAS,EAC3B,MAAC,IAAI,yBACG,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,oBAAW,uBAC9B,IACH,CACP,CAAC,CAAC,CAAC,CACF,8BACE,MAAC,GAAG,eACF,KAAC,WAAW,IAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,GAAI,EAC7C,MAAC,IAAI,oBAAG,UAAU,SAAS,IACvB,EACN,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,aACf,IAAI,OAAG,KAAK,0BACR,EACN,IAAI,GAAG,CAAC,IAAI,CACX,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,uBAAQ,IAAI,IAAQ,CACzC,IACA,CACJ,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recent activity component
|
|
3
|
+
* Shows recent project activity
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import type { ActivityItem } from '../../../core/dashboard/data.js';
|
|
7
|
+
interface RecentActivityProps {
|
|
8
|
+
items: ActivityItem[];
|
|
9
|
+
}
|
|
10
|
+
export declare const RecentActivity: React.FC<RecentActivityProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=RecentActivity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecentActivity.d.ts","sourceRoot":"","sources":["../../../../src/cli/ui/components/RecentActivity.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAuCpE,UAAU,mBAAmB;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyBxD,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
/**
|
|
4
|
+
* Format timestamp for display
|
|
5
|
+
*/
|
|
6
|
+
function formatTimestamp(date) {
|
|
7
|
+
const now = Date.now();
|
|
8
|
+
const diff = now - date.getTime();
|
|
9
|
+
const minutes = Math.floor(diff / 60000);
|
|
10
|
+
if (minutes < 60)
|
|
11
|
+
return `${minutes}m ago`;
|
|
12
|
+
const hours = Math.floor(diff / 3600000);
|
|
13
|
+
if (hours < 24)
|
|
14
|
+
return `${hours}h ago`;
|
|
15
|
+
const days = Math.floor(diff / 86400000);
|
|
16
|
+
if (days === 1)
|
|
17
|
+
return 'yesterday';
|
|
18
|
+
return `${days}d ago`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get activity type symbol
|
|
22
|
+
*/
|
|
23
|
+
function getTypeSymbol(type) {
|
|
24
|
+
switch (type) {
|
|
25
|
+
case 'scope':
|
|
26
|
+
return '●';
|
|
27
|
+
case 'prd':
|
|
28
|
+
return '◆';
|
|
29
|
+
case 'sync':
|
|
30
|
+
return '↻';
|
|
31
|
+
case 'repo':
|
|
32
|
+
return '⬢';
|
|
33
|
+
default:
|
|
34
|
+
return '•';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export const RecentActivity = ({ items }) => {
|
|
38
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsx(Text, { bold: true, children: " Recent Activity " }), items.length === 0 ? (_jsx(Text, { color: "gray", children: "No recent activity." })) : (items.map((item, index) => (_jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: getTypeSymbol(item.type) }), _jsxs(Text, { children: [" ", item.message] })] }), _jsx(Text, { color: "gray", children: formatTimestamp(item.timestamp) })] }, index))))] }));
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=RecentActivity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecentActivity.js","sourceRoot":"","sources":["../../../../src/cli/ui/components/RecentActivity.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC;;GAEG;AACH,SAAS,eAAe,CAAC,IAAU;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAElC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IACzC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAEnC,OAAO,GAAG,IAAI,OAAO,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAA0B;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,GAAG,CAAC;QACb,KAAK,KAAK;YACR,OAAO,GAAG,CAAC;QACb,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QACb,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QACb;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAMD,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACzE,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,aAEX,KAAC,IAAI,IAAC,IAAI,wCAAyB,EAElC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,oCAA2B,CAC9C,CAAC,CAAC,CAAC,CACF,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACzB,MAAC,GAAG,IAAa,cAAc,EAAC,eAAe,aAC7C,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAQ,EACpD,MAAC,IAAI,oBAAG,IAAI,CAAC,OAAO,IAAQ,IACvB,EACP,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,GAAQ,KALnD,KAAK,CAMT,CACP,CAAC,CACH,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository list component
|
|
3
|
+
* Shows configured repositories with sync status
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import type { RepoInfo } from '../../../core/dashboard/data.js';
|
|
7
|
+
interface RepoListProps {
|
|
8
|
+
repos: RepoInfo[];
|
|
9
|
+
}
|
|
10
|
+
export declare const RepoList: React.FC<RepoListProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=RepoList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RepoList.d.ts","sourceRoot":"","sources":["../../../../src/cli/ui/components/RepoList.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAqBhE,UAAU,aAAa;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAkC5C,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
/**
|
|
4
|
+
* Format sync age for display
|
|
5
|
+
*/
|
|
6
|
+
function formatAge(date) {
|
|
7
|
+
if (!date)
|
|
8
|
+
return 'not synced';
|
|
9
|
+
const ageMs = Date.now() - date.getTime();
|
|
10
|
+
const minutes = Math.floor(ageMs / 60000);
|
|
11
|
+
if (minutes < 5)
|
|
12
|
+
return 'just now';
|
|
13
|
+
if (minutes < 60)
|
|
14
|
+
return `${minutes}m ago`;
|
|
15
|
+
const hours = Math.floor(minutes / 60);
|
|
16
|
+
if (hours < 24)
|
|
17
|
+
return `${hours}h ago`;
|
|
18
|
+
const days = Math.floor(hours / 24);
|
|
19
|
+
return `${days}d ago`;
|
|
20
|
+
}
|
|
21
|
+
export const RepoList = ({ repos }) => {
|
|
22
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, width: 35, children: [_jsx(Text, { bold: true, children: " Repositories " }), repos.length === 0 ? (_jsxs(Box, { flexDirection: "column", paddingY: 1, children: [_jsx(Text, { color: "gray", children: "No repositories configured." }), _jsx(Text, { color: "gray", children: " " }), _jsxs(Text, { children: ["Press ", _jsx(Text, { color: "cyan", children: "[R]" }), " to add a repository."] })] })) : (repos.map((repo) => (_jsxs(Box, { children: [_jsx(Text, { color: repo.synced ? 'green' : 'yellow', children: repo.synced ? '●' : '○' }), _jsxs(Text, { children: [" ", repo.alias.padEnd(12)] }), _jsx(Text, { color: "gray", children: repo.synced ? `synced ${formatAge(repo.lastSync)}` : 'not synced' })] }, repo.alias))))] }));
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=RepoList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RepoList.js","sourceRoot":"","sources":["../../../../src/cli/ui/components/RepoList.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC;;GAEG;AACH,SAAS,SAAS,CAAC,IAAW;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,YAAY,CAAC;IAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IAE1C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,OAAO,CAAC;AACxB,CAAC;AAMD,MAAM,CAAC,MAAM,QAAQ,GAA4B,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7D,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,EAAE,aAET,KAAC,IAAI,IAAC,IAAI,qCAAsB,EAE/B,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,4CAAmC,EACrD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAS,EAC3B,MAAC,IAAI,yBACG,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,oBAAW,6BAC9B,IACH,CACP,CAAC,CAAC,CAAC,CACF,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAClB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,YAC1C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACnB,EACP,MAAC,IAAI,oBAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAQ,EACrC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YACf,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,GAC7D,KAPC,IAAI,CAAC,KAAK,CAQd,CACP,CAAC,CACH,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Shortcuts.d.ts","sourceRoot":"","sources":["../../../../src/cli/ui/components/Shortcuts.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAiB7B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
const Shortcut = ({ letter, label }) => (_jsxs(Text, { children: ["[", _jsx(Text, { color: "cyan", children: letter }), "] ", label, ' '] }));
|
|
4
|
+
export const Shortcuts = () => {
|
|
5
|
+
return (_jsxs(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, justifyContent: "center", children: [_jsx(Shortcut, { letter: "P", label: "PRD" }), _jsx(Shortcut, { letter: "S", label: "Scope" }), _jsx(Shortcut, { letter: "R", label: "Repos" }), _jsx(Shortcut, { letter: "Y", label: "Sync" }), _jsx(Shortcut, { letter: "G", label: "Gaps" }), _jsx(Shortcut, { letter: "D", label: "Doctor" }), _jsx(Shortcut, { letter: "Q", label: "Quit" })] }));
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=Shortcuts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Shortcuts.js","sourceRoot":"","sources":["../../../../src/cli/ui/components/Shortcuts.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAOhC,MAAM,QAAQ,GAA4B,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAC/D,MAAC,IAAI,oBACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,MAAM,GAAQ,QAAG,KAAK,EAAE,IAAI,IAC5C,CACR,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAa,GAAG,EAAE;IACtC,OAAO,CACL,MAAC,GAAG,IACF,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,cAAc,EAAC,QAAQ,aAEvB,KAAC,QAAQ,IAAC,MAAM,EAAC,GAAG,EAAC,KAAK,EAAC,KAAK,GAAG,EACnC,KAAC,QAAQ,IAAC,MAAM,EAAC,GAAG,EAAC,KAAK,EAAC,OAAO,GAAG,EACrC,KAAC,QAAQ,IAAC,MAAM,EAAC,GAAG,EAAC,KAAK,EAAC,OAAO,GAAG,EACrC,KAAC,QAAQ,IAAC,MAAM,EAAC,GAAG,EAAC,KAAK,EAAC,MAAM,GAAG,EACpC,KAAC,QAAQ,IAAC,MAAM,EAAC,GAAG,EAAC,KAAK,EAAC,MAAM,GAAG,EACpC,KAAC,QAAQ,IAAC,MAAM,EAAC,GAAG,EAAC,KAAK,EAAC,QAAQ,GAAG,EACtC,KAAC,QAAQ,IAAC,MAAM,EAAC,GAAG,EAAC,KAAK,EAAC,MAAM,GAAG,IAChC,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard UI components
|
|
3
|
+
* Export all components for easy importing
|
|
4
|
+
*/
|
|
5
|
+
export { Header } from './Header.js';
|
|
6
|
+
export { RepoList } from './RepoList.js';
|
|
7
|
+
export { PrdCoverage } from './PrdCoverage.js';
|
|
8
|
+
export { ActiveScopes } from './ActiveScopes.js';
|
|
9
|
+
export { RecentActivity } from './RecentActivity.js';
|
|
10
|
+
export { Shortcuts } from './Shortcuts.js';
|
|
11
|
+
export { EmptyState, LoadingState, NoProjectState } from './EmptyState.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/ui/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard UI components
|
|
3
|
+
* Export all components for easy importing
|
|
4
|
+
*/
|
|
5
|
+
export { Header } from './Header.js';
|
|
6
|
+
export { RepoList } from './RepoList.js';
|
|
7
|
+
export { PrdCoverage } from './PrdCoverage.js';
|
|
8
|
+
export { ActiveScopes } from './ActiveScopes.js';
|
|
9
|
+
export { RecentActivity } from './RecentActivity.js';
|
|
10
|
+
export { Shortcuts } from './Shortcuts.js';
|
|
11
|
+
export { EmptyState, LoadingState, NoProjectState } from './EmptyState.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/ui/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/dashboard.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAwJH;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* TUI Dashboard
|
|
4
|
+
* Main dashboard component that runs when `vibe` is called without arguments
|
|
5
|
+
*/
|
|
6
|
+
import { useState, useEffect } from 'react';
|
|
7
|
+
import { render, Box, Text, useInput, useApp } from 'ink';
|
|
8
|
+
import { spawn } from 'child_process';
|
|
9
|
+
import { Header, RepoList, PrdCoverage, ActiveScopes, RecentActivity, Shortcuts, LoadingState, NoProjectState, } from './components/index.js';
|
|
10
|
+
import { loadDashboardData } from '../../core/dashboard/data.js';
|
|
11
|
+
/**
|
|
12
|
+
* Spawn a vibe command and exit dashboard
|
|
13
|
+
*/
|
|
14
|
+
function spawnCommand(command, exitFn) {
|
|
15
|
+
// Exit dashboard first
|
|
16
|
+
exitFn();
|
|
17
|
+
// Small delay to let the terminal reset
|
|
18
|
+
setTimeout(() => {
|
|
19
|
+
const proc = spawn('node', [process.argv[1] ?? '', ...command], {
|
|
20
|
+
stdio: 'inherit',
|
|
21
|
+
cwd: process.cwd(),
|
|
22
|
+
});
|
|
23
|
+
proc.on('close', (code) => {
|
|
24
|
+
process.exit(code ?? 0);
|
|
25
|
+
});
|
|
26
|
+
}, 100);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Main Dashboard component
|
|
30
|
+
*/
|
|
31
|
+
const Dashboard = () => {
|
|
32
|
+
const { exit } = useApp();
|
|
33
|
+
const [data, setData] = useState(null);
|
|
34
|
+
const [loading, setLoading] = useState(true);
|
|
35
|
+
const [error, setError] = useState(null);
|
|
36
|
+
// Load dashboard data on mount
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
loadDashboardData()
|
|
39
|
+
.then((d) => {
|
|
40
|
+
setData(d);
|
|
41
|
+
setLoading(false);
|
|
42
|
+
})
|
|
43
|
+
.catch((err) => {
|
|
44
|
+
setError(err instanceof Error ? err.message : 'Failed to load data');
|
|
45
|
+
setLoading(false);
|
|
46
|
+
});
|
|
47
|
+
}, []);
|
|
48
|
+
// Handle keyboard input
|
|
49
|
+
useInput((input) => {
|
|
50
|
+
const key = input.toLowerCase();
|
|
51
|
+
switch (key) {
|
|
52
|
+
case 'q':
|
|
53
|
+
exit();
|
|
54
|
+
break;
|
|
55
|
+
case 'p':
|
|
56
|
+
spawnCommand(['prd'], exit);
|
|
57
|
+
break;
|
|
58
|
+
case 's':
|
|
59
|
+
spawnCommand(['scope'], exit);
|
|
60
|
+
break;
|
|
61
|
+
case 'r':
|
|
62
|
+
spawnCommand(['repo', 'list'], exit);
|
|
63
|
+
break;
|
|
64
|
+
case 'y':
|
|
65
|
+
spawnCommand(['sync'], exit);
|
|
66
|
+
break;
|
|
67
|
+
case 'g':
|
|
68
|
+
spawnCommand(['gaps'], exit);
|
|
69
|
+
break;
|
|
70
|
+
case 'd':
|
|
71
|
+
spawnCommand(['doctor'], exit);
|
|
72
|
+
break;
|
|
73
|
+
case 'i':
|
|
74
|
+
if (!data?.hasProject) {
|
|
75
|
+
spawnCommand(['init'], exit);
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// Loading state
|
|
81
|
+
if (loading) {
|
|
82
|
+
return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(LoadingState, { message: "Loading dashboard..." }) }));
|
|
83
|
+
}
|
|
84
|
+
// Error state
|
|
85
|
+
if (error) {
|
|
86
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Text, { color: "red", children: ["Error: ", error] }), _jsx(Text, { color: "gray", children: "Press Q to quit." })] }));
|
|
87
|
+
}
|
|
88
|
+
// No project state
|
|
89
|
+
if (!data?.hasProject) {
|
|
90
|
+
return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(NoProjectState, {}) }));
|
|
91
|
+
}
|
|
92
|
+
// Main dashboard
|
|
93
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Header, { projectName: data.header.projectName, version: data.header.version, lastSync: data.header.lastSync }), _jsxs(Box, { marginTop: 1, children: [_jsx(RepoList, { repos: data.repos }), _jsx(Box, { marginLeft: 1, children: _jsx(PrdCoverage, { coverage: data.coverage }) })] }), _jsx(Box, { marginTop: 1, children: _jsx(ActiveScopes, { scopes: data.scopes, summary: data.scopeSummary }) }), _jsx(Box, { marginTop: 1, children: _jsx(RecentActivity, { items: data.activity }) }), _jsx(Box, { marginTop: 1, children: _jsx(Shortcuts, {}) })] }));
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Run the dashboard
|
|
97
|
+
*/
|
|
98
|
+
export async function runDashboard() {
|
|
99
|
+
const { waitUntilExit } = render(_jsx(Dashboard, {}));
|
|
100
|
+
await waitUntilExit();
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/ui/dashboard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command file generation and management
|
|
3
|
+
*
|
|
4
|
+
* Handles creation and management of .claude/commands/ files for both
|
|
5
|
+
* the planning hub and dev repositories.
|
|
6
|
+
*/
|
|
7
|
+
import type { ParsedCommand, CommandListResult } from '../types/runner.js';
|
|
8
|
+
/**
|
|
9
|
+
* Generate planning hub commands in .claude/commands/
|
|
10
|
+
*/
|
|
11
|
+
export declare function generatePlanningHubCommands(projectPath: string): Promise<string[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Generate dev repo commands (for injection via vibe repo add)
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateDevRepoCommands(repoPath: string): Promise<string[]>;
|
|
16
|
+
/**
|
|
17
|
+
* List all commands in a project
|
|
18
|
+
*/
|
|
19
|
+
export declare function listCommands(projectPath: string): Promise<CommandListResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if planning hub commands exist
|
|
22
|
+
*/
|
|
23
|
+
export declare function hasCommands(projectPath: string): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Get specific command content
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCommand(projectPath: string, name: string): Promise<ParsedCommand | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Create custom command directory
|
|
30
|
+
*/
|
|
31
|
+
export declare function ensureCustomCommandsDir(projectPath: string): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/core/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAmP3E;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAaxF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAajF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0DlF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMvE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAYjG;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAShF"}
|