cohvu 2.1.1 → 2.2.1
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/dist/api.d.ts +42 -26
- package/dist/api.js +43 -59
- package/dist/api.js.map +1 -1
- package/dist/auth.d.ts +2 -13
- package/dist/auth.js +41 -105
- package/dist/auth.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.js +59 -103
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +2 -2
- package/dist/instructions.js +22 -26
- package/dist/instructions.js.map +1 -1
- package/dist/platforms.js +22 -25
- package/dist/platforms.js.map +1 -1
- package/dist/proxy.js +26 -14
- package/dist/proxy.js.map +1 -1
- package/dist/setup.d.ts +0 -1
- package/dist/setup.js +43 -75
- package/dist/setup.js.map +1 -1
- package/dist/tui/App.d.ts +1 -0
- package/dist/tui/App.js +1090 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/Banner.d.ts +4 -0
- package/dist/tui/components/Banner.js +78 -0
- package/dist/tui/components/Banner.js.map +1 -0
- package/dist/tui/components/Divider.d.ts +1 -0
- package/dist/tui/components/Divider.js +7 -0
- package/dist/tui/components/Divider.js.map +1 -0
- package/dist/tui/components/Footer.d.ts +4 -0
- package/dist/tui/components/Footer.js +143 -0
- package/dist/tui/components/Footer.js.map +1 -0
- package/dist/tui/components/Header.d.ts +4 -0
- package/dist/tui/components/Header.js +53 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/Modal.d.ts +5 -0
- package/dist/tui/components/Modal.js +99 -0
- package/dist/tui/components/Modal.js.map +1 -0
- package/dist/tui/components/TabBar.d.ts +4 -0
- package/dist/tui/components/TabBar.js +16 -0
- package/dist/tui/components/TabBar.js.map +1 -0
- package/dist/tui/components/Toast.d.ts +4 -0
- package/dist/tui/components/Toast.js +9 -0
- package/dist/tui/components/Toast.js.map +1 -0
- package/dist/tui/index.js +20 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/platform-detect.d.ts +1 -1
- package/dist/tui/platform-detect.js +19 -22
- package/dist/tui/platform-detect.js.map +1 -1
- package/dist/tui/state.d.ts +33 -6
- package/dist/tui/state.js +65 -17
- package/dist/tui/state.js.map +1 -1
- package/dist/tui/tabs/BillingTab.d.ts +4 -0
- package/dist/tui/tabs/BillingTab.js +68 -0
- package/dist/tui/tabs/BillingTab.js.map +1 -0
- package/dist/tui/tabs/KnowledgeTab.d.ts +5 -0
- package/dist/tui/tabs/KnowledgeTab.js +83 -0
- package/dist/tui/tabs/KnowledgeTab.js.map +1 -0
- package/dist/tui/tabs/ProjectTab.d.ts +4 -0
- package/dist/tui/tabs/ProjectTab.js +31 -0
- package/dist/tui/tabs/ProjectTab.js.map +1 -0
- package/dist/tui/tabs/TeamTab.d.ts +4 -0
- package/dist/tui/tabs/TeamTab.js +42 -0
- package/dist/tui/tabs/TeamTab.js.map +1 -0
- package/dist/tui/tabs/YouTab.d.ts +4 -0
- package/dist/tui/tabs/YouTab.js +9 -0
- package/dist/tui/tabs/YouTab.js.map +1 -0
- package/dist/tui/utils.d.ts +6 -0
- package/dist/tui/utils.js +58 -0
- package/dist/tui/utils.js.map +1 -0
- package/package.json +9 -2
- package/dist/tui/ansi.d.ts +0 -41
- package/dist/tui/ansi.js +0 -117
- package/dist/tui/ansi.js.map +0 -1
- package/dist/tui/dashboard.js +0 -1250
- package/dist/tui/dashboard.js.map +0 -1
- package/dist/tui/keys.d.ts +0 -31
- package/dist/tui/keys.js +0 -56
- package/dist/tui/keys.js.map +0 -1
- package/dist/tui/render.d.ts +0 -5
- package/dist/tui/render.js +0 -158
- package/dist/tui/render.js.map +0 -1
- package/dist/tui/views/billing.d.ts +0 -3
- package/dist/tui/views/billing.js +0 -127
- package/dist/tui/views/billing.js.map +0 -1
- package/dist/tui/views/knowledge.d.ts +0 -3
- package/dist/tui/views/knowledge.js +0 -203
- package/dist/tui/views/knowledge.js.map +0 -1
- package/dist/tui/views/modals.d.ts +0 -3
- package/dist/tui/views/modals.js +0 -198
- package/dist/tui/views/modals.js.map +0 -1
- package/dist/tui/views/project.d.ts +0 -3
- package/dist/tui/views/project.js +0 -76
- package/dist/tui/views/project.js.map +0 -1
- package/dist/tui/views/team.d.ts +0 -3
- package/dist/tui/views/team.js +0 -106
- package/dist/tui/views/team.js.map +0 -1
- package/dist/tui/views/you.d.ts +0 -3
- package/dist/tui/views/you.js +0 -40
- package/dist/tui/views/you.js.map +0 -1
- /package/dist/tui/{dashboard.d.ts → index.d.ts} +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
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 }) {
|
|
7
|
+
const { stdout } = useStdout();
|
|
8
|
+
const width = stdout.columns;
|
|
9
|
+
const project = getActiveProject(state);
|
|
10
|
+
if (!project) {
|
|
11
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " no active project" })] }));
|
|
12
|
+
}
|
|
13
|
+
return (_jsxs(Box, { flexDirection: "column", 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'
|
|
14
|
+
? _jsxs(Field, { label: "owner", children: [_jsx(Text, { color: "gray", children: "team: " }), _jsx(Text, { dimColor: true, children: project.owner.teamName })] })
|
|
15
|
+
: _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)] }))] }));
|
|
16
|
+
}
|
|
17
|
+
function Field({ label, children }) {
|
|
18
|
+
return (_jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsxs(Text, { color: "gray", dimColor: true, children: [" ", label] }) }), children] }));
|
|
19
|
+
}
|
|
20
|
+
function renderDestructive(state) {
|
|
21
|
+
const pendingApproval = state.pendingApprovals.find(a => a.action === 'delete_project' || a.action === 'clear_memories');
|
|
22
|
+
if (pendingApproval) {
|
|
23
|
+
const actionLabel = pendingApproval.action === 'delete_project' ? 'delete project' : 'clear memories';
|
|
24
|
+
const approved = pendingApproval.approved_by.length;
|
|
25
|
+
const required = pendingApproval.required_count;
|
|
26
|
+
const expires = timeUntil(pendingApproval.expires_at);
|
|
27
|
+
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" })] })] }));
|
|
28
|
+
}
|
|
29
|
+
return (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Text, { color: "red", children: " c " }), _jsx(Text, { color: "gray", children: "clear all memories" })] }), _jsxs(Box, { children: [_jsx(Text, { color: "red", children: " d " }), _jsx(Text, { color: "gray", children: "delete project" })] })] }));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ProjectTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/ProjectTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text, Spacer, useStdout } from 'ink';
|
|
4
|
+
import { getActiveProject, getActiveTeam } from '../state.js';
|
|
5
|
+
import { timeAgo, timeUntil, truncate } from '../utils.js';
|
|
6
|
+
import { Divider } from '../components/Divider.js';
|
|
7
|
+
export function TeamTab({ state }) {
|
|
8
|
+
const { stdout } = useStdout();
|
|
9
|
+
const width = stdout.columns;
|
|
10
|
+
const project = getActiveProject(state);
|
|
11
|
+
if (!project) {
|
|
12
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " no active project" })] }));
|
|
13
|
+
}
|
|
14
|
+
if (project.owner.kind === 'personal') {
|
|
15
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " personal project \u2014 no team members to manage" })] }));
|
|
16
|
+
}
|
|
17
|
+
const team = getActiveTeam(state);
|
|
18
|
+
const userId = state.user?.id;
|
|
19
|
+
const isAdmin = state.userRole === 'admin';
|
|
20
|
+
return (_jsxs(Box, { flexDirection: "column", 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) => {
|
|
21
|
+
const isYou = m.user_id === userId;
|
|
22
|
+
const email = m.email ?? m.name ?? m.user_id;
|
|
23
|
+
const memberRole = m.role ?? 'member';
|
|
24
|
+
const roleLabel = isYou ? `${memberRole} · you` : memberRole;
|
|
25
|
+
const selected = isAdmin && state.teamSelected === i;
|
|
26
|
+
const demoteApproval = state.pendingApprovals.find(a => a.action === 'demote_admin' && a.target_user_id === m.user_id);
|
|
27
|
+
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 }) }), m.last_active_at
|
|
28
|
+
? _jsxs(Text, { color: "gray", dimColor: true, children: ["last active ", _jsx(Text, { color: "gray", children: timeAgo(m.last_active_at) })] })
|
|
29
|
+
: _jsx(Text, { color: "gray", dimColor: true, children: "never active" })] }), 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
|
+
}), state.members.length <= 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 }), _jsxs(Box, { width: width, children: [_jsx(Text, { color: "gray", children: " invite links" }), _jsx(Spacer, {}), _jsx(Text, { color: "gray", dimColor: true, children: "\u2191\u2193 select c copy r regen" })] }), ['admin', 'member', 'viewer'].map((role, li) => {
|
|
31
|
+
const link = state.inviteLinks.find(l => l.role === role);
|
|
32
|
+
if (!link)
|
|
33
|
+
return null;
|
|
34
|
+
const linkIdx = state.members.length + li;
|
|
35
|
+
const selected = state.teamSelected === linkIdx;
|
|
36
|
+
const linkWidth = selected ? width - 24 : width - 12;
|
|
37
|
+
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
|
|
38
|
+
? _jsx(Text, { color: "green", children: " copied!" })
|
|
39
|
+
: _jsx(Text, { color: "gray", dimColor: true, children: " c copy r regen" }))] }, role));
|
|
40
|
+
})] }))] }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=TeamTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/TeamTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { Divider } from '../components/Divider.js';
|
|
4
|
+
export function YouTab({ state }) {
|
|
5
|
+
return (_jsxs(Box, { flexDirection: "column", 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: " tools" }), _jsx(Box, { height: 1 }), state.platforms.map(p => (p.state === 'configured'
|
|
6
|
+
? (_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: "configured" })] }, p.name))
|
|
7
|
+
: (_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(Text, { color: "gray", dimColor: true, children: [" for setup help visit ", _jsx(Text, { color: "gray", children: "github.com/cohvu/cohvu" })] })] }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=YouTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YouTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/YouTab.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAa,MAAM,KAAK,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAuB;IACnD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,QAAQ,yBAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,IAAQ,EACjD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,iCAAa,EACxC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,KAAK,CAAC,QAAQ,GAAQ,IACtC,EACN,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,OAAO,KAAG,EACX,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAGlB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAe,EACjC,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EACjB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACxB,CAAC,CAAC,KAAK,KAAK,YAAY;gBACtB,CAAC,CAAC,CACA,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,EAAE,YAAE,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAI,CAAC,CAAC,IAAI,IAAQ,GAAM,EAC1D,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,yBAAW,EAC9B,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,2BAAkB,KAH5B,CAAC,CAAC,IAAI,CAIV,CACP;gBACD,CAAC,CAAC,CACA,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,EAAE,YAAE,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,yBAAI,CAAC,CAAC,IAAI,IAAQ,GAAM,EACnE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,qCAAuB,KAFjC,CAAC,CAAC,IAAI,CAGV,CACP,CACJ,CAAC,EAEF,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,OAAO,KAAG,EACX,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,8CAAwB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uCAA8B,IAAO,IACtG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
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[];
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tui/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cohvu",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "Cohvu — continuous memory for AI-native development",
|
|
5
5
|
"bin": {
|
|
6
6
|
"cohvu": "dist/index.js"
|
|
@@ -13,9 +13,15 @@
|
|
|
13
13
|
"node": ">=20.0.0"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@modelcontextprotocol/sdk": "^1.27.1"
|
|
16
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
17
|
+
"chalk": "^5.6.2",
|
|
18
|
+
"figures": "^6.1.0",
|
|
19
|
+
"ink": "^6.8.0",
|
|
20
|
+
"ora": "^9.3.0",
|
|
21
|
+
"react": "^19.2.4"
|
|
17
22
|
},
|
|
18
23
|
"devDependencies": {
|
|
24
|
+
"@types/react": "^19.2.14",
|
|
19
25
|
"typescript": "^5.9.3"
|
|
20
26
|
},
|
|
21
27
|
"files": [
|
|
@@ -27,5 +33,6 @@
|
|
|
27
33
|
"agents",
|
|
28
34
|
"knowledge"
|
|
29
35
|
],
|
|
36
|
+
"type": "module",
|
|
30
37
|
"license": "MIT"
|
|
31
38
|
}
|
package/dist/tui/ansi.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export declare const C: {
|
|
2
|
-
primary: string;
|
|
3
|
-
secondary: string;
|
|
4
|
-
muted: string;
|
|
5
|
-
dim: string;
|
|
6
|
-
ghost: string;
|
|
7
|
-
green: string;
|
|
8
|
-
red: string;
|
|
9
|
-
yellow: string;
|
|
10
|
-
blue: string;
|
|
11
|
-
cursor: string;
|
|
12
|
-
tabActive: string;
|
|
13
|
-
tabInact: string;
|
|
14
|
-
reset: string;
|
|
15
|
-
bold: string;
|
|
16
|
-
dim_attr: string;
|
|
17
|
-
};
|
|
18
|
-
export declare const screen: {
|
|
19
|
-
clear: string;
|
|
20
|
-
home: string;
|
|
21
|
-
altOn: string;
|
|
22
|
-
altOff: string;
|
|
23
|
-
bgDark: string;
|
|
24
|
-
clearAll: string;
|
|
25
|
-
cursorHide: string;
|
|
26
|
-
cursorShow: string;
|
|
27
|
-
clearLine: string;
|
|
28
|
-
resetAttrs: string;
|
|
29
|
-
};
|
|
30
|
-
export declare function moveTo(row: number, col: number): string;
|
|
31
|
-
export declare function stripAnsi(s: string): string;
|
|
32
|
-
export declare function truncate(s: string, maxLen: number): string;
|
|
33
|
-
export declare function padEnd(s: string, len: number): string;
|
|
34
|
-
export declare function rightAlign(text: string, totalWidth: number, prefix: string): string;
|
|
35
|
-
export declare function divider(width: number): string;
|
|
36
|
-
export declare function timeAgo(dateStr: string): string;
|
|
37
|
-
export declare function formatDate(dateStr: string): string;
|
|
38
|
-
export declare function timeUntil(dateStr: string): string;
|
|
39
|
-
export declare function daysUntil(dateStr: string): number;
|
|
40
|
-
export declare function enterScreen(): void;
|
|
41
|
-
export declare function exitScreen(): void;
|
package/dist/tui/ansi.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// ANSI escape code helpers — standard colors that adapt to any terminal theme.
|
|
3
|
-
// Uses 16-color ANSI + dim/bold attributes for universal compatibility.
|
|
4
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.screen = exports.C = void 0;
|
|
6
|
-
exports.moveTo = moveTo;
|
|
7
|
-
exports.stripAnsi = stripAnsi;
|
|
8
|
-
exports.truncate = truncate;
|
|
9
|
-
exports.padEnd = padEnd;
|
|
10
|
-
exports.rightAlign = rightAlign;
|
|
11
|
-
exports.divider = divider;
|
|
12
|
-
exports.timeAgo = timeAgo;
|
|
13
|
-
exports.formatDate = formatDate;
|
|
14
|
-
exports.timeUntil = timeUntil;
|
|
15
|
-
exports.daysUntil = daysUntil;
|
|
16
|
-
exports.enterScreen = enterScreen;
|
|
17
|
-
exports.exitScreen = exitScreen;
|
|
18
|
-
exports.C = {
|
|
19
|
-
// Text roles — relative to terminal's color scheme
|
|
20
|
-
primary: '\x1b[0m', // terminal default foreground
|
|
21
|
-
secondary: '\x1b[2m', // dim — slightly muted
|
|
22
|
-
muted: '\x1b[90m', // bright black (dark gray)
|
|
23
|
-
dim: '\x1b[90m\x1b[2m', // bright black + dim attribute
|
|
24
|
-
ghost: '\x1b[90m\x1b[2m', // same as dim (barely visible)
|
|
25
|
-
// Semantic
|
|
26
|
-
green: '\x1b[32m', // standard green
|
|
27
|
-
red: '\x1b[31m', // standard red
|
|
28
|
-
yellow: '\x1b[33m\x1b[2m', // yellow dimmed slightly
|
|
29
|
-
blue: '\x1b[34m', // standard blue
|
|
30
|
-
// UI
|
|
31
|
-
cursor: '\x1b[0m', // default foreground (bright)
|
|
32
|
-
tabActive: '\x1b[0m\x1b[1m', // bold default
|
|
33
|
-
tabInact: '\x1b[90m', // bright black
|
|
34
|
-
reset: '\x1b[0m',
|
|
35
|
-
bold: '\x1b[1m',
|
|
36
|
-
dim_attr: '\x1b[2m',
|
|
37
|
-
};
|
|
38
|
-
exports.screen = {
|
|
39
|
-
clear: '\x1b[2J',
|
|
40
|
-
home: '\x1b[H',
|
|
41
|
-
altOn: '\x1b[?1049h',
|
|
42
|
-
altOff: '\x1b[?1049l',
|
|
43
|
-
bgDark: '\x1b[48;2;10;10;10m',
|
|
44
|
-
clearAll: '\x1b[2J',
|
|
45
|
-
cursorHide: '\x1b[?25l',
|
|
46
|
-
cursorShow: '\x1b[?25h',
|
|
47
|
-
clearLine: '\x1b[2K\r',
|
|
48
|
-
resetAttrs: '\x1b[0m',
|
|
49
|
-
};
|
|
50
|
-
function moveTo(row, col) {
|
|
51
|
-
return `\x1b[${row};${col}H`;
|
|
52
|
-
}
|
|
53
|
-
function stripAnsi(s) {
|
|
54
|
-
return s.replace(/\x1b\[[0-9;]*m/g, '');
|
|
55
|
-
}
|
|
56
|
-
function truncate(s, maxLen) {
|
|
57
|
-
if (maxLen <= 0)
|
|
58
|
-
return '';
|
|
59
|
-
if (s.length <= maxLen)
|
|
60
|
-
return s;
|
|
61
|
-
return s.slice(0, maxLen - 1) + '\u2026';
|
|
62
|
-
}
|
|
63
|
-
function padEnd(s, len) {
|
|
64
|
-
return s.length >= len ? s : s + ' '.repeat(len - s.length);
|
|
65
|
-
}
|
|
66
|
-
function rightAlign(text, totalWidth, prefix) {
|
|
67
|
-
const visiblePrefixLen = stripAnsi(prefix).length;
|
|
68
|
-
const visibleTextLen = stripAnsi(text).length;
|
|
69
|
-
const spaces = totalWidth - visiblePrefixLen - visibleTextLen;
|
|
70
|
-
return ' '.repeat(Math.max(0, spaces)) + text;
|
|
71
|
-
}
|
|
72
|
-
function divider(width) {
|
|
73
|
-
return exports.C.dim + '\u2500'.repeat(width) + exports.C.reset;
|
|
74
|
-
}
|
|
75
|
-
function timeAgo(dateStr) {
|
|
76
|
-
const diff = Date.now() - new Date(dateStr).getTime();
|
|
77
|
-
const mins = Math.floor(diff / 60000);
|
|
78
|
-
if (mins < 1)
|
|
79
|
-
return 'just now';
|
|
80
|
-
if (mins < 60)
|
|
81
|
-
return `${mins}m ago`;
|
|
82
|
-
const hrs = Math.floor(mins / 60);
|
|
83
|
-
if (hrs < 24)
|
|
84
|
-
return `${hrs}h ago`;
|
|
85
|
-
const days = Math.floor(hrs / 24);
|
|
86
|
-
return `${days}d ago`;
|
|
87
|
-
}
|
|
88
|
-
function formatDate(dateStr) {
|
|
89
|
-
const d = new Date(dateStr);
|
|
90
|
-
const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
|
|
91
|
-
return `${months[d.getMonth()]} ${d.getDate()}, ${d.getFullYear()}`;
|
|
92
|
-
}
|
|
93
|
-
function timeUntil(dateStr) {
|
|
94
|
-
const diff = new Date(dateStr).getTime() - Date.now();
|
|
95
|
-
const hrs = Math.ceil(diff / 3600000);
|
|
96
|
-
if (hrs <= 0)
|
|
97
|
-
return 'expired';
|
|
98
|
-
if (hrs === 1)
|
|
99
|
-
return '1h';
|
|
100
|
-
return `${hrs}h`;
|
|
101
|
-
}
|
|
102
|
-
function daysUntil(dateStr) {
|
|
103
|
-
const diff = new Date(dateStr).getTime() - Date.now();
|
|
104
|
-
return Math.ceil(diff / (1000 * 60 * 60 * 24));
|
|
105
|
-
}
|
|
106
|
-
// Enter TUI — exact sequence matters
|
|
107
|
-
function enterScreen() {
|
|
108
|
-
process.stdout.write(exports.screen.altOn +
|
|
109
|
-
exports.screen.cursorHide);
|
|
110
|
-
}
|
|
111
|
-
// Exit TUI — exact sequence matters
|
|
112
|
-
function exitScreen() {
|
|
113
|
-
process.stdout.write(exports.screen.cursorShow +
|
|
114
|
-
exports.screen.resetAttrs +
|
|
115
|
-
exports.screen.altOff);
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=ansi.js.map
|
package/dist/tui/ansi.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../src/tui/ansi.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,wEAAwE;;;AAuCxE,wBAEC;AAED,8BAEC;AAED,4BAIC;AAED,wBAEC;AAED,gCAKC;AAED,0BAEC;AAED,0BASC;AAED,gCAIC;AAED,8BAMC;AAED,8BAGC;AAGD,kCAKC;AAGD,gCAMC;AA/GY,QAAA,CAAC,GAAG;IACf,mDAAmD;IACnD,OAAO,EAAI,SAAS,EAAgB,8BAA8B;IAClE,SAAS,EAAE,SAAS,EAAgB,uBAAuB;IAC3D,KAAK,EAAM,UAAU,EAAe,2BAA2B;IAC/D,GAAG,EAAQ,iBAAiB,EAAO,+BAA+B;IAClE,KAAK,EAAM,iBAAiB,EAAO,+BAA+B;IAElE,WAAW;IACX,KAAK,EAAM,UAAU,EAAe,iBAAiB;IACrD,GAAG,EAAQ,UAAU,EAAe,eAAe;IACnD,MAAM,EAAK,iBAAiB,EAAQ,yBAAyB;IAC7D,IAAI,EAAO,UAAU,EAAe,gBAAgB;IAEpD,KAAK;IACL,MAAM,EAAK,SAAS,EAAgB,8BAA8B;IAClE,SAAS,EAAE,gBAAgB,EAAQ,eAAe;IAClD,QAAQ,EAAG,UAAU,EAAc,eAAe;IAElD,KAAK,EAAM,SAAS;IACpB,IAAI,EAAO,SAAS;IACpB,QAAQ,EAAG,SAAS;CACrB,CAAC;AAEW,QAAA,MAAM,GAAG;IACpB,KAAK,EAAQ,SAAS;IACtB,IAAI,EAAS,QAAQ;IACrB,KAAK,EAAQ,aAAa;IAC1B,MAAM,EAAO,aAAa;IAC1B,MAAM,EAAO,qBAAqB;IAClC,QAAQ,EAAK,SAAS;IACtB,UAAU,EAAG,WAAW;IACxB,UAAU,EAAG,WAAW;IACxB,SAAS,EAAI,WAAW;IACxB,UAAU,EAAG,SAAS;CACvB,CAAC;AAEF,SAAgB,MAAM,CAAC,GAAW,EAAE,GAAW;IAC7C,OAAO,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,SAAgB,SAAS,CAAC,CAAS;IACjC,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,QAAQ,CAAC,CAAS,EAAE,MAAc;IAChD,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC3C,CAAC;AAED,SAAgB,MAAM,CAAC,CAAS,EAAE,GAAW;IAC3C,OAAO,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY,EAAE,UAAkB,EAAE,MAAc;IACzE,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAClD,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAG,UAAU,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAC9D,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED,SAAgB,OAAO,CAAC,KAAa;IACnC,OAAO,SAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAC,CAAC,KAAK,CAAC;AAClD,CAAC;AAED,SAAgB,OAAO,CAAC,OAAe;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IACtC,IAAI,IAAI,GAAG,CAAC;QAAI,OAAO,UAAU,CAAC;IAClC,IAAI,IAAI,GAAG,EAAE;QAAG,OAAO,GAAG,IAAI,OAAO,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAClC,IAAI,GAAG,GAAG,EAAE;QAAI,OAAO,GAAG,GAAG,OAAO,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAClC,OAAO,GAAG,IAAI,OAAO,CAAC;AACxB,CAAC;AAED,SAAgB,UAAU,CAAC,OAAe;IACxC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,SAAgB,SAAS,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IACtC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED,SAAgB,SAAS,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,qCAAqC;AACrC,SAAgB,WAAW;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAM,CAAC,KAAK;QACZ,cAAM,CAAC,UAAU,CAClB,CAAC;AACJ,CAAC;AAED,oCAAoC;AACpC,SAAgB,UAAU;IACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAM,CAAC,UAAU;QACjB,cAAM,CAAC,UAAU;QACjB,cAAM,CAAC,MAAM,CACd,CAAC;AACJ,CAAC"}
|