cohvu 2.21.1 → 3.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 +37 -0
- package/cli.js +15501 -0
- package/package.json +15 -26
- package/dist/__tests__/instruction-file.unit.test.d.ts +0 -1
- package/dist/__tests__/instruction-file.unit.test.js +0 -296
- package/dist/__tests__/instruction-file.unit.test.js.map +0 -1
- package/dist/__tests__/teardown.unit.test.d.ts +0 -1
- package/dist/__tests__/teardown.unit.test.js +0 -196
- package/dist/__tests__/teardown.unit.test.js.map +0 -1
- package/dist/api.d.ts +0 -292
- package/dist/api.js +0 -337
- package/dist/api.js.map +0 -1
- package/dist/auth.d.ts +0 -4
- package/dist/auth.js +0 -96
- package/dist/auth.js.map +0 -1
- package/dist/constants.d.ts +0 -2
- package/dist/constants.js +0 -10
- package/dist/constants.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -259
- package/dist/index.js.map +0 -1
- package/dist/instructions.d.ts +0 -33
- package/dist/instructions.js +0 -238
- package/dist/instructions.js.map +0 -1
- package/dist/log.d.ts +0 -6
- package/dist/log.js +0 -51
- package/dist/log.js.map +0 -1
- package/dist/pause.d.ts +0 -3
- package/dist/pause.js +0 -24
- package/dist/pause.js.map +0 -1
- package/dist/platforms.d.ts +0 -22
- package/dist/platforms.js +0 -79
- package/dist/platforms.js.map +0 -1
- package/dist/postinstall.d.ts +0 -2
- package/dist/postinstall.js +0 -11
- package/dist/postinstall.js.map +0 -1
- package/dist/proxy.d.ts +0 -1
- package/dist/proxy.js +0 -371
- package/dist/proxy.js.map +0 -1
- package/dist/setup.d.ts +0 -15
- package/dist/setup.js +0 -295
- package/dist/setup.js.map +0 -1
- package/dist/teardown.d.ts +0 -15
- package/dist/teardown.js +0 -235
- package/dist/teardown.js.map +0 -1
- package/dist/tui/App.d.ts +0 -1
- package/dist/tui/App.js +0 -2245
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/components/Banner.d.ts +0 -4
- package/dist/tui/components/Banner.js +0 -71
- package/dist/tui/components/Banner.js.map +0 -1
- package/dist/tui/components/Divider.d.ts +0 -1
- package/dist/tui/components/Divider.js +0 -8
- package/dist/tui/components/Divider.js.map +0 -1
- package/dist/tui/components/Footer.d.ts +0 -4
- package/dist/tui/components/Footer.js +0 -214
- package/dist/tui/components/Footer.js.map +0 -1
- package/dist/tui/components/Header.d.ts +0 -4
- package/dist/tui/components/Header.js +0 -126
- package/dist/tui/components/Header.js.map +0 -1
- package/dist/tui/components/LockCard.d.ts +0 -17
- package/dist/tui/components/LockCard.js +0 -37
- package/dist/tui/components/LockCard.js.map +0 -1
- package/dist/tui/components/Modal.d.ts +0 -5
- package/dist/tui/components/Modal.js +0 -195
- package/dist/tui/components/Modal.js.map +0 -1
- package/dist/tui/components/TabBar.d.ts +0 -4
- package/dist/tui/components/TabBar.js +0 -17
- package/dist/tui/components/TabBar.js.map +0 -1
- package/dist/tui/components/Toast.d.ts +0 -4
- package/dist/tui/components/Toast.js +0 -9
- package/dist/tui/components/Toast.js.map +0 -1
- package/dist/tui/index.d.ts +0 -1
- package/dist/tui/index.js +0 -20
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/platform-detect.d.ts +0 -2
- package/dist/tui/platform-detect.js +0 -79
- package/dist/tui/platform-detect.js.map +0 -1
- package/dist/tui/state.d.ts +0 -414
- package/dist/tui/state.js +0 -397
- package/dist/tui/state.js.map +0 -1
- package/dist/tui/tabs/BillingTab.d.ts +0 -5
- package/dist/tui/tabs/BillingTab.js +0 -72
- package/dist/tui/tabs/BillingTab.js.map +0 -1
- package/dist/tui/tabs/KeysTab.d.ts +0 -5
- package/dist/tui/tabs/KeysTab.js +0 -87
- package/dist/tui/tabs/KeysTab.js.map +0 -1
- package/dist/tui/tabs/KnowledgeTab.d.ts +0 -5
- package/dist/tui/tabs/KnowledgeTab.js +0 -143
- package/dist/tui/tabs/KnowledgeTab.js.map +0 -1
- package/dist/tui/tabs/ProjectTab.d.ts +0 -5
- package/dist/tui/tabs/ProjectTab.js +0 -34
- package/dist/tui/tabs/ProjectTab.js.map +0 -1
- package/dist/tui/tabs/TeamTab.d.ts +0 -5
- package/dist/tui/tabs/TeamTab.js +0 -57
- package/dist/tui/tabs/TeamTab.js.map +0 -1
- package/dist/tui/tabs/YouTab.d.ts +0 -5
- package/dist/tui/tabs/YouTab.js +0 -25
- package/dist/tui/tabs/YouTab.js.map +0 -1
- package/dist/tui/utils.d.ts +0 -6
- package/dist/tui/utils.js +0 -58
- package/dist/tui/utils.js.map +0 -1
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text, useStdout } from 'ink';
|
|
3
|
-
import { isTeamLocked, getActiveProject } from '../state.js';
|
|
4
|
-
import { LockCard } from '../components/LockCard.js';
|
|
5
|
-
import { truncate, timeAgo, wrapText } from '../utils.js';
|
|
6
|
-
export function KnowledgeTab({ state, height }) {
|
|
7
|
-
if (isTeamLocked(state)) {
|
|
8
|
-
return (_jsx(LockCard, { variant: "team", overview: state.teamOverview, isAdmin: state.userRole === 'admin', height: height }));
|
|
9
|
-
}
|
|
10
|
-
const active = getActiveProject(state);
|
|
11
|
-
if (active?.owner.kind === 'personal' && active.locked) {
|
|
12
|
-
const others = state.projects.filter(p => p.owner.kind === 'personal' && p.locked && p.project_id !== active.project_id).length;
|
|
13
|
-
return (_jsx(LockCard, { variant: "downgrade", projectName: active.name, otherLockedCount: others, height: height }));
|
|
14
|
-
}
|
|
15
|
-
// Empty-project state — user skipped first-project creation at first-touch,
|
|
16
|
-
// or deleted every project they had. Invite them to create one directly
|
|
17
|
-
// from the dashboard. The Project tab is where the creation action lives;
|
|
18
|
-
// point them there.
|
|
19
|
-
if (!state.activeProjectId && state.projects.length === 0) {
|
|
20
|
-
return _jsx(EmptyProjectCard, { height: height });
|
|
21
|
-
}
|
|
22
|
-
switch (state.knowledgeMode) {
|
|
23
|
-
case 'browse': return _jsx(BrowseMode, { state: state, height: height });
|
|
24
|
-
case 'search': return _jsx(SearchMode, { state: state, height: height });
|
|
25
|
-
case 'remove': return _jsx(RemoveMode, { state: state, height: height });
|
|
26
|
-
case 'detail': return _jsx(DetailMode, { state: state, height: height });
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function EmptyProjectCard({ height }) {
|
|
30
|
-
return (_jsx(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", height: height, children: _jsx(Text, { color: "gray", dimColor: true, children: "nothing here yet" }) }));
|
|
31
|
-
}
|
|
32
|
-
function StatsLine({ state }) {
|
|
33
|
-
const total = state.contributionTotal;
|
|
34
|
-
if (total === 0)
|
|
35
|
-
return null;
|
|
36
|
-
// Derive contributor count from loaded contributions
|
|
37
|
-
const contributors = new Set();
|
|
38
|
-
for (const m of state.contributions) {
|
|
39
|
-
const name = m.contributed_by?.user_name ??
|
|
40
|
-
m.contributed_by?.agent_name;
|
|
41
|
-
if (name)
|
|
42
|
-
contributors.add(String(name));
|
|
43
|
-
}
|
|
44
|
-
const parts = [];
|
|
45
|
-
parts.push(`${total} contribution${total !== 1 ? 's' : ''}`);
|
|
46
|
-
if (contributors.size > 0)
|
|
47
|
-
parts.push(`${contributors.size} contributor${contributors.size !== 1 ? 's' : ''}`);
|
|
48
|
-
// Last activity from the first contribution (sorted newest first)
|
|
49
|
-
if (state.contributions.length > 0) {
|
|
50
|
-
parts.push(`last active ${timeAgo(state.contributions[0].updated_at)}`);
|
|
51
|
-
}
|
|
52
|
-
return _jsxs(Text, { color: "gray", dimColor: true, children: [" ", parts.join(' · ')] });
|
|
53
|
-
}
|
|
54
|
-
function BrowseMode({ state, height }) {
|
|
55
|
-
const { stdout } = useStdout();
|
|
56
|
-
const width = stdout.columns - 1;
|
|
57
|
-
if (state.contributions.length === 0 && !state.contributionLoading) {
|
|
58
|
-
if (state.offline || state.error) {
|
|
59
|
-
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", height: height, children: [_jsx(Text, { color: "red", children: state.error ?? "can't reach cohvu" }), _jsx(Text, { color: "gray", dimColor: true, children: "check your connection and restart" })] }));
|
|
60
|
-
}
|
|
61
|
-
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", height: height, children: [_jsx(Text, { color: "gray", children: "your agents will start contributing automatically" }), _jsx(Text, { color: "gray", dimColor: true, children: "open any agent and start working" })] }));
|
|
62
|
-
}
|
|
63
|
-
const hasStats = state.contributionTotal > 0;
|
|
64
|
-
const maxLines = height - (hasStats ? 4 : 3);
|
|
65
|
-
const visible = state.contributions.slice(state.contributionScroll, state.contributionScroll + maxLines);
|
|
66
|
-
const rows = [];
|
|
67
|
-
let linesUsed = 0;
|
|
68
|
-
for (let i = 0; i < visible.length && linesUsed < maxLines; i++) {
|
|
69
|
-
const mem = visible[i];
|
|
70
|
-
const globalIdx = state.contributionScroll + i;
|
|
71
|
-
const isSelected = globalIdx === state.contributionSelected;
|
|
72
|
-
const isLive = mem.id === state.liveDotId && Date.now() < state.liveDotExpiry;
|
|
73
|
-
const bodyWidth = width - 12;
|
|
74
|
-
if (isSelected) {
|
|
75
|
-
rows.push(_jsxs(Box, { width: width, children: [_jsx(Text, { children: '> ' }), _jsx(Text, { color: isLive ? 'green' : 'gray', dimColor: !isLive, children: "\u00B7 " }), _jsx(Text, { children: truncate(mem.body, bodyWidth) }), _jsx(Box, { flexGrow: 1 }), mem.contribution_type && _jsxs(Text, { color: "gray", dimColor: true, children: [mem.contribution_type, " "] }), _jsx(Text, { color: "gray", children: timeAgo(mem.updated_at) })] }, mem.id));
|
|
76
|
-
linesUsed++;
|
|
77
|
-
const bodyLines = wrapText(mem.body, width - 6);
|
|
78
|
-
if (bodyLines.length > 1 && linesUsed < maxLines) {
|
|
79
|
-
rows.push(_jsx(Box, { children: _jsxs(Text, { color: "gray", children: [" ", truncate(bodyLines[1], width - 6)] }) }, `${mem.id}-1`));
|
|
80
|
-
linesUsed++;
|
|
81
|
-
}
|
|
82
|
-
if (bodyLines.length > 2 && linesUsed < maxLines) {
|
|
83
|
-
rows.push(_jsx(Box, { children: _jsxs(Text, { color: "gray", children: [" ", truncate(bodyLines[2], width - 6), bodyLines.length > 3 ? '…' : ''] }) }, `${mem.id}-2`));
|
|
84
|
-
linesUsed++;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
rows.push(_jsxs(Box, { width: width, children: [_jsx(Text, { children: ' ' }), _jsx(Text, { color: isLive ? 'green' : 'gray', dimColor: !isLive, children: "\u00B7 " }), _jsx(Text, { dimColor: true, children: truncate(mem.body, bodyWidth) }), _jsx(Box, { flexGrow: 1 }), mem.contribution_type && _jsxs(Text, { color: "gray", dimColor: true, children: [mem.contribution_type, " "] }), _jsx(Text, { color: "gray", children: timeAgo(mem.updated_at) })] }, mem.id));
|
|
89
|
-
linesUsed++;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Pagination
|
|
93
|
-
let pagination = '';
|
|
94
|
-
if (state.contributions.length > 0) {
|
|
95
|
-
const start = state.contributionScroll + 1;
|
|
96
|
-
const end = Math.min(state.contributionScroll + maxLines, state.contributions.length);
|
|
97
|
-
pagination = `${start}\u2013${end} of ${state.contributionTotal}`;
|
|
98
|
-
if (state.contributionHasMore)
|
|
99
|
-
pagination += ' · space for more';
|
|
100
|
-
}
|
|
101
|
-
return (_jsxs(Box, { flexDirection: "column", children: [hasStats && _jsx(StatsLine, { state: state }), _jsx(Box, { height: 1 }), rows, _jsx(Box, { height: 1 }), _jsxs(Text, { color: "gray", children: [" ", pagination] })] }));
|
|
102
|
-
}
|
|
103
|
-
function DetailMode({ state, height }) {
|
|
104
|
-
const { stdout } = useStdout();
|
|
105
|
-
const width = stdout.columns - 1;
|
|
106
|
-
const mem = state.contributions.find(m => m.id === state.detailContributionId);
|
|
107
|
-
if (!mem) {
|
|
108
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " contribution not found" })] }));
|
|
109
|
-
}
|
|
110
|
-
const bodyLines = wrapText(mem.body, width - 4);
|
|
111
|
-
const contributor = mem.contributed_by?.user_name ??
|
|
112
|
-
mem.contributed_by?.agent_name ??
|
|
113
|
-
'unknown';
|
|
114
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), bodyLines.map((line, i) => (_jsx(Box, { children: _jsxs(Text, { children: [" ", line] }) }, i))), _jsx(Box, { height: 1 }), _jsxs(Text, { color: "gray", dimColor: true, children: [" ", String(contributor), " \u00B7 ", timeAgo(mem.updated_at)] }), mem.contribution_type && _jsxs(Text, { color: "gray", dimColor: true, children: [" type: ", mem.contribution_type] })] }));
|
|
115
|
-
}
|
|
116
|
-
function SearchMode({ state, height }) {
|
|
117
|
-
const { stdout } = useStdout();
|
|
118
|
-
const width = stdout.columns - 1;
|
|
119
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsxs(Box, { children: [_jsx(Text, { color: "gray", children: " / " }), _jsxs(Text, { children: [state.searchQuery, "_"] })] }), _jsx(Box, { height: 1 }), _jsx(Box, { children: _jsxs(Text, { color: "gray", dimColor: true, children: [" ", '─'.repeat(width - 4)] }) }), _jsx(Box, { height: 1 }), state.searching ? (_jsx(Text, { color: "gray", dimColor: true, children: " searching\u2026" })) : state.searchResults === null ? null : state.searchResults.length === 0 ? (_jsx(Text, { color: "gray", children: " no results" })) : (_jsxs(_Fragment, { children: [state.searchResults.map((mem, i) => {
|
|
120
|
-
const isSelected = i === state.contributionSelected;
|
|
121
|
-
const isLive = mem.id === state.liveDotId && Date.now() < state.liveDotExpiry;
|
|
122
|
-
const bodyWidth = width - 12;
|
|
123
|
-
return (_jsxs(Box, { width: width, children: [_jsx(Text, { children: isSelected ? '> ' : ' ' }), _jsx(Text, { color: isLive ? 'green' : 'gray', dimColor: !isLive, children: "\u00B7 " }), _jsx(Text, { ...(isSelected ? {} : { dimColor: true }), children: truncate(mem.body, bodyWidth) }), _jsx(Box, { flexGrow: 1 }), _jsx(Text, { color: "gray", children: timeAgo(mem.updated_at) })] }, mem.id));
|
|
124
|
-
}), _jsx(Box, { height: 1 }), _jsxs(Text, { color: "gray", children: [" ", state.searchResults.length, " result", state.searchResults.length !== 1 ? 's' : ''] })] }))] }));
|
|
125
|
-
}
|
|
126
|
-
function RemoveMode({ state, height }) {
|
|
127
|
-
const { stdout } = useStdout();
|
|
128
|
-
const width = stdout.columns - 1;
|
|
129
|
-
const list = state.searchResults ?? state.contributions;
|
|
130
|
-
const filtered = state.userRole === 'admin'
|
|
131
|
-
? list
|
|
132
|
-
: list.filter(m => m.contributed_by?.user_id === state.user?.id);
|
|
133
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " select contributions to remove \u00B7 space to toggle" }), _jsx(Box, { height: 1 }), filtered.length === 0 && state.userRole !== 'admin' ? (_jsx(Text, { color: "gray", children: " you can only remove contributions your agents made" })) : (filtered.map((mem, i) => {
|
|
134
|
-
const isCursor = i === state.contributionSelected;
|
|
135
|
-
const isToggled = state.removeSelected.has(mem.id);
|
|
136
|
-
return (_jsxs(Box, { children: [_jsx(Text, { children: isCursor ? '> ' : ' ' }), isToggled
|
|
137
|
-
? _jsxs(_Fragment, { children: [_jsx(Text, { color: "red", children: "[x] " }), _jsx(Text, { dimColor: true, children: truncate(mem.body, width - 8) })] })
|
|
138
|
-
: _jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: "[ ] " }), _jsx(Text, { color: "gray", children: truncate(mem.body, width - 8) })] })] }, mem.id));
|
|
139
|
-
})), _jsx(Box, { height: 1 }), state.removeSelected.size > 0
|
|
140
|
-
? _jsxs(Text, { color: "yellow", dimColor: true, children: [" ", state.removeSelected.size, " selected"] })
|
|
141
|
-
: _jsx(Text, { color: "gray", children: " 0 selected" })] }));
|
|
142
|
-
}
|
|
143
|
-
//# sourceMappingURL=KnowledgeTab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"KnowledgeTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/KnowledgeTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text, useStdout } from 'ink';
|
|
3
|
-
import { getActiveProject } from '../state.js';
|
|
4
|
-
import { formatDate, timeUntil } from '../utils.js';
|
|
5
|
-
import { Divider } from '../components/Divider.js';
|
|
6
|
-
export function ProjectTab({ state, height }) {
|
|
7
|
-
const { stdout } = useStdout();
|
|
8
|
-
const width = stdout.columns - 1;
|
|
9
|
-
const project = getActiveProject(state);
|
|
10
|
-
if (!project) {
|
|
11
|
-
// Landing without an active project — either skipped at first-touch
|
|
12
|
-
// or deleted the only one. Keep it minimal; the user figures out
|
|
13
|
-
// where they're going, we just give them the action.
|
|
14
|
-
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", height: height, children: [_jsx(Text, { color: "gray", dimColor: true, children: "no project yet" }), _jsx(Box, { height: 1 }), _jsxs(Box, { children: [_jsx(Text, { color: "gray", children: " n " }), _jsx(Text, { dimColor: true, children: "new project" })] })] }));
|
|
15
|
-
}
|
|
16
|
-
return (_jsxs(Box, { flexDirection: "column", height: height, overflowY: "hidden", children: [_jsx(Box, { height: 1 }), _jsx(Field, { label: "name", children: _jsx(Text, { dimColor: true, children: project.name }) }), _jsx(Field, { label: "slug", children: _jsx(Text, { color: "gray", children: project.slug }) }), project.owner.kind === 'team'
|
|
17
|
-
? _jsxs(Field, { label: "owner", children: [_jsx(Text, { color: "gray", children: "team: " }), _jsx(Text, { dimColor: true, children: project.owner.teamName })] })
|
|
18
|
-
: _jsx(Field, { label: "owner", children: _jsx(Text, { color: "gray", children: "personal" }) }), project.created_at && (_jsx(Field, { label: "created", children: _jsx(Text, { color: "gray", children: formatDate(project.created_at) }) })), _jsx(Box, { height: 1 }), _jsx(Divider, {}), _jsx(Box, { height: 1 }), state.userRole === 'admin' && (_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: " r " }), _jsx(Text, { dimColor: true, children: "rename project" })] })), _jsxs(Box, { children: [_jsx(Text, { color: "gray", children: " n " }), _jsx(Text, { dimColor: true, children: "new project" })] }), state.projects.length > 1 && (_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: " w " }), _jsx(Text, { dimColor: true, children: "switch project" })] })), state.userRole === 'admin' && (_jsxs(_Fragment, { children: [_jsx(Box, { height: 1 }), _jsx(Divider, {}), _jsx(Box, { height: 1 }), renderDestructive(state)] }))] }));
|
|
19
|
-
}
|
|
20
|
-
function Field({ label, children }) {
|
|
21
|
-
return (_jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsxs(Text, { color: "gray", dimColor: true, children: [" ", label] }) }), children] }));
|
|
22
|
-
}
|
|
23
|
-
function renderDestructive(state) {
|
|
24
|
-
const pendingApproval = state.pendingApprovals.find(a => a.action === 'delete_project' || a.action === 'clear_memories');
|
|
25
|
-
if (pendingApproval) {
|
|
26
|
-
const actionLabel = pendingApproval.action === 'delete_project' ? 'delete project' : 'clear contributions';
|
|
27
|
-
const approved = pendingApproval.approved_by.length;
|
|
28
|
-
const required = pendingApproval.required_count;
|
|
29
|
-
const expires = timeUntil(pendingApproval.expires_at);
|
|
30
|
-
return (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: " ! " }), _jsxs(Text, { dimColor: true, children: ["pending: ", actionLabel] }), _jsxs(Text, { color: "gray", children: [" ", approved, "/", required, " approved expires ", expires] })] }), _jsxs(Box, { children: [_jsx(Text, { color: "gray", children: " a " }), _jsx(Text, { dimColor: true, children: "approve" }), _jsx(Text, { children: " " }), _jsx(Text, { color: "gray", children: " x " }), _jsx(Text, { dimColor: true, children: "cancel" })] })] }));
|
|
31
|
-
}
|
|
32
|
-
return (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Text, { color: "red", children: " c " }), _jsx(Text, { color: "gray", children: "clear all contributions" })] }), _jsxs(Box, { children: [_jsx(Text, { color: "red", children: " d " }), _jsx(Text, { color: "gray", children: "delete project" })] })] }));
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=ProjectTab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/ProjectTab.tsx"],"names":[],"mappings":"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"}
|
package/dist/tui/tabs/TeamTab.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Box, Text, useStdout } from 'ink';
|
|
4
|
-
import { getActiveProject, getActiveTeam, isTeamLocked } from '../state.js';
|
|
5
|
-
import { timeUntil, truncate } from '../utils.js';
|
|
6
|
-
import { Divider } from '../components/Divider.js';
|
|
7
|
-
import { LockCard } from '../components/LockCard.js';
|
|
8
|
-
export function TeamTab({ state, height }) {
|
|
9
|
-
const { stdout } = useStdout();
|
|
10
|
-
const width = stdout.columns - 1;
|
|
11
|
-
const project = getActiveProject(state);
|
|
12
|
-
const team = getActiveTeam(state);
|
|
13
|
-
if (isTeamLocked(state)) {
|
|
14
|
-
return (_jsx(LockCard, { variant: "team", overview: state.teamOverview, isAdmin: state.userRole === 'admin', height: height, label: "Members, invite links, and SSO are hidden until an admin resubscribes." }));
|
|
15
|
-
}
|
|
16
|
-
if (!project || project.owner.kind === 'personal' || !team) {
|
|
17
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " personal project \u2014 no team members to manage" })] }));
|
|
18
|
-
}
|
|
19
|
-
const userId = state.user?.id;
|
|
20
|
-
const isAdmin = state.userRole === 'admin';
|
|
21
|
-
const memberCount = state.members.length;
|
|
22
|
-
return (_jsxs(Box, { flexDirection: "column", height: height, overflowY: "hidden", children: [_jsx(Box, { height: 1 }), team && (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsx(Text, { color: "gray", dimColor: true, children: " team" }) }), _jsx(Text, { dimColor: true, children: team.name })] }), _jsx(Box, { height: 1 })] })), state.members.map((m, i) => {
|
|
23
|
-
const isYou = m.user_id === userId;
|
|
24
|
-
const email = m.email ?? m.name ?? m.user_id;
|
|
25
|
-
const memberRole = m.role ?? 'member';
|
|
26
|
-
const roleLabel = isYou ? `${memberRole} · you` : memberRole;
|
|
27
|
-
const selected = isAdmin && state.teamSelected === i;
|
|
28
|
-
const demoteApproval = state.pendingApprovals.find(a => a.action === 'demote_admin' && a.target_user_id === m.user_id);
|
|
29
|
-
return (_jsxs(React.Fragment, { children: [_jsxs(Box, { children: [_jsx(Text, { children: selected ? '> ' : ' ' }), _jsx(Box, { width: 38, children: _jsx(Text, { ...(isYou || selected ? {} : { dimColor: true }), children: email }) }), _jsx(Box, { width: 16, children: _jsx(Text, { color: "gray", children: roleLabel }) })] }), demoteApproval && (_jsxs(Box, { children: [_jsx(Text, { children: " " }), _jsx(Text, { color: "yellow", children: "! " }), _jsxs(Text, { color: "gray", children: ["pending demotion ", demoteApproval.approved_by.length, "/", demoteApproval.required_count, " approved expires ", timeUntil(demoteApproval.expires_at)] })] }))] }, m.user_id));
|
|
30
|
-
}), memberCount <= 1 && (_jsxs(_Fragment, { children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", dimColor: true, children: " just you so far." })] })), state.inlineError && (_jsxs(_Fragment, { children: [_jsx(Box, { height: 1 }), _jsxs(Text, { color: "red", children: [" ", state.inlineError] })] })), isAdmin && (_jsxs(_Fragment, { children: [_jsx(Box, { height: 1 }), _jsx(Divider, {}), _jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " settings" }), _jsx(Box, { height: 1 }), (() => {
|
|
31
|
-
const sel = state.teamSelected === memberCount + 0;
|
|
32
|
-
return (_jsxs(Box, { children: [_jsx(Text, { children: sel ? '> ' : ' ' }), _jsx(Box, { width: 12, children: _jsx(Text, { color: "gray", dimColor: true, children: "name" }) }), _jsx(Text, { ...(sel ? {} : { dimColor: true }), children: team?.name ?? '' })] }));
|
|
33
|
-
})(), (() => {
|
|
34
|
-
const sel = state.teamSelected === memberCount + 1;
|
|
35
|
-
return (_jsxs(Box, { children: [_jsx(Text, { children: sel ? '> ' : ' ' }), _jsx(Box, { width: 12, children: _jsx(Text, { color: "gray", dimColor: true, children: "consensus" }) }), _jsx(Text, { ...(sel ? {} : { dimColor: true }), children: state.requireConsensus ? 'on' : 'off' })] }));
|
|
36
|
-
})(), (() => {
|
|
37
|
-
const sel = state.teamSelected === memberCount + 2;
|
|
38
|
-
const ssoLabel = state.ssoConfig?.issuer
|
|
39
|
-
? state.ssoConfig.issuer.replace(/^https?:\/\//, '')
|
|
40
|
-
: 'not configured';
|
|
41
|
-
return (_jsxs(Box, { children: [_jsx(Text, { children: sel ? '> ' : ' ' }), _jsx(Box, { width: 12, children: _jsx(Text, { color: "gray", dimColor: true, children: "sso" }) }), _jsx(Text, { ...(sel ? {} : { dimColor: true }), children: ssoLabel })] }));
|
|
42
|
-
})(), _jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " invite links" }), _jsxs(Text, { color: "gray", dimColor: true, children: [" ", memberCount, " seat", memberCount !== 1 ? 's' : '', " \u00B7 $", memberCount * 29, "/mo \u00B7 each join adds $29/mo"] }), ['admin', 'member', 'viewer'].map((role, li) => {
|
|
43
|
-
const linkIdx = memberCount + 3 + li;
|
|
44
|
-
const selected = state.teamSelected === linkIdx;
|
|
45
|
-
if (role === 'admin') {
|
|
46
|
-
return (_jsxs(Box, { children: [_jsx(Text, { children: selected ? '> ' : ' ' }), _jsx(Box, { width: 9, children: _jsx(Text, { color: "gray", dimColor: true, children: "admin" }) }), _jsx(Text, { ...(selected ? {} : { dimColor: true }), children: "mint a fresh single-use invite (30 min)" }), selected && _jsx(Text, { color: "gray", dimColor: true, children: " enter to mint" })] }, role));
|
|
47
|
-
}
|
|
48
|
-
const link = state.inviteLinks.find(l => l.role === role);
|
|
49
|
-
if (!link)
|
|
50
|
-
return null;
|
|
51
|
-
const linkWidth = selected ? width - 24 : width - 12;
|
|
52
|
-
return (_jsxs(Box, { children: [_jsx(Text, { children: selected ? '> ' : ' ' }), _jsx(Box, { width: 9, children: _jsx(Text, { color: "gray", dimColor: true, children: role }) }), _jsx(Text, { ...(selected ? {} : { dimColor: true }), children: truncate(link.url, linkWidth) }), selected && (state.copiedFeedback
|
|
53
|
-
? _jsx(Text, { color: "green", children: " copied!" })
|
|
54
|
-
: _jsx(Text, { color: "gray", dimColor: true, children: " c copy r regen" }))] }, role));
|
|
55
|
-
})] }))] }));
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=TeamTab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TeamTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/TeamTab.tsx"],"names":[],"mappings":"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"}
|
package/dist/tui/tabs/YouTab.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
3
|
-
import { Divider } from '../components/Divider.js';
|
|
4
|
-
function formatDeletionCountdown(scheduledAt) {
|
|
5
|
-
const graceMs = 3 * 24 * 60 * 60 * 1000;
|
|
6
|
-
const purgeAt = new Date(scheduledAt).getTime() + graceMs;
|
|
7
|
-
const remaining = purgeAt - Date.now();
|
|
8
|
-
if (remaining <= 0)
|
|
9
|
-
return 'now';
|
|
10
|
-
const days = Math.floor(remaining / (24 * 60 * 60 * 1000));
|
|
11
|
-
const hours = Math.floor((remaining % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000));
|
|
12
|
-
if (days > 0)
|
|
13
|
-
return `${days}d ${hours}h`;
|
|
14
|
-
const minutes = Math.floor((remaining % (60 * 60 * 1000)) / (60 * 1000));
|
|
15
|
-
return `${hours}h ${minutes}m`;
|
|
16
|
-
}
|
|
17
|
-
export function YouTab({ state, height }) {
|
|
18
|
-
const deletionScheduledAt = state.user?.deletion_scheduled_at ?? null;
|
|
19
|
-
return (_jsxs(Box, { flexDirection: "column", height: height, overflowY: "hidden", children: [_jsx(Box, { height: 1 }), _jsxs(Box, { children: [_jsxs(Text, { dimColor: true, children: [" ", state.user?.email ?? ''] }), _jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { color: "gray", children: state.userRole })] }), _jsx(Box, { height: 1 }), _jsx(Divider, {}), _jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " editors" }), _jsx(Box, { height: 1 }), state.platforms.map(p => (p.state === 'configured'
|
|
20
|
-
? (_jsxs(Box, { children: [_jsx(Box, { width: 15, children: _jsxs(Text, { color: "gray", children: [" ", p.name] }) }), _jsx(Text, { color: "green", children: "\u2713 " }), _jsx(Text, { color: "gray", children: "connected" })] }, p.name))
|
|
21
|
-
: (_jsxs(Box, { children: [_jsx(Box, { width: 15, children: _jsxs(Text, { color: "gray", dimColor: true, children: [" ", p.name] }) }), _jsx(Text, { color: "gray", children: "\u2014 not detected" })] }, p.name)))), _jsx(Box, { height: 1 }), _jsx(Divider, {}), _jsx(Box, { height: 1 }), _jsxs(Box, { children: [_jsx(Box, { width: 15, children: _jsx(Text, { color: "gray", children: " status" }) }), state.paused
|
|
22
|
-
? _jsx(Text, { color: "yellow", children: "paused" })
|
|
23
|
-
: _jsx(Text, { color: "green", children: "active" })] }), _jsx(Box, { height: 1 }), _jsx(Divider, {}), _jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " account" }), _jsx(Box, { height: 1 }), deletionScheduledAt ? (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Text, { color: "red", children: " scheduled for deletion in " }), _jsx(Text, { color: "red", children: formatDeletionCountdown(deletionScheduledAt) })] }), _jsx(Box, { height: 1 }), _jsxs(Text, { color: "gray", dimColor: true, children: [" press ", _jsx(Text, { color: "gray", children: "c" }), " to cancel and restore"] })] })) : (_jsxs(Text, { color: "gray", dimColor: true, children: [" press ", _jsx(Text, { color: "gray", children: "d" }), " to delete account"] })), _jsx(Box, { height: 1 }), _jsx(Divider, {}), _jsx(Box, { height: 1 }), _jsxs(Text, { color: "gray", dimColor: true, children: [" to disconnect: ", _jsx(Text, { color: "gray", children: "cohvu disconnect" })] })] }));
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=YouTab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"YouTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/YouTab.tsx"],"names":[],"mappings":"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"}
|
package/dist/tui/utils.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare function timeAgo(dateStr: string): string;
|
|
2
|
-
export declare function formatDate(dateStr: string): string;
|
|
3
|
-
export declare function timeUntil(dateStr: string): string;
|
|
4
|
-
export declare function daysUntil(dateStr: string): number;
|
|
5
|
-
export declare function truncate(s: string, maxLen: number): string;
|
|
6
|
-
export declare function wrapText(text: string, maxWidth: number): string[];
|
package/dist/tui/utils.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
// Pure utility functions for the TUI — no ANSI codes, no framework dependencies.
|
|
2
|
-
export function timeAgo(dateStr) {
|
|
3
|
-
const diff = Date.now() - new Date(dateStr).getTime();
|
|
4
|
-
const mins = Math.floor(diff / 60000);
|
|
5
|
-
if (mins < 1)
|
|
6
|
-
return 'just now';
|
|
7
|
-
if (mins < 60)
|
|
8
|
-
return `${mins}m ago`;
|
|
9
|
-
const hrs = Math.floor(mins / 60);
|
|
10
|
-
if (hrs < 24)
|
|
11
|
-
return `${hrs}h ago`;
|
|
12
|
-
const days = Math.floor(hrs / 24);
|
|
13
|
-
return `${days}d ago`;
|
|
14
|
-
}
|
|
15
|
-
export function formatDate(dateStr) {
|
|
16
|
-
const d = new Date(dateStr);
|
|
17
|
-
const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
|
|
18
|
-
return `${months[d.getMonth()]} ${d.getDate()}, ${d.getFullYear()}`;
|
|
19
|
-
}
|
|
20
|
-
export function timeUntil(dateStr) {
|
|
21
|
-
const diff = new Date(dateStr).getTime() - Date.now();
|
|
22
|
-
const hrs = Math.ceil(diff / 3600000);
|
|
23
|
-
if (hrs <= 0)
|
|
24
|
-
return 'expired';
|
|
25
|
-
if (hrs === 1)
|
|
26
|
-
return '1h';
|
|
27
|
-
return `${hrs}h`;
|
|
28
|
-
}
|
|
29
|
-
export function daysUntil(dateStr) {
|
|
30
|
-
const diff = new Date(dateStr).getTime() - Date.now();
|
|
31
|
-
return Math.ceil(diff / (1000 * 60 * 60 * 24));
|
|
32
|
-
}
|
|
33
|
-
export function truncate(s, maxLen) {
|
|
34
|
-
if (maxLen <= 0)
|
|
35
|
-
return '';
|
|
36
|
-
if (s.length <= maxLen)
|
|
37
|
-
return s;
|
|
38
|
-
return s.slice(0, maxLen - 1) + '\u2026';
|
|
39
|
-
}
|
|
40
|
-
export function wrapText(text, maxWidth) {
|
|
41
|
-
const words = text.split(/\s+/);
|
|
42
|
-
const lines = [];
|
|
43
|
-
let current = '';
|
|
44
|
-
for (const word of words) {
|
|
45
|
-
if (current.length + word.length + 1 > maxWidth) {
|
|
46
|
-
if (current)
|
|
47
|
-
lines.push(current);
|
|
48
|
-
current = word;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
current = current ? current + ' ' + word : word;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (current)
|
|
55
|
-
lines.push(current);
|
|
56
|
-
return lines;
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/tui/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tui/utils.ts"],"names":[],"mappings":"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"}
|