cohvu 2.1.0 → 2.2.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/dist/api.d.ts +44 -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 +1091 -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 +19 -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 +39 -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 -202
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"TabBar.js","sourceRoot":"","sources":["../../../src/tui/components/TabBar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,IAAI,EAAY,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,GAAwB;IACtC,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,EAAmB;IAChD,OAAO,CACL,KAAC,GAAG,cACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACb,CAAC,KAAK,MAAM;YACV,CAAC,CAAC,MAAC,IAAI,oBAAU,KAAC,IAAI,IAAC,IAAI,kBAAE,UAAU,CAAC,CAAC,CAAC,GAAQ,UAArC,CAAC,CAA4C;YAC1D,CAAC,CAAC,MAAC,IAAI,qBAAW,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,UAAU,CAAC,CAAC,CAAC,GAAQ,KAA9C,CAAC,CAAoD,CACrE,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export function Toast({ toast }) {
|
|
4
|
+
if (Date.now() > toast.expiresAt)
|
|
5
|
+
return null;
|
|
6
|
+
const color = toast.type === 'success' ? 'green' : toast.type === 'error' ? 'red' : 'gray';
|
|
7
|
+
return (_jsx(Box, { children: _jsxs(Text, { color: color, children: [" ", toast.message] }) }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=Toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/tui/components/Toast.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAA6C;IACxE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3F,OAAO,CACL,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,mBAAK,KAAK,CAAC,OAAO,IAAQ,GACxC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// TUI entry point — manages alt-screen and Ink lifecycle.
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render } from 'ink';
|
|
4
|
+
import App from './App.js';
|
|
5
|
+
export async function launchDashboard() {
|
|
6
|
+
// Enter alt-screen + hide cursor
|
|
7
|
+
process.stdout.write('\x1b[?1049h\x1b[?25l');
|
|
8
|
+
const { waitUntilExit } = render(React.createElement(App), {
|
|
9
|
+
exitOnCtrlC: false,
|
|
10
|
+
});
|
|
11
|
+
try {
|
|
12
|
+
await waitUntilExit();
|
|
13
|
+
}
|
|
14
|
+
finally {
|
|
15
|
+
// Show cursor + reset attributes + exit alt-screen
|
|
16
|
+
process.stdout.write('\x1b[?25h\x1b[0m\x1b[?1049l');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,iCAAiC;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAE7C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;QACzD,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC;YAAS,CAAC;QACT,mDAAmD;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { PlatformStatus } from "./state";
|
|
1
|
+
import type { PlatformStatus } from "./state.js";
|
|
2
2
|
export declare function detectPlatformStatuses(): PlatformStatus[];
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Platform status detection for the You tab.
|
|
3
2
|
// Two states: configured or not-detected.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const path_1 = require("path");
|
|
8
|
-
const os_1 = require("os");
|
|
3
|
+
import { existsSync, readFileSync } from "fs";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { homedir, platform } from "os";
|
|
9
6
|
function vscodeUserDir() {
|
|
10
|
-
if (
|
|
11
|
-
return
|
|
7
|
+
if (platform() === "darwin") {
|
|
8
|
+
return join("Library", "Application Support", "Code", "User");
|
|
12
9
|
}
|
|
13
|
-
return
|
|
10
|
+
return join(".config", "Code", "User");
|
|
14
11
|
}
|
|
15
12
|
const PLATFORMS = [
|
|
16
13
|
{
|
|
@@ -23,52 +20,52 @@ const PLATFORMS = [
|
|
|
23
20
|
{
|
|
24
21
|
name: 'cursor',
|
|
25
22
|
detectPath: '.cursor',
|
|
26
|
-
configPath:
|
|
23
|
+
configPath: join('.cursor', 'mcp.json'),
|
|
27
24
|
configFormat: 'json',
|
|
28
25
|
rootKey: 'mcpServers',
|
|
29
26
|
},
|
|
30
27
|
{
|
|
31
28
|
name: 'windsurf',
|
|
32
|
-
detectPath:
|
|
33
|
-
configPath:
|
|
29
|
+
detectPath: join('.codeium', 'windsurf'),
|
|
30
|
+
configPath: join('.codeium', 'windsurf', 'mcp_config.json'),
|
|
34
31
|
configFormat: 'json',
|
|
35
32
|
rootKey: 'mcpServers',
|
|
36
33
|
},
|
|
37
34
|
{
|
|
38
35
|
name: 'cline',
|
|
39
|
-
detectPath:
|
|
40
|
-
configPath:
|
|
36
|
+
detectPath: join(vscodeUserDir(), 'globalStorage', 'saoudrizwan.claude-dev'),
|
|
37
|
+
configPath: join(vscodeUserDir(), 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json'),
|
|
41
38
|
configFormat: 'json',
|
|
42
39
|
rootKey: 'mcpServers',
|
|
43
40
|
},
|
|
44
41
|
{
|
|
45
42
|
name: 'codex',
|
|
46
43
|
detectPath: '.codex',
|
|
47
|
-
configPath:
|
|
44
|
+
configPath: join('.codex', 'config.toml'),
|
|
48
45
|
configFormat: 'toml',
|
|
49
46
|
rootKey: 'mcp_servers',
|
|
50
47
|
},
|
|
51
48
|
];
|
|
52
|
-
function detectPlatformStatuses() {
|
|
53
|
-
const home =
|
|
49
|
+
export function detectPlatformStatuses() {
|
|
50
|
+
const home = homedir();
|
|
54
51
|
const results = [];
|
|
55
52
|
for (const p of PLATFORMS) {
|
|
56
|
-
const detectFull =
|
|
57
|
-
if (!
|
|
53
|
+
const detectFull = join(home, p.detectPath);
|
|
54
|
+
if (!existsSync(detectFull)) {
|
|
58
55
|
results.push({ name: p.name, state: 'not-detected' });
|
|
59
56
|
continue;
|
|
60
57
|
}
|
|
61
|
-
const configFull =
|
|
58
|
+
const configFull = join(home, p.configPath);
|
|
62
59
|
const configured = isConfigured(configFull, p.configFormat, p.rootKey);
|
|
63
60
|
results.push({ name: p.name, state: configured ? 'configured' : 'not-detected' });
|
|
64
61
|
}
|
|
65
62
|
return results;
|
|
66
63
|
}
|
|
67
64
|
function isConfigured(configPath, format, rootKey) {
|
|
68
|
-
if (!
|
|
65
|
+
if (!existsSync(configPath))
|
|
69
66
|
return false;
|
|
70
67
|
try {
|
|
71
|
-
const content =
|
|
68
|
+
const content = readFileSync(configPath, 'utf8');
|
|
72
69
|
if (format === 'json') {
|
|
73
70
|
const parsed = JSON.parse(content);
|
|
74
71
|
return !!parsed?.[rootKey]?.cohvu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-detect.js","sourceRoot":"","sources":["../../src/tui/platform-detect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"platform-detect.js","sourceRoot":"","sources":["../../src/tui/platform-detect.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/state.d.ts
CHANGED
|
@@ -1,4 +1,21 @@
|
|
|
1
|
-
import type { MeResponse, MemoryItem, MemberItem, BillingInfo, InviteLink, PendingApproval, Notification } from "../api";
|
|
1
|
+
import type { MeResponse, MemoryItem, MemberItem, BillingInfo, InviteLink, PendingApproval, Notification } from "../api.js";
|
|
2
|
+
/** A project in the flat navigation list — knows its ownership context. */
|
|
3
|
+
export interface FlatProject {
|
|
4
|
+
project_id: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
name: string;
|
|
7
|
+
created_at: string;
|
|
8
|
+
owner: {
|
|
9
|
+
kind: 'personal';
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'team';
|
|
12
|
+
teamId: string;
|
|
13
|
+
teamName: string;
|
|
14
|
+
teamSlug: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Team as stored in state (mirroring MeResponse shape). */
|
|
18
|
+
export type TeamInfo = MeResponse['teams'][0];
|
|
2
19
|
export type Tab = 'knowledge' | 'team' | 'billing' | 'project' | 'you';
|
|
3
20
|
export type KnowledgeMode = 'browse' | 'search' | 'forget';
|
|
4
21
|
export type Modal = null | {
|
|
@@ -64,9 +81,11 @@ export interface PlatformStatus {
|
|
|
64
81
|
}
|
|
65
82
|
export interface AppState {
|
|
66
83
|
user: MeResponse['user'] | null;
|
|
67
|
-
projects:
|
|
84
|
+
projects: FlatProject[];
|
|
68
85
|
activeProjectId: string | null;
|
|
69
86
|
userRole: 'admin' | 'member' | 'viewer';
|
|
87
|
+
teams: TeamInfo[];
|
|
88
|
+
individualSubscription: MeResponse['individual_subscription'];
|
|
70
89
|
tab: Tab;
|
|
71
90
|
knowledgeMode: KnowledgeMode;
|
|
72
91
|
memories: MemoryItem[];
|
|
@@ -90,7 +109,6 @@ export interface AppState {
|
|
|
90
109
|
billing: BillingInfo | null;
|
|
91
110
|
platforms: PlatformStatus[];
|
|
92
111
|
modal: Modal;
|
|
93
|
-
bannerLines: string[];
|
|
94
112
|
firstLogin: boolean;
|
|
95
113
|
joinedProjectName: string | null;
|
|
96
114
|
pendingApprovals: PendingApproval[];
|
|
@@ -120,8 +138,6 @@ export type Action = {
|
|
|
120
138
|
type: 'SCROLL_UP';
|
|
121
139
|
} | {
|
|
122
140
|
type: 'SCROLL_DOWN';
|
|
123
|
-
} | {
|
|
124
|
-
type: 'PAGE_DOWN';
|
|
125
141
|
} | {
|
|
126
142
|
type: 'ENTER_SEARCH';
|
|
127
143
|
} | {
|
|
@@ -218,6 +234,17 @@ export type Action = {
|
|
|
218
234
|
} | {
|
|
219
235
|
type: 'SET_OPERATION';
|
|
220
236
|
operation: string | null;
|
|
237
|
+
} | {
|
|
238
|
+
type: 'SET_FORGET_CONFIRMING';
|
|
239
|
+
confirming: boolean;
|
|
240
|
+
} | {
|
|
241
|
+
type: 'UPDATE_MEMORY';
|
|
242
|
+
memory: MemoryItem;
|
|
243
|
+
} | {
|
|
244
|
+
type: 'SET_FIRST_LOGIN';
|
|
245
|
+
firstLogin: boolean;
|
|
221
246
|
};
|
|
222
247
|
export declare function reduce(state: AppState, action: Action): AppState;
|
|
223
|
-
export declare function getActiveProject(state: AppState):
|
|
248
|
+
export declare function getActiveProject(state: AppState): FlatProject | null;
|
|
249
|
+
/** Get the team info for the active project, or null if personal. */
|
|
250
|
+
export declare function getActiveTeam(state: AppState): TeamInfo | null;
|
package/dist/tui/state.js
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// TUI state machine — single source of truth for the dashboard.
|
|
3
2
|
// Reducer pattern: keypresses → actions → new state → render.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.initialState = initialState;
|
|
7
|
-
exports.reduce = reduce;
|
|
8
|
-
exports.getActiveProject = getActiveProject;
|
|
9
|
-
exports.TABS = ['knowledge', 'team', 'billing', 'project', 'you'];
|
|
10
|
-
function initialState() {
|
|
3
|
+
export const TABS = ['knowledge', 'team', 'billing', 'project', 'you'];
|
|
4
|
+
export function initialState() {
|
|
11
5
|
return {
|
|
12
6
|
user: null,
|
|
13
7
|
projects: [],
|
|
14
8
|
activeProjectId: null,
|
|
15
9
|
userRole: 'member',
|
|
10
|
+
teams: [],
|
|
11
|
+
individualSubscription: null,
|
|
16
12
|
tab: 'knowledge',
|
|
17
13
|
knowledgeMode: 'browse',
|
|
18
14
|
memories: [],
|
|
@@ -36,7 +32,6 @@ function initialState() {
|
|
|
36
32
|
billing: null,
|
|
37
33
|
platforms: [],
|
|
38
34
|
modal: null,
|
|
39
|
-
bannerLines: [],
|
|
40
35
|
firstLogin: false,
|
|
41
36
|
joinedProjectName: null,
|
|
42
37
|
pendingApprovals: [],
|
|
@@ -49,29 +44,37 @@ function initialState() {
|
|
|
49
44
|
sseConnected: false,
|
|
50
45
|
};
|
|
51
46
|
}
|
|
52
|
-
function reduce(state, action) {
|
|
47
|
+
export function reduce(state, action) {
|
|
53
48
|
switch (action.type) {
|
|
54
49
|
case 'SET_USER_DATA': {
|
|
55
50
|
const me = action.me;
|
|
51
|
+
const flatProjects = deriveFlatProjects(me);
|
|
56
52
|
const activeId = me.user.active_project_id;
|
|
57
|
-
const activeProject =
|
|
58
|
-
|
|
53
|
+
const activeProject = flatProjects.find(p => p.project_id === activeId) ?? flatProjects[0] ?? null;
|
|
54
|
+
// Derive role: personal projects → admin; team projects → team role
|
|
55
|
+
let role = 'admin';
|
|
56
|
+
if (activeProject && activeProject.owner.kind === 'team') {
|
|
57
|
+
const ownerTeamId = activeProject.owner.teamId;
|
|
58
|
+
const team = me.teams.find(t => t.team_id === ownerTeamId);
|
|
59
|
+
role = (team?.role ?? 'member');
|
|
60
|
+
}
|
|
59
61
|
return {
|
|
60
62
|
...state,
|
|
61
63
|
user: me.user,
|
|
62
|
-
projects:
|
|
64
|
+
projects: flatProjects,
|
|
63
65
|
activeProjectId: activeProject?.project_id ?? null,
|
|
64
66
|
userRole: role,
|
|
67
|
+
teams: me.teams,
|
|
68
|
+
individualSubscription: me.individual_subscription,
|
|
65
69
|
};
|
|
66
70
|
}
|
|
67
71
|
case 'SWITCH_TAB':
|
|
68
72
|
return { ...state, tab: action.tab, modal: null };
|
|
69
73
|
case 'NEXT_TAB': {
|
|
70
|
-
const idx =
|
|
71
|
-
return { ...state, tab:
|
|
74
|
+
const idx = TABS.indexOf(state.tab);
|
|
75
|
+
return { ...state, tab: TABS[(idx + 1) % TABS.length], modal: null };
|
|
72
76
|
}
|
|
73
77
|
case 'SCROLL_UP': {
|
|
74
|
-
const list = currentList(state);
|
|
75
78
|
const newSelected = Math.max(0, state.memorySelected - 1);
|
|
76
79
|
const newScroll = newSelected < state.memoryScroll ? newSelected : state.memoryScroll;
|
|
77
80
|
return { ...state, memorySelected: newSelected, memoryScroll: newScroll };
|
|
@@ -191,6 +194,18 @@ function reduce(state, action) {
|
|
|
191
194
|
return { ...state, toast: action.toast };
|
|
192
195
|
case 'SET_OPERATION':
|
|
193
196
|
return { ...state, operationPending: action.operation };
|
|
197
|
+
case 'SET_FORGET_CONFIRMING':
|
|
198
|
+
return { ...state, forgetConfirming: action.confirming };
|
|
199
|
+
case 'UPDATE_MEMORY': {
|
|
200
|
+
const updated = action.memory;
|
|
201
|
+
return {
|
|
202
|
+
...state,
|
|
203
|
+
memories: state.memories.map(m => m.id === updated.id ? updated : m),
|
|
204
|
+
searchResults: state.searchResults?.map(m => m.id === updated.id ? updated : m) ?? null,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
case 'SET_FIRST_LOGIN':
|
|
208
|
+
return { ...state, firstLogin: action.firstLogin };
|
|
194
209
|
default:
|
|
195
210
|
return state;
|
|
196
211
|
}
|
|
@@ -200,7 +215,40 @@ function currentList(state) {
|
|
|
200
215
|
return state.searchResults;
|
|
201
216
|
return state.memories;
|
|
202
217
|
}
|
|
203
|
-
function getActiveProject(state) {
|
|
218
|
+
export function getActiveProject(state) {
|
|
204
219
|
return state.projects.find(p => p.project_id === state.activeProjectId) ?? null;
|
|
205
220
|
}
|
|
221
|
+
/** Get the team info for the active project, or null if personal. */
|
|
222
|
+
export function getActiveTeam(state) {
|
|
223
|
+
const project = getActiveProject(state);
|
|
224
|
+
if (!project || project.owner.kind !== 'team')
|
|
225
|
+
return null;
|
|
226
|
+
const owner = project.owner;
|
|
227
|
+
return state.teams.find(t => t.team_id === owner.teamId) ?? null;
|
|
228
|
+
}
|
|
229
|
+
/** Flatten personal_projects + team projects into a single navigable list. */
|
|
230
|
+
function deriveFlatProjects(me) {
|
|
231
|
+
const list = [];
|
|
232
|
+
for (const p of me.personal_projects) {
|
|
233
|
+
list.push({
|
|
234
|
+
project_id: p.project_id,
|
|
235
|
+
slug: p.slug,
|
|
236
|
+
name: p.name,
|
|
237
|
+
created_at: p.created_at,
|
|
238
|
+
owner: { kind: 'personal' },
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
for (const team of me.teams) {
|
|
242
|
+
for (const p of team.projects) {
|
|
243
|
+
list.push({
|
|
244
|
+
project_id: p.project_id,
|
|
245
|
+
slug: p.slug,
|
|
246
|
+
name: p.name,
|
|
247
|
+
created_at: p.created_at,
|
|
248
|
+
owner: { kind: 'team', teamId: team.team_id, teamName: team.name, teamSlug: team.slug },
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return list;
|
|
253
|
+
}
|
|
206
254
|
//# sourceMappingURL=state.js.map
|
package/dist/tui/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { getActiveProject, getActiveTeam } from '../state.js';
|
|
4
|
+
import { formatDate, daysUntil } from '../utils.js';
|
|
5
|
+
export function BillingTab({ state }) {
|
|
6
|
+
const project = getActiveProject(state);
|
|
7
|
+
if (!project) {
|
|
8
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " no active project" })] }));
|
|
9
|
+
}
|
|
10
|
+
if (project.owner.kind === 'team')
|
|
11
|
+
return _jsx(TeamBilling, { state: state });
|
|
12
|
+
return _jsx(IndividualBilling, { state: state });
|
|
13
|
+
}
|
|
14
|
+
function Field({ label, children }) {
|
|
15
|
+
return (_jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsxs(Text, { color: "gray", dimColor: true, children: [" ", label] }) }), children] }));
|
|
16
|
+
}
|
|
17
|
+
function IndividualBilling({ state }) {
|
|
18
|
+
const sub = state.individualSubscription;
|
|
19
|
+
const user = state.user;
|
|
20
|
+
// Trial state
|
|
21
|
+
if (user?.trial_ends_at) {
|
|
22
|
+
const days = daysUntil(user.trial_ends_at);
|
|
23
|
+
if (days > 0) {
|
|
24
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Field, { label: "status", children: _jsx(Text, { color: "yellow", dimColor: true, children: "trial" }) }), _jsxs(Field, { label: "ends", children: [_jsx(Text, { dimColor: true, children: formatDate(user.trial_ends_at) }), _jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsxs(Text, { color: "yellow", dimColor: true, children: [days, " day", days !== 1 ? 's' : '', " left"] })] }), _jsx(Field, { label: "plan", children: _jsx(Text, { color: "gray", children: "$19/month after trial" }) })] }));
|
|
25
|
+
}
|
|
26
|
+
// Trial ended
|
|
27
|
+
if (!sub || sub.status !== 'active') {
|
|
28
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsxs(Text, { color: "red", children: [" trial ended ", formatDate(user.trial_ends_at)] }), _jsx(Text, { color: "gray", children: " subscribe to keep your agents connected" }), _jsx(Box, { height: 1 }), _jsx(Field, { label: "plan", children: _jsx(Text, { color: "gray", children: "$19/month" }) })] }));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// No subscription
|
|
32
|
+
if (!sub) {
|
|
33
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "red", children: " locked" }), _jsx(Text, { color: "gray", children: " subscribe to keep your agents connected" }), _jsx(Box, { height: 1 }), _jsx(Field, { label: "plan", children: _jsx(Text, { color: "gray", children: "$19/month" }) })] }));
|
|
34
|
+
}
|
|
35
|
+
// Payment failed
|
|
36
|
+
if (sub.status === 'past_due') {
|
|
37
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "red", children: " ! payment failed" }), _jsx(Text, { color: "gray", children: " update your payment method to continue" })] }));
|
|
38
|
+
}
|
|
39
|
+
// Canceled
|
|
40
|
+
if (sub.status === 'canceled' || sub.cancel_at_period_end) {
|
|
41
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "red", children: " subscription canceled" }), sub.current_period_end && (_jsxs(Text, { color: "gray", children: [" your agents will stop working ", formatDate(sub.current_period_end)] })), _jsx(Box, { height: 1 }), sub.current_period_end && (_jsx(Field, { label: "ends", children: _jsx(Text, { dimColor: true, children: formatDate(sub.current_period_end) }) }))] }));
|
|
42
|
+
}
|
|
43
|
+
// Active
|
|
44
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Field, { label: "status", children: _jsx(Text, { color: "green", children: "active" }) }), _jsx(Field, { label: "plan", children: _jsx(Text, { dimColor: true, children: "$19/month" }) }), sub.current_period_end && (_jsx(Field, { label: "renews", children: _jsx(Text, { dimColor: true, children: formatDate(sub.current_period_end) }) }))] }));
|
|
45
|
+
}
|
|
46
|
+
function TeamBilling({ state }) {
|
|
47
|
+
const team = getActiveTeam(state);
|
|
48
|
+
if (!team) {
|
|
49
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " no team context" })] }));
|
|
50
|
+
}
|
|
51
|
+
const sub = team.subscription;
|
|
52
|
+
const isAdmin = state.userRole === 'admin';
|
|
53
|
+
// No subscription
|
|
54
|
+
if (!sub) {
|
|
55
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Field, { label: "team", children: _jsx(Text, { dimColor: true, children: team.name }) }), isAdmin ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "red", children: " no subscription" }), _jsx(Text, { color: "gray", children: " subscribe to keep your agents connected" }), _jsx(Box, { height: 1 }), _jsx(Field, { label: "plan", children: _jsx(Text, { color: "gray", children: "$34/seat/month" }) })] })) : (_jsx(Field, { label: "status", children: _jsx(Text, { color: "red", children: "locked" }) }))] }));
|
|
56
|
+
}
|
|
57
|
+
// Payment failed
|
|
58
|
+
if (sub.status === 'past_due') {
|
|
59
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Field, { label: "team", children: _jsx(Text, { dimColor: true, children: team.name }) }), isAdmin ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "red", children: " ! payment failed" }), _jsx(Text, { color: "gray", children: " update your payment method to continue" }), _jsx(Box, { height: 1 }), _jsx(Field, { label: "seats", children: _jsx(Text, { dimColor: true, children: String(sub.seat_count) }) })] })) : (_jsxs(_Fragment, { children: [_jsx(Field, { label: "status", children: _jsx(Text, { color: "red", children: "past due" }) }), _jsx(Field, { label: "seats", children: _jsx(Text, { dimColor: true, children: String(sub.seat_count) }) })] }))] }));
|
|
60
|
+
}
|
|
61
|
+
// Canceled
|
|
62
|
+
if (sub.status === 'canceled' || sub.cancel_at_period_end) {
|
|
63
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Field, { label: "team", children: _jsx(Text, { dimColor: true, children: team.name }) }), isAdmin ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "red", children: " subscription canceled" }), sub.current_period_end && (_jsxs(Text, { color: "gray", children: [" your agents will stop working ", formatDate(sub.current_period_end)] })), _jsx(Box, { height: 1 }), _jsx(Field, { label: "seats", children: _jsx(Text, { dimColor: true, children: String(sub.seat_count) }) }), sub.current_period_end && (_jsx(Field, { label: "ends", children: _jsx(Text, { dimColor: true, children: formatDate(sub.current_period_end) }) }))] })) : (_jsxs(_Fragment, { children: [_jsx(Field, { label: "status", children: _jsx(Text, { color: "red", children: "canceled" }) }), _jsx(Field, { label: "seats", children: _jsx(Text, { dimColor: true, children: String(sub.seat_count) }) })] }))] }));
|
|
64
|
+
}
|
|
65
|
+
// Active
|
|
66
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Field, { label: "team", children: _jsx(Text, { dimColor: true, children: team.name }) }), isAdmin ? (_jsxs(_Fragment, { children: [_jsx(Field, { label: "status", children: _jsx(Text, { color: "green", children: "active" }) }), _jsxs(Field, { label: "seats", children: [_jsx(Text, { dimColor: true, children: String(sub.seat_count) }), _jsxs(Text, { color: "gray", children: [" ($", sub.seat_count * 34, "/month)"] })] }), sub.current_period_end && (_jsx(Field, { label: "renews", children: _jsx(Text, { dimColor: true, children: formatDate(sub.current_period_end) }) }))] })) : (_jsxs(_Fragment, { children: [_jsx(Field, { label: "status", children: _jsx(Text, { color: "green", children: "active" }) }), _jsx(Field, { label: "seats", children: _jsx(Text, { dimColor: true, children: String(sub.seat_count) }) })] }))] }));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=BillingTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BillingTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/BillingTab.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAuB;IACvD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,oCAA2B,IACzC,CACP,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACxE,OAAO,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;AAC7C,CAAC;AAED,SAAS,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAgD;IAC9E,OAAO,CACL,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,EAAE,YAAE,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,yBAAI,KAAK,IAAQ,GAAM,EACjE,QAAQ,IACL,CACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAE,KAAK,EAAuB;IACvD,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAExB,cAAc;IACd,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,QAAQ,4BAAa,GAAQ,EACxE,MAAC,KAAK,IAAC,KAAK,EAAC,MAAM,aACjB,KAAC,IAAI,IAAC,QAAQ,kBAAE,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAQ,EACtD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,iCAAa,EACxC,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,QAAQ,mBAAE,IAAI,UAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,IACrE,EACR,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,sCAA6B,GAAQ,IACvE,CACP,CAAC;QACJ,CAAC;QAED,cAAc;QACd,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,+BAAgB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,IAAQ,EACvE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0DAAiD,EACnE,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0BAAiB,GAAQ,IAC3D,CACP,CAAC;QACJ,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,yBAAgB,EACjC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0DAAiD,EACnE,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0BAAiB,GAAQ,IAC3D,CACP,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,mCAA0B,EAC3C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,2DAAkD,IAChE,CACP,CAAC;IACJ,CAAC;IAED,WAAW;IACX,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC1D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wCAA+B,EAC/C,GAAG,CAAC,kBAAkB,IAAI,CACzB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,iDAAkC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAQ,CAC/F,EACD,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EACjB,GAAG,CAAC,kBAAkB,IAAI,CACzB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAQ,GAAQ,CACvF,IACG,CACP,CAAC;IACJ,CAAC;IAED,SAAS;IACT,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAc,GAAQ,EAC/D,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,QAAQ,gCAAiB,GAAQ,EAC1D,GAAG,CAAC,kBAAkB,IAAI,CACzB,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAQ,GAAQ,CACzF,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,KAAK,EAAuB;IACjD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kCAAyB,IACvC,CACP,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;IAE3C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,IAAI,GAAQ,GAAQ,EAC5D,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,kCAAyB,EAC1C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0DAAiD,EACnE,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,+BAAsB,GAAQ,IACnE,CACJ,CAAC,CAAC,CAAC,CACF,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,uBAAc,GAAQ,CAC9D,IACG,CACP,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,IAAI,GAAQ,GAAQ,EAC5D,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,mCAA0B,EAC3C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,2DAAkD,EACpE,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,OAAO,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAQ,GAAQ,IAC1E,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,yBAAgB,GAAQ,EAC/D,KAAC,KAAK,IAAC,KAAK,EAAC,OAAO,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAQ,GAAQ,IAC1E,CACJ,IACG,CACP,CAAC;IACJ,CAAC;IAED,WAAW;IACX,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC1D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,IAAI,GAAQ,GAAQ,EAC5D,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wCAA+B,EAC/C,GAAG,CAAC,kBAAkB,IAAI,CACzB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,iDAAkC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAQ,CAC/F,EACD,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,OAAO,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAQ,GAAQ,EAC1E,GAAG,CAAC,kBAAkB,IAAI,CACzB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAQ,GAAQ,CACvF,IACA,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,yBAAgB,GAAQ,EAC/D,KAAC,KAAK,IAAC,KAAK,EAAC,OAAO,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAQ,GAAQ,IAC1E,CACJ,IACG,CACP,CAAC;IACJ,CAAC;IAED,SAAS;IACT,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,IAAI,GAAQ,GAAQ,EAC5D,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAc,GAAQ,EAC/D,MAAC,KAAK,IAAC,KAAK,EAAC,OAAO,aAClB,KAAC,IAAI,IAAC,QAAQ,kBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAQ,EAC9C,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,qBAAM,GAAG,CAAC,UAAU,GAAG,EAAE,eAAe,IACpD,EACP,GAAG,CAAC,kBAAkB,IAAI,CACzB,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAQ,GAAQ,CACzF,IACA,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,YAAC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAc,GAAQ,EAC/D,KAAC,KAAK,IAAC,KAAK,EAAC,OAAO,YAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAQ,GAAQ,IAC1E,CACJ,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useStdout } from 'ink';
|
|
3
|
+
import { truncate, timeAgo, wrapText } from '../utils.js';
|
|
4
|
+
export function KnowledgeTab({ state, height }) {
|
|
5
|
+
switch (state.knowledgeMode) {
|
|
6
|
+
case 'browse': return _jsx(BrowseMode, { state: state, height: height });
|
|
7
|
+
case 'search': return _jsx(SearchMode, { state: state, height: height });
|
|
8
|
+
case 'forget': return _jsx(ForgetMode, { state: state, height: height });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function BrowseMode({ state, height }) {
|
|
12
|
+
const { stdout } = useStdout();
|
|
13
|
+
const width = stdout.columns;
|
|
14
|
+
if (state.memories.length === 0 && !state.memoryLoading) {
|
|
15
|
+
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" })] }));
|
|
16
|
+
}
|
|
17
|
+
const maxLines = height - 3;
|
|
18
|
+
const visible = state.memories.slice(state.memoryScroll, state.memoryScroll + maxLines);
|
|
19
|
+
const rows = [];
|
|
20
|
+
let linesUsed = 0;
|
|
21
|
+
for (let i = 0; i < visible.length && linesUsed < maxLines; i++) {
|
|
22
|
+
const mem = visible[i];
|
|
23
|
+
const globalIdx = state.memoryScroll + i;
|
|
24
|
+
const isSelected = globalIdx === state.memorySelected;
|
|
25
|
+
const isLive = mem.id === state.liveDotId && Date.now() < state.liveDotExpiry;
|
|
26
|
+
const bodyWidth = width - 12;
|
|
27
|
+
if (isSelected) {
|
|
28
|
+
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.memory_type && _jsxs(Text, { color: "gray", dimColor: true, children: [mem.memory_type, " "] }), _jsx(Text, { color: "gray", children: timeAgo(mem.updated_at) })] }, mem.id));
|
|
29
|
+
linesUsed++;
|
|
30
|
+
const bodyLines = wrapText(mem.body, width - 6);
|
|
31
|
+
if (bodyLines.length > 1 && linesUsed < maxLines) {
|
|
32
|
+
rows.push(_jsx(Box, { children: _jsxs(Text, { color: "gray", children: [" ", truncate(bodyLines[1], width - 6)] }) }, `${mem.id}-1`));
|
|
33
|
+
linesUsed++;
|
|
34
|
+
}
|
|
35
|
+
if (bodyLines.length > 2 && linesUsed < maxLines) {
|
|
36
|
+
rows.push(_jsx(Box, { children: _jsxs(Text, { color: "gray", children: [" ", truncate(bodyLines[2], width - 6), "\u2026"] }) }, `${mem.id}-2`));
|
|
37
|
+
linesUsed++;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
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.memory_type && _jsxs(Text, { color: "gray", dimColor: true, children: [mem.memory_type, " "] }), _jsx(Text, { color: "gray", children: timeAgo(mem.updated_at) })] }, mem.id));
|
|
42
|
+
linesUsed++;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Pagination
|
|
46
|
+
let pagination = '';
|
|
47
|
+
if (state.memories.length > 0) {
|
|
48
|
+
const start = state.memoryScroll + 1;
|
|
49
|
+
const end = Math.min(state.memoryScroll + maxLines, state.memories.length);
|
|
50
|
+
pagination = `${start}\u2013${end} of ${state.memoryTotal}`;
|
|
51
|
+
if (state.memoryHasMore)
|
|
52
|
+
pagination += ' · space for more';
|
|
53
|
+
}
|
|
54
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), rows, _jsx(Box, { height: 1 }), _jsxs(Text, { color: "gray", children: [" ", pagination] })] }));
|
|
55
|
+
}
|
|
56
|
+
function SearchMode({ state, height }) {
|
|
57
|
+
const { stdout } = useStdout();
|
|
58
|
+
const width = stdout.columns;
|
|
59
|
+
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) => {
|
|
60
|
+
const isSelected = i === state.memorySelected;
|
|
61
|
+
const isLive = mem.id === state.liveDotId && Date.now() < state.liveDotExpiry;
|
|
62
|
+
const bodyWidth = width - 12;
|
|
63
|
+
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));
|
|
64
|
+
}), _jsx(Box, { height: 1 }), _jsxs(Text, { color: "gray", children: [" ", state.searchResults.length, " result", state.searchResults.length !== 1 ? 's' : ''] })] }))] }));
|
|
65
|
+
}
|
|
66
|
+
function ForgetMode({ state, height }) {
|
|
67
|
+
const { stdout } = useStdout();
|
|
68
|
+
const width = stdout.columns;
|
|
69
|
+
const list = state.searchResults ?? state.memories;
|
|
70
|
+
const filtered = state.userRole === 'admin'
|
|
71
|
+
? list
|
|
72
|
+
: list.filter(m => m.contributed_by?.user_id === state.user?.id);
|
|
73
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", children: " select memories to remove \u00B7 space to toggle" }), _jsx(Box, { height: 1 }), filtered.length === 0 && state.userRole !== 'admin' ? (_jsx(Text, { color: "gray", children: " you can only forget memories your agents contributed" })) : (filtered.map((mem, i) => {
|
|
74
|
+
const isCursor = i === state.memorySelected;
|
|
75
|
+
const isToggled = state.forgetSelected.has(mem.id);
|
|
76
|
+
return (_jsxs(Box, { children: [_jsx(Text, { children: isCursor ? '> ' : ' ' }), isToggled
|
|
77
|
+
? _jsxs(_Fragment, { children: [_jsx(Text, { color: "red", children: "[x] " }), _jsx(Text, { dimColor: true, children: truncate(mem.body, width - 8) })] })
|
|
78
|
+
: _jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: "[ ] " }), _jsx(Text, { color: "gray", children: truncate(mem.body, width - 8) })] })] }, mem.id));
|
|
79
|
+
})), _jsx(Box, { height: 1 }), state.forgetSelected.size > 0
|
|
80
|
+
? _jsxs(Text, { color: "yellow", dimColor: true, children: [" ", state.forgetSelected.size, " selected"] })
|
|
81
|
+
: _jsx(Text, { color: "gray", children: " 0 selected" })] }));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=KnowledgeTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KnowledgeTab.js","sourceRoot":"","sources":["../../../src/tui/tabs/KnowledgeTab.tsx"],"names":[],"mappings":"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"}
|