cohvu 2.10.0 → 2.10.2
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.
|
@@ -1,26 +1,51 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, Spacer, useStdout } from 'ink';
|
|
3
3
|
import { getActiveProject, getActiveTeam } from '../state.js';
|
|
4
4
|
import { daysUntil } from '../utils.js';
|
|
5
|
+
function truncStr(s, max) {
|
|
6
|
+
if (max <= 0)
|
|
7
|
+
return '';
|
|
8
|
+
if (s.length <= max)
|
|
9
|
+
return s;
|
|
10
|
+
return s.slice(0, max - 1) + '\u2026';
|
|
11
|
+
}
|
|
5
12
|
export function Header({ state }) {
|
|
6
13
|
const { stdout } = useStdout();
|
|
14
|
+
const cols = stdout.columns;
|
|
7
15
|
const project = getActiveProject(state);
|
|
8
16
|
const team = getActiveTeam(state);
|
|
9
17
|
const projectLabel = project
|
|
10
18
|
? team ? `${team.name} / ${project.name}` : project.name
|
|
11
19
|
: 'no project';
|
|
12
|
-
|
|
20
|
+
// Build left parts to measure
|
|
21
|
+
const statusText = getStatusText(state);
|
|
22
|
+
const projectsText = state.projects.length >= 2 ? `${state.projects.length} projects` : '';
|
|
23
|
+
const email = state.user?.email ?? '';
|
|
24
|
+
// "cohvu · " = 10 chars base
|
|
25
|
+
let leftLen = 10 + projectLabel.length;
|
|
26
|
+
if (statusText)
|
|
27
|
+
leftLen += 5 + statusText.length; // " · " + status
|
|
28
|
+
if (projectsText)
|
|
29
|
+
leftLen += 5 + projectsText.length;
|
|
30
|
+
// Truncate project label if left side alone exceeds width
|
|
31
|
+
const maxProjectLen = Math.max(8, cols - 20 - (statusText ? statusText.length + 5 : 0));
|
|
32
|
+
const displayProject = truncStr(projectLabel, maxProjectLen);
|
|
33
|
+
// Only show email if there's room (at least 10 chars for it)
|
|
34
|
+
const leftUsed = 10 + displayProject.length + (statusText ? 5 + statusText.length : 0) + (projectsText ? 5 + projectsText.length : 0);
|
|
35
|
+
const emailSpace = cols - leftUsed - 2;
|
|
36
|
+
const displayEmail = emailSpace >= 10 ? truncStr(email, emailSpace) : '';
|
|
37
|
+
return (_jsxs(Box, { width: cols, children: [_jsx(Text, { color: "gray", children: "cohvu" }), _jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { dimColor: true, children: displayProject }), renderStatus(state), projectsText ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { color: "gray", children: projectsText })] })) : null, _jsx(Spacer, {}), displayEmail ? _jsx(Text, { color: "gray", children: displayEmail }) : null] }));
|
|
13
38
|
}
|
|
14
|
-
function
|
|
39
|
+
function getStatusText(state) {
|
|
15
40
|
if (state.paused)
|
|
16
|
-
return
|
|
41
|
+
return 'paused';
|
|
17
42
|
if (state.offline)
|
|
18
|
-
return
|
|
43
|
+
return 'offline';
|
|
19
44
|
if (!state.sseConnected && state.activeProjectId)
|
|
20
|
-
return
|
|
45
|
+
return 'reconnecting';
|
|
21
46
|
const project = getActiveProject(state);
|
|
22
47
|
if (!project)
|
|
23
|
-
return
|
|
48
|
+
return '';
|
|
24
49
|
if (project.owner.kind === 'team') {
|
|
25
50
|
const team = getActiveTeam(state);
|
|
26
51
|
const sub = team?.subscription;
|
|
@@ -28,40 +53,52 @@ function renderStatus(state) {
|
|
|
28
53
|
const teamData = state.teams.find(t => t.team_id === team?.team_id);
|
|
29
54
|
if (teamData?.trial_ends_at) {
|
|
30
55
|
const days = daysUntil(teamData.trial_ends_at);
|
|
31
|
-
if (days > 0)
|
|
32
|
-
|
|
33
|
-
return _jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsxs(Text, { color: "yellow", dimColor: true, children: ["trial \u00B7 ", label] })] });
|
|
34
|
-
}
|
|
56
|
+
if (days > 0)
|
|
57
|
+
return `trial · ${days === 1 ? '1 day left' : `${days} days left`}`;
|
|
35
58
|
}
|
|
36
|
-
return
|
|
59
|
+
return 'locked';
|
|
37
60
|
}
|
|
38
61
|
if (sub.status === 'active')
|
|
39
|
-
return
|
|
62
|
+
return 'active';
|
|
40
63
|
if (sub.status === 'past_due')
|
|
41
|
-
return
|
|
64
|
+
return 'past due';
|
|
42
65
|
if (sub.status === 'canceled' || sub.cancel_at_period_end)
|
|
43
|
-
return
|
|
44
|
-
return
|
|
66
|
+
return 'canceled';
|
|
67
|
+
return 'locked';
|
|
45
68
|
}
|
|
46
|
-
// Personal project
|
|
47
69
|
const user = state.user;
|
|
48
70
|
if (user?.trial_ends_at) {
|
|
49
71
|
const days = daysUntil(user.trial_ends_at);
|
|
50
|
-
if (days > 0)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (!state.individualSubscription || state.individualSubscription.status !== 'active') {
|
|
55
|
-
return _jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { color: "red", children: "trial ended" })] });
|
|
56
|
-
}
|
|
72
|
+
if (days > 0)
|
|
73
|
+
return `trial · ${days === 1 ? '1 day left' : `${days} days left`}`;
|
|
74
|
+
if (!state.individualSubscription || state.individualSubscription.status !== 'active')
|
|
75
|
+
return 'trial ended';
|
|
57
76
|
}
|
|
58
77
|
const sub = state.individualSubscription;
|
|
59
78
|
if (sub?.status === 'active')
|
|
60
|
-
return
|
|
79
|
+
return 'active';
|
|
61
80
|
if (sub?.status === 'past_due')
|
|
62
|
-
return
|
|
81
|
+
return 'past due';
|
|
63
82
|
if (sub?.status === 'canceled' || sub?.cancel_at_period_end)
|
|
64
|
-
return
|
|
65
|
-
return
|
|
83
|
+
return 'canceled';
|
|
84
|
+
return 'locked';
|
|
85
|
+
}
|
|
86
|
+
function renderStatus(state) {
|
|
87
|
+
const text = getStatusText(state);
|
|
88
|
+
if (!text)
|
|
89
|
+
return null;
|
|
90
|
+
let color = 'red';
|
|
91
|
+
let dim = false;
|
|
92
|
+
if (text === 'active')
|
|
93
|
+
color = 'green';
|
|
94
|
+
else if (text === 'paused' || text.startsWith('trial')) {
|
|
95
|
+
color = 'yellow';
|
|
96
|
+
dim = true;
|
|
97
|
+
}
|
|
98
|
+
else if (text === 'reconnecting') {
|
|
99
|
+
color = 'gray';
|
|
100
|
+
dim = true;
|
|
101
|
+
}
|
|
102
|
+
return _jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { color: color, dimColor: dim, children: text })] });
|
|
66
103
|
}
|
|
67
104
|
//# sourceMappingURL=Header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAuB;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,OAAO;QAC1B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI;QACxD,CAAC,CAAC,YAAY,CAAC;IAEjB,
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cohvu",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.2",
|
|
4
4
|
"description": "Cohvu — continuous memory for AI-native development",
|
|
5
5
|
"bin": {
|
|
6
6
|
"cohvu": "dist/index.js"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "tsc",
|
|
10
|
-
"typecheck": "tsc --noEmit"
|
|
10
|
+
"typecheck": "tsc --noEmit",
|
|
11
|
+
"postinstall": "echo '\n cohvu installed. run cohvu to sign in and set up your tools.\n after that, your agents use cohvu automatically.\n'"
|
|
11
12
|
},
|
|
12
13
|
"engines": {
|
|
13
14
|
"node": ">=20.0.0"
|