cortex-tms 3.2.0 → 4.0.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/README.md +238 -529
- package/dist/cli.js +14 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive.d.ts +5 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +83 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +20 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/review.js +19 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +4 -100
- package/dist/commands/status.js.map +1 -1
- package/dist/types/cli.d.ts +8 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/ui/components/Dashboard.d.ts +11 -0
- package/dist/ui/components/Dashboard.d.ts.map +1 -0
- package/dist/ui/components/Dashboard.js +63 -0
- package/dist/ui/components/Dashboard.js.map +1 -0
- package/dist/ui/components/dashboard/ContextReductionCard.d.ts +9 -0
- package/dist/ui/components/dashboard/ContextReductionCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/ContextReductionCard.js +38 -0
- package/dist/ui/components/dashboard/ContextReductionCard.js.map +1 -0
- package/dist/ui/components/dashboard/CostSavingsCard.d.ts +10 -0
- package/dist/ui/components/dashboard/CostSavingsCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/CostSavingsCard.js +45 -0
- package/dist/ui/components/dashboard/CostSavingsCard.js.map +1 -0
- package/dist/ui/components/dashboard/FileDistributionCard.d.ts +10 -0
- package/dist/ui/components/dashboard/FileDistributionCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/FileDistributionCard.js +51 -0
- package/dist/ui/components/dashboard/FileDistributionCard.js.map +1 -0
- package/dist/ui/components/dashboard/FileSizeHealthCard.d.ts +15 -0
- package/dist/ui/components/dashboard/FileSizeHealthCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/FileSizeHealthCard.js +48 -0
- package/dist/ui/components/dashboard/FileSizeHealthCard.js.map +1 -0
- package/dist/ui/components/dashboard/Footer.d.ts +3 -0
- package/dist/ui/components/dashboard/Footer.d.ts.map +1 -0
- package/dist/ui/components/dashboard/Footer.js +13 -0
- package/dist/ui/components/dashboard/Footer.js.map +1 -0
- package/dist/ui/components/dashboard/GovernanceHealthCard.d.ts +10 -0
- package/dist/ui/components/dashboard/GovernanceHealthCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/GovernanceHealthCard.js +43 -0
- package/dist/ui/components/dashboard/GovernanceHealthCard.js.map +1 -0
- package/dist/ui/components/dashboard/GuardianStatusCard.d.ts +10 -0
- package/dist/ui/components/dashboard/GuardianStatusCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/GuardianStatusCard.js +58 -0
- package/dist/ui/components/dashboard/GuardianStatusCard.js.map +1 -0
- package/dist/ui/components/dashboard/Header.d.ts +7 -0
- package/dist/ui/components/dashboard/Header.d.ts.map +1 -0
- package/dist/ui/components/dashboard/Header.js +21 -0
- package/dist/ui/components/dashboard/Header.js.map +1 -0
- package/dist/ui/components/dashboard/HotFilesCard.d.ts +8 -0
- package/dist/ui/components/dashboard/HotFilesCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/HotFilesCard.js +28 -0
- package/dist/ui/components/dashboard/HotFilesCard.js.map +1 -0
- package/dist/ui/components/dashboard/NotConfiguredCard.d.ts +10 -0
- package/dist/ui/components/dashboard/NotConfiguredCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/NotConfiguredCard.js +13 -0
- package/dist/ui/components/dashboard/NotConfiguredCard.js.map +1 -0
- package/dist/ui/components/dashboard/SprintProgressCard.d.ts +11 -0
- package/dist/ui/components/dashboard/SprintProgressCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/SprintProgressCard.js +33 -0
- package/dist/ui/components/dashboard/SprintProgressCard.js.map +1 -0
- package/dist/ui/components/dashboard/StalenessCard.d.ts +10 -0
- package/dist/ui/components/dashboard/StalenessCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/StalenessCard.js +43 -0
- package/dist/ui/components/dashboard/StalenessCard.js.map +1 -0
- package/dist/ui/components/dashboard/TabBar.d.ts +8 -0
- package/dist/ui/components/dashboard/TabBar.d.ts.map +1 -0
- package/dist/ui/components/dashboard/TabBar.js +16 -0
- package/dist/ui/components/dashboard/TabBar.js.map +1 -0
- package/dist/ui/components/dashboard/ValidationCard.d.ts +10 -0
- package/dist/ui/components/dashboard/ValidationCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/ValidationCard.js +62 -0
- package/dist/ui/components/dashboard/ValidationCard.js.map +1 -0
- package/dist/ui/components/dashboard/ViewContainer.d.ts +14 -0
- package/dist/ui/components/dashboard/ViewContainer.d.ts.map +1 -0
- package/dist/ui/components/dashboard/ViewContainer.js +53 -0
- package/dist/ui/components/dashboard/ViewContainer.js.map +1 -0
- package/dist/ui/components/dashboard/index.d.ts +14 -0
- package/dist/ui/components/dashboard/index.d.ts.map +1 -0
- package/dist/ui/components/dashboard/index.js +14 -0
- package/dist/ui/components/dashboard/index.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +46 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/git-staleness.d.ts +13 -0
- package/dist/utils/git-staleness.d.ts.map +1 -0
- package/dist/utils/git-staleness.js +129 -0
- package/dist/utils/git-staleness.js.map +1 -0
- package/dist/utils/stats-collector.d.ts +62 -0
- package/dist/utils/stats-collector.d.ts.map +1 -0
- package/dist/utils/stats-collector.js +253 -0
- package/dist/utils/stats-collector.js.map +1 -0
- package/dist/utils/validation.d.ts +1 -10
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +1 -15
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +66 -1
- package/dist/utils/validator.js.map +1 -1
- package/package.json +6 -2
- package/templates/CLAUDE.md +1 -1
- package/templates/FUTURE-ENHANCEMENTS.md +1 -1
- package/templates/NEXT-TASKS.md +1 -1
- package/templates/PROMPTS.md +1 -1
- package/templates/README.md +1 -1
- package/templates/docs/archive/v1.0-CHANGELOG.md +1 -1
- package/templates/docs/core/ARCHITECTURE.md +1 -1
- package/templates/docs/core/DECISIONS.md +1 -1
- package/templates/docs/core/DOMAIN-LOGIC.md +1 -1
- package/templates/docs/core/GLOSSARY.md +1 -1
- package/templates/docs/core/PATTERNS.md +1 -1
- package/templates/docs/core/SCHEMA.md +1 -1
- package/templates/docs/core/TROUBLESHOOTING.md +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface CostSavingsCardProps {
|
|
3
|
+
monthlyCost: number;
|
|
4
|
+
tokensAvoided: number;
|
|
5
|
+
percentReduction: number;
|
|
6
|
+
model: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const CostSavingsCard: React.FC<CostSavingsCardProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=CostSavingsCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostSavingsCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/CostSavingsCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAKD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA2D1D,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export const CostSavingsCard = ({ monthlyCost, tokensAvoided, percentReduction, model, }) => {
|
|
4
|
+
const formatTokens = (tokens) => {
|
|
5
|
+
if (tokens >= 1_000_000) {
|
|
6
|
+
return `${(tokens / 1_000_000).toFixed(1)}M`;
|
|
7
|
+
}
|
|
8
|
+
else if (tokens >= 1_000) {
|
|
9
|
+
return `${(tokens / 1_000).toFixed(1)}K`;
|
|
10
|
+
}
|
|
11
|
+
return tokens.toString();
|
|
12
|
+
};
|
|
13
|
+
const formatCost = (cost) => {
|
|
14
|
+
if (cost < 0.01)
|
|
15
|
+
return '<$0.01';
|
|
16
|
+
return `$${cost.toFixed(2)}`;
|
|
17
|
+
};
|
|
18
|
+
const modelDisplay = model
|
|
19
|
+
.replace('claude-', 'Claude ')
|
|
20
|
+
.replace('sonnet-', 'Sonnet ')
|
|
21
|
+
.replace('opus-', 'Opus ')
|
|
22
|
+
.replace('haiku-', 'Haiku ');
|
|
23
|
+
return (React.createElement(Box, { flexDirection: "column", paddingY: 1, borderStyle: "round", borderColor: "green" },
|
|
24
|
+
React.createElement(Box, { paddingX: 2 },
|
|
25
|
+
React.createElement(Text, { bold: true, color: "green" }, "\uD83D\uDCB0 MONTHLY SAVINGS (ESTIMATED)")),
|
|
26
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1, justifyContent: "center" },
|
|
27
|
+
React.createElement(Text, { color: "green", bold: true },
|
|
28
|
+
"~",
|
|
29
|
+
formatCost(monthlyCost))),
|
|
30
|
+
React.createElement(Box, { paddingX: 2, justifyContent: "center" },
|
|
31
|
+
React.createElement(Text, { dimColor: true }, "estimated savings per month")),
|
|
32
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
33
|
+
React.createElement(Text, { dimColor: true },
|
|
34
|
+
"Assumes: ",
|
|
35
|
+
modelDisplay,
|
|
36
|
+
" @ 10 sessions/day")),
|
|
37
|
+
React.createElement(Box, { paddingX: 2 },
|
|
38
|
+
React.createElement(Text, { dimColor: true },
|
|
39
|
+
"Tokens avoided: ",
|
|
40
|
+
formatTokens(tokensAvoided),
|
|
41
|
+
" (",
|
|
42
|
+
percentReduction.toFixed(0),
|
|
43
|
+
"% reduction)"))));
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=CostSavingsCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostSavingsCard.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/CostSavingsCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC,MAAM,CAAC,MAAM,eAAe,GAAmC,CAAC,EAC9D,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,KAAK,GACN,EAAE,EAAE;IAEH,MAAM,YAAY,GAAG,CAAC,MAAc,EAAU,EAAE;QAC9C,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,CAAC;aAAM,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,OAAO,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC,CAAC;IAGF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE;QAC1C,IAAI,IAAI,GAAG,IAAI;YAAE,OAAO,QAAQ,CAAC;QACjC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,CAAC,CAAC;IAGF,MAAM,YAAY,GAAG,KAAK;SACvB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;SACzB,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE/B,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO;QAC9E,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,+CAEjB,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAC,QAAQ;YACtD,oBAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI;;gBACpB,UAAU,CAAC,WAAW,CAAC,CACpB,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAC,QAAQ;YACvC,oBAAC,IAAI,IAAC,QAAQ,wCAAmC,CAC7C;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,QAAQ;;gBAAW,YAAY;qCAA0B,CAC3D;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,QAAQ;;gBACK,YAAY,CAAC,aAAa,CAAC;;gBAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;+BAEtE,CACH,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface FileDistributionCardProps {
|
|
3
|
+
hot: number;
|
|
4
|
+
warm: number;
|
|
5
|
+
cold: number;
|
|
6
|
+
total: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const FileDistributionCard: React.FC<FileDistributionCardProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=FileDistributionCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileDistributionCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/FileDistributionCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,yBAAyB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAmEpE,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text, Newline } from 'ink';
|
|
3
|
+
export const FileDistributionCard = ({ hot, warm, cold, total, }) => {
|
|
4
|
+
const getPercentage = (count) => Math.round((count / total) * 100);
|
|
5
|
+
const getBarLength = (count) => Math.round((count / total) * 20);
|
|
6
|
+
return (React.createElement(React.Fragment, null,
|
|
7
|
+
React.createElement(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1 },
|
|
8
|
+
React.createElement(Text, { bold: true }, "\uD83D\uDCC1 FILE DISTRIBUTION"),
|
|
9
|
+
React.createElement(Newline, null),
|
|
10
|
+
React.createElement(Box, null,
|
|
11
|
+
React.createElement(Box, { width: 20 },
|
|
12
|
+
React.createElement(Text, { color: "yellow" }, "\uD83D\uDD25 HOT")),
|
|
13
|
+
React.createElement(Box, { width: 8 },
|
|
14
|
+
React.createElement(Text, { color: "white" }, hot)),
|
|
15
|
+
React.createElement(Text, { dimColor: true },
|
|
16
|
+
"(",
|
|
17
|
+
getPercentage(hot),
|
|
18
|
+
"%)"),
|
|
19
|
+
React.createElement(Box, null,
|
|
20
|
+
React.createElement(Text, { color: "yellow" }, '█'.repeat(getBarLength(hot))),
|
|
21
|
+
React.createElement(Text, { dimColor: true }, '░'.repeat(20 - getBarLength(hot))))),
|
|
22
|
+
React.createElement(Newline, null),
|
|
23
|
+
React.createElement(Box, null,
|
|
24
|
+
React.createElement(Box, { width: 20 },
|
|
25
|
+
React.createElement(Text, { color: "blue" }, "\uD83C\uDF21\uFE0F WARM")),
|
|
26
|
+
React.createElement(Box, { width: 8 },
|
|
27
|
+
React.createElement(Text, { color: "white" }, warm)),
|
|
28
|
+
React.createElement(Text, { dimColor: true },
|
|
29
|
+
"(",
|
|
30
|
+
getPercentage(warm),
|
|
31
|
+
"%)"),
|
|
32
|
+
React.createElement(Box, null,
|
|
33
|
+
React.createElement(Text, { color: "blue" }, '█'.repeat(getBarLength(warm))),
|
|
34
|
+
React.createElement(Text, { dimColor: true }, '░'.repeat(20 - getBarLength(warm))))),
|
|
35
|
+
React.createElement(Newline, null),
|
|
36
|
+
React.createElement(Box, null,
|
|
37
|
+
React.createElement(Box, { width: 20 },
|
|
38
|
+
React.createElement(Text, { color: "cyan" }, "\u2744\uFE0F COLD")),
|
|
39
|
+
React.createElement(Box, { width: 8 },
|
|
40
|
+
React.createElement(Text, { color: "white" }, cold)),
|
|
41
|
+
React.createElement(Text, { dimColor: true },
|
|
42
|
+
"(",
|
|
43
|
+
getPercentage(cold),
|
|
44
|
+
"%)"),
|
|
45
|
+
React.createElement(Box, null,
|
|
46
|
+
React.createElement(Text, { color: "cyan" }, '█'.repeat(getBarLength(cold))),
|
|
47
|
+
React.createElement(Text, { dimColor: true }, '░'.repeat(20 - getBarLength(cold)))))),
|
|
48
|
+
React.createElement(Newline, null),
|
|
49
|
+
React.createElement(Newline, null)));
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=FileDistributionCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileDistributionCard.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/FileDistributionCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface FileSizeHealthItem {
|
|
3
|
+
file: string;
|
|
4
|
+
lines: number;
|
|
5
|
+
limit: number;
|
|
6
|
+
percent: number;
|
|
7
|
+
status: 'healthy' | 'warning' | 'over';
|
|
8
|
+
}
|
|
9
|
+
interface FileSizeHealthCardProps {
|
|
10
|
+
files: FileSizeHealthItem[];
|
|
11
|
+
maxDisplay?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare const FileSizeHealthCard: React.FC<FileSizeHealthCardProps>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=FileSizeHealthCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSizeHealthCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/FileSizeHealthCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;CACxC;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAiEhE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export const FileSizeHealthCard = ({ files, maxDisplay = 5, }) => {
|
|
4
|
+
const topFiles = files.slice(0, maxDisplay);
|
|
5
|
+
const overLimitCount = files.filter((f) => f.status === 'over').length;
|
|
6
|
+
const getStatusDisplay = (status) => {
|
|
7
|
+
switch (status) {
|
|
8
|
+
case 'over':
|
|
9
|
+
return { emoji: '🔴', color: 'red' };
|
|
10
|
+
case 'warning':
|
|
11
|
+
return { emoji: '🟡', color: 'yellow' };
|
|
12
|
+
case 'healthy':
|
|
13
|
+
return { emoji: '🟢', color: 'green' };
|
|
14
|
+
default:
|
|
15
|
+
return { emoji: '⚪', color: 'gray' };
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
return (React.createElement(Box, { flexDirection: "column", paddingY: 1, borderStyle: "round", borderColor: "yellow" },
|
|
19
|
+
React.createElement(Box, { paddingX: 2 },
|
|
20
|
+
React.createElement(Text, { bold: true, color: "yellow" }, "\uD83D\uDCCF FILE SIZE HEALTH")),
|
|
21
|
+
topFiles.length === 0 ? (React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
22
|
+
React.createElement(Text, { dimColor: true }, "No tracked files found"))) : (React.createElement(React.Fragment, null,
|
|
23
|
+
topFiles.map((file) => {
|
|
24
|
+
const { emoji, color } = getStatusDisplay(file.status);
|
|
25
|
+
return (React.createElement(Box, { key: file.file, paddingX: 2, paddingTop: 1 },
|
|
26
|
+
React.createElement(Text, null,
|
|
27
|
+
emoji,
|
|
28
|
+
" "),
|
|
29
|
+
React.createElement(Text, { color: color }, file.file.padEnd(30)),
|
|
30
|
+
React.createElement(Text, { dimColor: true },
|
|
31
|
+
' ',
|
|
32
|
+
file.lines,
|
|
33
|
+
"/",
|
|
34
|
+
file.limit,
|
|
35
|
+
" lines (",
|
|
36
|
+
file.percent,
|
|
37
|
+
"%)")));
|
|
38
|
+
}),
|
|
39
|
+
overLimitCount > 0 && (React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
40
|
+
React.createElement(Text, { color: "red", bold: true },
|
|
41
|
+
overLimitCount,
|
|
42
|
+
" file",
|
|
43
|
+
overLimitCount > 1 ? 's' : '',
|
|
44
|
+
" over limit"),
|
|
45
|
+
React.createElement(Text, { dimColor: true }, " \u2022 Run: "),
|
|
46
|
+
React.createElement(Text, { color: "cyan" }, "cortex-tms validate --fix")))))));
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=FileSizeHealthCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSizeHealthCard.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/FileSizeHealthCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAkBhC,MAAM,CAAC,MAAM,kBAAkB,GAAsC,CAAC,EACpE,KAAK,EACL,UAAU,GAAG,CAAC,GACf,EAAE,EAAE;IAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAG5C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAGvE,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE;QAC1C,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;YAChD,KAAK,SAAS;gBACZ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAiB,EAAE,CAAC;YACnD,KAAK,SAAS;gBACZ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAgB,EAAE,CAAC;YAClD;gBACE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAe,EAAE,CAAC;QAClD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,QAAQ;QAC/E,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,QAAQ,oCAElB,CACH;QAEL,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,QAAQ,mCAA8B,CACxC,CACP,CAAC,CAAC,CAAC,CACF;YACG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACrB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvD,OAAO,CACL,oBAAC,GAAG,IAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;oBAC7C,oBAAC,IAAI;wBAAE,KAAK;4BAAS;oBACrB,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,IAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAQ;oBACjD,oBAAC,IAAI,IAAC,QAAQ;wBACX,GAAG;wBACH,IAAI,CAAC,KAAK;;wBAAG,IAAI,CAAC,KAAK;;wBAAU,IAAI,CAAC,OAAO;6BACzC,CACH,CACP,CAAC;YACJ,CAAC,CAAC;YAED,cAAc,GAAG,CAAC,IAAI,CACrB,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;gBAC7B,oBAAC,IAAI,IAAC,KAAK,EAAC,KAAK,EAAC,IAAI;oBACnB,cAAc;;oBAAO,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;kCAC9C;gBACP,oBAAC,IAAI,IAAC,QAAQ,0BAAgB;gBAC9B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,gCAAiC,CAC/C,CACP,CACA,CACJ,CACG,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAe1B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export const Footer = () => {
|
|
4
|
+
return (React.createElement(Box, { flexDirection: "column", paddingTop: 1 },
|
|
5
|
+
React.createElement(Box, { justifyContent: "center" },
|
|
6
|
+
React.createElement(Text, { dimColor: true }, "Tab: Switch view \u2022 1/2/3: Jump to view \u2022 q: Quit")),
|
|
7
|
+
React.createElement(Box, { justifyContent: "center" },
|
|
8
|
+
React.createElement(Text, { dimColor: true },
|
|
9
|
+
"Use ",
|
|
10
|
+
React.createElement(Text, { color: "cyan" }, "--live"),
|
|
11
|
+
" for auto-refresh (5s interval)"))));
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=Footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAa,GAAG,EAAE;IACnC,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC;QACvC,oBAAC,GAAG,IAAC,cAAc,EAAC,QAAQ;YAC1B,oBAAC,IAAI,IAAC,QAAQ,uEAEP,CACH;QACN,oBAAC,GAAG,IAAC,cAAc,EAAC,QAAQ;YAC1B,oBAAC,IAAI,IAAC,QAAQ;;gBACR,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,aAAc;kDAC/B,CACH,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface GovernanceHealthCardProps {
|
|
3
|
+
score: number;
|
|
4
|
+
validationStatus: 'healthy' | 'warnings' | 'errors' | 'unknown';
|
|
5
|
+
guardianStatus: 'compliant' | 'minor_issues' | 'major_violations' | 'unknown';
|
|
6
|
+
staleness: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const GovernanceHealthCard: React.FC<GovernanceHealthCardProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=GovernanceHealthCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GovernanceHealthCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/GovernanceHealthCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;IAChE,cAAc,EAAE,WAAW,GAAG,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC9E,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA2DpE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export const GovernanceHealthCard = ({ score, validationStatus, guardianStatus, staleness, }) => {
|
|
4
|
+
const getScoreColor = (score) => {
|
|
5
|
+
if (score >= 80)
|
|
6
|
+
return 'green';
|
|
7
|
+
if (score >= 60)
|
|
8
|
+
return 'yellow';
|
|
9
|
+
return 'red';
|
|
10
|
+
};
|
|
11
|
+
const getStatusEmoji = () => {
|
|
12
|
+
if (score >= 80)
|
|
13
|
+
return '✅';
|
|
14
|
+
if (score >= 60)
|
|
15
|
+
return '⚠️';
|
|
16
|
+
return '❌';
|
|
17
|
+
};
|
|
18
|
+
const scoreColor = getScoreColor(score);
|
|
19
|
+
return (React.createElement(Box, { flexDirection: "column", paddingY: 1, borderStyle: "round", borderColor: scoreColor },
|
|
20
|
+
React.createElement(Box, { paddingX: 2 },
|
|
21
|
+
React.createElement(Text, { bold: true, color: scoreColor },
|
|
22
|
+
getStatusEmoji(),
|
|
23
|
+
" GOVERNANCE HEALTH")),
|
|
24
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1, justifyContent: "center" },
|
|
25
|
+
React.createElement(Text, { color: scoreColor, bold: true },
|
|
26
|
+
score,
|
|
27
|
+
"/100")),
|
|
28
|
+
React.createElement(Box, { paddingX: 2, justifyContent: "center" },
|
|
29
|
+
React.createElement(Text, { dimColor: true }, "overall quality score")),
|
|
30
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
31
|
+
React.createElement(Text, { dimColor: true },
|
|
32
|
+
"Validation: ",
|
|
33
|
+
React.createElement(Text, { color: validationStatus === 'healthy' ? 'green' : 'yellow' }, validationStatus))),
|
|
34
|
+
React.createElement(Box, { paddingX: 2 },
|
|
35
|
+
React.createElement(Text, { dimColor: true },
|
|
36
|
+
"Guardian: ",
|
|
37
|
+
React.createElement(Text, { color: guardianStatus === 'compliant' ? 'green' : 'yellow' }, guardianStatus))),
|
|
38
|
+
React.createElement(Box, { paddingX: 2 },
|
|
39
|
+
React.createElement(Text, { dimColor: true },
|
|
40
|
+
"Stale docs: ",
|
|
41
|
+
React.createElement(Text, { color: staleness === 0 ? 'green' : 'yellow' }, staleness)))));
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=GovernanceHealthCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GovernanceHealthCard.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/GovernanceHealthCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EACxE,KAAK,EACL,gBAAgB,EAChB,cAAc,EACd,SAAS,GACV,EAAE,EAAE;IAEH,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;QAC9C,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,OAAO,CAAC;QAChC,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,QAAQ,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAGF,MAAM,cAAc,GAAG,GAAW,EAAE;QAClC,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC;QAC5B,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,UAAU;QAClF,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,UAAU;gBACzB,cAAc,EAAE;qCACZ,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAC,QAAQ;YACtD,oBAAC,IAAI,IAAC,KAAK,EAAE,UAAU,EAAE,IAAI;gBAC1B,KAAK;uBACD,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAC,QAAQ;YACvC,oBAAC,IAAI,IAAC,QAAQ,kCAA6B,CACvC;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,QAAQ;;gBACA,oBAAC,IAAI,IAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAG,gBAAgB,CAAQ,CAClG,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,QAAQ;;gBACF,oBAAC,IAAI,IAAC,KAAK,EAAE,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAG,cAAc,CAAQ,CAC9F,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,QAAQ;;gBACA,oBAAC,IAAI,IAAC,KAAK,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAG,SAAS,CAAQ,CAC5E,CACH,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface GuardianStatusCardProps {
|
|
3
|
+
status: 'compliant' | 'minor_issues' | 'major_violations' | 'unknown';
|
|
4
|
+
violationCount: number;
|
|
5
|
+
highConfidenceCount: number;
|
|
6
|
+
lastChecked: Date | null;
|
|
7
|
+
}
|
|
8
|
+
export declare const GuardianStatusCard: React.FC<GuardianStatusCardProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=GuardianStatusCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuardianStatusCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/GuardianStatusCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,uBAAuB;IAC/B,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAAC;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAKD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA4EhE,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export const GuardianStatusCard = ({ status, violationCount, highConfidenceCount, lastChecked, }) => {
|
|
4
|
+
const formatTimeAgo = (date) => {
|
|
5
|
+
const now = new Date();
|
|
6
|
+
const diffMs = now.getTime() - date.getTime();
|
|
7
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
8
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
9
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
10
|
+
if (diffDays > 0)
|
|
11
|
+
return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
|
|
12
|
+
if (diffHours > 0)
|
|
13
|
+
return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
|
|
14
|
+
if (diffMins > 0)
|
|
15
|
+
return `${diffMins} minute${diffMins > 1 ? 's' : ''} ago`;
|
|
16
|
+
return 'just now';
|
|
17
|
+
};
|
|
18
|
+
const getStatusDisplay = () => {
|
|
19
|
+
switch (status) {
|
|
20
|
+
case 'compliant':
|
|
21
|
+
return { emoji: '✅', label: 'All Clear', color: 'green' };
|
|
22
|
+
case 'minor_issues':
|
|
23
|
+
return { emoji: '⚠️ ', label: 'Minor Issues Found', color: 'yellow' };
|
|
24
|
+
case 'major_violations':
|
|
25
|
+
return { emoji: '❌', label: 'Major Violations', color: 'red' };
|
|
26
|
+
default:
|
|
27
|
+
return { emoji: '❓', label: 'Not Reviewed Yet', color: 'gray' };
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const { emoji, label, color } = getStatusDisplay();
|
|
31
|
+
return (React.createElement(Box, { flexDirection: "column", paddingY: 1, borderStyle: "round", borderColor: color },
|
|
32
|
+
React.createElement(Box, { paddingX: 2 },
|
|
33
|
+
React.createElement(Text, { bold: true, color: color }, "\uD83D\uDEE1\uFE0F GUARDIAN CODE REVIEW")),
|
|
34
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
35
|
+
React.createElement(Text, { color: color },
|
|
36
|
+
emoji,
|
|
37
|
+
" ",
|
|
38
|
+
label)),
|
|
39
|
+
lastChecked ? (React.createElement(React.Fragment, null,
|
|
40
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
41
|
+
React.createElement(Text, { dimColor: true },
|
|
42
|
+
"Last review: ",
|
|
43
|
+
formatTimeAgo(lastChecked))),
|
|
44
|
+
violationCount > 0 && (React.createElement(Box, { paddingX: 2 },
|
|
45
|
+
React.createElement(Text, { dimColor: true },
|
|
46
|
+
"Violations: ",
|
|
47
|
+
violationCount,
|
|
48
|
+
" total (",
|
|
49
|
+
highConfidenceCount,
|
|
50
|
+
" high-confidence)"))))) : (React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
51
|
+
React.createElement(Text, { dimColor: true }, "No reviews performed yet"))),
|
|
52
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
53
|
+
React.createElement(Text, { dimColor: true }, "Run: "),
|
|
54
|
+
React.createElement(Text, { color: "cyan" },
|
|
55
|
+
"cortex-tms review ",
|
|
56
|
+
'<file>'))));
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=GuardianStatusCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuardianStatusCard.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/GuardianStatusCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC,MAAM,CAAC,MAAM,kBAAkB,GAAsC,CAAC,EACpE,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,WAAW,GACZ,EAAE,EAAE;IAEH,MAAM,aAAa,GAAG,CAAC,IAAU,EAAU,EAAE;QAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAE5C,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,GAAG,QAAQ,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QACzE,IAAI,SAAS,GAAG,CAAC;YAAE,OAAO,GAAG,SAAS,QAAQ,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAC7E,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,GAAG,QAAQ,UAAU,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAC5E,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAGF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,WAAW;gBACd,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAgB,EAAE,CAAC;YACrE,KAAK,cAAc;gBACjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAiB,EAAE,CAAC;YACjF,KAAK,kBAAkB;gBACrB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;YAC1E;gBACE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAe,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEnD,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK;QAC7E,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,KAAK,+CAEhB,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK;gBACf,KAAK;;gBAAG,KAAK,CACT,CACH;QAEL,WAAW,CAAC,CAAC,CAAC,CACb;YACE,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;gBAC7B,oBAAC,IAAI,IAAC,QAAQ;;oBAAe,aAAa,CAAC,WAAW,CAAC,CAAQ,CAC3D;YAEL,cAAc,GAAG,CAAC,IAAI,CACrB,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;gBACd,oBAAC,IAAI,IAAC,QAAQ;;oBACC,cAAc;;oBAAU,mBAAmB;wCACnD,CACH,CACP,CACA,CACJ,CAAC,CAAC,CAAC,CACF,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,QAAQ,qCAAgC,CAC1C,CACP;QAED,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,QAAQ,kBAAa;YAC3B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;gBAAoB,QAAQ,CAAQ,CAClD,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA8BxC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { Box, Text, Newline } from 'ink';
|
|
3
|
+
export const Header = ({ projectName }) => {
|
|
4
|
+
const [time, setTime] = useState(new Date());
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const interval = setInterval(() => setTime(new Date()), 1000);
|
|
7
|
+
return () => clearInterval(interval);
|
|
8
|
+
}, []);
|
|
9
|
+
return (React.createElement(React.Fragment, null,
|
|
10
|
+
React.createElement(Box, { justifyContent: "center" },
|
|
11
|
+
React.createElement(Text, { bold: true, color: "cyan" }, "\uD83E\uDDE0 CORTEX TMS DASHBOARD")),
|
|
12
|
+
React.createElement(Newline, null),
|
|
13
|
+
React.createElement(Box, { justifyContent: "space-between" },
|
|
14
|
+
React.createElement(Text, { dimColor: true },
|
|
15
|
+
"Project: ",
|
|
16
|
+
React.createElement(Text, { color: "white" }, projectName)),
|
|
17
|
+
React.createElement(Text, { dimColor: true }, time.toLocaleTimeString())),
|
|
18
|
+
React.createElement(Newline, null),
|
|
19
|
+
React.createElement(Newline, null)));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAMzC,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAC/D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAG7C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL;QACE,oBAAC,GAAG,IAAC,cAAc,EAAC,QAAQ;YAC1B,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,wCAEhB,CACH;QAEN,oBAAC,OAAO,OAAG;QAEX,oBAAC,GAAG,IAAC,cAAc,EAAC,eAAe;YACjC,oBAAC,IAAI,IAAC,QAAQ;;gBACH,oBAAC,IAAI,IAAC,KAAK,EAAC,OAAO,IAAE,WAAW,CAAQ,CAC5C;YACP,oBAAC,IAAI,IAAC,QAAQ,UAAE,IAAI,CAAC,kBAAkB,EAAE,CAAQ,CAC7C;QAEN,oBAAC,OAAO,OAAG;QACX,oBAAC,OAAO,OAAG,CACV,CACJ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HotFilesCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/HotFilesCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA0CpD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text, Newline } from 'ink';
|
|
3
|
+
export const HotFilesCard = ({ hotFiles, count }) => {
|
|
4
|
+
return (React.createElement(React.Fragment, null,
|
|
5
|
+
React.createElement(Box, { flexDirection: "column", borderStyle: "single", borderColor: "yellow", paddingX: 1 },
|
|
6
|
+
React.createElement(Text, { bold: true, color: "yellow" },
|
|
7
|
+
"\uD83D\uDD25 ACTIVE FILES (",
|
|
8
|
+
count,
|
|
9
|
+
")"),
|
|
10
|
+
React.createElement(Newline, null),
|
|
11
|
+
count > 0 ? (React.createElement(Box, { flexDirection: "column" },
|
|
12
|
+
hotFiles.slice(0, 5).map((file, i) => (React.createElement(Box, { key: i },
|
|
13
|
+
React.createElement(Text, { dimColor: true }, " \u2022 "),
|
|
14
|
+
React.createElement(Text, { color: "white" }, file)))),
|
|
15
|
+
count > 5 && (React.createElement(React.Fragment, null,
|
|
16
|
+
React.createElement(Newline, null),
|
|
17
|
+
React.createElement(Text, { dimColor: true },
|
|
18
|
+
" +",
|
|
19
|
+
count - 5,
|
|
20
|
+
" more files"))))) : (React.createElement(Box, null,
|
|
21
|
+
React.createElement(Text, { dimColor: true }, " No HOT files detected"))),
|
|
22
|
+
React.createElement(Newline, null),
|
|
23
|
+
React.createElement(Box, null,
|
|
24
|
+
React.createElement(Text, { dimColor: true }, "These files are always loaded by AI assistants"))),
|
|
25
|
+
React.createElement(Newline, null),
|
|
26
|
+
React.createElement(Newline, null)));
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=HotFilesCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HotFilesCard.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/HotFilesCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAOzC,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/E,OAAO,CACL;QACE,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC;YAC/E,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,QAAQ;;gBACL,KAAK;oBAClB;YAEP,oBAAC,OAAO,OAAG;YAEV,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CACX,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;gBACxB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACrC,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC;oBACT,oBAAC,IAAI,IAAC,QAAQ,sBAAY;oBAC1B,oBAAC,IAAI,IAAC,KAAK,EAAC,OAAO,IAAE,IAAI,CAAQ,CAC7B,CACP,CAAC;gBACD,KAAK,GAAG,CAAC,IAAI,CACZ;oBACE,oBAAC,OAAO,OAAG;oBACX,oBAAC,IAAI,IAAC,QAAQ;;wBAAK,KAAK,GAAG,CAAC;sCAAmB,CAC9C,CACJ,CACG,CACP,CAAC,CAAC,CAAC,CACF,oBAAC,GAAG;gBACF,oBAAC,IAAI,IAAC,QAAQ,oCAA+B,CACzC,CACP;YAED,oBAAC,OAAO,OAAG;YAEX,oBAAC,GAAG;gBACF,oBAAC,IAAI,IAAC,QAAQ,2DAAsD,CAChE,CACF;QAEN,oBAAC,OAAO,OAAG;QACX,oBAAC,OAAO,OAAG,CACV,CACJ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface NotConfiguredCardProps {
|
|
3
|
+
title: string;
|
|
4
|
+
message: string;
|
|
5
|
+
icon?: string;
|
|
6
|
+
color?: 'gray' | 'yellow' | 'cyan';
|
|
7
|
+
}
|
|
8
|
+
export declare const NotConfiguredCard: React.FC<NotConfiguredCardProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=NotConfiguredCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotConfiguredCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/NotConfiguredCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACpC;AAKD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAmB9D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export const NotConfiguredCard = ({ title, message, icon = '⚙️ ', color = 'gray', }) => {
|
|
4
|
+
return (React.createElement(Box, { flexDirection: "column", paddingY: 1, borderStyle: "round", borderColor: color },
|
|
5
|
+
React.createElement(Box, { paddingX: 2 },
|
|
6
|
+
React.createElement(Text, { bold: true, color: color },
|
|
7
|
+
icon,
|
|
8
|
+
" ",
|
|
9
|
+
title)),
|
|
10
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
11
|
+
React.createElement(Text, { dimColor: true }, message))));
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=NotConfiguredCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotConfiguredCard.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/NotConfiguredCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAClE,KAAK,EACL,OAAO,EACP,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,MAAM,GACf,EAAE,EAAE;IACH,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK;QAC7E,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,KAAK;gBACpB,IAAI;;gBAAG,KAAK,CACR,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,QAAQ,UAAE,OAAO,CAAQ,CAC3B,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface SprintProgressCardProps {
|
|
3
|
+
sprintName: string;
|
|
4
|
+
progress: number;
|
|
5
|
+
done: number;
|
|
6
|
+
inProgress: number;
|
|
7
|
+
todo: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const SprintProgressCard: React.FC<SprintProgressCardProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=SprintProgressCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SprintProgressCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/SprintProgressCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA2ChE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export const SprintProgressCard = ({ sprintName, progress, done, inProgress, todo, }) => {
|
|
4
|
+
const barWidth = 40;
|
|
5
|
+
const filled = Math.round((progress / 100) * barWidth);
|
|
6
|
+
const empty = barWidth - filled;
|
|
7
|
+
const progressBar = '█'.repeat(filled) + '░'.repeat(empty);
|
|
8
|
+
return (React.createElement(Box, { flexDirection: "column", paddingY: 1, borderStyle: "round", borderColor: "cyan" },
|
|
9
|
+
React.createElement(Box, { paddingX: 2 },
|
|
10
|
+
React.createElement(Text, { bold: true, color: "cyan" }, "\uD83C\uDFAF SPRINT PROGRESS")),
|
|
11
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
12
|
+
React.createElement(Text, { dimColor: true }, "Current: "),
|
|
13
|
+
React.createElement(Text, null, sprintName)),
|
|
14
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
15
|
+
React.createElement(Text, { color: "green" }, progressBar),
|
|
16
|
+
React.createElement(Text, { color: "cyan", bold: true },
|
|
17
|
+
' ',
|
|
18
|
+
progress,
|
|
19
|
+
"%")),
|
|
20
|
+
React.createElement(Box, { paddingX: 2, paddingTop: 1 },
|
|
21
|
+
React.createElement(Text, { color: "green" },
|
|
22
|
+
"\u2705 Done: ",
|
|
23
|
+
done),
|
|
24
|
+
React.createElement(Text, { dimColor: true }, " | "),
|
|
25
|
+
React.createElement(Text, { color: "yellow" },
|
|
26
|
+
"\uD83D\uDD04 In Progress: ",
|
|
27
|
+
inProgress),
|
|
28
|
+
React.createElement(Text, { dimColor: true }, " | "),
|
|
29
|
+
React.createElement(Text, { color: "gray" },
|
|
30
|
+
"\uD83D\uDCCB Todo: ",
|
|
31
|
+
todo))));
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=SprintProgressCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SprintProgressCard.js","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/SprintProgressCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAahC,MAAM,CAAC,MAAM,kBAAkB,GAAsC,CAAC,EACpE,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,IAAI,GACL,EAAE,EAAE;IAEH,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChC,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3D,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM;QAC7E,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC;YACd,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,mCAEhB,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,QAAQ,sBAAiB;YAC/B,oBAAC,IAAI,QAAE,UAAU,CAAQ,CACrB;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,KAAK,EAAC,OAAO,IAAE,WAAW,CAAQ;YACxC,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI;gBACpB,GAAG;gBACH,QAAQ;oBACJ,CACH;QAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC7B,oBAAC,IAAI,IAAC,KAAK,EAAC,OAAO;;gBAAU,IAAI,CAAQ;YACzC,oBAAC,IAAI,IAAC,QAAQ,gBAAW;YACzB,oBAAC,IAAI,IAAC,KAAK,EAAC,QAAQ;;gBAAkB,UAAU,CAAQ;YACxD,oBAAC,IAAI,IAAC,QAAQ,gBAAW;YACzB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;gBAAW,IAAI,CAAQ,CACrC,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface StalenessCardProps {
|
|
3
|
+
staleDocsCount: number;
|
|
4
|
+
totalDocsCount: number;
|
|
5
|
+
freshnessPercent: number;
|
|
6
|
+
oldestDocDays?: number | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare const StalenessCard: React.FC<StalenessCardProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=StalenessCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StalenessCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/dashboard/StalenessCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,kBAAkB;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAKD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAwEtD,CAAC"}
|