cohvu 0.6.2 → 1.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.
Files changed (49) hide show
  1. package/dist/api.d.ts +128 -0
  2. package/dist/api.js +221 -0
  3. package/dist/api.js.map +1 -0
  4. package/dist/auth.js +2 -2
  5. package/dist/auth.js.map +1 -1
  6. package/dist/index.js +83 -825
  7. package/dist/index.js.map +1 -1
  8. package/dist/proxy.d.ts +1 -0
  9. package/dist/proxy.js +151 -0
  10. package/dist/proxy.js.map +1 -0
  11. package/dist/setup.js +1 -1
  12. package/dist/setup.js.map +1 -1
  13. package/dist/tui/ansi.d.ts +41 -0
  14. package/dist/tui/ansi.js +120 -0
  15. package/dist/tui/ansi.js.map +1 -0
  16. package/dist/tui/dashboard.d.ts +1 -0
  17. package/dist/tui/dashboard.js +1051 -0
  18. package/dist/tui/dashboard.js.map +1 -0
  19. package/dist/tui/keys.d.ts +31 -0
  20. package/dist/tui/keys.js +53 -0
  21. package/dist/tui/keys.js.map +1 -0
  22. package/dist/tui/platform-detect.d.ts +2 -0
  23. package/dist/tui/platform-detect.js +102 -0
  24. package/dist/tui/platform-detect.js.map +1 -0
  25. package/dist/tui/render.d.ts +5 -0
  26. package/dist/tui/render.js +139 -0
  27. package/dist/tui/render.js.map +1 -0
  28. package/dist/tui/state.d.ts +215 -0
  29. package/dist/tui/state.js +206 -0
  30. package/dist/tui/state.js.map +1 -0
  31. package/dist/tui/views/billing.d.ts +3 -0
  32. package/dist/tui/views/billing.js +127 -0
  33. package/dist/tui/views/billing.js.map +1 -0
  34. package/dist/tui/views/knowledge.d.ts +3 -0
  35. package/dist/tui/views/knowledge.js +195 -0
  36. package/dist/tui/views/knowledge.js.map +1 -0
  37. package/dist/tui/views/modals.d.ts +3 -0
  38. package/dist/tui/views/modals.js +192 -0
  39. package/dist/tui/views/modals.js.map +1 -0
  40. package/dist/tui/views/project.d.ts +3 -0
  41. package/dist/tui/views/project.js +76 -0
  42. package/dist/tui/views/project.js.map +1 -0
  43. package/dist/tui/views/team.d.ts +3 -0
  44. package/dist/tui/views/team.js +100 -0
  45. package/dist/tui/views/team.js.map +1 -0
  46. package/dist/tui/views/you.d.ts +3 -0
  47. package/dist/tui/views/you.js +74 -0
  48. package/dist/tui/views/you.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,215 @@
1
+ import type { MeResponse, MemoryItem, MemberItem, BillingInfo, InviteLink, PendingApproval, Notification } from "../api";
2
+ export type Tab = 'knowledge' | 'team' | 'billing' | 'project' | 'you';
3
+ export type KnowledgeMode = 'browse' | 'search' | 'forget';
4
+ export type Modal = null | {
5
+ kind: 'confirm-forget';
6
+ memoryId: string;
7
+ preview: string;
8
+ } | {
9
+ kind: 'confirm-forget-all';
10
+ slug: string;
11
+ memoryCount: number;
12
+ input: string;
13
+ } | {
14
+ kind: 'confirm-delete';
15
+ slug: string;
16
+ memoryCount: number;
17
+ input: string;
18
+ } | {
19
+ kind: 'confirm-clear';
20
+ slug: string;
21
+ memoryCount: number;
22
+ input: string;
23
+ } | {
24
+ kind: 'confirm-remove-member';
25
+ email: string;
26
+ userId: string;
27
+ } | {
28
+ kind: 'confirm-leave';
29
+ } | {
30
+ kind: 'confirm-logout';
31
+ } | {
32
+ kind: 'rename';
33
+ input: string;
34
+ } | {
35
+ kind: 'create-project';
36
+ input: string;
37
+ } | {
38
+ kind: 'switch-project';
39
+ selected: number;
40
+ } | {
41
+ kind: 'edit-role';
42
+ targetEmail: string;
43
+ targetUserId: string;
44
+ currentRole: string;
45
+ selected: number;
46
+ } | {
47
+ kind: 'initiate-consensus';
48
+ action: string;
49
+ description: string;
50
+ targetUserId?: string;
51
+ } | {
52
+ kind: 'approve-action';
53
+ approvalId: string;
54
+ description: string;
55
+ initiator: string;
56
+ expiresIn: string;
57
+ } | {
58
+ kind: 'confirm-regen-link';
59
+ role: string;
60
+ };
61
+ export interface PlatformStatus {
62
+ name: string;
63
+ state: 'configured' | 'needs-plugin' | 'not-detected';
64
+ command?: string;
65
+ command2?: string;
66
+ }
67
+ export interface AppState {
68
+ user: MeResponse['user'] | null;
69
+ projects: MeResponse['projects'];
70
+ activeProjectId: string | null;
71
+ userRole: 'admin' | 'member' | 'viewer';
72
+ tab: Tab;
73
+ knowledgeMode: KnowledgeMode;
74
+ memories: MemoryItem[];
75
+ memoryTotal: number;
76
+ memoryScroll: number;
77
+ memorySelected: number;
78
+ memoryLoading: boolean;
79
+ memoryHasMore: boolean;
80
+ searchQuery: string;
81
+ searchResults: MemoryItem[] | null;
82
+ searching: boolean;
83
+ forgetSelected: Set<string>;
84
+ liveDotId: string | null;
85
+ liveDotExpiry: number;
86
+ members: MemberItem[];
87
+ inviteLinks: InviteLink[];
88
+ teamSelected: number;
89
+ inlineError: string | null;
90
+ inlineErrorTimer: number;
91
+ billing: BillingInfo | null;
92
+ platforms: PlatformStatus[];
93
+ modal: Modal;
94
+ bannerLines: string[];
95
+ firstLogin: boolean;
96
+ joinedProjectName: string | null;
97
+ pendingApprovals: PendingApproval[];
98
+ notifications: Notification[];
99
+ copiedFeedback: boolean;
100
+ error: string | null;
101
+ offline: boolean;
102
+ sseConnected: boolean;
103
+ }
104
+ export declare const TABS: Tab[];
105
+ export declare function initialState(): AppState;
106
+ export type Action = {
107
+ type: 'SET_USER_DATA';
108
+ me: MeResponse;
109
+ } | {
110
+ type: 'SWITCH_TAB';
111
+ tab: Tab;
112
+ } | {
113
+ type: 'NEXT_TAB';
114
+ } | {
115
+ type: 'SCROLL_UP';
116
+ } | {
117
+ type: 'SCROLL_DOWN';
118
+ } | {
119
+ type: 'PAGE_DOWN';
120
+ } | {
121
+ type: 'ENTER_SEARCH';
122
+ } | {
123
+ type: 'EXIT_SEARCH';
124
+ } | {
125
+ type: 'SEARCH_INPUT';
126
+ char: string;
127
+ } | {
128
+ type: 'SEARCH_BACKSPACE';
129
+ } | {
130
+ type: 'ENTER_FORGET';
131
+ } | {
132
+ type: 'EXIT_FORGET';
133
+ } | {
134
+ type: 'TOGGLE_FORGET';
135
+ memoryId: string;
136
+ } | {
137
+ type: 'SET_MEMORIES';
138
+ memories: MemoryItem[];
139
+ total: number;
140
+ append?: boolean;
141
+ } | {
142
+ type: 'SET_SEARCH_RESULTS';
143
+ results: MemoryItem[];
144
+ } | {
145
+ type: 'ADD_MEMORY';
146
+ memory: MemoryItem;
147
+ } | {
148
+ type: 'REMOVE_MEMORY';
149
+ id: string;
150
+ } | {
151
+ type: 'SET_MEMBERS';
152
+ members: MemberItem[];
153
+ } | {
154
+ type: 'SET_BILLING';
155
+ billing: BillingInfo;
156
+ } | {
157
+ type: 'SET_PLATFORMS';
158
+ platforms: PlatformStatus[];
159
+ } | {
160
+ type: 'PLATFORM_CONFIGURED';
161
+ platform: string;
162
+ } | {
163
+ type: 'OPEN_MODAL';
164
+ modal: NonNullable<Modal>;
165
+ } | {
166
+ type: 'CLOSE_MODAL';
167
+ } | {
168
+ type: 'MODAL_INPUT';
169
+ char: string;
170
+ } | {
171
+ type: 'MODAL_BACKSPACE';
172
+ } | {
173
+ type: 'SET_COPIED_FEEDBACK';
174
+ active: boolean;
175
+ } | {
176
+ type: 'SET_ERROR';
177
+ error: string | null;
178
+ } | {
179
+ type: 'SET_OFFLINE';
180
+ offline: boolean;
181
+ } | {
182
+ type: 'SET_SSE_CONNECTED';
183
+ connected: boolean;
184
+ } | {
185
+ type: 'SET_LIVE_DOT';
186
+ memoryId: string;
187
+ } | {
188
+ type: 'CLEAR_LIVE_DOT';
189
+ } | {
190
+ type: 'SET_LOADING';
191
+ loading: boolean;
192
+ } | {
193
+ type: 'SET_SEARCHING';
194
+ searching: boolean;
195
+ } | {
196
+ type: 'SET_INVITE_LINKS';
197
+ links: InviteLink[];
198
+ } | {
199
+ type: 'SET_PENDING_APPROVALS';
200
+ approvals: PendingApproval[];
201
+ } | {
202
+ type: 'SET_NOTIFICATIONS';
203
+ notifications: Notification[];
204
+ } | {
205
+ type: 'SET_USER_ROLE';
206
+ role: 'admin' | 'member' | 'viewer';
207
+ } | {
208
+ type: 'SET_TEAM_SELECTED';
209
+ index: number;
210
+ } | {
211
+ type: 'SET_INLINE_ERROR';
212
+ message: string | null;
213
+ };
214
+ export declare function reduce(state: AppState, action: Action): AppState;
215
+ export declare function getActiveProject(state: AppState): MeResponse['projects'][0] | null;
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ // TUI state machine — single source of truth for the dashboard.
3
+ // Reducer pattern: keypresses → actions → new state → render.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.TABS = void 0;
6
+ exports.initialState = initialState;
7
+ exports.reduce = reduce;
8
+ exports.getActiveProject = getActiveProject;
9
+ exports.TABS = ['knowledge', 'team', 'billing', 'project', 'you'];
10
+ function initialState() {
11
+ return {
12
+ user: null,
13
+ projects: [],
14
+ activeProjectId: null,
15
+ userRole: 'member',
16
+ tab: 'knowledge',
17
+ knowledgeMode: 'browse',
18
+ memories: [],
19
+ memoryTotal: 0,
20
+ memoryScroll: 0,
21
+ memorySelected: 0,
22
+ memoryLoading: false,
23
+ memoryHasMore: false,
24
+ searchQuery: '',
25
+ searchResults: null,
26
+ searching: false,
27
+ forgetSelected: new Set(),
28
+ liveDotId: null,
29
+ liveDotExpiry: 0,
30
+ members: [],
31
+ inviteLinks: [],
32
+ teamSelected: 0,
33
+ inlineError: null,
34
+ inlineErrorTimer: 0,
35
+ billing: null,
36
+ platforms: [],
37
+ modal: null,
38
+ bannerLines: [],
39
+ firstLogin: false,
40
+ joinedProjectName: null,
41
+ pendingApprovals: [],
42
+ notifications: [],
43
+ copiedFeedback: false,
44
+ error: null,
45
+ offline: false,
46
+ sseConnected: false,
47
+ };
48
+ }
49
+ function reduce(state, action) {
50
+ switch (action.type) {
51
+ case 'SET_USER_DATA': {
52
+ const me = action.me;
53
+ const activeId = me.user.active_project_id;
54
+ const activeProject = me.projects.find(p => p.project_id === activeId) ?? me.projects[0] ?? null;
55
+ const role = (activeProject?.role ?? 'member');
56
+ return {
57
+ ...state,
58
+ user: me.user,
59
+ projects: me.projects,
60
+ activeProjectId: activeProject?.project_id ?? null,
61
+ userRole: role,
62
+ };
63
+ }
64
+ case 'SWITCH_TAB':
65
+ return { ...state, tab: action.tab, modal: null };
66
+ case 'NEXT_TAB': {
67
+ const idx = exports.TABS.indexOf(state.tab);
68
+ return { ...state, tab: exports.TABS[(idx + 1) % exports.TABS.length], modal: null };
69
+ }
70
+ case 'SCROLL_UP': {
71
+ const list = currentList(state);
72
+ const newSelected = Math.max(0, state.memorySelected - 1);
73
+ const newScroll = newSelected < state.memoryScroll ? newSelected : state.memoryScroll;
74
+ return { ...state, memorySelected: newSelected, memoryScroll: newScroll };
75
+ }
76
+ case 'SCROLL_DOWN': {
77
+ const list = currentList(state);
78
+ const newSelected = Math.min(list.length - 1, state.memorySelected + 1);
79
+ // Adjust scroll if selection moves past visible area (assume ~15 visible rows)
80
+ const visibleRows = 15;
81
+ const newScroll = newSelected >= state.memoryScroll + visibleRows
82
+ ? newSelected - visibleRows + 1
83
+ : state.memoryScroll;
84
+ return { ...state, memorySelected: newSelected, memoryScroll: newScroll };
85
+ }
86
+ case 'ENTER_SEARCH':
87
+ return { ...state, knowledgeMode: 'search', searchQuery: '', searchResults: null, memorySelected: 0 };
88
+ case 'EXIT_SEARCH':
89
+ return { ...state, knowledgeMode: 'browse', searchQuery: '', searchResults: null, memorySelected: 0 };
90
+ case 'SEARCH_INPUT':
91
+ return { ...state, searchQuery: state.searchQuery + action.char };
92
+ case 'SEARCH_BACKSPACE':
93
+ return { ...state, searchQuery: state.searchQuery.slice(0, -1) };
94
+ case 'ENTER_FORGET':
95
+ return { ...state, knowledgeMode: 'forget', forgetSelected: new Set() };
96
+ case 'EXIT_FORGET':
97
+ return { ...state, knowledgeMode: 'browse', forgetSelected: new Set() };
98
+ case 'TOGGLE_FORGET': {
99
+ const next = new Set(state.forgetSelected);
100
+ if (next.has(action.memoryId))
101
+ next.delete(action.memoryId);
102
+ else
103
+ next.add(action.memoryId);
104
+ return { ...state, forgetSelected: next };
105
+ }
106
+ case 'SET_MEMORIES': {
107
+ const memories = action.append
108
+ ? [...state.memories, ...action.memories]
109
+ : action.memories;
110
+ return {
111
+ ...state,
112
+ memories,
113
+ memoryTotal: action.total,
114
+ memoryHasMore: memories.length < action.total,
115
+ memoryLoading: false,
116
+ };
117
+ }
118
+ case 'SET_SEARCH_RESULTS':
119
+ return { ...state, searchResults: action.results, memorySelected: 0 };
120
+ case 'ADD_MEMORY':
121
+ return {
122
+ ...state,
123
+ memories: [action.memory, ...state.memories],
124
+ memoryTotal: state.memoryTotal + 1,
125
+ };
126
+ case 'REMOVE_MEMORY':
127
+ return {
128
+ ...state,
129
+ memories: state.memories.filter(m => m.id !== action.id),
130
+ memoryTotal: Math.max(0, state.memoryTotal - 1),
131
+ searchResults: state.searchResults?.filter(m => m.id !== action.id) ?? null,
132
+ };
133
+ case 'SET_MEMBERS':
134
+ return { ...state, members: action.members };
135
+ case 'SET_BILLING':
136
+ return { ...state, billing: action.billing };
137
+ case 'SET_PLATFORMS':
138
+ return { ...state, platforms: action.platforms };
139
+ case 'PLATFORM_CONFIGURED':
140
+ return {
141
+ ...state,
142
+ platforms: state.platforms.map(p => p.name.toLowerCase().replace(/\s+/g, '-') === action.platform
143
+ ? { ...p, state: 'configured' }
144
+ : p),
145
+ };
146
+ case 'OPEN_MODAL':
147
+ return { ...state, modal: action.modal };
148
+ case 'CLOSE_MODAL':
149
+ return { ...state, modal: null };
150
+ case 'MODAL_INPUT': {
151
+ if (!state.modal)
152
+ return state;
153
+ if ('input' in state.modal) {
154
+ return { ...state, modal: { ...state.modal, input: state.modal.input + action.char } };
155
+ }
156
+ return state;
157
+ }
158
+ case 'MODAL_BACKSPACE': {
159
+ if (!state.modal)
160
+ return state;
161
+ if ('input' in state.modal) {
162
+ return { ...state, modal: { ...state.modal, input: state.modal.input.slice(0, -1) } };
163
+ }
164
+ return state;
165
+ }
166
+ case 'SET_COPIED_FEEDBACK':
167
+ return { ...state, copiedFeedback: action.active };
168
+ case 'SET_ERROR':
169
+ return { ...state, error: action.error };
170
+ case 'SET_OFFLINE':
171
+ return { ...state, offline: action.offline };
172
+ case 'SET_SSE_CONNECTED':
173
+ return { ...state, sseConnected: action.connected };
174
+ case 'SET_LIVE_DOT':
175
+ return { ...state, liveDotId: action.memoryId, liveDotExpiry: Date.now() + 10000 };
176
+ case 'CLEAR_LIVE_DOT':
177
+ return { ...state, liveDotId: null, liveDotExpiry: 0 };
178
+ case 'SET_LOADING':
179
+ return { ...state, memoryLoading: action.loading };
180
+ case 'SET_SEARCHING':
181
+ return { ...state, searching: action.searching };
182
+ case 'SET_INVITE_LINKS':
183
+ return { ...state, inviteLinks: action.links };
184
+ case 'SET_PENDING_APPROVALS':
185
+ return { ...state, pendingApprovals: action.approvals };
186
+ case 'SET_NOTIFICATIONS':
187
+ return { ...state, notifications: action.notifications };
188
+ case 'SET_USER_ROLE':
189
+ return { ...state, userRole: action.role };
190
+ case 'SET_TEAM_SELECTED':
191
+ return { ...state, teamSelected: action.index };
192
+ case 'SET_INLINE_ERROR':
193
+ return { ...state, inlineError: action.message };
194
+ default:
195
+ return state;
196
+ }
197
+ }
198
+ function currentList(state) {
199
+ if (state.knowledgeMode === 'search' && state.searchResults)
200
+ return state.searchResults;
201
+ return state.memories;
202
+ }
203
+ function getActiveProject(state) {
204
+ return state.projects.find(p => p.project_id === state.activeProjectId) ?? null;
205
+ }
206
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,8DAA8D;;;AA8F9D,oCAsCC;AA2CD,wBAwLC;AAOD,4CAEC;AApRY,QAAA,IAAI,GAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAE9E,SAAgB,YAAY;IAC1B,OAAO;QACL,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,IAAI;QACrB,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,WAAW;QAChB,aAAa,EAAE,QAAQ;QACvB,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,aAAa,EAAE,KAAK;QACpB,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,SAAS,EAAE,IAAI;QACf,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,KAAK;QACjB,iBAAiB,EAAE,IAAI;QACvB,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,EAAE;QACjB,cAAc,EAAE,KAAK;QACrB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AA2CD,SAAgB,MAAM,CAAC,KAAe,EAAE,MAAc;IACpD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC3C,MAAM,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACjG,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE,IAAI,IAAI,QAAQ,CAAkC,CAAC;YAChF,OAAO;gBACL,GAAG,KAAK;gBACR,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;gBACrB,eAAe,EAAE,aAAa,EAAE,UAAU,IAAI,IAAI;gBAClD,QAAQ,EAAE,IAAI;aACf,CAAC;QACJ,CAAC;QAED,KAAK,YAAY;YACf,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAEpD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,GAAG,GAAG,YAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,YAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,YAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACvE,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YACtF,OAAO,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QAC5E,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;YACxE,+EAA+E;YAC/E,MAAM,WAAW,GAAG,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,WAAW,IAAI,KAAK,CAAC,YAAY,GAAG,WAAW;gBAC/D,CAAC,CAAC,WAAW,GAAG,WAAW,GAAG,CAAC;gBAC/B,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YACvB,OAAO,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QAC5E,CAAC;QAED,KAAK,cAAc;YACjB,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAExG,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAExG,KAAK,cAAc;YACjB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAEpE,KAAK,kBAAkB;YACrB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnE,KAAK,cAAc;YACjB,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAE1E,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAE1E,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;;gBACvD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM;gBAC5B,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACzC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ;gBACR,WAAW,EAAE,MAAM,CAAC,KAAK;gBACzB,aAAa,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK;gBAC7C,aAAa,EAAE,KAAK;aACrB,CAAC;QACJ,CAAC;QAED,KAAK,oBAAoB;YACvB,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAExE,KAAK,YAAY;YACf,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC5C,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC;aACnC,CAAC;QAEJ,KAAK,eAAe;YAClB,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;gBACxD,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;gBAC/C,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI;aAC5E,CAAC;QAEJ,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAE/C,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAE/C,KAAK,eAAe;YAClB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnD,KAAK,qBAAqB;YACxB,OAAO;gBACL,GAAG,KAAK;gBACR,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,QAAQ;oBAC3D,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAqB,EAAE;oBACxC,CAAC,CAAC,CAAC,CACN;aACF,CAAC;QAEJ,KAAK,YAAY;YACf,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAE3C,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAEnC,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YAC/B,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC3B,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACzF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YAC/B,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC3B,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACxF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,qBAAqB;YACxB,OAAO,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAErD,KAAK,WAAW;YACd,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAE3C,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAE/C,KAAK,mBAAmB;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAEtD,KAAK,cAAc;YACjB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAErF,KAAK,gBAAgB;YACnB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QAEzD,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAErD,KAAK,eAAe;YAClB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnD,KAAK,kBAAkB;YACrB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAEjD,KAAK,uBAAuB;YAC1B,OAAO,EAAE,GAAG,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAE1D,KAAK,mBAAmB;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;QAE3D,KAAK,eAAe;YAClB,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAE7C,KAAK,mBAAmB;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAElD,KAAK,kBAAkB;YACrB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEnD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,aAAa,CAAC;IACxF,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAe;IAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC;AAClF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AppState } from "../state";
2
+ export declare function renderBilling(state: AppState, width: number, height: number): string[];
3
+ export declare function billingFooter(state: AppState): string;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ // Billing tab — trial/active/past due/locked/canceled states.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.renderBilling = renderBilling;
5
+ exports.billingFooter = billingFooter;
6
+ const ansi_1 = require("../ansi");
7
+ const state_1 = require("../state");
8
+ function renderBilling(state, width, height) {
9
+ const lines = [''];
10
+ const project = (0, state_1.getActiveProject)(state);
11
+ const sub = state.billing?.subscription;
12
+ // Trial state
13
+ if (project?.trial_ends_at) {
14
+ const days = (0, ansi_1.daysUntil)(project.trial_ends_at);
15
+ if (days > 0) {
16
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('status', 10) + ansi_1.C.reset + ansi_1.C.yellow + 'trial' + ansi_1.C.reset);
17
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('ends', 10) + ansi_1.C.reset +
18
+ ansi_1.C.secondary + (0, ansi_1.formatDate)(project.trial_ends_at) + ansi_1.C.reset +
19
+ ansi_1.C.dim + ' \u00b7 ' + ansi_1.C.reset +
20
+ ansi_1.C.yellow + days + ' day' + (days !== 1 ? 's' : '') + ' left' + ansi_1.C.reset);
21
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('plan', 10) + ansi_1.C.reset + ansi_1.C.muted + '$9/seat/month after trial' + ansi_1.C.reset);
22
+ return lines;
23
+ }
24
+ // Trial ended
25
+ if (!sub || sub.status !== 'active') {
26
+ if (state.userRole === 'admin') {
27
+ lines.push(' ' + ansi_1.C.red + 'trial ended ' + (0, ansi_1.formatDate)(project.trial_ends_at) + ansi_1.C.reset);
28
+ lines.push(' ' + ansi_1.C.muted + 'subscribe to keep your agents connected' + ansi_1.C.reset);
29
+ lines.push('');
30
+ if (state.members.length > 0) {
31
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('seats', 10) + ansi_1.C.reset +
32
+ ansi_1.C.secondary + String(state.members.length) + ansi_1.C.reset +
33
+ ansi_1.C.muted + ' ($' + (state.members.length * 9) + '/month)' + ansi_1.C.reset);
34
+ }
35
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('plan', 10) + ansi_1.C.reset + ansi_1.C.muted + '$9/seat/month' + ansi_1.C.reset);
36
+ }
37
+ else {
38
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('status', 10) + ansi_1.C.reset + ansi_1.C.red + 'trial ended' + ansi_1.C.reset);
39
+ if (state.members.length > 0) {
40
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('seats', 10) + ansi_1.C.reset + ansi_1.C.secondary + String(state.members.length) + ansi_1.C.reset);
41
+ }
42
+ }
43
+ return lines;
44
+ }
45
+ }
46
+ // No subscription and no trial
47
+ if (!sub) {
48
+ if (state.userRole === 'admin') {
49
+ lines.push(' ' + ansi_1.C.red + 'locked' + ansi_1.C.reset);
50
+ lines.push(' ' + ansi_1.C.muted + 'subscribe to keep your agents connected' + ansi_1.C.reset);
51
+ lines.push('');
52
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('plan', 10) + ansi_1.C.reset + ansi_1.C.muted + '$9/seat/month' + ansi_1.C.reset);
53
+ }
54
+ else {
55
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('status', 10) + ansi_1.C.reset + ansi_1.C.red + 'locked' + ansi_1.C.reset);
56
+ }
57
+ return lines;
58
+ }
59
+ // Payment failed
60
+ if (sub.status === 'past_due') {
61
+ if (state.userRole === 'admin') {
62
+ lines.push(' ' + ansi_1.C.red + '! payment failed' + ansi_1.C.reset);
63
+ lines.push(' ' + ansi_1.C.muted + 'update your payment method to continue' + ansi_1.C.reset);
64
+ lines.push('');
65
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('seats', 10) + ansi_1.C.reset + ansi_1.C.secondary + String(sub.seat_count) + ansi_1.C.reset);
66
+ }
67
+ else {
68
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('status', 10) + ansi_1.C.reset + ansi_1.C.red + 'past due' + ansi_1.C.reset);
69
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('seats', 10) + ansi_1.C.reset + ansi_1.C.secondary + String(sub.seat_count) + ansi_1.C.reset);
70
+ }
71
+ return lines;
72
+ }
73
+ // Canceled
74
+ if (sub.status === 'canceled' || sub.cancel_at_period_end) {
75
+ if (state.userRole === 'admin') {
76
+ lines.push(' ' + ansi_1.C.red + 'subscription canceled' + ansi_1.C.reset);
77
+ if (sub.current_period_end) {
78
+ lines.push(' ' + ansi_1.C.muted + 'your agents will stop working ' + (0, ansi_1.formatDate)(sub.current_period_end) + ansi_1.C.reset);
79
+ }
80
+ lines.push('');
81
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('seats', 10) + ansi_1.C.reset + ansi_1.C.secondary + String(sub.seat_count) + ansi_1.C.reset);
82
+ if (sub.current_period_end) {
83
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('ends', 10) + ansi_1.C.reset + ansi_1.C.secondary + (0, ansi_1.formatDate)(sub.current_period_end) + ansi_1.C.reset);
84
+ }
85
+ }
86
+ else {
87
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('status', 10) + ansi_1.C.reset + ansi_1.C.red + 'canceled' + ansi_1.C.reset);
88
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('seats', 10) + ansi_1.C.reset + ansi_1.C.secondary + String(sub.seat_count) + ansi_1.C.reset);
89
+ }
90
+ return lines;
91
+ }
92
+ // Active subscription
93
+ if (state.userRole === 'admin') {
94
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('status', 10) + ansi_1.C.reset + ansi_1.C.green + 'active' + ansi_1.C.reset);
95
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('seats', 10) + ansi_1.C.reset +
96
+ ansi_1.C.secondary + String(sub.seat_count) + ansi_1.C.reset +
97
+ ansi_1.C.muted + ' ($' + (sub.seat_count * 9) + '/month)' + ansi_1.C.reset);
98
+ if (sub.current_period_end) {
99
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('renews', 10) + ansi_1.C.reset +
100
+ ansi_1.C.secondary + (0, ansi_1.formatDate)(sub.current_period_end) + ansi_1.C.reset);
101
+ }
102
+ }
103
+ else {
104
+ // Member view — status and seats only
105
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('status', 10) + ansi_1.C.reset + ansi_1.C.green + 'active' + ansi_1.C.reset);
106
+ lines.push(' ' + ansi_1.C.dim + (0, ansi_1.padEnd)('seats', 10) + ansi_1.C.reset + ansi_1.C.secondary + String(sub.seat_count) + ansi_1.C.reset);
107
+ }
108
+ return lines;
109
+ }
110
+ function billingFooter(state) {
111
+ if (state.userRole !== 'admin') {
112
+ return ansi_1.C.muted + 'q quit' + ansi_1.C.reset;
113
+ }
114
+ const sub = state.billing?.subscription;
115
+ const project = (0, state_1.getActiveProject)(state);
116
+ // Canceled — show resubscribe
117
+ if (sub && (sub.status === 'canceled' || sub.cancel_at_period_end)) {
118
+ return ansi_1.C.muted + 's resubscribe q quit' + ansi_1.C.reset;
119
+ }
120
+ // Trial or locked — show subscribe
121
+ if (!sub || sub.status !== 'active') {
122
+ return ansi_1.C.muted + 's subscribe q quit' + ansi_1.C.reset;
123
+ }
124
+ // Active or past due — show portal
125
+ return ansi_1.C.muted + 'p billing portal q quit' + ansi_1.C.reset;
126
+ }
127
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../../src/tui/views/billing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AppState } from "../state";
2
+ export declare function renderKnowledge(state: AppState, width: number, height: number): string[];
3
+ export declare function knowledgeFooter(state: AppState): string;