repowise 0.1.39 → 0.1.41

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 (85) hide show
  1. package/dist/bin/repowise.js +2719 -85
  2. package/package.json +3 -2
  3. package/dist/bin/repowise.d.ts +0 -3
  4. package/dist/bin/repowise.d.ts.map +0 -1
  5. package/dist/bin/repowise.js.map +0 -1
  6. package/dist/src/commands/config.d.ts +0 -2
  7. package/dist/src/commands/config.d.ts.map +0 -1
  8. package/dist/src/commands/config.js +0 -95
  9. package/dist/src/commands/config.js.map +0 -1
  10. package/dist/src/commands/create.d.ts +0 -2
  11. package/dist/src/commands/create.d.ts.map +0 -1
  12. package/dist/src/commands/create.js +0 -309
  13. package/dist/src/commands/create.js.map +0 -1
  14. package/dist/src/commands/listen.d.ts +0 -5
  15. package/dist/src/commands/listen.d.ts.map +0 -1
  16. package/dist/src/commands/listen.js +0 -47
  17. package/dist/src/commands/listen.js.map +0 -1
  18. package/dist/src/commands/login.d.ts +0 -5
  19. package/dist/src/commands/login.d.ts.map +0 -1
  20. package/dist/src/commands/login.js +0 -58
  21. package/dist/src/commands/login.js.map +0 -1
  22. package/dist/src/commands/logout.d.ts +0 -2
  23. package/dist/src/commands/logout.d.ts.map +0 -1
  24. package/dist/src/commands/logout.js +0 -12
  25. package/dist/src/commands/logout.js.map +0 -1
  26. package/dist/src/commands/start.d.ts +0 -2
  27. package/dist/src/commands/start.d.ts.map +0 -1
  28. package/dist/src/commands/start.js +0 -17
  29. package/dist/src/commands/start.js.map +0 -1
  30. package/dist/src/commands/status.d.ts +0 -2
  31. package/dist/src/commands/status.d.ts.map +0 -1
  32. package/dist/src/commands/status.js +0 -63
  33. package/dist/src/commands/status.js.map +0 -1
  34. package/dist/src/commands/stop.d.ts +0 -2
  35. package/dist/src/commands/stop.d.ts.map +0 -1
  36. package/dist/src/commands/stop.js +0 -17
  37. package/dist/src/commands/stop.js.map +0 -1
  38. package/dist/src/commands/sync.d.ts +0 -2
  39. package/dist/src/commands/sync.d.ts.map +0 -1
  40. package/dist/src/commands/sync.js +0 -205
  41. package/dist/src/commands/sync.js.map +0 -1
  42. package/dist/src/lib/ai-tools.d.ts +0 -23
  43. package/dist/src/lib/ai-tools.d.ts.map +0 -1
  44. package/dist/src/lib/ai-tools.js +0 -193
  45. package/dist/src/lib/ai-tools.js.map +0 -1
  46. package/dist/src/lib/api.d.ts +0 -2
  47. package/dist/src/lib/api.d.ts.map +0 -1
  48. package/dist/src/lib/api.js +0 -38
  49. package/dist/src/lib/api.js.map +0 -1
  50. package/dist/src/lib/auth.d.ts +0 -28
  51. package/dist/src/lib/auth.d.ts.map +0 -1
  52. package/dist/src/lib/auth.js +0 -271
  53. package/dist/src/lib/auth.js.map +0 -1
  54. package/dist/src/lib/config.d.ts +0 -15
  55. package/dist/src/lib/config.d.ts.map +0 -1
  56. package/dist/src/lib/config.js +0 -19
  57. package/dist/src/lib/config.js.map +0 -1
  58. package/dist/src/lib/env.d.ts +0 -10
  59. package/dist/src/lib/env.d.ts.map +0 -1
  60. package/dist/src/lib/env.js +0 -26
  61. package/dist/src/lib/env.js.map +0 -1
  62. package/dist/src/lib/interview-handler.d.ts +0 -2
  63. package/dist/src/lib/interview-handler.d.ts.map +0 -1
  64. package/dist/src/lib/interview-handler.js +0 -100
  65. package/dist/src/lib/interview-handler.js.map +0 -1
  66. package/dist/src/lib/progress-renderer.d.ts +0 -84
  67. package/dist/src/lib/progress-renderer.d.ts.map +0 -1
  68. package/dist/src/lib/progress-renderer.js +0 -388
  69. package/dist/src/lib/progress-renderer.js.map +0 -1
  70. package/dist/src/lib/prompts.d.ts +0 -7
  71. package/dist/src/lib/prompts.d.ts.map +0 -1
  72. package/dist/src/lib/prompts.js +0 -33
  73. package/dist/src/lib/prompts.js.map +0 -1
  74. package/dist/src/lib/welcome.d.ts +0 -6
  75. package/dist/src/lib/welcome.d.ts.map +0 -1
  76. package/dist/src/lib/welcome.js +0 -42
  77. package/dist/src/lib/welcome.js.map +0 -1
  78. package/dist/src/types/index.d.ts +0 -4
  79. package/dist/src/types/index.d.ts.map +0 -1
  80. package/dist/src/types/index.js +0 -2
  81. package/dist/src/types/index.js.map +0 -1
  82. package/dist/tsup.config.d.ts +0 -3
  83. package/dist/tsup.config.d.ts.map +0 -1
  84. package/dist/tsup.config.js +0 -18
  85. package/dist/tsup.config.js.map +0 -1
@@ -1,38 +0,0 @@
1
- import { clearCredentials, getValidCredentials } from './auth.js';
2
- import { getEnvConfig } from './env.js';
3
- function getApiUrl() {
4
- return process.env['REPOWISE_API_URL'] ?? getEnvConfig().apiUrl;
5
- }
6
- export async function apiRequest(path, options) {
7
- const credentials = await getValidCredentials();
8
- if (!credentials) {
9
- throw new Error('Not logged in. Run `repowise login` first.');
10
- }
11
- const response = await fetch(`${getApiUrl()}${path}`, {
12
- ...options,
13
- headers: {
14
- 'Content-Type': 'application/json',
15
- Authorization: `Bearer ${credentials.accessToken}`,
16
- ...options?.headers,
17
- },
18
- });
19
- if (response.status === 401) {
20
- await clearCredentials();
21
- throw new Error('Session expired. Run `repowise login` again.');
22
- }
23
- if (!response.ok) {
24
- let message = `Request failed with status ${response.status}`;
25
- try {
26
- const body = (await response.json());
27
- if (body.error?.message)
28
- message = body.error.message;
29
- }
30
- catch {
31
- // Response body is not JSON (e.g. gateway 502/503) — use default message
32
- }
33
- throw new Error(message);
34
- }
35
- const json = (await response.json());
36
- return json.data;
37
- }
38
- //# sourceMappingURL=api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,YAAY,EAAE,CAAC,MAAM,CAAC;AAClE,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,IAAY,EAAE,OAAqB;IACrE,MAAM,WAAW,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEhD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE;QACpD,GAAG,OAAO;QACV,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,WAAW,CAAC,WAAW,EAAE;YAClD,GAAG,OAAO,EAAE,OAAO;SACpB;KACF,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,gBAAgB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,OAAO,GAAG,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAa,CAAC;YACjD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO;gBAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;QAC3E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
@@ -1,28 +0,0 @@
1
- export declare const CLI_CALLBACK_PORT = 19876;
2
- export interface StoredCredentials {
3
- accessToken: string;
4
- refreshToken: string;
5
- idToken: string;
6
- expiresAt: number;
7
- }
8
- export declare function generateCodeVerifier(): string;
9
- export declare function generateCodeChallenge(verifier: string): string;
10
- export declare function generateState(): string;
11
- export declare function getAuthorizeUrl(codeChallenge: string, state: string): string;
12
- export interface CallbackResult {
13
- code: string;
14
- state: string;
15
- }
16
- export declare function startCallbackServer(): Promise<CallbackResult>;
17
- export declare function exchangeCodeForTokens(code: string, codeVerifier: string): Promise<StoredCredentials>;
18
- export declare function refreshTokens(refreshToken: string): Promise<StoredCredentials>;
19
- export declare function getStoredCredentials(): Promise<StoredCredentials | null>;
20
- export declare function storeCredentials(credentials: StoredCredentials): Promise<void>;
21
- export declare function clearCredentials(): Promise<void>;
22
- export declare function getValidCredentials(): Promise<StoredCredentials | null>;
23
- export declare function performLogin(): Promise<StoredCredentials>;
24
- export declare function decodeIdToken(idToken: string): {
25
- email: string;
26
- tenantId?: string;
27
- };
28
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/lib/auth.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAmBvC,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAID,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB5E;AAQD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC,CA8E7D;AAID,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;AAID,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2BpF;AAID,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAY9E;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMtD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAiB7E;AAID,wBAAsB,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC,CA2B/D;AA0CD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAYnF"}
@@ -1,271 +0,0 @@
1
- import { createHash, randomBytes } from 'node:crypto';
2
- import { readFile, writeFile, mkdir, chmod, unlink } from 'node:fs/promises';
3
- import http from 'node:http';
4
- import { homedir } from 'node:os';
5
- import { join } from 'node:path';
6
- import { getEnvConfig } from './env.js';
7
- const CONFIG_DIR = join(homedir(), '.repowise');
8
- const CREDENTIALS_PATH = join(CONFIG_DIR, 'credentials.json');
9
- export const CLI_CALLBACK_PORT = 19876;
10
- const CALLBACK_TIMEOUT_MS = 120_000; // 2 minutes
11
- // Cognito config — read lazily so tests can set env vars before function calls
12
- function getCognitoConfig() {
13
- const env = getEnvConfig();
14
- return {
15
- domain: process.env['REPOWISE_COGNITO_DOMAIN'] ?? env.cognitoDomain,
16
- clientId: process.env['REPOWISE_COGNITO_CLIENT_ID'] ?? env.cognitoClientId,
17
- region: process.env['REPOWISE_COGNITO_REGION'] ?? env.cognitoRegion,
18
- customDomain: env.customDomain,
19
- };
20
- }
21
- function getCognitoBaseUrl() {
22
- const { domain, region, customDomain } = getCognitoConfig();
23
- return customDomain ? `https://${domain}` : `https://${domain}.auth.${region}.amazoncognito.com`;
24
- }
25
- // --- PKCE (Proof Key for Code Exchange) ---
26
- export function generateCodeVerifier() {
27
- return randomBytes(32).toString('base64url');
28
- }
29
- export function generateCodeChallenge(verifier) {
30
- return createHash('sha256').update(verifier).digest('base64url');
31
- }
32
- export function generateState() {
33
- return randomBytes(32).toString('hex');
34
- }
35
- // --- Cognito URL Construction ---
36
- export function getAuthorizeUrl(codeChallenge, state) {
37
- const { clientId } = getCognitoConfig();
38
- if (!clientId) {
39
- throw new Error('Missing REPOWISE_COGNITO_CLIENT_ID environment variable. Configure it before running login.');
40
- }
41
- const params = new URLSearchParams({
42
- response_type: 'code',
43
- client_id: clientId,
44
- redirect_uri: `http://localhost:${CLI_CALLBACK_PORT}/callback`,
45
- code_challenge: codeChallenge,
46
- code_challenge_method: 'S256',
47
- scope: 'openid email profile',
48
- state,
49
- });
50
- return `${getCognitoBaseUrl()}/oauth2/authorize?${params.toString()}`;
51
- }
52
- function getTokenUrl() {
53
- return `${getCognitoBaseUrl()}/oauth2/token`;
54
- }
55
- export function startCallbackServer() {
56
- return new Promise((resolve, reject) => {
57
- const server = http.createServer((req, res) => {
58
- // req.url is always defined for incoming HTTP requests (only undefined for client requests)
59
- const url = new URL(req.url, `http://localhost:${CLI_CALLBACK_PORT}`);
60
- if (url.pathname !== '/callback') {
61
- res.writeHead(404);
62
- res.end();
63
- return;
64
- }
65
- const code = url.searchParams.get('code');
66
- const state = url.searchParams.get('state');
67
- const error = url.searchParams.get('error');
68
- if (error) {
69
- res.writeHead(200, { 'Content-Type': 'text/html' });
70
- res.end(callbackPage('Authentication Failed', 'Something went wrong. Please close this tab and try again.', true));
71
- server.close();
72
- reject(new Error(`Authentication error: ${error}`));
73
- return;
74
- }
75
- if (!code || !state) {
76
- res.writeHead(400, { 'Content-Type': 'text/html' });
77
- res.end(callbackPage('Missing Parameters', 'The callback was missing required data. Please close this tab and try again.', true));
78
- server.close();
79
- reject(new Error('Missing code or state in callback'));
80
- return;
81
- }
82
- res.writeHead(200, { 'Content-Type': 'text/html' });
83
- res.end(callbackPage('Authentication Successful', 'You can close this tab and return to the terminal.', false));
84
- server.close();
85
- resolve({ code, state });
86
- });
87
- server.listen(CLI_CALLBACK_PORT, '127.0.0.1');
88
- server.on('error', (err) => {
89
- if (err.code === 'EADDRINUSE') {
90
- reject(new Error(`Port ${CLI_CALLBACK_PORT} is already in use. Close the conflicting process and try again.`));
91
- }
92
- else {
93
- reject(err);
94
- }
95
- });
96
- const timeout = setTimeout(() => {
97
- server.close();
98
- reject(new Error('Authentication timed out. Please try again.'));
99
- }, CALLBACK_TIMEOUT_MS);
100
- server.on('close', () => clearTimeout(timeout));
101
- });
102
- }
103
- // --- Token Exchange ---
104
- export async function exchangeCodeForTokens(code, codeVerifier) {
105
- const response = await fetch(getTokenUrl(), {
106
- method: 'POST',
107
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
108
- body: new URLSearchParams({
109
- grant_type: 'authorization_code',
110
- client_id: getCognitoConfig().clientId,
111
- redirect_uri: `http://localhost:${CLI_CALLBACK_PORT}/callback`,
112
- code,
113
- code_verifier: codeVerifier,
114
- }),
115
- });
116
- if (!response.ok) {
117
- const text = await response.text();
118
- throw new Error(`Token exchange failed: ${response.status} ${text}`);
119
- }
120
- const data = (await response.json());
121
- return {
122
- accessToken: data.access_token,
123
- refreshToken: data.refresh_token,
124
- idToken: data.id_token,
125
- expiresAt: Date.now() + data.expires_in * 1000,
126
- };
127
- }
128
- // --- Token Refresh ---
129
- export async function refreshTokens(refreshToken) {
130
- const response = await fetch(getTokenUrl(), {
131
- method: 'POST',
132
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
133
- body: new URLSearchParams({
134
- grant_type: 'refresh_token',
135
- client_id: getCognitoConfig().clientId,
136
- refresh_token: refreshToken,
137
- }),
138
- });
139
- if (!response.ok) {
140
- throw new Error(`Token refresh failed: ${response.status}`);
141
- }
142
- const data = (await response.json());
143
- return {
144
- accessToken: data.access_token,
145
- refreshToken, // Cognito does not return a new refresh token
146
- idToken: data.id_token,
147
- expiresAt: Date.now() + data.expires_in * 1000,
148
- };
149
- }
150
- // --- Credential Storage ---
151
- export async function getStoredCredentials() {
152
- try {
153
- const data = await readFile(CREDENTIALS_PATH, 'utf-8');
154
- return JSON.parse(data);
155
- }
156
- catch (err) {
157
- // File doesn't exist or corrupt JSON — treat as no credentials
158
- if (err.code === 'ENOENT' || err instanceof SyntaxError) {
159
- return null;
160
- }
161
- // Permission errors (EPERM, EACCES) should surface — the file exists but can't be read
162
- throw err;
163
- }
164
- }
165
- export async function storeCredentials(credentials) {
166
- await mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 });
167
- await writeFile(CREDENTIALS_PATH, JSON.stringify(credentials, null, 2));
168
- await chmod(CREDENTIALS_PATH, 0o600);
169
- }
170
- export async function clearCredentials() {
171
- try {
172
- await unlink(CREDENTIALS_PATH);
173
- }
174
- catch (err) {
175
- if (err.code !== 'ENOENT')
176
- throw err;
177
- }
178
- }
179
- export async function getValidCredentials() {
180
- const creds = await getStoredCredentials();
181
- if (!creds)
182
- return null;
183
- // Refresh if within 5 minutes of expiry
184
- if (Date.now() > creds.expiresAt - 5 * 60 * 1000) {
185
- try {
186
- const refreshed = await refreshTokens(creds.refreshToken);
187
- await storeCredentials(refreshed);
188
- return refreshed;
189
- }
190
- catch {
191
- await clearCredentials();
192
- return null;
193
- }
194
- }
195
- return creds;
196
- }
197
- // --- Auto-Login (Story 2.1) ---
198
- export async function performLogin() {
199
- const codeVerifier = generateCodeVerifier();
200
- const codeChallenge = generateCodeChallenge(codeVerifier);
201
- const state = generateState();
202
- const authorizeUrl = getAuthorizeUrl(codeChallenge, state);
203
- const callbackPromise = startCallbackServer();
204
- try {
205
- const open = (await import('open')).default;
206
- await open(authorizeUrl);
207
- }
208
- catch {
209
- // Print URL as fallback
210
- console.log(`\nOpen this URL in your browser to authenticate:\n`);
211
- console.log(authorizeUrl);
212
- }
213
- const { code, state: returnedState } = await callbackPromise;
214
- if (returnedState !== state) {
215
- throw new Error('State mismatch — possible CSRF attack. Please try again.');
216
- }
217
- const credentials = await exchangeCodeForTokens(code, codeVerifier);
218
- await storeCredentials(credentials);
219
- return credentials;
220
- }
221
- // --- ID Token Decoding ---
222
- function callbackPage(title, message, isError) {
223
- const icon = isError
224
- ? '<svg width="48" height="48" fill="none" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" stroke="#ef4444" stroke-width="2"/><path stroke="#ef4444" stroke-width="2" stroke-linecap="round" d="M15 9l-6 6M9 9l6 6"/></svg>'
225
- : '<svg width="48" height="48" fill="none" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" stroke="#10b981" stroke-width="2"/><path stroke="#10b981" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="M8 12l3 3 5-5"/></svg>';
226
- return `<!DOCTYPE html>
227
- <html lang="en">
228
- <head>
229
- <meta charset="UTF-8">
230
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
231
- <title>${title} — RepoWise</title>
232
- <link rel="icon" href="https://staging.repowise.ai/favicon.svg" type="image/svg+xml">
233
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
234
- <style>
235
- * { margin: 0; padding: 0; box-sizing: border-box; }
236
- body { font-family: 'Inter', system-ui, sans-serif; background: #0a0b14; color: #e4e4e7; min-height: 100vh; display: flex; align-items: center; justify-content: center; }
237
- .card { text-align: center; max-width: 440px; padding: 48px 40px; }
238
- .logo { margin-bottom: 32px; }
239
- .logo svg { height: 48px; width: auto; }
240
- .icon { margin-bottom: 20px; }
241
- h1 { font-size: 24px; font-weight: 700; margin-bottom: 8px; color: ${isError ? '#ef4444' : '#e4e4e7'}; }
242
- p { font-size: 15px; color: #a1a1aa; line-height: 1.5; }
243
- </style>
244
- </head>
245
- <body>
246
- <div class="card">
247
- <div class="logo">
248
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 50" height="48">
249
- <text x="0" y="38" font-family="Inter, system-ui, sans-serif" font-weight="700" font-size="36" fill="#e4e4e7">Repo<tspan fill="#6c5ce7">Wise</tspan></text>
250
- </svg>
251
- </div>
252
- <div class="icon">${icon}</div>
253
- <h1>${title}</h1>
254
- <p>${message}</p>
255
- </div>
256
- </body>
257
- </html>`;
258
- }
259
- export function decodeIdToken(idToken) {
260
- try {
261
- const parts = idToken.split('.');
262
- if (parts.length < 2)
263
- return { email: 'unknown' };
264
- const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString());
265
- return { email: payload.email ?? 'unknown', tenantId: payload['custom:tenant_id'] };
266
- }
267
- catch {
268
- return { email: 'unknown' };
269
- }
270
- }
271
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- export interface WatchedRepo {
2
- repoId: string;
3
- localPath: string;
4
- }
5
- export interface CliConfig {
6
- apiUrl?: string;
7
- wsUrl?: string;
8
- aiTools?: import('./ai-tools.js').AiTool[];
9
- contextFolder?: string;
10
- lastSeenVersion?: string;
11
- repos?: WatchedRepo[];
12
- }
13
- export declare function getConfig(): Promise<CliConfig>;
14
- export declare function saveConfig(config: CliConfig): Promise<void>;
15
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,eAAe,EAAE,MAAM,EAAE,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAOpD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE"}
@@ -1,19 +0,0 @@
1
- import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
- import { homedir } from 'node:os';
3
- import { join } from 'node:path';
4
- const CONFIG_DIR = join(homedir(), '.repowise');
5
- const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
6
- export async function getConfig() {
7
- try {
8
- const data = await readFile(CONFIG_PATH, 'utf-8');
9
- return JSON.parse(data);
10
- }
11
- catch {
12
- return {};
13
- }
14
- }
15
- export async function saveConfig(config) {
16
- await mkdir(CONFIG_DIR, { recursive: true });
17
- await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2));
18
- }
19
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAgBpD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB;IAChD,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -1,10 +0,0 @@
1
- export declare function setStagingMode(value: boolean): void;
2
- export declare function isStagingMode(): boolean;
3
- export declare function getEnvConfig(): {
4
- apiUrl: string;
5
- cognitoDomain: string;
6
- cognitoClientId: string;
7
- cognitoRegion: string;
8
- customDomain: boolean;
9
- };
10
- //# sourceMappingURL=env.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/lib/env.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEnD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAkBD,wBAAgB,YAAY;;;;;;EAE3B"}
@@ -1,26 +0,0 @@
1
- // Global environment toggle — set by --staging flag in bin/repowise.ts
2
- let staging = false;
3
- export function setStagingMode(value) {
4
- staging = value;
5
- }
6
- export function isStagingMode() {
7
- return staging;
8
- }
9
- const PRODUCTION = {
10
- apiUrl: 'https://api.repowise.ai',
11
- cognitoDomain: 'auth.repowise.ai',
12
- cognitoClientId: '', // TODO: set after production Cognito deploy
13
- cognitoRegion: 'us-east-1',
14
- customDomain: true,
15
- };
16
- const STAGING = {
17
- apiUrl: 'https://staging-api.repowise.ai',
18
- cognitoDomain: 'auth-staging.repowise.ai',
19
- cognitoClientId: '7h0l0dhjcb1v5erer0gaclv0q6',
20
- cognitoRegion: 'us-east-1',
21
- customDomain: true,
22
- };
23
- export function getEnvConfig() {
24
- return staging ? STAGING : PRODUCTION;
25
- }
26
- //# sourceMappingURL=env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/lib/env.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,MAAM,EAAE,yBAAyB;IACjC,aAAa,EAAE,kBAAkB;IACjC,eAAe,EAAE,EAAE,EAAE,4CAA4C;IACjE,aAAa,EAAE,WAAW;IAC1B,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,MAAM,OAAO,GAAG;IACd,MAAM,EAAE,iCAAiC;IACzC,aAAa,EAAE,0BAA0B;IACzC,eAAe,EAAE,4BAA4B;IAC7C,aAAa,EAAE,WAAW;IAC1B,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;AACxC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function handleInterview(syncId: string, questionId: string, questionText: string, questionContext?: string, estimatedQuestions?: number): Promise<void>;
2
- //# sourceMappingURL=interview-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interview-handler.d.ts","sourceRoot":"","sources":["../../../src/lib/interview-handler.ts"],"names":[],"mappings":"AASA,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EACxB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoGf"}
@@ -1,100 +0,0 @@
1
- import chalk from 'chalk';
2
- import { input } from '@inquirer/prompts';
3
- import { apiRequest } from './api.js';
4
- const INTERVIEW_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes per question
5
- const MAX_QUESTIONS = 10;
6
- let questionCounter = 0;
7
- export async function handleInterview(syncId, questionId, questionText, questionContext, estimatedQuestions) {
8
- questionCounter++;
9
- // Show section header on first question
10
- if (questionCounter === 1) {
11
- console.log('');
12
- console.log(chalk.cyan.bold(' ── Interview ──'));
13
- console.log(chalk.dim(' Help us understand your project better. Answer a few short'));
14
- console.log(chalk.dim(` questions so we can generate more relevant context files (up to ${MAX_QUESTIONS}).`));
15
- }
16
- const total = Math.min(estimatedQuestions ?? MAX_QUESTIONS, MAX_QUESTIONS);
17
- console.log('');
18
- console.log(chalk.cyan.bold(` Question ${questionCounter}/${total}`));
19
- if (questionContext) {
20
- console.log(chalk.dim(` ${questionContext}`));
21
- }
22
- console.log(` ${questionText}`);
23
- console.log(chalk.dim(' (Enter to skip · "done" to finish early)'));
24
- let answer;
25
- try {
26
- answer = await Promise.race([
27
- input({
28
- message: chalk.cyan('>'),
29
- theme: { prefix: ' ' },
30
- }),
31
- new Promise((_, reject) => setTimeout(() => reject(new Error('INTERVIEW_TIMEOUT')), INTERVIEW_TIMEOUT_MS)),
32
- ]);
33
- }
34
- catch (err) {
35
- if (err instanceof Error && err.message === 'INTERVIEW_TIMEOUT') {
36
- console.log(chalk.yellow(' Timed out — auto-skipping this question.'));
37
- answer = 'skip';
38
- }
39
- else {
40
- // Some other error (e.g., user pressed Ctrl+C on the prompt)
41
- throw err;
42
- }
43
- }
44
- const trimmed = answer.trim();
45
- let action;
46
- let answerText = '';
47
- if (trimmed.toLowerCase() === 'done') {
48
- action = 'done';
49
- }
50
- else if (trimmed === '' || trimmed.toLowerCase() === 'skip') {
51
- action = 'skip';
52
- }
53
- else {
54
- action = 'answer';
55
- answerText = trimmed;
56
- }
57
- // Hard limit: end interview after the last question
58
- if (questionCounter >= MAX_QUESTIONS && action !== 'done') {
59
- action = 'done';
60
- console.log(chalk.green(' Thanks for your answers! Wrapping up the interview.'));
61
- }
62
- // Submit answer with graceful network error recovery
63
- try {
64
- await apiRequest(`/v1/sync/${syncId}/answer`, {
65
- method: 'POST',
66
- body: JSON.stringify({ questionId, answerText, action }),
67
- });
68
- }
69
- catch (err) {
70
- // If the pipeline already moved past interview, that's okay
71
- const message = err instanceof Error ? err.message : String(err);
72
- if (message.includes('not awaiting input') || message.includes('expired')) {
73
- console.log(chalk.dim(' Pipeline has already moved on — continuing.'));
74
- return;
75
- }
76
- // Retry once for transient network errors
77
- try {
78
- await new Promise((r) => setTimeout(r, 1000));
79
- await apiRequest(`/v1/sync/${syncId}/answer`, {
80
- method: 'POST',
81
- body: JSON.stringify({ questionId, answerText, action }),
82
- });
83
- }
84
- catch {
85
- console.log(chalk.yellow(' Could not submit answer — pipeline will continue.'));
86
- return;
87
- }
88
- }
89
- if (action === 'done') {
90
- console.log(chalk.dim(' Interview ended early.'));
91
- }
92
- else if (action === 'skip') {
93
- console.log(chalk.dim(' Skipped.'));
94
- }
95
- else {
96
- console.log(chalk.dim(' Answer recorded.'));
97
- }
98
- console.log('');
99
- }
100
- //# sourceMappingURL=interview-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interview-handler.js","sourceRoot":"","sources":["../../../src/lib/interview-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,yBAAyB;AACrE,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,UAAkB,EAClB,YAAoB,EACpB,eAAwB,EACxB,kBAA2B;IAE3B,eAAe,EAAE,CAAC;IAElB,wCAAwC;IACxC,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,qEAAqE,aAAa,IAAI,CACvF,CACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,aAAa,EAAE,aAAa,CAAC,CAAC;IAE3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,eAAe,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;IACvE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,eAAe,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAErE,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAC1B,KAAK,CAAC;gBACJ,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACxB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aACxB,CAAC;YACF,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAC/E;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,mBAAmB,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACxE,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,6DAA6D;YAC7D,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,MAAkC,CAAC;IACvC,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QACrC,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;SAAM,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QAC9D,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,QAAQ,CAAC;QAClB,UAAU,GAAG,OAAO,CAAC;IACvB,CAAC;IAED,oDAAoD;IACpD,IAAI,eAAe,IAAI,aAAa,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1D,MAAM,GAAG,MAAM,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,qDAAqD;IACrD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,YAAY,MAAM,SAAS,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,4DAA4D;QAC5D,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QACD,0CAA0C;QAC1C,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,MAAM,UAAU,CAAC,YAAY,MAAM,SAAS,EAAE;gBAC5C,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;aACzD,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -1,84 +0,0 @@
1
- import type { Ora } from 'ora';
2
- interface DiscoveryResult {
3
- languages: Array<{
4
- name: string;
5
- percentage: number;
6
- }>;
7
- frameworks: Array<{
8
- name: string;
9
- }>;
10
- structureType: string;
11
- fileCount: number;
12
- existingDocs: string[];
13
- fileTree?: Array<{
14
- path: string;
15
- type: 'blob' | 'tree';
16
- }>;
17
- estimatedInterviewQuestions?: number;
18
- }
19
- interface ScanProgress {
20
- currentBatch: number;
21
- totalBatches: number;
22
- summary?: {
23
- totalFiles: number;
24
- totalFunctions: number;
25
- totalClasses: number;
26
- totalEndpoints: number;
27
- };
28
- }
29
- interface FileStatusEntry {
30
- fileName: string;
31
- status: 'pending' | 'generating' | 'completed' | 'failed';
32
- }
33
- interface GenerationProgress {
34
- currentFile: number;
35
- totalFiles: number;
36
- currentFileName: string;
37
- fileStatuses?: FileStatusEntry[];
38
- }
39
- interface ValidationProgress {
40
- round: number;
41
- maxRounds: number;
42
- personaResults: Array<{
43
- persona: string;
44
- score: string;
45
- }>;
46
- status: string;
47
- }
48
- interface SyncStatusResponse {
49
- currentStep?: string;
50
- stepLabel?: string;
51
- stepNumber?: number;
52
- totalSteps?: number;
53
- progressPercentage?: number;
54
- discoveryResult?: DiscoveryResult | null;
55
- scanProgress?: ScanProgress | null;
56
- generationProgress?: GenerationProgress | null;
57
- validationProgress?: ValidationProgress | null;
58
- privacyShieldEnabled?: boolean;
59
- contextStorage?: 'server' | null;
60
- }
61
- export declare const CORE_FILES: Set<string>;
62
- export declare class ProgressRenderer {
63
- private privacyShieldShown;
64
- private discoveryShown;
65
- private scanSummaryShown;
66
- private validationShown;
67
- private lastValidationSnapshot;
68
- private lastValidationLineCount;
69
- private pushShown;
70
- private fileStatusHeaderShown;
71
- private lastFileStatusSnapshot;
72
- private lastFileStatusLineCount;
73
- renderPrivacyShield(enabled: boolean, spinner: Ora): void;
74
- renderDiscovery(result: DiscoveryResult, spinner: Ora): void;
75
- private renderTree;
76
- renderScanSummary(summary: NonNullable<ScanProgress['summary']>, spinner: Ora): void;
77
- renderValidation(progress: ValidationProgress, spinner: Ora): void;
78
- renderFileStatuses(fileStatuses: FileStatusEntry[], spinner: Ora): void;
79
- renderPush(spinner: Ora): void;
80
- getSpinnerText(syncResult: SyncStatusResponse): string;
81
- update(syncResult: SyncStatusResponse, spinner: Ora): void;
82
- }
83
- export {};
84
- //# sourceMappingURL=progress-renderer.d.ts.map