cohvu 2.15.0 → 2.16.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 +10 -9
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/tui/App.js +134 -66
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/components/Header.js +20 -3
- package/dist/tui/components/Header.js.map +1 -1
- package/dist/tui/components/Modal.js +27 -22
- package/dist/tui/components/Modal.js.map +1 -1
- package/dist/tui/state.d.ts +19 -10
- package/dist/tui/state.js +21 -3
- package/dist/tui/state.js.map +1 -1
- package/dist/tui/tabs/BillingTab.js +2 -2
- package/dist/tui/tabs/BillingTab.js.map +1 -1
- package/dist/tui/tabs/KeysTab.js +41 -11
- package/dist/tui/tabs/KeysTab.js.map +1 -1
- package/package.json +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -9,8 +9,6 @@ export interface MeResponse {
|
|
|
9
9
|
email: string;
|
|
10
10
|
name: string;
|
|
11
11
|
active_project_id: string | null;
|
|
12
|
-
has_used_trial: boolean;
|
|
13
|
-
trial_ends_at: string | null;
|
|
14
12
|
created_at: string;
|
|
15
13
|
};
|
|
16
14
|
individual_subscription: {
|
|
@@ -30,7 +28,6 @@ export interface MeResponse {
|
|
|
30
28
|
name: string;
|
|
31
29
|
slug: string;
|
|
32
30
|
role: string;
|
|
33
|
-
trial_ends_at: string | null;
|
|
34
31
|
require_consensus: boolean;
|
|
35
32
|
subscription: {
|
|
36
33
|
status: string;
|
|
@@ -78,7 +75,6 @@ export interface ProjectInfo {
|
|
|
78
75
|
id: string;
|
|
79
76
|
name: string;
|
|
80
77
|
slug: string;
|
|
81
|
-
trial_ends_at: string | null;
|
|
82
78
|
}
|
|
83
79
|
export interface InviteLink {
|
|
84
80
|
role: string;
|
|
@@ -103,9 +99,11 @@ export interface Notification {
|
|
|
103
99
|
created_at: string;
|
|
104
100
|
seen: boolean;
|
|
105
101
|
}
|
|
102
|
+
export type KeyAction = 'understand' | 'contribute' | 'search' | 'get' | 'history' | 'update' | 'delete' | 'restore';
|
|
106
103
|
export interface ApiKeyScope {
|
|
107
104
|
project_id: string;
|
|
108
|
-
role:
|
|
105
|
+
role: string;
|
|
106
|
+
allowed_actions: KeyAction[];
|
|
109
107
|
}
|
|
110
108
|
export interface ApiKeySummary {
|
|
111
109
|
id: string;
|
|
@@ -114,9 +112,10 @@ export interface ApiKeySummary {
|
|
|
114
112
|
key_prefix: string;
|
|
115
113
|
permissions?: unknown;
|
|
116
114
|
default_agent_name: string | null;
|
|
117
|
-
allowed_tools: string[] | null;
|
|
118
115
|
last_used_at: string | null;
|
|
119
116
|
expires_at: string | null;
|
|
117
|
+
ops_limit: number | null;
|
|
118
|
+
ops_used: number;
|
|
120
119
|
created_at: string;
|
|
121
120
|
scopes?: ApiKeyScope[];
|
|
122
121
|
}
|
|
@@ -128,10 +127,13 @@ export interface CreateSessionKeyInput {
|
|
|
128
127
|
export interface CreateIntegrationKeyInput {
|
|
129
128
|
kind: 'integration';
|
|
130
129
|
name: string;
|
|
131
|
-
projects:
|
|
132
|
-
|
|
130
|
+
projects: Array<{
|
|
131
|
+
project_id: string;
|
|
132
|
+
allowed_actions: KeyAction[];
|
|
133
|
+
}>;
|
|
133
134
|
default_agent_name?: string;
|
|
134
135
|
expires_in_days?: number;
|
|
136
|
+
ops_limit?: number;
|
|
135
137
|
}
|
|
136
138
|
export declare class ApiClient {
|
|
137
139
|
private baseUrl;
|
|
@@ -184,7 +186,6 @@ export declare class ApiClient {
|
|
|
184
186
|
id: string;
|
|
185
187
|
name: string;
|
|
186
188
|
slug: string;
|
|
187
|
-
trial_ends_at: string | null;
|
|
188
189
|
}>;
|
|
189
190
|
renameTeam(teamId: string, name: string, slug: string): Promise<void>;
|
|
190
191
|
updateTeamSettings(teamId: string, settings: {
|
package/dist/index.js
CHANGED
|
@@ -162,11 +162,7 @@ async function enterDashboard() {
|
|
|
162
162
|
const slug = deriveSlug(name);
|
|
163
163
|
try {
|
|
164
164
|
await api.createProject(name, slug, me.user.id);
|
|
165
|
-
|
|
166
|
-
const trialDate = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000);
|
|
167
|
-
const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
|
|
168
|
-
const formatted = `${months[trialDate.getMonth()]} ${trialDate.getDate()}`;
|
|
169
|
-
console.log(' created ' + slug + chalk.dim(' \u00b7 trial ends ' + formatted));
|
|
165
|
+
console.log(' created ' + slug);
|
|
170
166
|
}
|
|
171
167
|
catch {
|
|
172
168
|
console.log(chalk.dim(" couldn't create project \u2014 try again from the dashboard"));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,YAAY;AACZ,EAAE;AACF,0EAA0E;AAC1E,8DAA8D;AAC9D,sCAAsC;AACtC,kEAAkE;AAClE,sDAAsD;AACtD,mEAAmE;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;IAC3B,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1C,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;IACnC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1C,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;IACnC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;KAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;IACnC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACnE,IAAI,CAAC;YACH,QAAQ,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QACD,+DAA+D;QAC/D,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAClF,IAAI,CAAC;YACH,MAAM,QAAQ,EAAE,CAAC;YACjB,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;IACvC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,UAAU,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;KAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAChC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,+DAA+D;YAC/D,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,KAAK,UAAU,UAAU;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB,CAAC;IAC9D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC;QAE1B,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB;YACvC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;iBAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAExB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAE9E,KAAK,UAAU,cAAc;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB,CAAC;IAC9D,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,CAAC;IAE/B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC;QAE1B,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/E,MAAM,QAAQ,EAAE,CAAC;QACjB,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEzC,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;YACjD,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBAC9C,IAAI,CAAC,IAAI;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;YAC1F,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,oEAAoE;YACpE,MAAM,WAAW,GAAG,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC;YAClE,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC;oBAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAC5C,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,gEAAgE;YAClE,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,MAAM,QAAQ,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACtE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,WAAW,CAAC,IAAI,EAAE,CAAC;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,sBAAsB;IAErE,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC"}
|
package/dist/tui/App.js
CHANGED
|
@@ -20,8 +20,8 @@ import { BillingTab } from './tabs/BillingTab.js';
|
|
|
20
20
|
import { ProjectTab } from './tabs/ProjectTab.js';
|
|
21
21
|
import { KeysTab } from './tabs/KeysTab.js';
|
|
22
22
|
import { YouTab } from './tabs/YouTab.js';
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
23
|
+
import { ALL_KEY_ACTIONS } from './state.js';
|
|
24
|
+
import { timeUntil } from './utils.js';
|
|
25
25
|
import { exec, execFile } from 'child_process';
|
|
26
26
|
import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync, watch } from 'fs';
|
|
27
27
|
import { join } from 'path';
|
|
@@ -139,6 +139,10 @@ export default function App() {
|
|
|
139
139
|
}
|
|
140
140
|
});
|
|
141
141
|
}
|
|
142
|
+
else if (eventType === 'usage') {
|
|
143
|
+
const usage = data;
|
|
144
|
+
dispatch({ type: 'SET_USAGE', ops_used: usage.ops_used, ops_limit: usage.ops_limit });
|
|
145
|
+
}
|
|
142
146
|
else if (eventType === 'approval') {
|
|
143
147
|
const team = getActiveTeam(stateRef.current);
|
|
144
148
|
if (team) {
|
|
@@ -523,7 +527,7 @@ export default function App() {
|
|
|
523
527
|
return;
|
|
524
528
|
}
|
|
525
529
|
// Global 'b' shortcut — subscribe/billing portal from banner
|
|
526
|
-
if (input === 'b' && s.userRole === 'admin' && s.tab !== 'billing') {
|
|
530
|
+
if (input === 'b' && s.userRole === 'admin' && s.tab !== 'billing' && !(s.tab === 'knowledge' && s.knowledgeMode !== 'browse')) {
|
|
527
531
|
await handleBillingShortcut();
|
|
528
532
|
return;
|
|
529
533
|
}
|
|
@@ -562,18 +566,23 @@ export default function App() {
|
|
|
562
566
|
return;
|
|
563
567
|
}
|
|
564
568
|
if (input === 'n' && s.userRole === 'admin') {
|
|
565
|
-
|
|
569
|
+
if (!hasPaidPlan(s)) {
|
|
570
|
+
showToast('Keys require a paid plan', 'error');
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
566
573
|
dispatch({ type: 'OPEN_MODAL', modal: {
|
|
567
574
|
kind: 'create-integration-key',
|
|
568
575
|
step: 'name',
|
|
569
576
|
input: '',
|
|
570
|
-
projectId: adminProjects[0]?.project_id ?? '',
|
|
571
|
-
projectSelectedIdx: 0,
|
|
572
|
-
role: 'member',
|
|
573
|
-
roleSelectedIdx: 1,
|
|
574
|
-
allowedTools: [],
|
|
575
|
-
toolsSelectedIdx: 0,
|
|
576
577
|
agentName: '',
|
|
578
|
+
projectSelectedIdx: 0,
|
|
579
|
+
selectedProjectIds: new Set(),
|
|
580
|
+
projectScopes: new Map(),
|
|
581
|
+
permProjectIdx: 0,
|
|
582
|
+
permActionIdx: 0,
|
|
583
|
+
limitsField: 'expiry',
|
|
584
|
+
expiresInDays: '',
|
|
585
|
+
opsLimit: '',
|
|
577
586
|
} });
|
|
578
587
|
return;
|
|
579
588
|
}
|
|
@@ -1027,11 +1036,7 @@ export default function App() {
|
|
|
1027
1036
|
const adminProjects = adminScopableProjects(s);
|
|
1028
1037
|
if (modal.step === 'name') {
|
|
1029
1038
|
if (key.return && modal.input.trim().length > 0) {
|
|
1030
|
-
|
|
1031
|
-
showInlineError('no projects you can scope an integration key to', 3000);
|
|
1032
|
-
return;
|
|
1033
|
-
}
|
|
1034
|
-
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, step: 'project' } });
|
|
1039
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, step: 'agent' } });
|
|
1035
1040
|
}
|
|
1036
1041
|
else if (key.backspace || key.delete) {
|
|
1037
1042
|
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, input: modal.input.slice(0, -1) } });
|
|
@@ -1044,75 +1049,131 @@ export default function App() {
|
|
|
1044
1049
|
}
|
|
1045
1050
|
return;
|
|
1046
1051
|
}
|
|
1047
|
-
if (modal.step === '
|
|
1048
|
-
if (
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1052
|
+
if (modal.step === 'agent') {
|
|
1053
|
+
if (key.return) {
|
|
1054
|
+
if (adminProjects.length === 0) {
|
|
1055
|
+
showInlineError('no projects you can scope a key to', 3000);
|
|
1056
|
+
return;
|
|
1057
|
+
}
|
|
1058
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, step: 'projects' } });
|
|
1053
1059
|
}
|
|
1054
|
-
else if (key.
|
|
1055
|
-
|
|
1056
|
-
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, projectSelectedIdx: i, projectId: adminProjects[i].project_id } });
|
|
1060
|
+
else if (key.backspace || key.delete) {
|
|
1061
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, agentName: modal.agentName.slice(0, -1) } });
|
|
1057
1062
|
}
|
|
1058
|
-
else if (
|
|
1059
|
-
dispatch({ type: 'OPEN_MODAL', modal: { ...modal,
|
|
1063
|
+
else if (input === ' ') {
|
|
1064
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, agentName: modal.agentName + ' ' } });
|
|
1065
|
+
}
|
|
1066
|
+
else if (input.length === 1 && !key.ctrl && !key.meta) {
|
|
1067
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, agentName: modal.agentName + input } });
|
|
1060
1068
|
}
|
|
1061
1069
|
return;
|
|
1062
1070
|
}
|
|
1063
|
-
if (modal.step === '
|
|
1064
|
-
|
|
1071
|
+
if (modal.step === 'projects') {
|
|
1072
|
+
if (adminProjects.length === 0)
|
|
1073
|
+
return;
|
|
1065
1074
|
if (key.upArrow) {
|
|
1066
|
-
|
|
1067
|
-
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, roleSelectedIdx: i, role: roles[i] } });
|
|
1075
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, projectSelectedIdx: Math.max(0, modal.projectSelectedIdx - 1) } });
|
|
1068
1076
|
}
|
|
1069
1077
|
else if (key.downArrow) {
|
|
1070
|
-
|
|
1071
|
-
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, roleSelectedIdx: i, role: roles[i] } });
|
|
1078
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, projectSelectedIdx: Math.min(adminProjects.length - 1, modal.projectSelectedIdx + 1) } });
|
|
1072
1079
|
}
|
|
1073
|
-
else if (
|
|
1074
|
-
|
|
1080
|
+
else if (input === ' ') {
|
|
1081
|
+
const p = adminProjects[modal.projectSelectedIdx];
|
|
1082
|
+
if (p) {
|
|
1083
|
+
const next = new Set(modal.selectedProjectIds);
|
|
1084
|
+
if (next.has(p.project_id))
|
|
1085
|
+
next.delete(p.project_id);
|
|
1086
|
+
else
|
|
1087
|
+
next.add(p.project_id);
|
|
1088
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, selectedProjectIds: next } });
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
else if (key.return && modal.selectedProjectIds.size > 0) {
|
|
1092
|
+
// Initialize default scopes for new projects (all actions on)
|
|
1093
|
+
const scopes = new Map(modal.projectScopes);
|
|
1094
|
+
for (const pid of modal.selectedProjectIds) {
|
|
1095
|
+
if (!scopes.has(pid)) {
|
|
1096
|
+
scopes.set(pid, new Set([...ALL_KEY_ACTIONS]));
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
// Remove scopes for deselected projects
|
|
1100
|
+
for (const pid of scopes.keys()) {
|
|
1101
|
+
if (!modal.selectedProjectIds.has(pid))
|
|
1102
|
+
scopes.delete(pid);
|
|
1103
|
+
}
|
|
1104
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, step: 'permissions', projectScopes: scopes, permProjectIdx: 0, permActionIdx: 0 } });
|
|
1075
1105
|
}
|
|
1076
1106
|
return;
|
|
1077
1107
|
}
|
|
1078
|
-
if (modal.step === '
|
|
1079
|
-
|
|
1080
|
-
|
|
1108
|
+
if (modal.step === 'permissions') {
|
|
1109
|
+
const selectedProjects = adminProjects.filter(p => modal.selectedProjectIds.has(p.project_id));
|
|
1110
|
+
const projectCount = selectedProjects.length;
|
|
1111
|
+
if (projectCount === 0)
|
|
1112
|
+
return;
|
|
1113
|
+
if (key.tab) {
|
|
1114
|
+
// tab cycles through projects
|
|
1115
|
+
const next = (modal.permProjectIdx + 1) % projectCount;
|
|
1116
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, permProjectIdx: next, permActionIdx: 0 } });
|
|
1117
|
+
}
|
|
1118
|
+
else if (key.upArrow) {
|
|
1119
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, permProjectIdx: Math.max(0, modal.permProjectIdx - 1), permActionIdx: 0 } });
|
|
1081
1120
|
}
|
|
1082
1121
|
else if (key.downArrow) {
|
|
1083
|
-
dispatch({ type: 'OPEN_MODAL', modal: { ...modal,
|
|
1122
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, permProjectIdx: Math.min(projectCount - 1, modal.permProjectIdx + 1), permActionIdx: 0 } });
|
|
1123
|
+
}
|
|
1124
|
+
else if (key.leftArrow) {
|
|
1125
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, permActionIdx: Math.max(0, modal.permActionIdx - 1) } });
|
|
1126
|
+
}
|
|
1127
|
+
else if (key.rightArrow) {
|
|
1128
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, permActionIdx: Math.min(ALL_KEY_ACTIONS.length - 1, modal.permActionIdx + 1) } });
|
|
1084
1129
|
}
|
|
1085
1130
|
else if (input === ' ') {
|
|
1086
|
-
const
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1131
|
+
const p = selectedProjects[modal.permProjectIdx];
|
|
1132
|
+
if (p) {
|
|
1133
|
+
const action = ALL_KEY_ACTIONS[modal.permActionIdx];
|
|
1134
|
+
const scopes = new Map(modal.projectScopes);
|
|
1135
|
+
const actions = new Set(scopes.get(p.project_id) ?? []);
|
|
1136
|
+
if (actions.has(action))
|
|
1137
|
+
actions.delete(action);
|
|
1138
|
+
else
|
|
1139
|
+
actions.add(action);
|
|
1140
|
+
scopes.set(p.project_id, actions);
|
|
1141
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, projectScopes: scopes } });
|
|
1142
|
+
}
|
|
1091
1143
|
}
|
|
1092
1144
|
else if (key.return) {
|
|
1093
|
-
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, step: '
|
|
1145
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, step: 'limits' } });
|
|
1094
1146
|
}
|
|
1095
1147
|
return;
|
|
1096
1148
|
}
|
|
1097
|
-
if (modal.step === '
|
|
1149
|
+
if (modal.step === 'limits') {
|
|
1098
1150
|
if (key.return) {
|
|
1099
1151
|
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, step: 'confirm' } });
|
|
1100
1152
|
}
|
|
1101
|
-
else if (key.
|
|
1102
|
-
dispatch({ type: 'OPEN_MODAL', modal: { ...modal,
|
|
1153
|
+
else if (key.tab) {
|
|
1154
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, limitsField: modal.limitsField === 'expiry' ? 'ops' : 'expiry' } });
|
|
1103
1155
|
}
|
|
1104
|
-
else if (
|
|
1105
|
-
|
|
1156
|
+
else if (key.backspace || key.delete) {
|
|
1157
|
+
if (modal.limitsField === 'expiry') {
|
|
1158
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, expiresInDays: modal.expiresInDays.slice(0, -1) } });
|
|
1159
|
+
}
|
|
1160
|
+
else {
|
|
1161
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, opsLimit: modal.opsLimit.slice(0, -1) } });
|
|
1162
|
+
}
|
|
1106
1163
|
}
|
|
1107
|
-
else if (input
|
|
1108
|
-
|
|
1164
|
+
else if (/^[0-9]$/.test(input)) {
|
|
1165
|
+
if (modal.limitsField === 'expiry') {
|
|
1166
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, expiresInDays: modal.expiresInDays + input } });
|
|
1167
|
+
}
|
|
1168
|
+
else {
|
|
1169
|
+
dispatch({ type: 'OPEN_MODAL', modal: { ...modal, opsLimit: modal.opsLimit + input } });
|
|
1170
|
+
}
|
|
1109
1171
|
}
|
|
1110
1172
|
return;
|
|
1111
1173
|
}
|
|
1112
1174
|
if (modal.step === 'confirm') {
|
|
1113
1175
|
if (input === 'y') {
|
|
1114
1176
|
await confirmModal(modal);
|
|
1115
|
-
// confirmModal handles the modal transition (closes on error, opens key-created on success)
|
|
1116
1177
|
}
|
|
1117
1178
|
else if (input === 'n') {
|
|
1118
1179
|
dispatch({ type: 'CLOSE_MODAL' });
|
|
@@ -1504,19 +1565,23 @@ export default function App() {
|
|
|
1504
1565
|
return false;
|
|
1505
1566
|
}
|
|
1506
1567
|
if (modal.kind === 'create-integration-key') {
|
|
1507
|
-
// Only the confirm step submits — earlier steps just advance via OPEN_MODAL.
|
|
1508
1568
|
if (modal.step !== 'confirm')
|
|
1509
1569
|
return false;
|
|
1510
|
-
if (!modal.input.trim() ||
|
|
1570
|
+
if (!modal.input.trim() || modal.selectedProjectIds.size === 0)
|
|
1511
1571
|
return false;
|
|
1512
1572
|
try {
|
|
1513
1573
|
dispatch({ type: 'SET_OPERATION', operation: 'Creating key' });
|
|
1574
|
+
const projects = [...modal.selectedProjectIds].map(pid => ({
|
|
1575
|
+
project_id: pid,
|
|
1576
|
+
allowed_actions: [...(modal.projectScopes.get(pid) ?? [])],
|
|
1577
|
+
}));
|
|
1514
1578
|
const result = await api.createApiKey({
|
|
1515
1579
|
kind: 'integration',
|
|
1516
1580
|
name: modal.input.trim(),
|
|
1517
|
-
projects
|
|
1518
|
-
...(modal.allowedTools.length > 0 ? { allowed_tools: modal.allowedTools } : {}),
|
|
1581
|
+
projects,
|
|
1519
1582
|
...(modal.agentName.trim() ? { default_agent_name: modal.agentName.trim() } : {}),
|
|
1583
|
+
...(modal.expiresInDays ? { expires_in_days: parseInt(modal.expiresInDays, 10) } : {}),
|
|
1584
|
+
...(modal.opsLimit ? { ops_limit: parseInt(modal.opsLimit, 10) } : {}),
|
|
1520
1585
|
});
|
|
1521
1586
|
dispatch({ type: 'SET_OPERATION', operation: null });
|
|
1522
1587
|
const integrationKeys = stateRef.current.userRole === 'admin' && stateRef.current.activeProjectId
|
|
@@ -1899,6 +1964,18 @@ function HelpOverlay({ state }) {
|
|
|
1899
1964
|
}
|
|
1900
1965
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { height: 1 }), _jsxs(Text, { color: "gray", children: [" keybindings \u00B7 ", state.tab] }), _jsx(Box, { height: 1 }), lines.map(([key, desc], i) => key === '' ? _jsx(Box, { height: 1 }, i) : (_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsxs(Text, { color: "gray", children: [" ", key] }) }), _jsx(Text, { dimColor: true, children: desc })] }, i))), _jsx(Box, { height: 1 }), _jsx(Text, { color: "gray", dimColor: true, children: " press ? or esc to close" })] }));
|
|
1901
1966
|
}
|
|
1967
|
+
function hasPaidPlan(state) {
|
|
1968
|
+
const project = getActiveProject(state);
|
|
1969
|
+
if (!project)
|
|
1970
|
+
return false;
|
|
1971
|
+
if (project.owner.kind === 'team') {
|
|
1972
|
+
const team = getActiveTeam(state);
|
|
1973
|
+
const sub = team?.subscription;
|
|
1974
|
+
return !!sub && (sub.status === 'active' || sub.status === 'past_due');
|
|
1975
|
+
}
|
|
1976
|
+
const sub = state.individualSubscription;
|
|
1977
|
+
return !!sub && (sub.status === 'active' || sub.status === 'past_due');
|
|
1978
|
+
}
|
|
1902
1979
|
function hasBillingBanner(state) {
|
|
1903
1980
|
const project = getActiveProject(state);
|
|
1904
1981
|
if (!project)
|
|
@@ -1906,20 +1983,11 @@ function hasBillingBanner(state) {
|
|
|
1906
1983
|
if (project.owner.kind === 'team') {
|
|
1907
1984
|
const team = getActiveTeam(state);
|
|
1908
1985
|
const sub = team?.subscription;
|
|
1909
|
-
if (
|
|
1910
|
-
const teamData = state.teams.find(t => t.team_id === team?.team_id);
|
|
1911
|
-
const days = teamData?.trial_ends_at ? daysUntil(teamData.trial_ends_at) : null;
|
|
1912
|
-
return days !== null && days <= 0;
|
|
1913
|
-
}
|
|
1914
|
-
if (sub.status === 'past_due')
|
|
1986
|
+
if (sub?.status === 'past_due')
|
|
1915
1987
|
return true;
|
|
1916
1988
|
return false;
|
|
1917
1989
|
}
|
|
1918
|
-
const user = state.user;
|
|
1919
|
-
const trialDays = user?.trial_ends_at ? daysUntil(user.trial_ends_at) : null;
|
|
1920
1990
|
const sub = state.individualSubscription;
|
|
1921
|
-
if (trialDays !== null && trialDays <= 0 && sub?.status !== 'active')
|
|
1922
|
-
return true;
|
|
1923
1991
|
if (sub?.status === 'past_due')
|
|
1924
1992
|
return true;
|
|
1925
1993
|
return false;
|