reviewflow 3.19.1 → 3.20.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/CHANGELOG.md +14 -0
- package/dist/dashboard/index.html +107 -34
- package/dist/dashboard/modules/constants.d.ts +1 -0
- package/dist/dashboard/modules/constants.d.ts.map +1 -1
- package/dist/dashboard/modules/constants.js +1 -0
- package/dist/dashboard/modules/constants.js.map +1 -1
- package/dist/dashboard/modules/overview.d.ts +64 -0
- package/dist/dashboard/modules/overview.d.ts.map +1 -0
- package/dist/dashboard/modules/overview.js +246 -0
- package/dist/dashboard/modules/overview.js.map +1 -0
- package/dist/dashboard/modules/tabBar.d.ts +56 -0
- package/dist/dashboard/modules/tabBar.d.ts.map +1 -0
- package/dist/dashboard/modules/tabBar.js +98 -0
- package/dist/dashboard/modules/tabBar.js.map +1 -0
- package/dist/dashboard/styles.css +324 -0
- package/dist/main/cli.d.ts +1 -83
- package/dist/main/cli.d.ts.map +1 -1
- package/dist/main/cli.js +24 -606
- package/dist/main/cli.js.map +1 -1
- package/dist/main/commands/discover.command.d.ts +17 -0
- package/dist/main/commands/discover.command.d.ts.map +1 -0
- package/dist/main/commands/discover.command.js +76 -0
- package/dist/main/commands/discover.command.js.map +1 -0
- package/dist/main/commands/followupImportants.command.d.ts +14 -0
- package/dist/main/commands/followupImportants.command.d.ts.map +1 -0
- package/dist/main/commands/followupImportants.command.js +31 -0
- package/dist/main/commands/followupImportants.command.js.map +1 -0
- package/dist/main/commands/init.command.d.ts +29 -0
- package/dist/main/commands/init.command.d.ts.map +1 -0
- package/dist/main/commands/init.command.js +231 -0
- package/dist/main/commands/init.command.js.map +1 -0
- package/dist/main/commands/logs.command.d.ts +10 -0
- package/dist/main/commands/logs.command.d.ts.map +1 -0
- package/dist/main/commands/logs.command.js +42 -0
- package/dist/main/commands/logs.command.js.map +1 -0
- package/dist/main/commands/start.command.d.ts +21 -0
- package/dist/main/commands/start.command.d.ts.map +1 -0
- package/dist/main/commands/start.command.js +80 -0
- package/dist/main/commands/start.command.js.map +1 -0
- package/dist/main/commands/status.command.d.ts +9 -0
- package/dist/main/commands/status.command.d.ts.map +1 -0
- package/dist/main/commands/status.command.js +26 -0
- package/dist/main/commands/status.command.js.map +1 -0
- package/dist/main/commands/stop.command.d.ts +11 -0
- package/dist/main/commands/stop.command.d.ts.map +1 -0
- package/dist/main/commands/stop.command.js +30 -0
- package/dist/main/commands/stop.command.js.map +1 -0
- package/dist/main/commands/validate.command.d.ts +11 -0
- package/dist/main/commands/validate.command.d.ts.map +1 -0
- package/dist/main/commands/validate.command.js +54 -0
- package/dist/main/commands/validate.command.js.map +1 -0
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +20 -9
- package/dist/main/routes.js.map +1 -1
- package/dist/main/shared/cliConstants.d.ts +5 -0
- package/dist/main/shared/cliConstants.d.ts.map +1 -0
- package/dist/main/shared/cliConstants.js +86 -0
- package/dist/main/shared/cliConstants.js.map +1 -0
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.d.ts +7 -0
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.d.ts.map +1 -0
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.js +13 -0
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.js.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.d.ts +14 -0
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.d.ts.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.js +39 -0
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.js.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.d.ts +88 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.d.ts.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.js +129 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.js.map +1 -0
- package/dist/shared/services/pidFileManager.d.ts +6 -0
- package/dist/shared/services/pidFileManager.d.ts.map +1 -1
- package/dist/shared/services/pidFileManager.js.map +1 -1
- package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.d.ts +10 -0
- package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.js +272 -0
- package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.js.map +1 -0
- package/dist/tests/factories/projectStatsApiResponse.factory.d.ts +16 -0
- package/dist/tests/factories/projectStatsApiResponse.factory.d.ts.map +1 -0
- package/dist/tests/factories/projectStatsApiResponse.factory.js +39 -0
- package/dist/tests/factories/projectStatsApiResponse.factory.js.map +1 -0
- package/dist/tests/factories/recentReviewFile.factory.d.ts +5 -0
- package/dist/tests/factories/recentReviewFile.factory.d.ts.map +1 -0
- package/dist/tests/factories/recentReviewFile.factory.js +16 -0
- package/dist/tests/factories/recentReviewFile.factory.js.map +1 -0
- package/dist/tests/factories/repositoryConfig.factory.d.ts +5 -0
- package/dist/tests/factories/repositoryConfig.factory.d.ts.map +1 -0
- package/dist/tests/factories/repositoryConfig.factory.js +14 -0
- package/dist/tests/factories/repositoryConfig.factory.js.map +1 -0
- package/dist/tests/units/dashboard/modules/constants.test.js +2 -1
- package/dist/tests/units/dashboard/modules/constants.test.js.map +1 -1
- package/dist/tests/units/dashboard/modules/overview.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/overview.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/overview.test.js +176 -0
- package/dist/tests/units/dashboard/modules/overview.test.js.map +1 -0
- package/dist/tests/units/dashboard/modules/tabBar.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/tabBar.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/tabBar.test.js +99 -0
- package/dist/tests/units/dashboard/modules/tabBar.test.js.map +1 -0
- package/dist/tests/units/main/executeDiscover.test.js +1 -1
- package/dist/tests/units/main/executeDiscover.test.js.map +1 -1
- package/dist/tests/units/main/executeFollowupImportants.test.d.ts +2 -0
- package/dist/tests/units/main/executeFollowupImportants.test.d.ts.map +1 -0
- package/dist/tests/units/main/executeFollowupImportants.test.js +48 -0
- package/dist/tests/units/main/executeFollowupImportants.test.js.map +1 -0
- package/dist/tests/units/main/executeInit.test.js +1 -1
- package/dist/tests/units/main/executeInit.test.js.map +1 -1
- package/dist/tests/units/main/executeLogs.test.js +1 -1
- package/dist/tests/units/main/executeLogs.test.js.map +1 -1
- package/dist/tests/units/main/executeStart.test.js +1 -1
- package/dist/tests/units/main/executeStart.test.js.map +1 -1
- package/dist/tests/units/main/executeStatus.test.js +1 -1
- package/dist/tests/units/main/executeStatus.test.js.map +1 -1
- package/dist/tests/units/main/executeStop.test.js +1 -1
- package/dist/tests/units/main/executeStop.test.js.map +1 -1
- package/dist/tests/units/main/executeValidate.test.d.ts +2 -0
- package/dist/tests/units/main/executeValidate.test.d.ts.map +1 -0
- package/dist/tests/units/main/executeValidate.test.js +76 -0
- package/dist/tests/units/main/executeValidate.test.js.map +1 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.d.ts +2 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.d.ts.map +1 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.js +57 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.js +156 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js +289 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard module — tab bar humble object (SPEC-91).
|
|
3
|
+
* Pure functions, no global state, no DOM access in render helpers.
|
|
4
|
+
* localStorage is touched only by readActiveTab / writeActiveTab.
|
|
5
|
+
*
|
|
6
|
+
* Visual DNA: "Agentic OS" — see project_agentic_os_design_dna.md.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { STORAGE_KEY_ACTIVE_TAB } from './constants.js';
|
|
10
|
+
import { escapeHtml } from './html.js';
|
|
11
|
+
|
|
12
|
+
const OVERVIEW_TAB_ID = 'overview';
|
|
13
|
+
const OVERVIEW_TAB_LABEL = 'Overview';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @typedef {Object} TabBarRepositoryInput
|
|
17
|
+
* @property {string} name
|
|
18
|
+
* @property {string} localPath
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {Object} TabBarBuildInput
|
|
23
|
+
* @property {TabBarRepositoryInput[]} repositories
|
|
24
|
+
* @property {string | null} activeTabId
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {Object} TabBarTabViewModel
|
|
29
|
+
* @property {string} id
|
|
30
|
+
* @property {string} label
|
|
31
|
+
* @property {boolean} isActive
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @typedef {Object} TabBarViewModel
|
|
36
|
+
* @property {TabBarTabViewModel[]} tabs
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {TabBarBuildInput} input
|
|
41
|
+
* @returns {TabBarViewModel}
|
|
42
|
+
*/
|
|
43
|
+
export function buildTabBarModel(input) {
|
|
44
|
+
const repositories = Array.isArray(input.repositories) ? input.repositories : [];
|
|
45
|
+
const projectTabIds = new Set(repositories.map((repository) => repository.localPath));
|
|
46
|
+
const activeTabIdMatchesProject = input.activeTabId !== null && projectTabIds.has(input.activeTabId);
|
|
47
|
+
const effectiveActiveId = activeTabIdMatchesProject ? input.activeTabId : OVERVIEW_TAB_ID;
|
|
48
|
+
|
|
49
|
+
const overviewTab = {
|
|
50
|
+
id: OVERVIEW_TAB_ID,
|
|
51
|
+
label: OVERVIEW_TAB_LABEL,
|
|
52
|
+
isActive: effectiveActiveId === OVERVIEW_TAB_ID,
|
|
53
|
+
};
|
|
54
|
+
const projectTabs = repositories.map((repository) => ({
|
|
55
|
+
id: repository.localPath,
|
|
56
|
+
label: repository.name,
|
|
57
|
+
isActive: effectiveActiveId === repository.localPath,
|
|
58
|
+
}));
|
|
59
|
+
|
|
60
|
+
return { tabs: [overviewTab, ...projectTabs] };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @param {TabBarViewModel} viewModel
|
|
65
|
+
* @returns {string}
|
|
66
|
+
*/
|
|
67
|
+
export function renderTabBarHtml(viewModel) {
|
|
68
|
+
const buttons = viewModel.tabs
|
|
69
|
+
.map((tab) => {
|
|
70
|
+
const activeClass = tab.isActive ? ' is-active' : '';
|
|
71
|
+
return `<button type="button" class="dashboard-tab${activeClass}" data-tab-id="${escapeHtml(tab.id)}" role="tab" aria-selected="${tab.isActive ? 'true' : 'false'}">${escapeHtml(tab.label)}</button>`;
|
|
72
|
+
})
|
|
73
|
+
.join('');
|
|
74
|
+
return `<nav class="dashboard-tab-bar" role="tablist">${buttons}</nav>`;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @returns {string | null}
|
|
79
|
+
*/
|
|
80
|
+
export function readActiveTab() {
|
|
81
|
+
try {
|
|
82
|
+
return localStorage.getItem(STORAGE_KEY_ACTIVE_TAB);
|
|
83
|
+
} catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @param {string} tabId
|
|
90
|
+
* @returns {void}
|
|
91
|
+
*/
|
|
92
|
+
export function writeActiveTab(tabId) {
|
|
93
|
+
try {
|
|
94
|
+
localStorage.setItem(STORAGE_KEY_ACTIVE_TAB, tabId);
|
|
95
|
+
} catch {
|
|
96
|
+
// localStorage may be unavailable (private mode, server-side rendering); ignore.
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabBar.js","sourceRoot":"","sources":["../../../src/dashboard/modules/tabBar.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,eAAe,GAAG,UAAU,CAAC;AACnC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAEtC;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAK;IACpC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACtF,MAAM,yBAAyB,GAAG,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrG,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC;IAE1F,MAAM,WAAW,GAAG;QAClB,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,kBAAkB;QACzB,QAAQ,EAAE,iBAAiB,KAAK,eAAe;KAChD,CAAC;IACF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpD,EAAE,EAAE,UAAU,CAAC,SAAS;QACxB,KAAK,EAAE,UAAU,CAAC,IAAI;QACtB,QAAQ,EAAE,iBAAiB,KAAK,UAAU,CAAC,SAAS;KACrD,CAAC,CAAC,CAAC;IAEJ,OAAO,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAS;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI;SAC3B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,6CAA6C,WAAW,kBAAkB,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,+BAA+B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;IACzM,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,iDAAiD,OAAO,QAAQ,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAK;IAClC,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,iFAAiF;IACnF,CAAC;AACH,CAAC"}
|
|
@@ -4573,3 +4573,327 @@ input:focus-visible,
|
|
|
4573
4573
|
animation: none !important;
|
|
4574
4574
|
}
|
|
4575
4575
|
}
|
|
4576
|
+
|
|
4577
|
+
/* ============================================================
|
|
4578
|
+
SPEC-91 — Dashboard Multi-Project Overview
|
|
4579
|
+
Visual DNA: warm near-black + amber + green, monospace,
|
|
4580
|
+
corner-bracket frames, // LABEL prefix, glow-pulse status dots.
|
|
4581
|
+
Reference: project_agentic_os_design_dna.md.
|
|
4582
|
+
============================================================ */
|
|
4583
|
+
|
|
4584
|
+
.dashboard-tab-bar-wrapper {
|
|
4585
|
+
--overview-bg: #0a0908;
|
|
4586
|
+
--overview-border-faint: rgba(255, 180, 100, 0.12);
|
|
4587
|
+
--overview-border-active: rgba(255, 138, 61, 0.65);
|
|
4588
|
+
--overview-accent: #ff8a3d;
|
|
4589
|
+
--overview-accent-dim: #a85a25;
|
|
4590
|
+
--overview-success: #5ce28b;
|
|
4591
|
+
--overview-text-primary: #f3eee8;
|
|
4592
|
+
--overview-text-muted: #7a716a;
|
|
4593
|
+
--overview-mono: ui-monospace, "SF Mono", "JetBrains Mono", "Berkeley Mono", monospace;
|
|
4594
|
+
|
|
4595
|
+
display: block;
|
|
4596
|
+
font-family: var(--overview-mono);
|
|
4597
|
+
}
|
|
4598
|
+
|
|
4599
|
+
.dashboard-tab-bar {
|
|
4600
|
+
display: flex;
|
|
4601
|
+
flex-wrap: wrap;
|
|
4602
|
+
gap: 4px;
|
|
4603
|
+
padding: 0;
|
|
4604
|
+
margin: 0;
|
|
4605
|
+
border-bottom: 1px solid var(--overview-border-faint);
|
|
4606
|
+
}
|
|
4607
|
+
|
|
4608
|
+
.dashboard-tab {
|
|
4609
|
+
background: transparent;
|
|
4610
|
+
border: 1px solid transparent;
|
|
4611
|
+
border-bottom: none;
|
|
4612
|
+
color: var(--overview-text-muted);
|
|
4613
|
+
cursor: pointer;
|
|
4614
|
+
font-family: var(--overview-mono);
|
|
4615
|
+
font-size: 12px;
|
|
4616
|
+
letter-spacing: 0.08em;
|
|
4617
|
+
padding: 8px 14px;
|
|
4618
|
+
text-transform: uppercase;
|
|
4619
|
+
transition: color 120ms ease-out, background-color 120ms ease-out, border-color 120ms ease-out;
|
|
4620
|
+
}
|
|
4621
|
+
|
|
4622
|
+
.dashboard-tab:hover {
|
|
4623
|
+
color: var(--overview-text-primary);
|
|
4624
|
+
background: rgba(255, 138, 61, 0.06);
|
|
4625
|
+
}
|
|
4626
|
+
|
|
4627
|
+
.dashboard-tab.is-active {
|
|
4628
|
+
color: var(--overview-accent);
|
|
4629
|
+
border-color: var(--overview-border-active);
|
|
4630
|
+
background: var(--overview-bg);
|
|
4631
|
+
position: relative;
|
|
4632
|
+
}
|
|
4633
|
+
|
|
4634
|
+
.dashboard-tab.is-active::before {
|
|
4635
|
+
content: "";
|
|
4636
|
+
position: absolute;
|
|
4637
|
+
top: -1px;
|
|
4638
|
+
left: -1px;
|
|
4639
|
+
width: 8px;
|
|
4640
|
+
height: 8px;
|
|
4641
|
+
border-top: 2px solid var(--overview-accent);
|
|
4642
|
+
border-left: 2px solid var(--overview-accent);
|
|
4643
|
+
pointer-events: none;
|
|
4644
|
+
}
|
|
4645
|
+
|
|
4646
|
+
.dashboard-tab.is-active::after {
|
|
4647
|
+
content: "";
|
|
4648
|
+
position: absolute;
|
|
4649
|
+
top: -1px;
|
|
4650
|
+
right: -1px;
|
|
4651
|
+
width: 8px;
|
|
4652
|
+
height: 8px;
|
|
4653
|
+
border-top: 2px solid var(--overview-accent);
|
|
4654
|
+
border-right: 2px solid var(--overview-accent);
|
|
4655
|
+
pointer-events: none;
|
|
4656
|
+
}
|
|
4657
|
+
|
|
4658
|
+
#overview-section {
|
|
4659
|
+
--overview-bg: #0a0908;
|
|
4660
|
+
--overview-border-faint: rgba(255, 180, 100, 0.12);
|
|
4661
|
+
--overview-border-active: rgba(255, 138, 61, 0.65);
|
|
4662
|
+
--overview-accent: #ff8a3d;
|
|
4663
|
+
--overview-accent-dim: #a85a25;
|
|
4664
|
+
--overview-success: #5ce28b;
|
|
4665
|
+
--overview-text-primary: #f3eee8;
|
|
4666
|
+
--overview-text-muted: #7a716a;
|
|
4667
|
+
--overview-glow-active: 0 0 12px rgba(255, 138, 61, 0.55);
|
|
4668
|
+
--overview-mono: ui-monospace, "SF Mono", "JetBrains Mono", "Berkeley Mono", monospace;
|
|
4669
|
+
|
|
4670
|
+
display: block;
|
|
4671
|
+
margin: 24px 0;
|
|
4672
|
+
font-family: var(--overview-mono);
|
|
4673
|
+
color: var(--overview-text-primary);
|
|
4674
|
+
}
|
|
4675
|
+
|
|
4676
|
+
body:not(.overview-tab-active) #overview-section {
|
|
4677
|
+
display: none;
|
|
4678
|
+
}
|
|
4679
|
+
|
|
4680
|
+
body.overview-tab-active .dashboard-main > *:not(#overview-section) {
|
|
4681
|
+
display: none;
|
|
4682
|
+
}
|
|
4683
|
+
|
|
4684
|
+
#overview-section .overview-grid {
|
|
4685
|
+
display: grid;
|
|
4686
|
+
grid-template-columns: 1fr;
|
|
4687
|
+
gap: 18px;
|
|
4688
|
+
}
|
|
4689
|
+
|
|
4690
|
+
@media (min-width: 1100px) {
|
|
4691
|
+
#overview-section .overview-grid {
|
|
4692
|
+
grid-template-columns: 1fr 1fr;
|
|
4693
|
+
}
|
|
4694
|
+
|
|
4695
|
+
#overview-section .overview-grid > [data-section="projects"] {
|
|
4696
|
+
grid-column: 1 / -1;
|
|
4697
|
+
}
|
|
4698
|
+
}
|
|
4699
|
+
|
|
4700
|
+
#overview-section .overview-panel {
|
|
4701
|
+
position: relative;
|
|
4702
|
+
background: var(--overview-bg);
|
|
4703
|
+
border: 1px solid var(--overview-border-faint);
|
|
4704
|
+
padding: 18px 20px 16px;
|
|
4705
|
+
animation: overview-reveal 250ms ease-out;
|
|
4706
|
+
}
|
|
4707
|
+
|
|
4708
|
+
#overview-section .overview-panel::before,
|
|
4709
|
+
#overview-section .overview-panel::after {
|
|
4710
|
+
content: "";
|
|
4711
|
+
position: absolute;
|
|
4712
|
+
width: 12px;
|
|
4713
|
+
height: 12px;
|
|
4714
|
+
pointer-events: none;
|
|
4715
|
+
}
|
|
4716
|
+
|
|
4717
|
+
#overview-section .overview-panel::before {
|
|
4718
|
+
top: -1px;
|
|
4719
|
+
left: -1px;
|
|
4720
|
+
border-top: 2px solid var(--overview-border-active);
|
|
4721
|
+
border-left: 2px solid var(--overview-border-active);
|
|
4722
|
+
}
|
|
4723
|
+
|
|
4724
|
+
#overview-section .overview-panel::after {
|
|
4725
|
+
bottom: -1px;
|
|
4726
|
+
right: -1px;
|
|
4727
|
+
border-bottom: 2px solid var(--overview-border-active);
|
|
4728
|
+
border-right: 2px solid var(--overview-border-active);
|
|
4729
|
+
}
|
|
4730
|
+
|
|
4731
|
+
@keyframes overview-reveal {
|
|
4732
|
+
from { opacity: 0; transform: translateY(4px); }
|
|
4733
|
+
to { opacity: 1; transform: translateY(0); }
|
|
4734
|
+
}
|
|
4735
|
+
|
|
4736
|
+
#overview-section .overview-panel-title {
|
|
4737
|
+
font-family: var(--overview-mono);
|
|
4738
|
+
font-size: 13px;
|
|
4739
|
+
letter-spacing: 0.04em;
|
|
4740
|
+
color: var(--overview-accent);
|
|
4741
|
+
margin-bottom: 14px;
|
|
4742
|
+
}
|
|
4743
|
+
|
|
4744
|
+
#overview-section .overview-empty {
|
|
4745
|
+
color: var(--overview-text-muted);
|
|
4746
|
+
font-family: var(--overview-mono);
|
|
4747
|
+
font-size: 12px;
|
|
4748
|
+
padding: 16px 0;
|
|
4749
|
+
text-align: center;
|
|
4750
|
+
}
|
|
4751
|
+
|
|
4752
|
+
#overview-section .overview-active-list,
|
|
4753
|
+
#overview-section .overview-recent-list {
|
|
4754
|
+
list-style: none;
|
|
4755
|
+
margin: 0;
|
|
4756
|
+
padding: 0;
|
|
4757
|
+
display: flex;
|
|
4758
|
+
flex-direction: column;
|
|
4759
|
+
gap: 6px;
|
|
4760
|
+
}
|
|
4761
|
+
|
|
4762
|
+
#overview-section .overview-active-row,
|
|
4763
|
+
#overview-section .overview-recent-row {
|
|
4764
|
+
display: grid;
|
|
4765
|
+
grid-template-columns: 14px auto 1fr auto;
|
|
4766
|
+
align-items: center;
|
|
4767
|
+
gap: 12px;
|
|
4768
|
+
padding: 6px 8px;
|
|
4769
|
+
border: 1px solid transparent;
|
|
4770
|
+
font-family: var(--overview-mono);
|
|
4771
|
+
font-size: 12px;
|
|
4772
|
+
transition: border-color 120ms ease-out, background-color 120ms ease-out;
|
|
4773
|
+
}
|
|
4774
|
+
|
|
4775
|
+
#overview-section .overview-active-row:hover,
|
|
4776
|
+
#overview-section .overview-recent-row:hover {
|
|
4777
|
+
border-color: var(--overview-border-faint);
|
|
4778
|
+
background: rgba(255, 138, 61, 0.04);
|
|
4779
|
+
}
|
|
4780
|
+
|
|
4781
|
+
#overview-section .overview-status-dot {
|
|
4782
|
+
width: 8px;
|
|
4783
|
+
height: 8px;
|
|
4784
|
+
border-radius: 50%;
|
|
4785
|
+
background: var(--overview-success);
|
|
4786
|
+
box-shadow: 0 0 6px rgba(92, 226, 139, 0.55);
|
|
4787
|
+
animation: overview-pulse 1.4s ease-in-out infinite;
|
|
4788
|
+
}
|
|
4789
|
+
|
|
4790
|
+
@keyframes overview-pulse {
|
|
4791
|
+
0%, 100% { opacity: 0.7; box-shadow: 0 0 6px rgba(92, 226, 139, 0.45); }
|
|
4792
|
+
50% { opacity: 1; box-shadow: 0 0 12px rgba(92, 226, 139, 0.75); }
|
|
4793
|
+
}
|
|
4794
|
+
|
|
4795
|
+
#overview-section .overview-active-project,
|
|
4796
|
+
#overview-section .overview-recent-project {
|
|
4797
|
+
color: var(--overview-accent);
|
|
4798
|
+
letter-spacing: 0.04em;
|
|
4799
|
+
}
|
|
4800
|
+
|
|
4801
|
+
#overview-section .overview-active-mr,
|
|
4802
|
+
#overview-section .overview-recent-mr {
|
|
4803
|
+
color: var(--overview-text-primary);
|
|
4804
|
+
text-decoration: none;
|
|
4805
|
+
font-weight: 600;
|
|
4806
|
+
}
|
|
4807
|
+
|
|
4808
|
+
#overview-section .overview-active-mr:hover {
|
|
4809
|
+
color: var(--overview-accent);
|
|
4810
|
+
text-decoration: underline;
|
|
4811
|
+
}
|
|
4812
|
+
|
|
4813
|
+
#overview-section .overview-active-elapsed {
|
|
4814
|
+
color: var(--overview-text-muted);
|
|
4815
|
+
text-align: right;
|
|
4816
|
+
}
|
|
4817
|
+
|
|
4818
|
+
#overview-section .overview-recent-title {
|
|
4819
|
+
color: var(--overview-text-muted);
|
|
4820
|
+
font-size: 11px;
|
|
4821
|
+
overflow: hidden;
|
|
4822
|
+
text-overflow: ellipsis;
|
|
4823
|
+
white-space: nowrap;
|
|
4824
|
+
}
|
|
4825
|
+
|
|
4826
|
+
#overview-section .overview-project-card-grid {
|
|
4827
|
+
display: grid;
|
|
4828
|
+
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
|
|
4829
|
+
gap: 12px;
|
|
4830
|
+
}
|
|
4831
|
+
|
|
4832
|
+
#overview-section .overview-project-card {
|
|
4833
|
+
background: transparent;
|
|
4834
|
+
border: 1px solid var(--overview-border-faint);
|
|
4835
|
+
color: var(--overview-text-primary);
|
|
4836
|
+
cursor: pointer;
|
|
4837
|
+
font-family: var(--overview-mono);
|
|
4838
|
+
padding: 14px 14px 10px;
|
|
4839
|
+
text-align: left;
|
|
4840
|
+
transition: border-color 120ms ease-out, background-color 120ms ease-out, transform 120ms ease-out;
|
|
4841
|
+
}
|
|
4842
|
+
|
|
4843
|
+
#overview-section .overview-project-card:hover {
|
|
4844
|
+
border-color: var(--overview-border-active);
|
|
4845
|
+
background: rgba(255, 138, 61, 0.06);
|
|
4846
|
+
transform: translateY(-1px);
|
|
4847
|
+
}
|
|
4848
|
+
|
|
4849
|
+
#overview-section .overview-project-card-header {
|
|
4850
|
+
display: flex;
|
|
4851
|
+
align-items: baseline;
|
|
4852
|
+
justify-content: space-between;
|
|
4853
|
+
margin-bottom: 8px;
|
|
4854
|
+
}
|
|
4855
|
+
|
|
4856
|
+
#overview-section .overview-project-card-name {
|
|
4857
|
+
color: var(--overview-accent);
|
|
4858
|
+
font-size: 13px;
|
|
4859
|
+
letter-spacing: 0.05em;
|
|
4860
|
+
}
|
|
4861
|
+
|
|
4862
|
+
#overview-section .overview-project-card-platform {
|
|
4863
|
+
color: var(--overview-text-muted);
|
|
4864
|
+
font-size: 10px;
|
|
4865
|
+
text-transform: uppercase;
|
|
4866
|
+
letter-spacing: 0.1em;
|
|
4867
|
+
}
|
|
4868
|
+
|
|
4869
|
+
#overview-section .overview-project-card-totals {
|
|
4870
|
+
display: flex;
|
|
4871
|
+
justify-content: space-between;
|
|
4872
|
+
font-size: 11px;
|
|
4873
|
+
color: var(--overview-text-primary);
|
|
4874
|
+
margin-bottom: 8px;
|
|
4875
|
+
}
|
|
4876
|
+
|
|
4877
|
+
#overview-section .overview-project-card-score {
|
|
4878
|
+
color: var(--overview-success);
|
|
4879
|
+
}
|
|
4880
|
+
|
|
4881
|
+
#overview-section .overview-project-card-sparkline {
|
|
4882
|
+
height: 28px;
|
|
4883
|
+
color: var(--overview-accent);
|
|
4884
|
+
}
|
|
4885
|
+
|
|
4886
|
+
#overview-section .overview-sparkline {
|
|
4887
|
+
width: 100%;
|
|
4888
|
+
height: 100%;
|
|
4889
|
+
display: block;
|
|
4890
|
+
}
|
|
4891
|
+
|
|
4892
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4893
|
+
#overview-section .overview-panel,
|
|
4894
|
+
#overview-section .overview-status-dot,
|
|
4895
|
+
#overview-section .overview-project-card {
|
|
4896
|
+
animation: none !important;
|
|
4897
|
+
transition: none !important;
|
|
4898
|
+
}
|
|
4899
|
+
}
|
package/dist/main/cli.d.ts
CHANGED
|
@@ -1,85 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { type StopDaemonDependencies } from '../modules/cli-configuration/usecases/cli/stopDaemon.usecase.js';
|
|
4
|
-
import { type QueryStatusDependencies } from '../modules/cli-configuration/usecases/cli/queryStatus.usecase.js';
|
|
5
|
-
import { type ReadLogsDependencies } from '../modules/cli-configuration/usecases/cli/readLogs.usecase.js';
|
|
6
|
-
import { type DiscoveredRepository, type DiscoverRepositoriesResult } from '../modules/cli-configuration/usecases/cli/discoverRepositories.usecase.js';
|
|
7
|
-
import { type ConfigureMcpResult } from '../modules/cli-configuration/usecases/cli/configureMcp.usecase.js';
|
|
8
|
-
import { type WriteInitConfigInput, type WriteInitConfigResult } from '../modules/cli-configuration/usecases/cli/writeInitConfig.usecase.js';
|
|
9
|
-
import { type InitSummaryInput } from '../cli/formatters/initSummary.js';
|
|
10
|
-
import { type PrerequisitesResult } from '../modules/cli-configuration/usecases/cli/checkInitPrerequisites.js';
|
|
11
|
-
export interface StartDependencies {
|
|
12
|
-
validateDependencies: () => {
|
|
13
|
-
name: string;
|
|
14
|
-
installUrl: string;
|
|
15
|
-
}[];
|
|
16
|
-
startServer: (port?: number) => Promise<unknown>;
|
|
17
|
-
exit: (code: number) => void;
|
|
18
|
-
error: (...args: unknown[]) => void;
|
|
19
|
-
log: (...args: unknown[]) => void;
|
|
20
|
-
startDaemonDeps: StartDaemonDependencies;
|
|
21
|
-
loadStartupInfo: () => {
|
|
22
|
-
enabledPlatforms: Array<'gitlab' | 'github'>;
|
|
23
|
-
defaultPort: number;
|
|
24
|
-
};
|
|
25
|
-
openInBrowser: (url: string) => void;
|
|
26
|
-
}
|
|
27
|
-
export declare function executeStart(skipDependencyCheck: boolean, daemon: boolean, port: number | undefined, open: boolean, deps: StartDependencies): void;
|
|
28
|
-
export interface StopDeps {
|
|
29
|
-
stopDaemonDeps: StopDaemonDependencies;
|
|
30
|
-
log: (...args: unknown[]) => void;
|
|
31
|
-
error: (...args: unknown[]) => void;
|
|
32
|
-
exit: (code: number) => void;
|
|
33
|
-
}
|
|
34
|
-
export declare function executeStop(force: boolean, deps: StopDeps): void;
|
|
35
|
-
export interface StatusDeps {
|
|
36
|
-
queryStatusDeps: QueryStatusDependencies;
|
|
37
|
-
log: (...args: unknown[]) => void;
|
|
38
|
-
exit: (code: number) => void;
|
|
39
|
-
}
|
|
40
|
-
export declare function executeStatus(json: boolean, deps: StatusDeps): void;
|
|
41
|
-
export interface LogsDeps {
|
|
42
|
-
readLogsDeps: ReadLogsDependencies;
|
|
43
|
-
log: (...args: unknown[]) => void;
|
|
44
|
-
error: (...args: unknown[]) => void;
|
|
45
|
-
exit: (code: number) => void;
|
|
46
|
-
}
|
|
47
|
-
export declare function executeLogs(follow: boolean, lines: number, deps: LogsDeps): void;
|
|
48
|
-
export type PlatformChoice = 'gitlab' | 'github' | 'both';
|
|
49
|
-
export interface InitDependencies {
|
|
50
|
-
log: (...args: unknown[]) => void;
|
|
51
|
-
exit: (code: number) => void;
|
|
52
|
-
getConfigDir: () => string;
|
|
53
|
-
existsSync: (path: string) => boolean;
|
|
54
|
-
checkPrerequisites: () => PrerequisitesResult;
|
|
55
|
-
confirmOverwrite: (configPath: string) => Promise<boolean>;
|
|
56
|
-
promptPlatform: () => Promise<PlatformChoice>;
|
|
57
|
-
promptPort: () => Promise<number>;
|
|
58
|
-
promptGitlabUsername: () => Promise<string>;
|
|
59
|
-
promptGithubUsername: () => Promise<string>;
|
|
60
|
-
confirmScanRepositories: () => Promise<boolean>;
|
|
61
|
-
selectRepositories: (repos: DiscoveredRepository[]) => Promise<DiscoveredRepository[]>;
|
|
62
|
-
generateWebhookSecret: () => string;
|
|
63
|
-
truncateSecret: (secret: string, length: number) => string;
|
|
64
|
-
discoverRepositories: (scanPaths: string[], maxDepth: number) => DiscoverRepositoriesResult;
|
|
65
|
-
configureMcp: () => ConfigureMcpResult;
|
|
66
|
-
writeConfig: (input: WriteInitConfigInput) => WriteInitConfigResult;
|
|
67
|
-
formatSummary: (input: InitSummaryInput) => string;
|
|
68
|
-
}
|
|
69
|
-
export declare function executeInit(yes: boolean, skipMcp: boolean, showSecrets: boolean, scanPaths: string[], deps: InitDependencies): Promise<void>;
|
|
70
|
-
export interface DiscoverDependencies {
|
|
71
|
-
existsSync: (path: string) => boolean;
|
|
72
|
-
readFileSync: (path: string, encoding: BufferEncoding) => string;
|
|
73
|
-
writeFileSync: (path: string, content: string) => void;
|
|
74
|
-
readdirSync: (path: string) => Array<{
|
|
75
|
-
name: string;
|
|
76
|
-
isDirectory: () => boolean;
|
|
77
|
-
}>;
|
|
78
|
-
getGitRemoteUrl: (localPath: string) => string | null;
|
|
79
|
-
getConfigPath: () => string;
|
|
80
|
-
log: (...args: unknown[]) => void;
|
|
81
|
-
selectRepositories: (repositories: DiscoveredRepository[]) => Promise<DiscoveredRepository[]>;
|
|
82
|
-
}
|
|
83
|
-
export declare function executeDiscover(scanPaths: string[], maxDepth: number, deps: DiscoverDependencies): Promise<void>;
|
|
84
|
-
export declare function executeValidate(fix: boolean): void;
|
|
2
|
+
export {};
|
|
85
3
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/main/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/main/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/main/cli.ts"],"names":[],"mappings":""}
|